Fix broken minimal cloud image boot on amd64

I recently pulled initramfs logic out of the base build hook, and
dropped that into the `replace_kernel` function. Any cloud image that
does not leverage the generic virtual kernel was expected to call
`replace_kernel` to pull in a custom kernel. That function will
disable initramfs boot for images that use a custom kernel.

Minimal cloud images on amd64 use the linux-kvm kernel, but the build
hook does not utilize the `replace_kernel` function. Instead, the
kernel flavor is set in `auto/config`. I pulled that logic out of
`auto/config` and am now calling `replace_kernel` in the build hook.

I also moved a call to generate the package list so that it will pick
up the change to the linux-kvm kernel.
raspi-desktop-1
David Krauser 5 years ago
parent 83ce5e32a8
commit 4c504f6781

6
debian/changelog vendored

@ -1,3 +1,9 @@
livecd-rootfs (2.674) UNRELEASED; urgency=medium
* Fix broken minimal cloud image boot on amd64
-- David Krauser <david.krauser@canonical.com> Thu, 16 Jul 2020 17:24:19 -0400
livecd-rootfs (2.673) groovy; urgency=medium livecd-rootfs (2.673) groovy; urgency=medium
* Fix an unbound variable in scripts/functions. * Fix an unbound variable in scripts/functions.

@ -779,20 +779,14 @@ case $PROJECT in
;; ;;
ubuntu-cpc) ubuntu-cpc)
KERNEL_FLAVOURS=virtual
if [ "${SUBPROJECT:-}" = minimized ]; then if [ "${SUBPROJECT:-}" = minimized ]; then
add_task install cloud-image add_task install cloud-image
add_package install sudo lxd-installer add_package install sudo lxd-installer
# linux-kvm currently only exists for amd64, so fall back to the
# virtual flavour for other architectures
if [ "$ARCH" = "amd64" ]; then
KERNEL_FLAVOURS=kvm
else
KERNEL_FLAVOURS=virtual
fi
else else
add_task install minimal standard cloud-image add_task install minimal standard cloud-image
add_package install ubuntu-minimal add_package install ubuntu-minimal
KERNEL_FLAVOURS=virtual
case $ARCH in case $ARCH in
armhf|arm64|ppc64el|powerpc) armhf|arm64|ppc64el|powerpc)
add_task install server add_task install server

@ -947,6 +947,12 @@ 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}
}
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..."

@ -94,15 +94,6 @@ install_grub() {
;; ;;
esac esac
# This call to rewrite the debian package manifest is added here to capture
# grub-efi packages that otherwise would not make it into the base
# manifest. filesystem.packages is moved into place via symlinking to
# livecd.ubuntu-cpc.manifest by live-build/auto/build after lb_binary runs
# and at that time snaps are added to the manifest (create-manifest is
# not called here as it calls snap-seed-parse, resulting in duplicate
# snap listings)
chroot mountpoint dpkg-query -W > binary/boot/filesystem.packages
chroot mountpoint grub-install "${loop_device}" \ chroot mountpoint grub-install "${loop_device}" \
--boot-directory=/boot \ --boot-directory=/boot \
--efi-directory=/boot/efi \ --efi-directory=/boot/efi \
@ -126,6 +117,21 @@ install_grub() {
chroot mountpoint grub-install --target=i386-pc "${loop_device}" chroot mountpoint grub-install --target=i386-pc "${loop_device}"
fi fi
# Use the linux-kvm kernel for minimal images where available
# linux-kvm currently only exists for amd64
if [ "${SUBPROJECT:-}" = "minimized" ] && [ "$ARCH" = "amd64" ]; then
replace_kernel mountpoint linux-kvm
fi
# This call to rewrite the debian package manifest is added here to capture
# grub-efi packages that otherwise would not make it into the base
# manifest. filesystem.packages is moved into place via symlinking to
# livecd.ubuntu-cpc.manifest by live-build/auto/build after lb_binary runs
# and at that time snaps are added to the manifest (create-manifest is
# not called here as it calls snap-seed-parse, resulting in duplicate
# snap listings)
chroot mountpoint dpkg-query -W > binary/boot/filesystem.packages
divert_grub mountpoint divert_grub mountpoint
chroot mountpoint update-grub chroot mountpoint update-grub
replace_grub_root_with_label mountpoint replace_grub_root_with_label mountpoint

@ -122,6 +122,12 @@ if [ "${should_install_grub}" -eq 1 ]; then
rm mountpoint/tmp/device.map rm mountpoint/tmp/device.map
fi fi
# Use the linux-kvm kernel for minimal images where available
# linux-kvm currently only exists for amd64
if [ "${SUBPROJECT:-}" = "minimized" ] && [ "$ARCH" = "amd64" ]; then
replace_kernel mountpoint linux-kvm
fi
if [ "$ARCH" = "s390x" ]; then if [ "$ARCH" = "s390x" ]; then
# Do ZIPL install bits # Do ZIPL install bits
chroot mountpoint apt-get -qqy install s390-tools sysconfig-hardware chroot mountpoint apt-get -qqy install s390-tools sysconfig-hardware

Loading…
Cancel
Save