Closed stapelberg closed 1 year ago
Running grub-mkconfig
with bash -x
reveals that the fs uuid probing seems to come back empty:
2023/06/22 21:52:21 [sudo chroot /mnt sh -c GRUB_CMDLINE_LINUX="console=ttyS0,115200 init=/init systemd.setenv=PATH=/bin rw " GRUB_TERMINAL=serial bash -x /ro/grub2-amd64-*/out/sbin/grub-mkconfig -o ]
2023/06/22 21:52:21 mounting grub2-amd64-2.04-8
+ set -e
+ prefix=/ro/grub2-amd64-2.04-8/out
+ exec_prefix=/ro/grub2-amd64-2.04-8/out
+ datarootdir=/ro/grub2-amd64-2.04-8/out/share
+ prefix=/ro/grub2-amd64-2.04-8/out
+ exec_prefix=/ro/grub2-amd64-2.04-8/out
+ sbindir=/ro/grub2-amd64-2.04-8/out/sbin
+ bindir=/ro/grub2-amd64-2.04-8/out/bin
+ sysconfdir=/etc
+ PACKAGE_NAME=GRUB
+ PACKAGE_VERSION=2.04
+ host_os=linux-gnu
+ datadir=/ro/grub2-amd64-2.04-8/out/share
+ '[' x = x ']'
+ pkgdatadir=/ro/grub2-amd64-2.04-8/out/share/grub
+ export pkgdatadir
+ grub_cfg=
+ grub_mkconfig_dir=/etc/grub.d
++ basename /ro/grub2-amd64-2.04-8/out/sbin/grub-mkconfig
+ self=grub-mkconfig
+ grub_probe=/ro/grub2-amd64-2.04-8/out/sbin/grub-probe
+ grub_file=/ro/grub2-amd64-2.04-8/out/bin/grub-file
+ grub_editenv=/ro/grub2-amd64-2.04-8/out/bin/grub-editenv
+ grub_script_check=/ro/grub2-amd64-2.04-8/out/bin/grub-script-check
+ export TEXTDOMAIN=grub
+ TEXTDOMAIN=grub
+ export TEXTDOMAINDIR=/ro/grub2-amd64-2.04-8/out/share/locale
+ TEXTDOMAINDIR=/ro/grub2-amd64-2.04-8/out/share/locale
+ . /ro/grub2-amd64-2.04-8/out/share/grub/grub-mkconfig_lib
++ prefix=/ro/grub2-amd64-2.04-8/out
++ exec_prefix=/ro/grub2-amd64-2.04-8/out
++ datarootdir=/ro/grub2-amd64-2.04-8/out/share
++ datadir=/ro/grub2-amd64-2.04-8/out/share
++ bindir=/ro/grub2-amd64-2.04-8/out/bin
++ sbindir=/ro/grub2-amd64-2.04-8/out/sbin
++ '[' x/ro/grub2-amd64-2.04-8/out/share/grub = x ']'
++ test x/ro/grub2-amd64-2.04-8/out/sbin/grub-probe = x
++ test x/ro/grub2-amd64-2.04-8/out/bin/grub-file = x
++ test x = x
++ grub_mkrelpath=/ro/grub2-amd64-2.04-8/out/bin/grub-mkrelpath
++ which gettext
2023/06/22 21:52:21 mounting rxvt-unicode-amd64-9.22-8
++ grub_tab=' '
+ test 2 -gt 0
+ option=-o
+ shift
+ case "$option" in
++ argument -o /boot/grub/grub.cfg
++ opt=-o
++ shift
++ test 1 -eq 0
++ echo /boot/grub/grub.cfg
+ grub_cfg=/boot/grub/grub.cfg
+ shift
+ test 0 -gt 0
+ '[' x0 = x ']'
+ '[' 0 '!=' 0 ']'
+ set /ro/grub2-amd64-2.04-8/out/sbin/grub-probe dummy
+ test -f /ro/grub2-amd64-2.04-8/out/sbin/grub-probe
+ :
++ /ro/grub2-amd64-2.04-8/out/sbin/grub-probe --target=device /
+ GRUB_DEVICE=/dev/loop0p4
++ /ro/grub2-amd64-2.04-8/out/sbin/grub-probe --device /dev/loop0p4 --target=fs_uuid
2023/06/22 21:52:21 mounting systemd-amd64-245-11
+ GRUB_DEVICE_UUID=
+ true
++ /ro/grub2-amd64-2.04-8/out/sbin/grub-probe --device /dev/loop0p4 --target=partuuid
+ GRUB_DEVICE_PARTUUID=a44c7ef2-805b-4fb0-b42d-67ecff2c7a1f
++ /ro/grub2-amd64-2.04-8/out/sbin/grub-probe --target=device /boot
+ GRUB_DEVICE_BOOT=/dev/loop0p3
++ /ro/grub2-amd64-2.04-8/out/sbin/grub-probe --device /dev/loop0p3 --target=fs_uuid
+ GRUB_DEVICE_BOOT_UUID=f043d05d-d1b7-49a7-a77f-ca0a086ab7fe
++ /ro/grub2-amd64-2.04-8/out/sbin/grub-probe --device /dev/loop0p4 --target=fs
++ echo unknown
+ GRUB_FS=unknown
Running grub-probe directly results in:
2023/06/22 21:54:47 catconfig: [sudo chroot /mnt sh -c /ro/grub2-amd64-2.04-8/bin/grub-probe --device /dev/loop0p4 --target=fs_uuid]
2023/06/22 21:54:47 mounting python3-amd64-3.7.0-5
2023/06/22 21:54:47 mounting openssl-amd64-1.1.1g-5
/ro/grub2-amd64-2.04-8/out/sbin/grub-probe: error: unknown filesystem.
Adding -v -v
to turn on debug logging, I see:
grub-core/kern/fs.c:56: Detecting ext2...
grub-core/kern/fs.c:78: ext2 detection failed.
Maybe mkfs
changed. It’s a host dependency.
…and here’s the smoking gun (had to rebuild grub with CFLAGS=-ggdb for the debug symbols to work):
After creating an image, I see:
When booting the image, I see the following kernel command line in GRUB:
minitrd only looks for the overall UUID, not the PARTUUID, it seems:
I’m not sure what changed here, but the current state of things does not seem to work. More investigation needed.
In the meantime, editing the kernel command line in GRUB to use UUID=… helps.