summaryrefslogtreecommitdiff
blob: ad7637f022f57da94b69ad870f664360df003e9e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/sbin/runscript
# Copyright 1999-2005 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 ]
	#

	if [[ -d /var/lib/net-scripts/state ]] ; then
		ebegin "Cleaning /var/lib/net-scripts/state"
		rm -rf /var/lib/net-scripts/state/*
		eend 0
	fi

	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
			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