#!/bin/bash -eux
# vi: ts=4 noexpandtab
#
# Generate a squashfs root and manifest

echo "033-kernel-bits.binary"

case ${IMAGE_TARGETS-} in
	""|*squashfs*)
		;;
	*)
		echo "Skipping squashfs build"
		exit 0
		;;
esac

if [ -n "${SUBARCH-}" ]; then
	echo "Skipping rootfs build for subarch flavor build"
	exit 0
fi

. config/functions
. config/common

INSTALLER_ROOT=binary/boot/installer.squashfs.dir

KERNEL_BITS_ROOT=binary/boot/kernel-bits.dir
KERNEL_BITS_OVERLAY=binary/boot/overlay-kernel-bits

#variants='ga hwe'
variants='ga'

for variant in $variants; do
	if [ "$variant" = "ga" ]; then
		kernel_metapkg=linux-generic
		flavor=generic
	elif [ "$variant" = "hwe" ]; then
		kernel_metapkg=linux-generic-hwe-$(lsb_release -sr)
		flavor=generic-hwe
	else
		echo "bogus variant: $variant"
		exit 1
	fi

	# Make preparations
	mkdir -p $KERNEL_BITS_ROOT $KERNEL_BITS_OVERLAY
	mount_overlay "$INSTALLER_ROOT/" "$KERNEL_BITS_OVERLAY/" "$KERNEL_BITS_ROOT/"
	setup_mountpoint $KERNEL_BITS_ROOT

	# Our initramfs hook implements a kind of extreme version of
	# cloud-initramfs-copymods, so remove that and prevent duelling hooks
	env DEBIAN_FRONTEND=noninteractive chroot $KERNEL_BITS_ROOT apt-get -y remove cloud-initramfs-copymods ubuntu-server || true

	# Configure initramfs creation
	mkdir -p "$KERNEL_BITS_ROOT"/etc/initramfs-tools/conf.d/
	if [ -n "$LB_INITRAMFS_COMPRESSION" ]; then
		echo "COMPRESS=$LB_INITRAMFS_COMPRESSION" > "$KERNEL_BITS_ROOT"/etc/initramfs-tools/conf.d/livecd-rootfs.conf
	fi
	echo "export CASPER_GENERATE_UUID=1" > "$KERNEL_BITS_ROOT"/etc/initramfs-tools/conf.d/casper.conf

	# Add a hook to record which kernel was booted and mount the
	# modules.squashfs created below.
	cat <<EOF > "$KERNEL_BITS_ROOT"/etc/initramfs-tools/scripts/init-bottom/live-server
#!/bin/sh
case \$1 in
prereqs) exit 0;;
esac

echo ${kernel_metapkg} > /run/kernel-meta-package
mkdir -p \$rootmnt/usr/lib/modules
mount \$rootmnt/cdrom/casper/extras/modules.squashfs-$flavor \$rootmnt/usr/lib/modules
mkdir -p /run/systemd/system/usr-lib-modules.mount.d
echo '[Mount]' >> /run/systemd/system/usr-lib-modules.mount.d/lazy.conf
echo 'LazyUnmount=yes' >> /run/systemd/system/usr-lib-modules.mount.d/lazy.conf
EOF
	chmod +x "$KERNEL_BITS_ROOT"/etc/initramfs-tools/scripts/init-bottom/live-server

	# Install the kernel!
	env DEBIAN_FRONTEND=noninteractive chroot $KERNEL_BITS_ROOT apt-get -y install ${kernel_metapkg}

	# Fish out generated kernel image and initrd
	mv "$KERNEL_BITS_ROOT"/boot/initrd.img-* ${PWD}/livecd.${PROJECT}.initrd-$flavor
	mv "$KERNEL_BITS_ROOT"/boot/vmlinu?-* ${PWD}/livecd.${PROJECT}.kernel-$flavor

	# Create squashfs containing all the modules
	modules_squashfs_path="${PWD}/livecd.${PROJECT}.modules.squashfs-$flavor"
	(cd "$KERNEL_BITS_ROOT/lib/modules" &&
		mksquashfs . $modules_squashfs_path -no-progress -xattrs -comp xz)

	# And clean up
	teardown_mountpoint $KERNEL_BITS_ROOT
	umount $KERNEL_BITS_ROOT
	rm -rf $KERNEL_BITS_ROOT $KERNEL_BITS_OVERLAY
done