#!/sbin/runscript
# Copyright 1999-2007 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2

depend() {
	use clock hostname
	need localmount
	before logger
}

start() {
	[[ ${BOOT} != "yes" ]] && return 0

	#
	# Put a nologin file in /etc to prevent people from logging in before
	# system startup is complete.
	#
	if [[ ${DELAYLOGIN} == "yes" ]] ; then
		echo "System bootup in progress - please wait" > /etc/nologin
		cp /etc/nologin /etc/nologin.boot &> /dev/null
	fi

	if [[ -e /etc/sysctl.conf ]] ; then
		ebegin "Configuring kernel parameters"
		/sbin/sysctl -q -p /etc/sysctl.conf
		eend 0
	fi

	if [[ -z ${CDBOOT} ]] && ! touch /var/run/.keep 2> /dev/null ; then
		ewarn "Skipping /var and /tmp initialization (ro root?)"
		return 0
	fi

	if [[ -x /sbin/env-update.sh ]] ; then
		ebegin "Updating environment"
		/sbin/env-update.sh -u > /dev/null
		eend 0
	fi

	#
	# Take care of random stuff [ /var/lock | /var/run | pam ]
	#

	ebegin "Cleaning /var/lock, /var/run"
	rm -rf /var/run/console.lock /var/run/console/*

	if [[ -z ${CDBOOT} ]] ; then
		#
		# Clean up any stale locks.
		#
		find /var/lock -type f -print0 | xargs -0 rm -f --
		#
		# Clean up /var/run and create /var/run/utmp so that we can login.
		#
		for x in $(find /var/run/ ! -type d ! -name utmp ! -name innd.pid ! -name random-seed) ; do
			local daemon=${x##*/}
			daemon=${daemon%*.pid}
			# Do not remove pidfiles of already running daemons
			if [[ -z $(ps --no-heading -C "${daemon}") ]] ; then
				if [[ -f ${x} || -L ${x} ]] ; then
					rm -f "${x}"
				fi
			fi
		done
	fi

	# Reset pam_console permissions if we are actually using it
	if [[ -x /sbin/pam_console_apply && ! -c /dev/.devfsd && \
	      -n $(grep -v -e '^[[:space:]]*#' /etc/pam.d/* | grep 'pam_console') ]] ; then
		/sbin/pam_console_apply -r
	fi

	# Create the .keep to stop portage from removing /var/lock
	> /var/lock/.keep
	eend 0

	#
	# Clean up /tmp directory
	#
	if [[ -z ${CDBOOT} ]] && [[ -d /tmp ]] ; then
		cd /tmp
		if [[ ${WIPE_TMP} == "yes" ]] ; then
			ebegin "Wiping /tmp directory"
			# This eval stuff sucks, so if someone has a better *working*
			# solution, please file a bug at http://bugs.gentoo.org/
			# Originally ripped from Debian init scripts
			local exceptions="
				'!' -name . -a
				'!' '(' -uid 0 -a
					'('
						-path './lost+found/*' -o
						-path './quota.user/*' -o
						-path './aquota.user/*' -o
						-path './quota.group/*' -o
						-path './aquota.group/*' -o
						-path './.journal/*'
					')'
				')'"
			# First kill most files, then kill empty dirs
			eval find . -xdev -depth ${exceptions} ! -type d -print0 | xargs -0 rm -f --
			eval find . -xdev -depth ${exceptions}   -type d -empty -exec rmdir '{}' \\';'
			eend 0
		else
			ebegin "Cleaning /tmp directory"
			(
				rm -f /tmp/.X*-lock /tmp/esrv* /tmp/kio* /tmp/jpsock.* /tmp/.fam*
				rm -rf /tmp/.esd* /tmp/orbit-* /tmp/ssh-* /tmp/ksocket-* /tmp/.*-unix
			) &> /dev/null
			eend 0
		fi

		(
			# Make sure our X11 stuff have the correct permissions
			# Omit the chown as bootmisc is run before network is up
			# and users may be using lame LDAP auth #139411
			rm -rf /tmp/.{ICE,X11}-unix
			mkdir -p /tmp/.{ICE,X11}-unix
			#chown 0:0 /tmp/.{ICE,X11}-unix
			chmod 1777 /tmp/.{ICE,X11}-unix
			[[ -x /sbin/restorecon ]] && restorecon /tmp/.{ICE,X11}-unix
		) &> /dev/null
	fi

	#
	# Create an 'after-boot' dmesg log
	#
	touch /var/log/dmesg
	chmod 640 /var/log/dmesg
	dmesg > /var/log/dmesg

	#
	# Check for /etc/resolv.conf, and create if missing
	#
	[[ -f /etc/resolv.conf ]] || touch /etc/resolv.conf &> /dev/null
}

# vim:ts=4
