From 74209da539b5da614339960ceaefb6572f989728 Mon Sep 17 00:00:00 2001 From: David Krauser Date: Thu, 16 Jul 2020 17:13:59 -0400 Subject: [PATCH] Fix broken minimal cloud image boot on amd64 (LP: #1920043) 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. --- debian/changelog | 6 +++++ live-build/auto/config | 10 ++------ .../hooks.d/base/disk-image-uefi.binary | 24 ++++++++++++------- .../ubuntu-cpc/hooks.d/base/disk-image.binary | 6 +++++ 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/debian/changelog b/debian/changelog index d6bd29cc..abea7a96 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +livecd-rootfs (2.664.18.1) UNRELEASED; urgency=medium + + * Fix broken minimal cloud image boot on amd64 LP: #1920043 + + -- Patrick Viafore Thu, 18 Mar 2021 11:50:04 -0500 + livecd-rootfs (2.664.18) focal; urgency=medium [ Patrick Viafore ] diff --git a/live-build/auto/config b/live-build/auto/config index ef60309f..888080dd 100755 --- a/live-build/auto/config +++ b/live-build/auto/config @@ -786,20 +786,14 @@ case $PROJECT in ;; ubuntu-cpc) + KERNEL_FLAVOURS=virtual + if [ "${SUBPROJECT:-}" = minimized ]; then add_task install cloud-image 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 add_task install minimal standard cloud-image add_package install ubuntu-minimal - KERNEL_FLAVOURS=virtual case $ARCH in armhf|arm64|ppc64el|powerpc) add_task install server diff --git a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary index 25035316..b16d281e 100755 --- a/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary +++ b/live-build/ubuntu-cpc/hooks.d/base/disk-image-uefi.binary @@ -191,15 +191,6 @@ EOF chroot mountpoint apt-get autoremove --purge --assume-yes - # 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}" \ --boot-directory=/boot \ --efi-directory=/boot/efi \ @@ -213,6 +204,21 @@ EOF chroot mountpoint grub-install --target=i386-pc "${loop_device}" 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 track_initramfs_boot_fallback mountpoint chroot mountpoint update-grub diff --git a/live-build/ubuntu-cpc/hooks.d/base/disk-image.binary b/live-build/ubuntu-cpc/hooks.d/base/disk-image.binary index f00fbbd7..ed383109 100755 --- a/live-build/ubuntu-cpc/hooks.d/base/disk-image.binary +++ b/live-build/ubuntu-cpc/hooks.d/base/disk-image.binary @@ -127,6 +127,12 @@ if [ "${should_install_grub}" -eq 1 ]; then rm mountpoint/tmp/device.map 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 # Do ZIPL install bits chroot mountpoint apt-get -qqy install s390-tools sysconfig-hardware