Subject: Re: bug#64472: guix pull --roll-back breaks guix

From: Simon Tournier <[email-masked]>
Date: Fri, 24 Nov 2023 11:17:32 +0100

Hi,

Indeed, the issue can be annoying.

--8<---------------cut here---------------start------------->8---
$ guix gc ---delete-generations=0d

$ guix pull --roll-back
fetching path `/gnu/store/…-module-import-compiled'...
Downloading https://ci.guix.gnu.org/nar/lzip/…-module-import-compiled...
 module-import-compiled  107KiB       1.4MiB/s 00:00 ▕██████████████████▏ 100.0%
fetching path `/gnu/store/…-libffi-3.4.4'...
Downloading https://ci.guix.gnu.org/nar/lzip/…-libffi-3.4.4...
 libffi-3.4.4  56KiB                  6.3MiB/s 00:00 ▕██████████████████▏ 100.0%
fetching path `/gnu/store/…-libgc-8.2.2'...
Downloading https://ci.guix.gnu.org/nar/zstd/…-libgc-8.2.2...
 libgc-8.2.2  228KiB                  2.3MiB/s 00:00 ▕██████████████████▏ 100.0%
fetching path `/gnu/store/…-libunistring-1.0'...
Downloading https://ci.guix.gnu.org/nar/zstd/…-libunistring-1.0...
 libunistring-1.0  661KiB             2.7MiB/s 00:00 ▕██████████████████▏ 100.0%
fetching path `/gnu/store/…-pkg-config-0.29.2'...
Downloading https://ci.guix.gnu.org/nar/zstd/…-pkg-config-0.29.2...
 pkg-config-0.29.2  209KiB            2.3MiB/s 00:00 ▕██████████████████▏ 100.0%
fetching path `/gnu/store/…-guile-3.0.9'...
Downloading https://ci.guix.gnu.org/nar/zstd/…-guile-3.0.9...
 guile-3.0.9  8.1MiB                  1.6MiB/s 00:05 ▕██████████████████▏ 100.0%

building path(s) `/gnu/store/zm6cs3grf3l78mz1swakvfddn6k66l7m-profile'
switched from generation 29 to 0
--8<---------------cut here---------------end--------------->8---

Aside the unexpected downloads, now Guix have disappeared…

        $ hash guix
        $ type -P guix
        /home/simon/.config/guix/profiles/emacs/emacs/bin/guix

At best it finds nothing.  Or worse, it could find an unexpected one
installed in one of my profiles – here from the package ’guix’.  And it
hides the error “No such file or directory”; for instance, it outputs:

        $ guix describe
        Generation 8    Oct 25 2023 14:23:41    (current)
          guix 4dfdd82
            repository URL: https://git.savannah.gnu.org/git/guix.git
            branch: master
            commit: 4dfdd822102690b5687acf28365ab707b68d9476

And I do not know where that comes from.  Another story.

Well, the current profiles reads,

--8<---------------cut here---------------start------------->8---
$ ls -1 /var/guix/profiles/per-user/simon/ | grep current
current-guix
current-guix-0-link
current-guix-29-link
--8<---------------cut here---------------end--------------->8---

And that profile numbered 0 newly created is empty:

--8<---------------cut here---------------start------------->8---
$ tree /var/guix/profiles/per-user/simon/current-guix-0-link
/var/guix/profiles/per-user/simon/current-guix-0-link
├── etc
│   └── profile
└── manifest

2 directories, 2 files
--8<---------------cut here---------------end--------------->8---

On Wed, 05 Jul 2023 at 17:21, Blake Shaw <[email-masked]> wrote:

> But like, should this happen? Should we ever be rolling back to an
> empty "0" generation that doesn't even contain guix, and thus creates
> a pickle for those who don't have prior knowledge of how to get out of
> it? Should we limit gc --delete-generations to always keep a previous
> generation at hand, perhaps unless forced by some other flag, so that
> [in particular, new] users don't break their systems in the middle of
> the day and then have something to solve that encumbers their plans &
> work?

IMHO, it is an bug with “guix pull --roll-back”.  When the current
generation is the older one, then it should not be possible to
roll-back; or roll-back should do nothing in this corner case.

It should not be possible to create an empty profile numbered 0.

Cheers,
simon