#!/bin/sh
# Burn images use boot + ext4 rootfs, with persistent application data on rootfs.
set -eu
fail() { logger -t one-kvm-burn "$*"; echo "one-kvm-burn: $*" >&2; exit 1; }
expected="$(cat /etc/one-kvm-burn-root-uuid)"
root_device="$(awk '$2 == "/" && $3 == "ext4" && $4 ~ /(^|,)rw(,|$)/ {print $1}' /proc/mounts)"
[ -b "$root_device" ] || fail 'root is not a writable ext4 block filesystem'
[ "$(blkid -s UUID -o value "$root_device")" = "$expected" ] || fail 'root filesystem UUID differs'
if [ ! -f /etc/one-kvm-image/burn-expanded ]; then
    if resize2fs "$root_device"; then
        mkdir -p /etc/one-kvm-image
        touch /etc/one-kvm-image/burn-expanded
    else
        logger -t one-kvm-burn 'Root expansion deferred; retaining existing filesystem size'
    fi
fi
mkdir -p /srv/one-kvm-shared /mnt/shared
if ! awk -v device="$root_device" '$1 == device && $2 == "/mnt/shared" && $3 == "ext4" && $4 ~ /(^|,)rw(,|$)/ {found=1} END {exit !found}' /proc/mounts; then
    [ ! -L /mnt/shared ] || fail '/mnt/shared must not be a symlink'
    rmdir /mnt/shared || fail '/mnt/shared is not empty or is already mounted'
    mkdir /mnt/shared
    mount -o bind /srv/one-kvm-shared /mnt/shared || fail 'cannot mount persistent data'
fi
/usr/libexec/one-kvm-shared-ready || fail 'persistent data is not writable'
mkdir -p /mnt/shared/one-kvm /mnt/shared/docker
chmod 700 /mnt/shared/one-kvm
