#!/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 "# <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
