guix pull --roll-back breaks guix

  • Open
  • quality assurance status badge
Details
2 participants
  • Blake Shaw
  • Simon Tournier
Owner
unassigned
Submitted by
Blake Shaw
Severity
normal
B
B
Blake Shaw wrote on 5 Jul 2023 12:21
(address . bug-guix@gnu.org)
c3d9e1e9-0865-4547-a648-a7aefd5c4042@reproduciblemedia.com
Hiya Guix,

I just encountered a surprising bug.

I've been trying to get the [redacted] proprietary GPU drivers to work on my system (but this isnt particular to the issue at hand), and I "guix installed" the [redacted-module] package in my .guix-profile, to see if that would help me with the failed

$ modprobe [redacted]

that I was experiencing.

It didn't, so I decided to do what we do best: roll-back. But I accidentally ran

$ guix pull --roll-back

instead of

$ guix package --roll-back

This mistake should be trivial, fixable by running

$ guix pull --switch-generation=N

Where N is the "FROM" field of the roll-back message that guix displays following a successfull roll back.

But to my surprise an anomaly appeared in the "TO" field of the roll-back message:

$ guix pull --roll-back
building path(s) `/gnu/store/2s7a7h...gj23-profile`
switched from generation 86 to 0

Huh? Zero? It should have switched to 85. Weird, but np, let's just direct it to 85.

$ guix pull --switch-generation=85
-bash: /home/my-profile/.config/guix/current/bin/guix

So now it can't find guix. Visiting .config/guix/current/ it is empty except an etc dir and a manifest. so I use guix from the run directory to get back on track:

$ exec /run/current-system/profile/bin/guix --switch-generation=85
guix pull error: cannot switch to generation '85'

$ exec /run/current-system/profile/bin/guix --switch-generation=86
switched from generation 0 to 86

And then $HOME/.config/guix/current is back to normal and everything works fine. So I assume this was due to yesterday's guix gc --delete-generations=1d

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?

Happy hacking!
Blake
Attachment: file
S
S
Simon Tournier wrote on 24 Nov 2023 11:17
(name . Blake Shaw)(address . blake@reproduciblemedia.com)(address . 64472@debbugs.gnu.org)
8734wve9qb.fsf@gmail.com
Hi,
Indeed, the issue can be annoying.
Toggle snippet (25 lines)
$ 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
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
branch: master
commit: 4dfdd822102690b5687acf28365ab707b68d9476
And I do not know where that comes from. Another story.
Well, the current profiles reads,
Toggle snippet (5 lines)
$ ls -1 /var/guix/profiles/per-user/simon/ | grep current
current-guix
current-guix-0-link
current-guix-29-link
And that profile numbered 0 newly created is empty:
Toggle snippet (8 lines)
$ 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
On Wed, 05 Jul 2023 at 17:21, Blake Shaw <blake@reproduciblemedia.com> wrote:
Toggle quote (8 lines)
> 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
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 64472@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 64472
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch