Subject: Re: bug#66705: ‘guix shell -CW’ provides a Guix command without extra channels

From: Simon Tournier <[email-masked]>
Date: Mon, 23 Oct 2023 21:14:08 +0200

Hi,

On Mon, 23 Oct 2023 at 18:52, Ludovic Courtès <[email-masked]> wrote:

> Actually, the original profile, which contains ‘guix’ and its channels,
> *is* available in the environment:
>
> --8<---------------cut here---------------start------------->8---
> $ guix time-machine -C <(echo '(cons (channel (name (quote guix-hpc)) (url "https://gitlab.inria.fr/guix-hpc/guix-hpc.git")) %default-channels)') -- shell -CW coreutils 
> [env]$ readlink -f $(type -P guix)
> /gnu/store/42731vcvzl6nrwa584mziwhpvp4xs72r-guix-command
> [env]$ type -P guix
> /gnu/store/ca142m4lm0grxmsjqrcqpfl5qb5i1rka-profile/bin/guix
> [env]$ readlink $(type -P guix)
> /gnu/store/j5g09kjd7pv1b6919vbsnjs160xfw9md-profile/bin/guix
> [env]$ /gnu/store/j5g09kjd7pv1b6919vbsnjs160xfw9md-profile/bin/guix describe
>   guix cbd20d6
>     repository URL: https://git.savannah.gnu.org/git/guix.git
>     branch: master
>     commit: ]8;;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=cbd20d627497053871db863970c07d93c7081786\cbd20d627497053871db863970c07d93c7081786]8;;\
>   guix-hpc 887d76a
>     repository URL: https://gitlab.inria.fr/guix-hpc/guix-hpc.git
>     branch: master
>     commit: ]8;;https://gitlab.inria.fr/guix-hpc/guix-hpc/commit/887d76a8e1d0f35d615c613b28b9b871f39a997e\887d76a8e1d0f35d615c613b28b9b871f39a997e]8;;\
> --8<---------------cut here---------------end--------------->8---
>
> The problem is the extra profile layer that confuses
> ‘current-channel-entries’ in (guix describe).

Oh.  Naive remarks.  The ’guix’ in the manifest points to the correct
one with both channels.

--8<---------------cut here---------------start------------->8---
$ guix time-machine -C <(echo '(cons (channel (name (quote guix-hpc)) (url "https://gitlab.inria.fr/guix-hpc/guix-hpc.git")) %default-channels)') -- shell -CW coreutils
[env]$ cat $GUIX_ENVIRONMENT/manifest
;; This file was automatically generated and is for internal use only.
;; It cannot be passed to the '--manifest' option.
;; Run 'guix package --export-manifest' if you want to export a file
;; suitable for '--manifest'.

