|
|
|
#!/bin/bash -eux
|
|
|
|
# vi: ts=4 expandtab
|
|
|
|
#
|
|
|
|
# Generate linux-virtual image
|
|
|
|
#
|
|
|
|
|
|
|
|
case $ARCH in
|
|
|
|
amd64|arm64)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
echo "We don't build bootable Buildd images for $ARCH."
|
|
|
|
exit 0
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
echo "Building bootable Buildd image"
|
|
|
|
|
|
|
|
IMAGE_STR="# BUILDD_IMG: This file was created/modified by the Buildd Image build process"
|
|
|
|
|
|
|
|
. config/functions
|
|
|
|
|
|
|
|
mount_d=$(mktemp -d)
|
|
|
|
|
|
|
|
create_derivative uefi linux-virtual #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_linux_virtual() {
|
|
|
|
if [ -d "$mount_d" ]; then
|
|
|
|
umount_disk_image "$mount_d"
|
|
|
|
fi
|
|
|
|
rm -rf $mount_d $derivative_img
|
|
|
|
}
|
|
|
|
trap cleanup_linux_virtual EXIT
|
|
|
|
|
|
|
|
# The base image is built with packages from the release pocket;
|
|
|
|
# however, we want the latest from updates and security. Those
|
|
|
|
# pockets are already enabled, we just need to perform an upgrade
|
|
|
|
# to pull in the latest packages.
|
|
|
|
env DEBIAN_FRONTEND=noninteractive chroot "$mount_d" apt-get \
|
|
|
|
update --assume-yes
|
|
|
|
# Perform a dist-upgrade to pull in package updates
|
|
|
|
env DEBIAN_FRONTEND=noninteractive chroot "$mount_d" apt-get \
|
|
|
|
dist-upgrade --assume-yes
|
|
|
|
env DEBIAN_FRONTEND=noninteractive chroot "$mount_d" apt-get \
|
|
|
|
dist-upgrade --assume-yes
|
|
|
|
|
|
|
|
# Install dependencies
|
|
|
|
env DEBIAN_FRONTEND=noninteractive chroot "$mount_d" apt-get \
|
|
|
|
install -y lsb-release locales initramfs-tools busybox-initramfs \
|
|
|
|
udev dbus netplan.io cloud-init openssh-server sudo snapd \
|
|
|
|
lxd-agent-loader
|
|
|
|
|
|
|
|
# Install a kernel
|
|
|
|
divert_grub "$mount_d"
|
|
|
|
env DEBIAN_FRONTEND=noninteractive chroot "$mount_d" apt-get \
|
|
|
|
install --assume-yes linux-image-virtual
|
|
|
|
env DEBIAN_FRONTEND=noninteractive chroot "$mount_d" apt-get \
|
|
|
|
autoremove --purge --assume-yes
|
|
|
|
chroot "$mount_d" update-grub
|
|
|
|
undivert_grub "$mount_d"
|
|
|
|
|
|
|
|
# Update initramfs image
|
|
|
|
chroot "$mount_d" update-initramfs -c -v -k all
|
|
|
|
|
|
|
|
# extract kernel and initrd
|
|
|
|
cp $mount_d/boot/initrd.img-* livecd.$PROJECT.initrd-generic
|
|
|
|
cp $mount_d/boot/vmlinuz-* livecd.$PROJECT.vmlinuz-generic
|
|
|
|
|
|
|
|
# Cleanup
|
|
|
|
env DEBIAN_FRONTEND=noninteractive chroot "$mount_d" apt-get \
|
|
|
|
clean
|
|
|
|
|
|
|
|
create_manifest $mount_d "livecd.$PROJECT.disk-linux-virtual.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.$PROJECT.disk-linux-virtual.img"
|