diff --git a/debian/changelog b/debian/changelog index e5997b7a..afed03ff 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +livecd-rootfs (2.594) UNRELEASED; urgency=medium + + * Add support for linux-kvm images + + -- Patrick Viafore Tue, 04 Jun 2019 02:13:00 -0500 + livecd-rootfs (2.593) eoan; urgency=medium * Use boot-partition for cloud-init seed on RPi diff --git a/live-build/functions b/live-build/functions index 72fdb056..ade899f0 100644 --- a/live-build/functions +++ b/live-build/functions @@ -877,3 +877,19 @@ is_live_layer () { done return 1 } + +replace_kernel () { + mountpoint=$1 + new_kernel=$2 + + # Install custom kernel (N.B. the trailing + retains linux-base during this + # operation) + env DEBIAN_FRONTEND=noninteractive chroot "${mountpoint}" apt-get \ + remove --purge --assume-yes '^linux-.*' 'linux-base+' + env DEBIAN_FRONTEND=noninteractive chroot "${mountpoint}" apt-get \ + update --assume-yes + env DEBIAN_FRONTEND=noninteractive chroot "${mountpoint}" apt-get \ + install --assume-yes "${new_kernel}" + env DEBIAN_FRONTEND=noninteractive chroot "${mountpoint}" apt-get \ + autoremove --purge --assume-yes +} \ No newline at end of file diff --git a/live-build/ubuntu-cpc/hooks.d/base/kvm-image.binary b/live-build/ubuntu-cpc/hooks.d/base/kvm-image.binary new file mode 100644 index 00000000..1598390d --- /dev/null +++ b/live-build/ubuntu-cpc/hooks.d/base/kvm-image.binary @@ -0,0 +1,73 @@ +#!/bin/bash -eux +# vi: ts=4 expandtab +# +# Generate KVM image +# + +echo "Building KVM image" +IMAGE_STR="# CLOUD_IMG: This file was created/modified by the Cloud Image build process" +case ${SUBPROJECT:-} in + minimized) + echo "Skipping minimized $0 builds" + exit 0 + ;; + *) + ;; +esac + +# Only allow amd64 builds for now +case $ARCH in + amd64) + ;; + *) + echo "Linux KVM images are not supported for $ARCH yet."; + exit 0;; +esac + +. config/functions + +mount_d=$(mktemp -d) + +create_derivative "disk" "kvm" #sets ${derivative_img} +mount_disk_image ${derivative_img} ${mount_d} + +# unmount disk image and remove created folders on exit +# even though we unmount manually before we convert to +# qcow2, we have this here just in case we error out before +# that step +cleanup_kvm() { + if [ -d "$mount_d" ]; then + umount_disk_image "$mount_d" + fi + rm -rf ${mount_d} ${derivative_img} +} +trap cleanup_kvm EXIT + + +divert_grub "${mount_d}" +replace_kernel ${mount_d} "linux-kvm" +undivert_grub "${mount_d}" + +#setup grub correctly +env DEBIAN_FRONTEND=noninteractive chroot "${mount_d}" update-grub +replace_grub_root_with_label "${mount_d}" + +# Remove initramfs for kvm image +env DEBIAN_FRONTEND=noninteractive chroot "${mount_d}" apt-get \ + purge -y initramfs-tools busybox-initramfs + +env DEBIAN_FRONTEND=noninteractive chroot "${mount_d}" rm \ + -rf /boot/initrd.img-* /boot/initrd.img + +# Remove indices +env DEBIAN_FRONTEND=noninteractive chroot "${mount_d}" apt-get \ + clean + +create_manifest ${mount_d} livecd.ubuntu-cpc.disk-kvm.manifest + +# unmount disk image to prevent corruption +# and remove it so the trap doesn't try to unmount it again +umount_disk_image ${mount_d} +rm -rf ${mount_d} + +convert_to_qcow2 ${derivative_img} livecd.ubuntu-cpc.disk-kvm.img \ No newline at end of file diff --git a/live-build/ubuntu-cpc/hooks.d/base/series/base b/live-build/ubuntu-cpc/hooks.d/base/series/base index f04bdec7..55333887 100644 --- a/live-build/ubuntu-cpc/hooks.d/base/series/base +++ b/live-build/ubuntu-cpc/hooks.d/base/series/base @@ -2,6 +2,7 @@ depends root-dir depends tarball depends squashfs depends disk-image +depends kvm depends qcow2 depends vmdk depends vagrant diff --git a/live-build/ubuntu-cpc/hooks.d/base/series/kvm b/live-build/ubuntu-cpc/hooks.d/base/series/kvm new file mode 100644 index 00000000..6c5d8b8c --- /dev/null +++ b/live-build/ubuntu-cpc/hooks.d/base/series/kvm @@ -0,0 +1,2 @@ +depends disk-image +base/kvm-image.binary \ No newline at end of file