#!/bin/bash
# ctsinstaller-generator: generate services needed for ctsinstaller operation

# only run in the CTsInstaller installation environment
CTSINSTALLER_TARGET="/lib/systemd/system/ctsinstaller.target"
CURRENT_DEFAULT_TARGET=$(readlink /etc/systemd/system/default.target)

if ! { [ "$CTSINSTALLER_TARGET" = "$CURRENT_DEFAULT_TARGET" ] || grep -q 'systemd.unit=ctsinstaller.target' /proc/cmdline ;} ; then
    exit 0
fi

# set up dirs
systemd_dir=/lib/systemd/system
target_dir=$systemd_dir/ctsinstaller.target.wants
mkdir -p $target_dir

# create symlink ctsinstaller.target.wants/SERVICE@TTY.service
service_on_tty() {
    local service="$1" tty="$2"
    local service_instance="${service/@.service/@$tty.service}"
    ln -sf "$systemd_dir/$service" "$target_dir/$service_instance"
}

# find the real tty for /dev/console
tty="console"
while [ -f /sys/class/tty/$tty/active ]; do
    tty=$(< /sys/class/tty/$tty/active)
    tty=${tty##* } # last item in the list
done
consoletty="$tty"

# put ctsinstaller's tmux session on the console
service_on_tty ctsinstaller-tmux@.service "$consoletty"

# put a shell on the first virtualization console we find
for tty in hvc0 hvc1 xvc0 hvsi0 hvsi1 hvsi2; do
    [ "$tty" = "$consoletty" ] && continue
    if [ -d /sys/class/tty/$tty ]; then
        service_on_tty ctsinstaller-shell@.service $tty
        break
    fi
done

ln -sf $systemd_dir/ctsinstaller-nm-config.service $target_dir/ctsinstaller-nm-config.service
ln -sf $systemd_dir/ctsinstaller-pre.service $target_dir/ctsinstaller-pre.service
