#!/sbin/runscript
# Copyright 1999-2003 Gentoo Technologies, Inc.
# Distributed under the terms of the GNU General Public License v2
# $Header: /home/cvsroot/gentoo-src/rc-scripts/init.d/checkroot,v 1.36 2003/10/14 00:02:21 azarah Exp $


depend() {
	before *
}

start() {
	local retval=0
	
	if [ ! -f /fastboot -a -z "${CDBOOT}" ]
	then
		ebegin "Remounting root filesystem read-only (if necessary)"
		mount / -n -o remount,ro &>/dev/null
		eend $?

		ebegin "Checking root filesystem"
		if [ -f /forcefsck ]
		then
			ewarn "A full fsck has been forced"
			fsck -C -a -f /
			# /forcefsck isn't deleted because checkfs needs it.
			# it'll be deleted in that script.
			retval=$?
		else
			fsck -C -T -a /
			retval=$?
		fi
		if [ "${retval}" -eq 0 ]
		then
			eend 0
		elif [ "${retval}" -eq 1 ]
		then
			ewend 1 "Filesystem repaired"
		elif [ "${retval}" -eq 2 -o "${retval}" -eq 3 ]
		then
			ewend 1 "Filesystem repaired, but reboot needed!"
			echo -ne "\a"; sleep 1; echo -ne "\a"; sleep 1
			echo -ne "\a"; sleep 1; echo -ne "\a"; sleep 1
			ewarn "Rebooting in 10 seconds ..."
			sleep 10
			einfo "Rebooting"
			/sbin/reboot -f
		else
			eend 2 "Filesystem couldn't be fixed :("
			/sbin/sulogin ${CONSOLE}
			einfo "Unmounting filesystems"
			/bin/mount -a -o remount,ro &>/dev/null
			einfo "Rebooting"
			/sbin/reboot -f
		fi
	fi

	# Should we mount root rw ?
	if mount -vf -o remount / 2> /dev/null | \
			awk '{ if ($6 ~ /rw/) exit 0; else exit 1; }'
	then
		ebegin "Remounting root filesystem read/write"
		mount / -n -o remount,rw &>/dev/null
		if [ "$?" -ne 0 ]
		then
			eend 2 "Root filesystem could not be mounted read/write :("
			/sbin/sulogin ${CONSOLE}
		else
			eend 0
		fi
	fi

	if [ "${BOOT}" = "yes" ]
	then
		#
		# Create /etc/mtab
		#

		> /etc/mtab
		# Add the entry for / to mtab
		mount -f /
		# Make sure we do not have these in there
		egrep -v '^(rootfs|/dev/root)' /proc/mounts >> /etc/mtab

		# Remove stale backups
		rm -f /etc/mtab~ /etc/mtab~~
	fi
}


# vim:ts=4
