#!/bin/bash

FSCONF=/etc/fs.conf

FSTAB=/etc/fstab
CHR_FST=/etc/fstab-chr.d

if ! [ -f $FSCONF ]; then
	echo "No $FSCONF file found, exiting."
	exit 0
fi

if ! [ -d $CHR_FST ]; then
	echo "No $CHR_FST dir found, exiting."
	exit 0
fi

if ! (grep '###_FSTAB_CHR_BEGIN_###' $FSTAB >/dev/null); then
	echo "Tag not found in $FSTAB: ###_FSTAB_CHR_BEGIN_### (and optional ###_FSTAB_CHR_END_###)"
	exit 0
fi

. ${FSCONF}

if [ -n "$FS_UNCONFIGURED" -a "$FS_UNCONFIGURED" == 1  ]; then
	echo "The fstab-chr mechanism is unconfigured. Set FS_UNCONFIGURED option to 0 in $FSCONF."
	exit 0
fi

TMPFILE="$(mktemp)"

echo "### DO NOT MODIFY ANYTHING BETWEEN FSTAB_CHR TAGS" >> $TMPFILE
echo "### Source files are found in /etc/fstab-chr.d" >> $TMPFILE
echo "### To generate, run 'fstab-chr' command (3g-systools package)" >> $TMPFILE
echo  >> $TMPFILE

echo "### Unified new storage location (/srv)" >> $TMPFILE
echo  >> $TMPFILE
echo "# <file system>					<mount point>					<type>	<options>										<dump>	<pass>" >>$TMPFILE
echo  >> $TMPFILE

if [ -n "$FS_DATA_LOG" ]; then

	echo "%FS_DATA_LOG%				/srv/log					none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE

else
	log_subdir_templates="
	FS_LOG_APACHE52
	FS_LOG_APACHE53
	FS_LOG_APACHE54
	FS_LOG_APACHE56
	FS_LOG_APACHE70
	FS_LOG_APACHE71
	FS_LOG_APACHE72
	FS_LOG_APACHE73
	FS_LOG_APACHE74
	FS_LOG_APACHE80
	FS_LOG_APACHE81
	FS_LOG_APACHE82
	FS_LOG_APACHE83
	FS_LOG_APACHE_ADMIN
	FS_LOG_GOGS
	FS_LOG_MYSQL
	FS_LOG_NGINX
	"

	logdir=""

	for log_subdir_template in $log_subdir_templates; do
		sd=${!log_subdir_template}
		if [ -n "$sd" ]; then
			if [ -z "$logdir" ]; then
				logdir=`dirname $sd`
				echo "$logdir					/srv/log					none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE
				echo "WARNING: Please add this line to /etc/fs.conf:"
				echo "FS_DATA_LOG=$logdir"
			else
				temp_logdir=`dirname $sd`
				if [ "$logdir" != "$temp_logdir" ]; then
				echo "$sd"
					echo "# other log location: $logdir" >>$TMPFILE
				fi
			fi
		fi
	done
fi

[ -n "$FS_DATA_MAIL" ] &&	echo "%FS_DATA_MAIL%				/srv/mail					none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE
[ -n "$FS_DATA_MAILINDEX" ] &&	echo "%FS_DATA_MAILINDEX%				/srv/mailindex					none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE
[ -n "$FS_DATA_WEB" ] &&	echo "%FS_DATA_WEB%					/srv/web					none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE
[ -n "$FS_DATA_MYSQL" ] &&	echo "%FS_DATA_MYSQL%				/srv/mysql					none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE
[ -n "$FS_DATA_ALTMYSQL" ] &&	echo "%FS_DATA_ALTMYSQL%				/srv/altmysql					none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE
[ -n "$FS_DATA_ELASTICSEARCH" ] &&	echo "%FS_DATA_ELASTICSEARCH%				/srv/elasticsearch				none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE
[ -n "$FS_DATA_GOGS" ] &&	echo "%FS_DATA_GOGS%				/srv/gogs					none	defaults,noexec,nosuid,nodev,bind,rprivate						0	0" >>$TMPFILE
#%FS_DATA_WEB%/user					/chroot/deploy/web/user				fuse.bindfs	noexec,nosuid,nodev,chown-deny,chgrp-deny,force-user=10000,force-group=33,perms=u=rwD:g=:o=,create-with-perms=u=rwX:g=rX:o=rX	0	0

echo  >> $TMPFILE
echo  "### Files in /etc/fstab-chr.d">> $TMPFILE
echo  >> $TMPFILE
echo "# <file system>					<mount point>					<type>	<options>										<dump>	<pass>" >>$TMPFILE

chrconfs=`ls -1 ${CHR_FST}/ |grep -v '\.' |sort`
for chrconf in $chrconfs; do
	echo >> $TMPFILE
	echo "# ${chrconf}" >> $TMPFILE
	cat "${CHR_FST}/$chrconf" >> $TMPFILE
done

#FS_VARS=`grep '^[ \t]*%FS_' ${TMPFILE} | awk '{print $1}' |tr -d '%'`
#FS_VARS=`grep -o '^[ \t]*%FS_[^%]*%' ${TMPFILE} |tr -d '%'`
FS_VARS=`grep -o '%FS_[A-Za-z0-9\-\_]*%' ${TMPFILE} |tr -d '%'`

ERR=0
for FS_VAR in ${FS_VARS}; do
	if [ -n "${!FS_VAR}" ]; then
#		echo "$FS_VAR ${!FS_VAR}"
		sed -Ei "s#%"${FS_VAR}"%#"${!FS_VAR}"#g" $TMPFILE
	else
		echo "ERROR: ${FS_VAR} not defined in ${FSCONF}."
		#sed -Ei "s#%"${FS_VAR}"%#\# NOT MOUNTED %"${FS_VAR}"%#g" $TMPFILE
		ERR=1
	fi
done

if [ $ERR -eq 1 ]; then
	echo "Please fix ${FSCONF} and re-run this script."
	rm $TMPFILE
	exit 0
fi

awk '	BEGIN				{p=1}
	/^###_FSTAB_CHR_BEGIN_###/	{print;print "";system("cat '${TMPFILE}'");print "";p=0}
	/^###_FSTAB_CHR_END_###/	{p=1}
	p' $FSTAB >$FSTAB.chr.tmp

if [ $? -eq 0 ]; then
	if [ -f $FSTAB.chr.tmp ]; then
		mv -f $FSTAB $FSTAB.old
		mv $FSTAB.chr.tmp $FSTAB
		fstdiff=`diff $FSTAB.old $FSTAB`
		if [ -n "$fstdiff" ]; then
			echo "$FSTAB updated, please check:"
			echo "---8<--- diff start ---8<---"
			#diff $FSTAB.old $FSTAB
			echo "$fstdiff"
			echo "---8<---- diff end ----8<---"
		else
			echo "No change in $FSTAB"
		fi
	fi
fi

rm $TMPFILE

exit 0
