distr1 / distri

a Linux distribution to research fast package management
https://distr1.org
Other
532 stars 28 forks source link

make image ends up with PARTUUID= root parameter; minitrd does not find root #96

Closed stapelberg closed 1 year ago

stapelberg commented 1 year ago

After creating an image, I see:

% blkid /dev/loop0p3
/dev/loop0p3: UUID="7a5af842-2719-4bf6-baad-d197538848d7" BLOCK_SIZE="1024" TYPE="ext2" PARTLABEL="boot" PARTUUID="92bda9ab-9468-4623-8206-e15ec4554a87"

% blkid /dev/loop0p4
/dev/loop0p4: UUID="7a3003e7-42e1-44cb-becd-c3ec03f1a261" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="root" PARTUUID="098d2b9a-ff5e-4b85-b7fa-d42dd769930e"

When booting the image, I see the following kernel command line in GRUB:

 |        linux        /vmlinuz-5.6.5-15 root=PARTUUID=098d2b9a-ff5e-4b85-b7f\|
 |a-d42dd769930e ro console=ttyS0,115200  init=/init systemd.setenv=PATH=/bin\|
 | rw    

minitrd only looks for the overall UUID, not the PARTUUID, it seems:

2023/06/16 06:52:26 minitrd: skipping block device sda3 (uuid 7a5af842-2719-4bf6-baad-d197538848d7), looking for uuid PARTUUID=098d2b9a-ff5e-4b85-b7fa-d42dd769930e
2023/06/16 06:52:26 minitrd: skipping block device sda4 (uuid 7a3003e7-42e1-44cb-becd-c3ec03f1a261), looking for uuid PARTUUID=098d2b9a-ff5e-4b85-b7fa-d42dd769930e

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.

stapelberg commented 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.

stapelberg commented 1 year ago

…and here’s the smoking gun (had to rebuild grub with CFLAGS=-ggdb for the debug symbols to work):

2023-06-24-grub-probe