#!/bin/bash

chrname=httpd70

services="apache2-chroot-70"
extra_configs="httpdx"

#######################################################

confdir=/etc/chrmount
target=chr-${chrname}
chrdir=/chroot/${chrname}

if [ -z "$1" ]; then
	echo "Wrong parameters"
	exit 3
fi

if [ "$1" == "/" ]; then
	echo "Output dir can't be the root"
	exit 3
fi

outdir="$1"

if ! [ -d "${outdir}" ]; then
	echo "Output dir not found"
	exit 5
fi

if ! [ -d "${chrdir}" ]; then
	exit 0
fi

conffiles=""
for conf in ${chrname} ${extra_configs}; do
	if [ -f "${confdir}/${conf}.conf" ]; then
		conffiles="$conffiles ${confdir}/${conf}.conf"
	fi
done

if [ -z "${conffiles}" ]; then
	exit 0
fi


function bindpath_append()
{
	SRC=$1
	DST=$2

	new_bindpath="BindPaths=-${SRC}:${DST}:norbind"

	for bp in $BINDPATHS; do
		if [ "$bp" == "$new_bindpath" ]; then
			return 0
		fi
	done

	BINDPATHS="$BINDPATHS
${new_bindpath}"

}

function mountunit_gen()
{
	SRC=$1
	DST=$2

	fn=`systemd-escape --path --suffix=mount "${chrdir}${DST}"`

	unitfile="${outdir}/${fn}"

	if [ -f ${unitfile} ]; then
		return 0
	fi

cat > "$unitfile" <<EOF
[Unit]
Before=$(printf '%s.service ' $services)
PartOf=${target}.target

[Mount]
What=${SRC}
Where=${chrdir}${DST}
Type=none
Options=defaults,noexec,nosuid,nodev,bind,rprivate,nofail

[Install]
WantedBy=${target}.target
EOF

	wantedby_dir="${outdir}/${target}.target.wants"
	mkdir -p ${wantedby_dir}
	ln -s ../${fn} ${wantedby_dir}/${fn}
}

function unit_config_gen()
{

	for service in ${services}; do
		dropdir="$outdir/${service}.service.d"
		mkdir -p "${dropdir}"

		dropfile="${dropdir}/chr-${chrname}-mounts.conf"

		if [ -n "$BINDPATHS" ]; then

			cat > "$dropfile" <<EOF
[Service]
${BINDPATHS}

EOF
		else
			[ -f "$dropfile" ] && rm "$dropfile"
		fi
	done
}

#######################################################

BINDPATHS=""

for conffile in $conffiles; do

	while read MSRC MDST; do
		case "$MSRC" in
		    ""|\#*)
		    continue;
		    ;;
		esac
		case "$MDST" in
		    ""|\#*)
		    continue;
		    ;;
		esac
		bindpath_append $MSRC $MDST
		mountunit_gen $MSRC $MDST
	done < ${conffile}

done

unit_config_gen

exit 0
