lxc / distrobuilder

System container image builder for LXC and Incus
https://linuxcontainers.org
Apache License 2.0
548 stars 163 forks source link

Failed running distrobuilder generating RockyLinux 9 VM #827

Open nobodyman1 opened 3 months ago

nobodyman1 commented 3 months ago

I tried to generate an image, but it doesn´t work.

The output shows an error:

...
  Installing       : rootfiles-8.1-31.el9.noarch                                                                                                                                                         127/127
  Running scriptlet: grub2-common-1:2.06-70.el9_3.2.rocky.0.3.noarch                                                                                                                                     127/127
  Running scriptlet: kernel-modules-core-5.14.0-362.18.1.el9_3.0.1.x86_64                                                                                                                                127/127
  Running scriptlet: kernel-core-5.14.0-362.18.1.el9_3.0.1.x86_64                                                                                                                                        127/127
grub2-probe: error: failed to get canonical path of `/dev/mapper/rl-root'.
No path or device is specified.
Usage: grub2-probe [OPTION...] [OPTION]... [PATH|DEVICE]
Try 'grub2-probe --help' or 'grub2-probe --usage' for more information.
findmnt: can't read (null): No such file or directory

  Running scriptlet: kernel-modules-5.14.0-362.18.1.el9_3.0.1.x86_64
...

but building continues until

...
INFO   [2024-03-11T12:27:29+01:00] Running hooks                                 trigger=post-files
++ ls /boot/initramfs-5.14.0-362.18.1.el9_3.0.1.x86_64.img
++ sed -r 's#.*initramfs-(.+)\.img#\1#'
+ kver=5.14.0-362.18.1.el9_3.0.1.x86_64
+ target=/boot/efi/EFI/rocky/grub.cfg
+ grub2-mkconfig -o /boot/efi/EFI/rocky/grub.cfg
Generating grub configuration file ...
Adding boot menu entry for UEFI Firmware Settings ...
done
+ sed -i 's#root=[^ ]*#root=/dev/sda2#g' /boot/efi/EFI/rocky/grub.cfg
+ grubby --update-kernel=/boot/vmlinuz-5.14.0-362.18.1.el9_3.0.1.x86_64 '--args=root=/dev/sda2 ro'
The param /boot/vmlinuz-5.14.0-362.18.1.el9_3.0.1.x86_64 is incorrect
Error: Failed to run post-files: exit status 1
ERROR  [2024-03-11T12:27:31+01:00] Failed running distrobuilder                  err="Failed to run post-files: exit status 1"
INFO   [2024-03-11T12:27:31+01:00] Removing cache directory

To get some more info I added to rockylinux.yaml:

- trigger: post-files
  action: |-
    #!/bin/sh
    set -eux
    grubby --info=ALL
    ...
  types:
  - vm
  releases:
  - 9

Here is the additional output:

index=0
kernel="/var/cache/distrobuilder.4233995394/rootfs/boot/vmlinuz-5.14.0-362.18.1.el9_3.0.1.x86_64"
args="ro crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet selinux=0"
root="/dev/mapper/rl-root"
initrd="/var/cache/distrobuilder.4233995394/rootfs/boot/initramfs-5.14.0-362.18.1.el9_3.0.1.x86_64.img"
title="Rocky Linux (5.14.0-362.18.1.el9_3.0.1.x86_64) 9.3 (Blue Onyx)"
id="84539f10c3234600a5599254072f4639-5.14.0-362.18.1.el9_3.0.1.x86_64"

Result: The kernel and initrd settings are invalid!

As workaround for this I modified rockylinux.yaml:

- trigger: post-files
  action: |-
    #!/bin/sh
    set -eux
    ...
    # Patch *.conf files
    sed -i "s|/var/cache/distrobuilder\..*/rootfs||" /boot/loader/entries/*.conf
    # Update files in /boot/loader/entries/. `grubby` needs to be run after
    # `grub2-mkconfig` as the latter overwrites files in /boot/loader/entries/.
    grubby --update-kernel=/boot/vmlinuz-${kver} --args="root=/dev/sda2 ro"
    # Regenerate initramfs
    dracut --kver "${kver}" -f
  types:
  - vm
  releases:
  - 9

With this patch the image is generated. The issue is similar to #785 but in that case there is no call of grub-install which can be modified.

stgraber commented 3 months ago

It looks like it's your host system LVM setup that's being picked up by grub inside the build environment.

We have all our build servers run on the simplest storage configuration possible (single ext4 partition, no LVM) which has us avoid such issues.

nobodyman1 commented 3 months ago

I tried a fresh installation of RockyLinux 9.3 with ext4 root partition (no LVM), but the error is still there.