mirror of
https://git.launchpad.net/livecd-rootfs
synced 2025-05-31 04:31:32 +00:00
Add mechanism to detect initrdless boot fallback
With this change, when we attempt to boot with an initramfs and fail, initrdless_boot_fallback_triggered is set to non-zero in the grubenv. This value can be checked after boot by looking in /boot/grub/grubenv or by using the grub-editenv list command. Addresses LP: #1870189
This commit is contained in:
parent
4030c8bc5a
commit
0775862a25
8
debian/changelog
vendored
8
debian/changelog
vendored
@ -1,3 +1,11 @@
|
|||||||
|
livecd-rootfs (2.664.18) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* Only try without initrd-less on replaced kernels, not all kernels
|
||||||
|
* Provide a mechanism to detect initrd-less fallback
|
||||||
|
|
||||||
|
-- Patrick Viafore <patrick.viafore@canonical.com> Tue, 09 Feb 2021 12:40:04 -0600
|
||||||
|
|
||||||
|
|
||||||
livecd-rootfs (2.664.17) focal; urgency=medium
|
livecd-rootfs (2.664.17) focal; urgency=medium
|
||||||
|
|
||||||
[ David Krauser ]
|
[ David Krauser ]
|
||||||
|
@ -990,6 +990,38 @@ replace_kernel () {
|
|||||||
|
|
||||||
# If running a custom kernel, we should try to boot without an initramfs
|
# If running a custom kernel, we should try to boot without an initramfs
|
||||||
# We do this by setting GRUB_FORCE_PARTUUID, which forces initramfs-less boot
|
# We do this by setting GRUB_FORCE_PARTUUID, which forces initramfs-less boot
|
||||||
|
force_boot_without_initramfs ${mountpoint}
|
||||||
|
}
|
||||||
|
|
||||||
|
track_initramfs_boot_fallback() {
|
||||||
|
mountpoint=$1
|
||||||
|
cat <<END > "${mountpoint}/etc/grub.d/01_track_initrdless_boot_fallback"
|
||||||
|
#! /bin/sh
|
||||||
|
# ${IMAGE_STR}
|
||||||
|
# This will detect if we attempt to boot with an initramfs and fail.
|
||||||
|
# In the case of a failure, initrdless_boot_fallback_triggered is set to
|
||||||
|
# a non-zero value in the grubenv. This value can be checked after boot
|
||||||
|
# by looking in /boot/grub/grubenv or by using the grub-editenv list command.
|
||||||
|
set -e
|
||||||
|
END
|
||||||
|
cat <<"END" >> "${mountpoint}/etc/grub.d/01_track_initrdless_boot_fallback"
|
||||||
|
cat <<"EOF"
|
||||||
|
if [ -n "${have_grubenv}" ]; then
|
||||||
|
if [ -n "${initrdfail}" ]; then
|
||||||
|
set initrdless_boot_fallback_triggered="${initrdfail}"
|
||||||
|
else
|
||||||
|
set initrdless_boot_fallback_triggered=0
|
||||||
|
fi
|
||||||
|
save_env initrdless_boot_fallback_triggered
|
||||||
|
fi
|
||||||
|
EOF
|
||||||
|
END
|
||||||
|
chmod +x "${mountpoint}/etc/grub.d/01_track_initrdless_boot_fallback"
|
||||||
|
}
|
||||||
|
|
||||||
|
force_boot_without_initramfs() {
|
||||||
|
mountpoint=$1
|
||||||
|
|
||||||
partuuid=$(blkid -s PARTUUID -o value $(findmnt -n -o SOURCE --target "${mountpoint}"))
|
partuuid=$(blkid -s PARTUUID -o value $(findmnt -n -o SOURCE --target "${mountpoint}"))
|
||||||
if [ -n "${partuuid}" ]; then
|
if [ -n "${partuuid}" ]; then
|
||||||
echo "Force booting without an initramfs..."
|
echo "Force booting without an initramfs..."
|
||||||
|
@ -214,6 +214,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
divert_grub mountpoint
|
divert_grub mountpoint
|
||||||
|
track_initramfs_boot_fallback mountpoint
|
||||||
chroot mountpoint update-grub
|
chroot mountpoint update-grub
|
||||||
replace_grub_root_with_label mountpoint
|
replace_grub_root_with_label mountpoint
|
||||||
undivert_grub mountpoint
|
undivert_grub mountpoint
|
||||||
|
@ -119,6 +119,11 @@ if [ "${should_install_grub}" -eq 1 ]; then
|
|||||||
--device-map=/tmp/device.map \
|
--device-map=/tmp/device.map \
|
||||||
${loop_device}
|
${loop_device}
|
||||||
|
|
||||||
|
divert_grub mountpoint
|
||||||
|
track_initramfs_boot_fallback mountpoint
|
||||||
|
chroot mountpoint update-grub
|
||||||
|
undivert_grub mountpoint
|
||||||
|
|
||||||
rm mountpoint/tmp/device.map
|
rm mountpoint/tmp/device.map
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user