#!/bin/sh -e
# Create qcow2 images with ssh root login enabled for repo-install-test and
# store them in /opt/qemu.
# Set KEEP_CACHE=1 during development, so virt-builder only needs to download
# the image once.

# Distribution names, as in the base images from here:
# https://builder.libguestfs.org/
DISTROS="
	alma-8.5
	debian-10
	debian-11
	debian-12
"
TEMP_SCRIPT="$(mktemp)"

if [ "$(id -u)" != 0 ]; then
	echo "ERROR: run this as root"
	exit 1
fi

mkdir -p /opt/qemu

for distro in $DISTROS; do
	img="/opt/qemu/$distro.qcow2"

	echo
	echo "# $distro"
	echo

	if [ -e "$img" ]; then
		echo "=> File exists, skipping."
		continue
	fi

	case "$distro" in
	alma-*)
		# Install SCTP kernel module
		# https://forums.centos.org/viewtopic.php?t=71818
		cat <<- EOF > "$TEMP_SCRIPT"
		#!/bin/sh -ex
		dnf upgrade -y kernel
		dnf install -y kernel-modules-extra
		rm -f /etc/modprobe.d/sctp-blacklist.conf
		EOF
		;;
	debian-*)
		# Generate SSH server keys and allow login as root
		cat <<- EOF > "$TEMP_SCRIPT"
		#!/bin/sh -ex
		ssh-keygen -A
		echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
		EOF
		;;
	esac

	EXTRA_ARGS=""
	case "$distro" in
	debian-12)
		# repo-install-test runs out of space with the default size
		EXTRA_ARGS="--size 8G"
		;;
	esac

	virt-builder \
		"$distro" \
		-o "/opt/qemu/$distro.qcow2" \
		--format qcow2 \
		--root-password password:root \
		--run "$TEMP_SCRIPT" \
		--verbose \
		$EXTRA_ARGS

	if [ -z "$KEEP_CACHE" ]; then
		virt-builder --delete-cache
	fi
done

rm "$TEMP_SCRIPT"

# Marker for ansible main.yml to skip the script
touch /opt/qemu/.qemu-create-vms-done-v2

echo
echo "Done!"