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

set -x

echo "032-installer-squashfs.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

SQUASH_ROOT=binary/boot/squashfs.dir
OVERLAY_ROOT=binary/overlay

mkdir -p "$OVERLAY_ROOT"

# Create an installer squashfs layer
mount_overlay "$SQUASH_ROOT/" "$OVERLAY_ROOT/" "$SQUASH_ROOT/"

setup_mountpoint binary/boot/squashfs.dir

# Override JobRunningTimeoutSec to 0s on the .device unit that
# subiquity_config.mount depends on to avoid a 5s delay on switching
# to a new VT when there is no device there (LP: #1750117).
# It would be better to have this in ../includes.binary/overlay but
# you can't have backslashes in filenames in bzr branches!
DEVICE_UNIT_NAME='dev-disk-by\x2duuid-00c629d6\x2d06ab\x2d4dfd\x2db21e\x2dc3186f34105d.device'
mkdir -p "$SQUASH_ROOT/etc/systemd/system/$DEVICE_UNIT_NAME.d"
cat > "$SQUASH_ROOT/etc/systemd/system/$DEVICE_UNIT_NAME.d/override.conf" <<EOF
[Unit]
JobRunningTimeoutSec=0s
EOF

# Prepare installer layer.

# Install any requirements for the installer, for things we don't want
# to see on the installed system
chroot $SQUASH_ROOT apt-get update
chroot $SQUASH_ROOT apt-get -y install user-setup curtin lupin-casper

# For bug #1743643 "Install to dirty disk with swap fails" remove the
# "helpful" casper script that mounts any swap partitions it finds.
rm -f $SQUASH_ROOT/usr/share/initramfs-tools/scripts/casper-bottom/*swap

# Installing casper means we need a new initramfs
UPDATE_INITRAMFS_OPTIONS=CASPER_GENERATE_UUID=1 recreate_initramfs $SQUASH_ROOT

# Don't let cloud-init run in the live session.
touch $SQUASH_ROOT/etc/cloud/cloud-init.disabled

# Do the snap seeding dance.
chroot $SQUASH_ROOT mkdir -p /var/lib/snapd/seed/snaps /var/lib/snapd/seed/assertions
chroot $SQUASH_ROOT sh -c '
set -x;
cd /var/lib/snapd/seed;
sudo SNAPPY_STORE_NO_CDN=1 snap download core;
sudo SNAPPY_STORE_NO_CDN=1 snap download subiquity;

CORE_SNAP=$(ls -1 core*.snap);
SUBIQUITY_SNAP=$(ls -1 subiquity*.snap);

mv *.assert /var/lib/snapd/seed/assertions/;
mv *.snap /var/lib/snapd/seed/snaps/;

cat <<EOF > /var/lib/snapd/seed/seed.yaml
snaps:
 - name: core
   channel: stable
   file: ${CORE_SNAP}
 - name: subiquity
   channel: stable
   classic: true
   file: ${SUBIQUITY_SNAP}
EOF
'

teardown_mountpoint "$SQUASH_ROOT"

# Then unmount the overlay
umount "$SQUASH_ROOT"

squashfs_f="${PWD}/livecd.${PROJECT}.installer.squashfs"

(cd "$OVERLAY_ROOT/" &&
      mksquashfs . ${squashfs_f} \
        -no-progress -xattrs -comp xz )