Reconfiguring from chroot to fix Grub/boot partition fails because D-bus crashes

  • Open
  • quality assurance status badge
Details
2 participants
  • Oleg Pykhalov
  • Mathieu
Owner
unassigned
Submitted by
Mathieu
Severity
normal
M
M
Mathieu wrote on 16 Nov 2023 01:30
(address . bug-guix@gnu.org)
abe726fe-4ad0-4717-9dde-b291ef251180@disroot.org
Dear Guix users,

For some reason, still to be understood, my EFI partition is no longer detected at boot and I cannot boot my existing Guix System. I could confirm that the Guix partition (encrypted) is fine, but my BIOS won't detect any bootable partition. Turns out my `/dev/nvme0n1p1` partition only contains a single file: `EFI/Guix/grubx64.efi`.

Then there is 3.72 GiB of unallocated space on the drive, and then `/dev/nvme0n1p3` which is my LUKS encrypted Guix root.


I only had to add an extra step at the beginning to decrypt the partition with `cryptsetup luksOpen /dev/nvme0n1p3 cryptroot` and then mounted `/dev/mapper/cryptroot` to `/mnt` before following the next instructions.

Unfortunately, the last step of the guide, `guix system reconfigure /path/to/config.scm`, fails because D-bus crashes, which in turn breaks all my network interfaces (they all are toggled "DOWN" and won't get a IP when I turn them up again), and ultimately the `guix system reconfigure` cannot work either without an Internet connection.

This is what `/var/log/messages` say when I run the last step at 22:51: https://0x0.st/Hv2f.jpg

This looks like a bug since I did everything the guide indicates. Can anyone reproduce it and confirm that chrooting into an existing Guix installation to reconfigure and rescue the system does not work? Is there something missing in the how-to to prevent the D-bus crash? Would there be another way to save my system, i.e., reinstalling Guix from scratch on another SSD and then `dd` the LUKS partition from the broken SSD onto the root partition of the new one?

Any help would be welcome, as it'd give me hope that I can save my system and data. Many thanks in advance!

Kabouik
Attachment: Hvev.jpg
O
O
Oleg Pykhalov wrote on 17 Nov 2023 05:38
(name . Mathieu)(address . matf@disr.it)(address . 67218@debbugs.gnu.org)
87r0kpyoxy.fsf@gmail.com
Hi Mathieu,

Mathieu <matf@disr.it> writes:

Toggle quote (8 lines)
> Dear Guix users,
>
> For some reason, still to be understood, my EFI partition is no longer
> detected at boot and I cannot boot my existing Guix System. I could confirm
> that the Guix partition (encrypted) is fine, but my BIOS won't detect any
> bootable partition. Turns out my `/dev/nvme0n1p1` partition only contains a
> single file: `EFI/Guix/grubx64.efi`.

It could be broken 'nvram' of a motherboard. Because of that happened to
me on a single UEFI motherboard, personally I try not to use it at all,
but use all available disks instead.

With current Guix I'm not sure it is supported by the distribution. If
anyone would like to implement it in the upstream, here is my
configuration which I use [1] hopefully 'nvram' is not touched at all on
'guix system reconfigure' and survive a disk failure.

[…]

Toggle quote (7 lines)
> This looks like a bug since I did everything the guide indicates. Can anyone
> reproduce it and confirm that chrooting into an existing Guix installation to
> reconfigure and rescue the system does not work? Is there something missing in
> the how-to to prevent the D-bus crash? Would there be another way to save my
> system, i.e., reinstalling Guix from scratch on another SSD and then `dd` the
> LUKS partition from the broken SSD onto the root partition of the new one?

I could recommend to delete everything not required for a boot from the
configuration file and try to reconfigure again (warning that you will
probably get permission errors after adding those services again which
will require to 'chown' their state directories).

Another way to recover is reinstalling Guix from scratch, but it's
possible to do this without reformating or using another drive. Just
move every directory in your '/' to '/old-system' and proced regular
installation.


[1]: guix 1f734a6
branch: master
commit: 1f734a6f0a7db5b0e12091a0c869c5c4810ac80e
(define-module (bootloader grub) #:use-module (gnu bootloader) #:use-module (gnu bootloader grub) #:use-module (guix gexp) #:export (grub-efi-bootloader-removable)) (define install-grub-efi-removable #~(lambda (bootloader efi-dir mount-point) ;; There is nothing useful to do when called in the context of a disk ;; image generation. (when efi-dir ;; Install GRUB onto the EFI partition mounted at EFI-DIR, for the ;; system whose root is mounted at MOUNT-POINT. (let ((grub-install (string-append bootloader "/sbin/grub-install")) (install-dir (string-append mount-point "/boot")) ;; When installing Guix, it's common to mount EFI-DIR below ;; MOUNT-POINT rather than /boot/efi on the live image. (target-esp (if (file-exists? (string-append mount-point efi-dir)) (string-append mount-point efi-dir) efi-dir))) ;; Tell 'grub-install' that there might be a LUKS-encrypted /boot or ;; root partition. (setenv "GRUB_ENABLE_CRYPTODISK" "y") (invoke/quiet grub-install "--boot-directory" install-dir "--efi-directory" target-esp ;; do not write to nvram on the motherboard "--no-nvram" "--target=x86_64-efi" "--removable"))))) (define grub-efi-bootloader-removable (bootloader (inherit grub-efi-bootloader) (name 'grub-efi-bootloader-removable) (installer install-grub-efi-removable)))
config.scm:
Toggle snippet (23 lines)
(operating-system
;; ...
(bootloader (bootloader-configuration
(bootloader grub-efi-bootloader-removable)
(targets '("/boot1/efi"
"/boot2/efi"
"/boot3/efi"))))
(file-systems (cons* (file-system
(device (file-system-label "boot1"))
(mount-point "/boot1/efi")
(type "vfat"))
(file-system
(device (file-system-label "boot2"))
(mount-point "/boot2/efi")
(type "vfat"))
(file-system
(device (file-system-label "boot3"))
(mount-point "/boot3/efi")
(type "vfat"))
;; ...
%base-file-systems)))

/boot?/efi current state:
Toggle snippet (11 lines)
oleg@guixsd ~$ find /boot?/efi -type f -exec ls -l {} \;
-rwxr-xr-x 1 root root 159744 May 8 2022 /boot1/efi/EFI/Guix/grubx64.efi
-rwxr-xr-x 1 root root 159744 Nov 16 04:28 /boot1/efi/EFI/BOOT/BOOTX64.EFI
-rwxr-xr-x 1 root root 159744 Mar 17 2022 /boot2/efi/EFI/Guix/grubx64.efi
-rwxr-xr-x 1 root root 159744 Nov 16 04:28 /boot2/efi/EFI/BOOT/BOOTX64.EFI
-rwxr-xr-x 1 root root 76 Feb 9 2020 '/boot2/efi/System Volume Information/IndexerVolumeGuid'
-rwxr-xr-x 1 root root 12 Feb 9 2020 '/boot2/efi/System Volume Information/WPSettings.dat'
-rwxr-xr-x 1 root root 129 Feb 9 2020 '/boot2/efi/$RECYCLE.BIN/desktop.ini'
-rwxr-xr-x 1 root root 159744 Nov 16 04:28 /boot3/efi/EFI/BOOT/BOOTX64.EFI

as you can see /boot?/efi/EFI/BOOT/BOOTX64.EFI is the thing needed for
boot, everything else probably a garbage.

mount points:
Toggle snippet (7 lines)
oleg@guixsd ~$ findmnt | grep efi
? ??/sys/firmware/efi/efivars efivarfs efivarfs rw,relatime
??/boot1/efi /dev/sdc1 vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
??/boot2/efi /dev/sda1 vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro
??/boot3/efi /dev/sdd1 vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro

'/boot/grub' is not configured anywhere, but it's placed on a '/' mount
point which mounted from a raid disk array.
-----BEGIN PGP SIGNATURE-----

iQJIBAEBCgAyFiEEcjhxI46s62NFSFhXFn+OpQAa+pwFAmVW7jkUHGdvLndpZ3Vz
dEBnbWFpbC5jb20ACgkQFn+OpQAa+pzv2xAAtJKv+zjHgetTckl4fE+fHsTRZyTM
vDut9Hik3yAtRaLGfBcdJ/0TyD6Z7IYPE4nk0pWdlC/2GNzELG/HghWXJcq0S6CF
gomV9ngS7SbFCL7IMvjMJgWgW405Nr1ioNiSviW6jz1O0BekH6UM33bkqJqTutec
5Q6PF+ptCRC4VPE1zrwVBG8Yf81hk/dWBS10xuw0PL/lf/xIcAmMKNsF8LSvVMRg
Cc6D/ZY5H0QTpd016Fa1m2dSCsQwxlhhA1FjtRf2kLkCH7nVEhM1T3oiTMh87H1A
eDjGTP3zLplWcoMt6N925j68PJYkeHP7HgvlygrYnER+5tDsvXa6CUB4ErYoHu7O
dMmFrOeYsplcAWHbH81XVMUq1OU2LrJhhe0FTBZk3kxXq7TAE5OTkbiZlbzTbELp
iOGPfPJgQECUKcdZoo4RRpF0JSnDk09EN2SjPkV0+7ZXptTT5KravCHtQM9TAzPl
i7WHVuSU3vi8K9tJFJHIRaAdHrZdhstTLtqUhFd12K9AO6/7mM9gl/J8A/JTG0d0
kdLPzwYZ/NR3h357wVfslalkqTYD/pSIE2zSxwnU7Qbf/I+sResBowDz25xW8W/Y
OVRuYoNMK/lu2QJlSpvsfIXbKlPEKZoQ61leRCwRsZzo1vYNET+8/7/JWHNk9aAs
hsOPCoiaiWmipgo=
=lc03
-----END PGP SIGNATURE-----

?