rc revision 19226
1151937Sjkim#!/bin/sh
2151937Sjkim#	$Id: rc,v 1.102 1996/10/21 20:09:30 wpaul Exp $
3151937Sjkim#	From: @(#)rc	5.27 (Berkeley) 6/5/91
4151937Sjkim
5151937Sjkim# System startup script run by init on autoboot
6151937Sjkim# or after single-user.
7316303Sjkim# Output and error are redirected to console by init,
8316303Sjkim# and the console is the controlling terminal.
9316303Sjkim
10316303Sjkim# Note that almost all the user-configurable behavior is no longer in
11316303Sjkim# this file, but rather in /etc/sysconfig.  Please check this file
12151937Sjkim# first before contemplating any changes here.
13151937Sjkim
14316303Sjkimstty status '^T'
15316303Sjkim
16316303Sjkim# Set shell to ignore SIGINT (2), but not children;
17316303Sjkim# shell catches SIGQUIT (3) and returns to single user after fsck.
18316303Sjkimtrap : 2
19316303Sjkimtrap : 3	# shouldn't be needed
20316303Sjkim
21316303SjkimHOME=/; export HOME
22316303SjkimPATH=/sbin:/bin:/usr/sbin:/usr/bin
23316303Sjkimexport PATH
24316303Sjkim
25316303Sjkim# Configure ccd devices.
26316303Sjkimif [ -f /etc/ccd.conf ]
27316303Sjkimthen
28316303Sjkim	ccdconfig -C
29316303Sjkimfi
30316303Sjkim
31316303Sjkimswapon -a
32316303Sjkim
33316303Sjkimif [ $1x = autobootx ]
34316303Sjkimthen
35316303Sjkim	echo Automatic reboot in progress...
36316303Sjkim	fsck -p
37316303Sjkim	case $? in
38316303Sjkim	0)
39316303Sjkim		;;
40316303Sjkim	2)
41316303Sjkim		exit 1
42316303Sjkim		;;
43316303Sjkim	4)
44316303Sjkim		reboot
45316303Sjkim		echo "reboot failed... help!"
46316303Sjkim		exit 1
47316303Sjkim		;;
48316303Sjkim	8)
49316303Sjkim		echo "Automatic file system check failed... help!"
50316303Sjkim		exit 1
51316303Sjkim		;;
52316303Sjkim	12)
53316303Sjkim		echo "Reboot interrupted"
54316303Sjkim		exit 1
55316303Sjkim		;;
56316303Sjkim	130)
57316303Sjkim		# interrupt before catcher installed
58316303Sjkim		exit 1
59316303Sjkim		;;
60316303Sjkim	*)
61316303Sjkim		echo "Unknown error in reboot"
62316303Sjkim		exit 1
63316303Sjkim		;;
64316303Sjkim	esac
65316303Sjkimelse
66316303Sjkim	echo Skipping disk checks ...
67316303Sjkimfi
68316303Sjkim
69316303Sjkimtrap "echo 'Reboot interrupted'; exit 1" 3
70316303Sjkim
71316303Sjkim# root must be read/write both for NFS diskless and for VFS LKMs before
72316303Sjkim# proceeding any further.
73316303Sjkimmount -u -o rw /
74316303Sjkimif [ $? != 0 ]; then
75316303Sjkim	echo "Filesystem mount failed, startup aborted"
76316303Sjkim	exit 1
77316303Sjkimfi
78316303Sjkim
79316303Sjkimumount -a >/dev/null 2>&1
80316303Sjkim
81316303Sjkimmount -a -t nonfs
82316303Sjkimif [ $? != 0 ]; then
83316303Sjkim	echo "Filesystem mount failed, startup aborted"
84316303Sjkim	exit 1
85316303Sjkimfi
86316303Sjkim
87316303Sjkimadjkerntz -i
88316303Sjkim
89316303Sjkim# If there is a global system configuration file, suck it in.
90316303Sjkimif [ -f /etc/sysconfig ]; then
91316303Sjkim	. /etc/sysconfig
92316303Sjkimfi
93316303Sjkim
94316303Sjkim# Add additional swapfile, if configured.
95316303Sjkimif [ "x$swapfile" != "xNO" -a -w "$swapfile" -a -f /dev/vn0b ]; then
96316303Sjkim	echo "Adding $swapfile as additional swap."
97316303Sjkim	/usr/sbin/vnconfig /dev/vn0b $swapfile && swapon /dev/vn0b
98316303Sjkimfi
99316303Sjkim
100316303Sjkim# configure serial devices
101316303Sjkimif [ -f /etc/rc.serial ]; then
102316303Sjkim	. /etc/rc.serial
103316303Sjkimfi
104316303Sjkim
105316303Sjkim# start up PC-card configuration
106316303Sjkimif [ -f /etc/rc.pccard ]; then
107316303Sjkim	. /etc/rc.pccard
108316303Sjkimfi
109316303Sjkim
110316303Sjkim# start up the network
111316303Sjkimif [ -f /etc/netstart ]; then
112316303Sjkim	sh /etc/netstart
113316303Sjkimfi
114316303Sjkim
115316303Sjkimmount -a -t nfs >/dev/null 2>&1
116316303Sjkim
117316303Sjkim# Whack the pty perms back into shape.
118316303Sjkimchmod 666 /dev/tty[pqrs]*
119217365Sjkim
120217365Sjkim# clean up left-over files
121217365Sjkimrm -f /etc/nologin
122217365Sjkimrm -f /var/spool/lock/*
123217365Sjkimrm -rf /var/spool/uucp/.Temp/*
124217365Sjkim(cd /var/run && { cp /dev/null utmp; chmod 644 utmp; })
125217365Sjkim
126217365Sjkim#
127217365Sjkim# Clearing /tmp at boot-time is essentially stupid, but seems to have
128217365Sjkim# a long tradition.  It doesn't help in any way for long-living systems,
129217365Sjkim# and it might accidentally clobber files you would rather like to have
130217365Sjkim# preserved after a crash (if not using mfs /tmp anyway).
131217365Sjkim#
132217365Sjkim# See also the commented out example of another cleanup policy in
133151937Sjkim# /etc/daily.
134316303Sjkim#
135316303Sjkimecho clearing /tmp
136316303Sjkim
137316303Sjkim# prune quickly with one rm, then use find to clean up /tmp/[lq]*
138316303Sjkim# (not needed with mfs /tmp, but doesn't hurt there...)
139316303Sjkim(cd /tmp && rm -rf [a-km-pr-zA-Z]* &&
140316303Sjkim    find -d . ! -name . ! -name lost+found ! -name quotas -exec rm -rf -- {} \;)
141316303Sjkim
142316303Sjkim# The above is even more stupid since it prevents you from restarting
143316303Sjkim# X11 after a system crash.  If you disable the above, make sure to
144316303Sjkim# uncomment the line below.
145316303Sjkim#
146316303Sjkim# clean up leftover X lock files and local connection sockets
147217365Sjkim#rm -f /tmp/.X*-lock /tmp/.X11-unix/*
148217365Sjkim
149151937Sjkim
150316303Sjkim# enable dumpdev so that savecore can see it
151151937Sjkimif [ "X${dumpdev}" != X"NO" ]; then
152151937Sjkim	dumpon ${dumpdev}
153151937Sjkimfi
154151937Sjkim
155151937Sjkim# /var/crash should be a directory or a symbolic link
156151937Sjkim# to the crash directory if core dumps are to be saved.
157151937Sjkimif [ "X${savecore}" = X"YES" -a -d /var/crash ]; then
158151937Sjkim	echo -n checking for core dump...
159151937Sjkim	savecore /var/crash
160151937Sjkimfi
161151937Sjkim
162151937Sjkim# snapshot any kernel -c changes back to disk
163151937Sjkimecho 'recording kernel -c changes'
164151937Sjkim/sbin/dset -q
165241973Sjkim
166151937Sjkim# start system logging and name service (named needs to start before syslogd
167151937Sjkim# if you don't have a /etc/resolv.conf)
168151937Sjkim#
169151937Sjkimecho -n starting system daemons:
170151937Sjkim
171151937Sjkim# Transitional symlink (for the next couple of years :) until all
172151937Sjkim# binaries had a chance to move towards /var/run/log.
173151937Sjkimif [ ! -h /dev/log ] ; then
174151937Sjkim	# might complain for r/o root f/s
175241973Sjkim	ln -sf /var/run/log /dev/log
176151937Sjkimfi
177151937Sjkimrm -f /var/run/log
178151937Sjkimecho ' syslogd.';			syslogd
179151937Sjkim
180151937Sjkimecho -n starting early network daemons:
181151937Sjkim
182151937Sjkim# $namedflags is imported from /etc/sysconfig
183151937Sjkimif [ "X${namedflags}" != X"NO" ]; then
184151937Sjkim	echo -n ' named';		named $namedflags
185151937Sjkimfi
186151937Sjkim
187151937Sjkim# $ntpdate and $xntpdflags are imported from /etc/sysconfig.
188151937Sjkim# If $ntpdate != NO, run ntpdate $ntpdate to set the date correctly.
189151937Sjkim# If $xntpdflags != NO, start xntpd.
190151937Sjkimif [ "X${ntpdate}" != X"NO" -o "X${xntpdflags}" != X"NO" ]; then
191151937Sjkim	if [ "X${tickadjflags}" != X"NO" ]; then
192151937Sjkim		echo -n ' tickadj';	tickadj ${tickadjflags--Aq}
193151937Sjkim	fi
194151937Sjkim
195151937Sjkim	if [ "X${ntpdate}" != X"NO" ]; then
196151937Sjkim		echo -n ' ntpdate';	ntpdate ${ntpdate} >/dev/null 2>&1
197151937Sjkim	fi
198151937Sjkim
199151937Sjkim	if [ "X${xntpdflags}" != X"NO" ]; then
200151937Sjkim		echo -n ' xntpd';	xntpd ${xntpdflags}
201151937Sjkim	fi
202316303Sjkimfi
203151937Sjkim
204151937Sjkim# $timedflags is imported from /etc/sysconfig;
205316303Sjkim# if $timedflags == NO, timed isn't run.
206228110Sjkimif [ "X${timedflags}" != X"NO" ]; then
207151937Sjkim	echo -n ' timed'; timed $timedflags
208167802Sjkimfi
209151937Sjkim
210151937Sjkim# Portmapper should always be run, to provide RPC services for inetd.
211151937Sjkimif [ -x /usr/sbin/portmap ]; then
212151937Sjkim	echo -n ' portmap';		portmap
213151937Sjkimfi
214151937Sjkim
215151937Sjkim# Start ypserv if we're an NIS server.
216151937Sjkim# Run rpc.ypxfrd and rpc.yppasswdd only on the NIS master server.
217151937Sjkimif [ "X${nis_serverflags}" != X"NO" ]; then
218316303Sjkim	echo -n ' ypserv'; ypserv ${nis_serverflags}
219151937Sjkim
220151937Sjkim	if [ "X${ypxfrdflags}" != X"NO" ]; then
221151937Sjkim		echo -n ' rpc.ypxfrd'; rpc.ypxfrd ${ypxfrdflags}
222151937Sjkim	fi
223151937Sjkim
224281396Sjkim	if [ "X${yppasswddflags}" != X"NO" ]; then
225151937Sjkim		echo -n ' rpc.yppasswdd'; rpc.yppasswdd ${yppasswddflags}
226151937Sjkim	fi
227151937Sjkimfi
228151937Sjkim
229151937Sjkim# Start ypbind if we're an NIS client
230151937Sjkimif [ "X${nis_clientflags}" != X"NO" ]; then
231151937Sjkim	echo -n ' ypbind'; ypbind ${nis_clientflags}
232151937Sjkim	if [ "X${nis_ypsetflags}" != X"NO" ]; then
233151937Sjkim		echo -n ' ypset'; ypset ${nis_ypsetflags}
234151937Sjkim	fi
235151937Sjkimfi
236151937Sjkim
237151937Sjkimecho '.'
238151937Sjkim
239151937Sjkim# Check the quotas (must be after ypbind if using NIS)
240151937Sjkimif [ "X${check_quotas}" = X"YES" ]; then
241151937Sjkim	echo -n 'checking quotas:'
242151937Sjkim	quotacheck -a
243151937Sjkim	echo ' done.'
244151937Sjkim	quotaon -a
245151937Sjkimfi
246151937Sjkim
247151937Sjkimecho -n starting other network daemons:
248151937Sjkim
249151937Sjkimif [ "X${nfs_server}" = X"YES" -a -r /etc/exports ]; then
250151937Sjkim	echo -n ' mountd'
251151937Sjkim	if [ "X${weak_mountd_authentication}" = X"YES" ]; then
252151937Sjkim		mountd -n
253151937Sjkim	else
254151937Sjkim		mountd
255151937Sjkim	fi
256151937Sjkim	echo -n ' nfsd';		nfsd -u -t 4
257151937Sjkimfi
258151937Sjkim
259151937Sjkimif [ "X${nfs_client}" = X"YES" ]; then
260151937Sjkim	echo -n ' nfsiod';		nfsiod -n 4
261151937Sjkimfi
262151937Sjkim
263151937Sjkimif [ "X${amdflags}" != X"NO" ]; then
264151937Sjkim	echo -n ' amd'
265316303Sjkim	amd -p ${amdflags} > /var/run/amd.pid
266151937Sjkimfi
267151937Sjkim
268151937Sjkim# $rwhod is imported from /etc/sysconfig;
269151937Sjkim# if $rwhod is set to YES, rwhod is run.
270151937Sjkimif [ "X${rwhod}" = X"YES" ]; then
271151937Sjkim	echo -n ' rwhod';	rwhod
272316303Sjkimfi
273151937Sjkim
274151937Sjkim# Kerberos runs ONLY on the Kerberos server machine
275151937Sjkimif [ "X${kerberos_server}" = X"YES" ]; then
276151937Sjkim	echo -n ' kerberos';	kerberos >> /var/log/kerberos.log &
277151937Sjkim	echo -n ' kadmind'; \
278151937Sjkim		(sleep 20; kadmind -n >/dev/null 2>&1 &) &
279151937Sjkimfi
280228110Sjkim
281151937Sjkim# IP multicast routing daemon
282151937Sjkimif [ "X${mrouted}" != X"NO" -a -x /usr/sbin/mrouted ]; then
283151937Sjkim	echo -n ' mrouted'; mrouted ${mrouted}
284151937Sjkimfi
285151937Sjkim
286151937Sjkimecho '.'
287151937Sjkim
288151937Sjkim# build ps databases
289151937Sjkimkvm_mkdb 
290151937Sjkimdev_mkdb
291151937Sjkim
292151937Sjkim# check the password temp/lock file
293151937Sjkimif [ -f /etc/ptmp ]
294151937Sjkimthen
295151937Sjkim	logger -s -p auth.err \
296151937Sjkim	"password file may be incorrect -- /etc/ptmp exists"
297151937Sjkimfi
298151937Sjkim
299151937Sjkimif [ "X${accounting}" = X"YES" -a -d /var/account ]; then
300151937Sjkim	echo 'turning on accounting'
301151937Sjkim	if [ ! -e /var/account/acct ]; then
302151937Sjkim		touch /var/account/acct
303151937Sjkim	fi
304151937Sjkim	accton /var/account/acct
305151937Sjkimfi
306151937Sjkim
307151937Sjkim# Make shared lib searching a little faster.  Leave /usr/lib first if you
308241973Sjkim# add your own entries or you may come to grief.
309151937Sjkimif [ -x /sbin/ldconfig ]; then
310151937Sjkim	_LDC=/usr/lib
311151937Sjkim	if [ -d /usr/lib/compat ]; then _LDC="${_LDC} /usr/lib/compat" ; fi
312151937Sjkim	if [ -d /usr/X11R6/lib ]; then _LDC="${_LDC} /usr/X11R6/lib" ; fi
313151937Sjkim	if [ -d /usr/X386/lib ]; then _LDC="${_LDC} /usr/X386/lib" ; fi
314151937Sjkim	if [ -d /usr/local/lib ]; then _LDC="${_LDC} /usr/local/lib" ; fi
315151937Sjkim	echo 'setting ldconfig path:' ${_LDC}
316151937Sjkim	ldconfig ${_LDC}
317151937Sjkimfi
318151937Sjkim
319151937Sjkim# Now start up miscellaneous daemons that don't belong anywhere else
320151937Sjkim#
321151937Sjkimecho -n standard daemons:
322151937Sjkimecho -n ' inetd';		inetd
323151937Sjkimecho -n ' cron';		cron
324151937Sjkim
325298714Sjkimif [ "X${lpd}" != X"NO" -a -x /usr/sbin/lpd ]; then
326151937Sjkim	echo -n ' printer';		lpd
327151937Sjkimfi
328151937Sjkim
329151937Sjkim# $sendmail_flags is imported from /etc/sysconfig;
330151937Sjkim# if $sendmail_flags is something other than NO, sendmail is run.
331151937Sjkimif [ "X${sendmail_flags}" != X"NO" -a -r /etc/sendmail.cf ]; then
332151937Sjkim	echo -n ' sendmail';            /usr/sbin/sendmail ${sendmail_flags}
333151937Sjkimfi
334151937Sjkim
335151937Sjkimecho '.'
336151937Sjkim
337316303Sjkim# configure implementation specific stuff
338298714Sjkimarch=`uname -m`
339151937Sjkimif [ -f /etc/rc.${arch} ]; then
340151937Sjkim	. /etc/rc.${arch}
341228110Sjkimfi
342151937Sjkim
343151937Sjkim# Recover vi editor files.
344151937Sjkimvirecovery=`echo /var/tmp/vi.recover/recover.*`
345151937Sjkimif [ "$virecovery" != '/var/tmp/vi.recover/recover.*' ]; then
346151937Sjkim	echo 'Recovering vi editor sessions'
347151937Sjkim	for i in $virecovery; do
348151937Sjkim		sendmail -t < $i
349151937Sjkim	done
350151937Sjkimfi
351151937Sjkim
352193267Sjkim# for each valid dir in $local_startup, search for init scripts matching *.sh
353151937Sjkimif [ "X${local_startup}" != X"NO" ]; then
354151937Sjkim	echo -n 'Local package startup:'
355151937Sjkim	for dir in ${local_startup}; do
356151937Sjkim		[ -d ${dir} ] && for script in ${dir}/*.sh; do
357151937Sjkim			[ -x ${script} ] && ${script} start
358151937Sjkim		done
359281396Sjkim	done
360151937Sjkim	echo .
361151937Sjkimfi
362151937Sjkim
363151937Sjkim# Do traditional (but rather obsolete) rc.local file if it exists.
364316303Sjkim[ -f /etc/rc.local ] && sh /etc/rc.local
365151937Sjkim
366193267Sjkimdate
367151937Sjkimexit 0
368151937Sjkim