#! /sbin/sh
#Tag 0x00000f00

# (u)mount the /usr filesystem (if necessary)
# "$Revision: 1.16 $"

cd /

MESSAGE='\07/usr failed to mount; may be unable to reach multiuser state'

case $1 in
'start')
	#
	# Mount only the /usr filesystem, and only if neccesary.
	#
	# This is done so that unbundled products must have initialization
	# code run between mounting /usr (where their binaries probably live)
	# and mounting the rest of the filesystems.
	#
	# On Indy (single partition) systems (and possibly others) /usr does
	# not normally exist, so we must be able to just exit.  The below
	# test looks for "@/usr@" or "@/usr/@" in /etc/fstab where @ is
	# white space defined by a space or tab.  Lines beginning with a #
	# are excluded as well as comments.
	#
	if test -z "`grep -v '^\#' /etc/fstab | sed 's/#.*//' | grep '[ 	]/usr[/]*[ 	]' `"; then
		exit 0
	fi

	#
	# If we don't have any products that require initialization code
	# to be run between mounting /usr and mounting the rest of the
	# filesystems, then we shouldn't mount /usr now.  The serialization
	# will slow booting.
	#
	# We test for this by looking for anything in the boot sequence
	# between mounting /usr (executing "/etc/rc2.d/S02usr") and mounting
	# the other filesystems (executing "/etc/rc2.d/S12filesystems").
	#
	if test -n "`/sbin/ls /etc/rc2.d | sed '/S04usr/,/S12filesystems/!d' | \
			  sed -e '/S04usr/d' -e '/S12filesystems/d'`"; then
		# if /usr is already listed in mtab then it's already mounted
		# no reason to try mounting again
		if grep '^[^ ]* /usr ' /etc/mtab > /dev/null 2>&1
		then
			exit 0
		fi

		if /sbin/chkconfig verbose
		then
			echo "Mounting /usr:"
		fi

		#
		# Check and mount /usr.
		#
		if /sbin/suattr -C CAP_MOUNT_MGT+ip -c "/sbin/mount -c /usr" > /etc/fscklogs/rusr 2>&1
		then
			cat /etc/fscklogs/rusr
		else
			cat /etc/fscklogs/rusr
			echo $MESSAGE
			sleep 5
		fi
	fi
	;;

'stop')
	#
	# Unmount /usr.
	#
	# We use "-k" here because we know that this operation is late in
	# the game and we don't want to fail because of running processes.
	#
	;;

*)
	echo "usage: /etc/init.d/usr {start|stop}"
	;;
esac
