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
sil2100/riscv-unmatched-unleashed
Pat Viafore 4 years ago
parent 4030c8bc5a
commit 0775862a25
No known key found for this signature in database
GPG Key ID: 20C739856E05C9D1

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…
Cancel
Save