void-linux / void-packages

The Void source packages collection
https://voidlinux.org
Other
2.58k stars 2.15k forks source link

XBPS doesn't fail kernel installation if post-install kernel hook failed #42047

Open g4s8 opened 1 year ago

g4s8 commented 1 year ago

The problem: I updated kernel version, it successfully generated initramfs using drakut and copied kernel vmlinuz file to boot partition but failed to copy initramfs due to "No space left on device" error. Then xbps continued to execute configuration hooks and generated new grub config. Grub has found vmlinux file for new kernel, so it generated new entry for this version. But during boot initramfs was not found, so boot failed with kernel panic.

I'm suggesting to stop configuration execution if any hook fails and skip other hooks to avoid it.

xbps log:

[*] Configuring unpacked packages
linux6.1-6.1.7_1: configuring ...
Executing post-install kernel hook: 10-dkms ...
Available DKMS module: wireguard-1.0.20220627.
Building DKMS module: wireguard-1.0.20220627... skipped!
Generating kernel module dependency lists... done.
Executing post-install kernel hook: 10-mount ...
INFO: boot already mounted
Executing post-install kernel hook: 20-dracut ...
cp: error writing '/boot/initramfs-6.1.7_1.img': No space left on device
dracut: Creation of /boot/initramfs-6.1.7_1.img failed
Executing post-install kernel hook: 50-efibootmgr ...
Executing post-install kernel hook: 50-grub ...
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.1.7_1
Found initrd image: /boot/early_ucode.cpio
Found linux image: /boot/vmlinuz-6.1.3_1
Found initrd image: /boot/early_ucode.cpio /boot/initramfs-6.1.3_1.img
Found linux image: /boot/vmlinuz-5.16.20_1
Found initrd image: /boot/early_ucode.cpio
Found linux image: /boot/vmlinuz-5.16.16_1
Found initrd image: /boot/early_ucode.cpio /boot/initramfs-5.16.16_1.img
Found linux image: /boot/vmlinuz-5.16.7_1
Found initrd image: /boot/early_ucode.cpio
Found linux image: /boot/vmlinuz-5.15.82_1
Found initrd image: /boot/early_ucode.cpio
Found linux image: /boot/vmlinuz-5.4.66-gentoo-x86_64
Found initrd image: /boot/early_ucode.cpio /boot/initramfs-5.4.66-gentoo-x86_64.img
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
Executing post-install kernel hook: 99-umount ...
INFO: skip boot umount
linux6.1-6.1.7_1: installed successfully.
Duncaen commented 1 year ago

Leaving the system in a half updated state is actually worse.

This is part of the kernel hook, maybe further kernel hooks could be skipped, but not for any other packages.

Duncaen commented 1 year ago

Moved to https://github.com/void-linux/void-packages since this is not really an xbps issue, but something that may be improved in https://github.com/void-linux/void-packages/blob/7e0dde51308b921d7eb143ca3f84828f6d2ac82a/srcpkgs/xbps-triggers/files/kernel-hooks.

github-actions[bot] commented 1 year ago

Issues become stale 90 days after last activity and are closed 14 days after that. If this issue is still relevant bump it or assign it.

g4s8 commented 1 year ago

@classabbyamp @Duncaen I added exit 1 to kernel-hook in #43852 and tested any hook fails parent hook script (with debug logs), but the problem is still here - the hook script fails but xbps successfully install or reconfigure the package:

Executing post-install kernel hook: 20-initramfs ...
dracut-install: ERROR: installing '/boot/volume1.key'
dracut: FAILED: /usr/lib/dracut/dracut-install -D /var/tmp/dracut.da3HNp/initramfs -a /boot/volume1.key /etc/crypttab
cp: cannot create regular file 'boot/initramfs-6.2.13_1.img': No such file or directory
dracut: Creation of boot/initramfs-6.2.13_1.img failed
DEBUG: !!! hook etc/kernel.d/post-install/20-initramfs failed
linux6.2-6.2.13_1: configured successfully.
ahesford commented 1 year ago

I think a better fix for your specific problem is checking in the grub hook that both the kernel and initramfs for the specified $VERSION exist and, if not, don't run grub-mkconfig.