(manifest
  (version 4)
  (packages
    (("coreutils"
      "9.1"
      "out"
      "/gnu/store/d4rqw481nwvrzs09nd8ad647nczgm9k1-coreutils-9.1")
     ("guix"
      "cbd20d627497053871db863970c07d93c7081786"
      "out"
      "/gnu/store/vrmfn5142771vzma3nzivb8j3zx9780v-profile"
      (search-paths
        (("GUIX_EXTENSIONS_PATH"
          ("share/guix/extensions")
          ":"
          directory
          #f)
         ("SSL_CERT_DIR"
          ("etc/ssl/certs")
          #f
          directory
          #f)))))))

[env]$ /gnu/store/vrmfn5142771vzma3nzivb8j3zx9780v-profile/bin/guix describe
  guix cbd20d6
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: ]8;;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=cbd20d627497053871db863970c07d93c7081786\cbd20d627497053871db863970c07d93c7081786]8;;\
  guix-hpc ef21e73
    repository URL: https://gitlab.inria.fr/guix-hpc/guix-hpc.git
    branch: master
    commit: ]8;;https://gitlab.inria.fr/guix-hpc/guix-hpc/commit/ef21e73d09e792c3ed18b2483a6290b8309bd929\ef21e73d09e792c3ed18b2483a6290b8309bd929]8;;\
--8<---------------cut here---------------end--------------->8---

Well, what appears to me weird is that the ’guix’ I type is incorrect
but points to a correct one.

--8<---------------cut here---------------start------------->8---
[env]$ ls -l $(type -P guix)
lrwxrwxrwx 1 65534 overflow 60 Jan  1  1970 /gnu/store/519kyqhl1n5r6cj0jbpkc77v4mnf6ip9-profile/bin/guix -> /gnu/store/vrmfn5142771vzma3nzivb8j3zx9780v-profile/bin/guix

[env]$ /gnu/store/519kyqhl1n5r6cj0jbpkc77v4mnf6ip9-profile/bin/guix describe
  guix cbd20d6
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: ]8;;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=cbd20d627497053871db863970c07d93c7081786\cbd20d627497053871db863970c07d93c7081786]8;;\

[env]$ /gnu/store/vrmfn5142771vzma3nzivb8j3zx9780v-profile/bin/guix describe
  guix cbd20d6
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: ]8;;https://git.savannah.gnu.org/cgit/guix.git/commit/?id=cbd20d627497053871db863970c07d93c7081786\cbd20d627497053871db863970c07d93c7081786]8;;\
  guix-hpc ef21e73
    repository URL: https://gitlab.inria.fr/guix-hpc/guix-hpc.git
    branch: master
    commit: ]8;;https://gitlab.inria.fr/guix-hpc/guix-hpc/commit/ef21e73d09e792c3ed18b2483a6290b8309bd929\ef21e73d09e792c3ed18b2483a6290b8309bd929]8;;\
--8<---------------cut here---------------end--------------->8---

Well, another way to express,

        This is due to the fact that ‘-W’ (‘--nesting’) is implemented by adding
        the outer ‘guix’ to the container’s profile, without also adding its
        companion profile entries (those that provide channels).

is to note that the manifest file is incorrect and does not contain the
outer manifest file, right?

--8<---------------cut here---------------start------------->8---
[env]$ cat /gnu/store/519kyqhl1n5r6cj0jbpkc77v4mnf6ip9-profile/manifest
;; This file was automatically generated and is for internal use only.
;; It cannot be passed to the '--manifest' option.
;; Run 'guix package --export-manifest' if you want to export a file
;; suitable for '--manifest'.

(manifest
  (version 4)
  (packages
    (("coreutils"
      "9.1"
      "out"
      "/gnu/store/d4rqw481nwvrzs09nd8ad647nczgm9k1-coreutils-9.1")
     ("guix"
      "cbd20d627497053871db863970c07d93c7081786"
      "out"
      "/gnu/store/vrmfn5142771vzma3nzivb8j3zx9780v-profile"
      (search-paths
        (("GUIX_EXTENSIONS_PATH"
          ("share/guix/extensions")
          ":"
          directory
          #f)
         ("SSL_CERT_DIR"
          ("etc/ssl/certs")
          #f
          directory
          #f)))))))

[env]$ cat /gnu/store/vrmfn5142771vzma3nzivb8j3zx9780v-profile/manifest
;; This file was automatically generated and is for internal use only.
;; It cannot be passed to the '--manifest' option.
;; Run 'guix package --export-manifest' if you want to export a file
;; suitable for '--manifest'.

(manifest
  (version 3)
  (packages
    (("guix"
      "cbd20d6"
      "out"
      "/gnu/store/xhim59kcwjnccsvyjv2cv2sbmid9lxm9-guix-cbd20d627"
      (propagated-inputs ())
      (search-paths ())
      (properties
        (source
          (repository
            (version 0)
            (url "https://git.savannah.gnu.org/git/guix.git")
            (branch "master")
            (commit
              "cbd20d627497053871db863970c07d93c7081786")
            (name guix)
            (introduction
              (channel-introduction
                (version 0)
                (commit
                  "9edb3f66fd807b096b48283debdcddccfea34bad")
                (signer
                  "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA")))))))
     ("guix-hpc"
      "ef21e73"
      "out"
      "/gnu/store/hjjwsjwm3csih0764f2mkbd65h44j7fz-guix-hpc"
      (propagated-inputs ())
      (search-paths ())
      (properties
        (source
          (repository
            (version 0)
            (url "https://gitlab.inria.fr/guix-hpc/guix-hpc.git")
            (branch "master")
            (commit
              "ef21e73d09e792c3ed18b2483a6290b8309bd929")
            (name guix-hpc))))))))
--8<---------------cut here---------------end--------------->8---

Cheers,
simon