[BACK]Return to rc CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / etc

File: [cvs.NetBSD.org] / src / etc / rc (download)

Revision 1.96, Tue Nov 11 02:28:58 1997 UTC (26 years, 5 months ago) by jonathan
Branch: MAIN
Changes since 1.95: +11 -2 lines

Add options to rc.conf and rc to start xfs (x font server) and xdm.
Add entries to rc.conf.5.
While we're here, note that the domestic kerberos damons are still
Kerberos IV, not kerberos version 5.

#	$NetBSD: rc,v 1.96 1997/11/11 02:28:58 jonathan Exp $
#	originally from: @(#)rc	8.2 (Berkeley) 3/17/94

# System startup script run by init on autoboot
# or after single-user.
# Output and error are redirected to console by init,
# and the console is the controlling terminal.

stty status '^T'

# Set shell to ignore SIGINT (2), but not children;
# shell catches SIGQUIT (3) and returns to single user after fsck.
trap : 2
trap : 3	# shouldn't be needed

export HOME=/
export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin

# Configure ccd devices.
if [ -f /etc/ccd.conf ]; then
	ccdconfig -C
fi

# Add all block-type swap devices; these might be necessary
# during disk checks.
swapctl -A -t blk

if [ -e /fastboot ]; then
	echo "Fast boot: skipping disk checks."
elif [ "$1" = autoboot ]; then
	echo "Automatic boot in progress: starting file system checks."
	fsck -p
	case $? in
	0)
		;;
	2)
		exit 1
		;;
	4)
		echo "Rebooting..."
		reboot
		echo "Reboot failed; help!"
		exit 1
		;;
	8)
		echo "Automatic file system check failed; help!"
		exit 1
		;;
	12)
		echo "Boot interrupted."
		exit 1
		;;
	130)
		# interrupt before catcher installed
		exit 1
		;;
	*)
		echo "Unknown error; help!"
		exit 1
		;;
	esac
fi

trap "echo 'Boot interrupted.'; exit 1" 3

umount -a >/dev/null 2>&1
mount /
rm -f /fastboot		# XXX (root now writeable)

if [ -f /etc/rc.subr ]; then
	. /etc/rc.subr
else
	echo "Can't read /etc/rc.subr; aborting."
	exit 1;
fi

if [ -f /etc/rc.conf ]; then
	. /etc/rc.conf
fi

if [ "$rc_configured" != YES ]; then
	echo "/etc/rc.conf is not configured. Multiuser boot aborted."
	exit 1
fi

# set flags on ttys.  (do early, in case they use tty for SLIP in netstart)
echo 'setting tty flags'
ttyflags -a

# load kernel modules specified in /etc/lkm.conf if the /usr filesystem
# is already present with "/" or can be mounted now
if checkyesno lkm && [ -f /etc/rc.lkm ]; then
	mount /usr >/dev/null 2>&1
	if [ -x /usr/bin/ld ]; then
		lkmstage=BEFORENET
		. /etc/rc.lkm
	fi
fi

# set hostname, turn on network
echo 'starting network'
sh /etc/netstart
if [ $? -ne 0 ]; then
	exit 1
fi

for fs in /usr /var $critical_filesystems; do
	mount | (
        		ismounted=no
        		while read what _on on _type type; do
               		 if [ $on = $fs ]; then
                        			ismounted=yes
               		 fi
        		done
       		if [ $ismounted = no ]; then
			mount $fs >/dev/null 2>&1
		fi
	)
done

# "Critical" file systems are now mounted.  Go ahead and swap
# to files now, since they will be residing in the critical file
# systems (or, at least, better).
swapctl -A -t noblk

# clean up left-over files
rm -f /etc/nologin
rm -f /var/spool/lock/LCK.*
rm -f /var/spool/uucp/STST/*
(cd /var/run && { rm -rf -- *; install -c -m 664 -g utmp /dev/null utmp; })

# start the system logger first, so that all messages from daemons
# are logged, then start savecore to get a dump on low memory systems
# and then start the name server.

if checkyesno syslogd; then
	echo 'starting system logger'
	rm -f /dev/log
	syslogd $syslogd_flags
fi

# Enable ipmon (only useful if ipfilter is running)
# NOTE: requires the IPFILTER_LOG kernel option.
if checkyesno ipmon; then
	echo 'starting ipmon'
	ipmon $ipmon_flags &
fi

# /var/crash should be a directory or a symbolic link
# to the crash directory if core dumps are to be saved.
if checkyesno savecore; then
	if [ -d /var/crash ]; then
		echo checking for core dump...
		savecore $savecore_flags /var/crash
	else
		logger -s "WARNING: no /var/crash directory; savecore not run."
	fi
fi

if checkyesno named; then
	echo 'starting name server';	named $named_flags
fi

# set time, if requested
if checkyesno ntpdate; then
	if [ -z "$ntpdate_hosts" ]; then
		ntpdate_hosts=`awk '/^server/ {print $2}' </etc/ntp.conf`
	fi
	if [ -n "$ntpdate_hosts"  ]; then
		echo 'Setting date via ntp.'
		ntpdate -b $ntpdate_hosts
	fi
fi

# now start the rpc servers, for YP server/client.
echo -n 'starting rpc daemons:'

# note that portmap is generally required for all other rpc services.
if checkyesno portmap; then
	echo -n ' portmap';             portmap
fi

if checkyesno ypserv; then
        echo -n ' ypserv';              ypserv $ypserv_flags
fi

if checkyesno ypbind; then
        echo -n ' ypbind';              ypbind $ypbind_flags
fi

if checkyesno yppasswdd; then
        echo -n ' rpc.yppasswdd';       rpc.yppasswdd $yppasswdd_flags
fi

if checkyesno bootparamd; then
	if [ -r /etc/bootparams ]; then
		echo -n ' rpc.bootparamd'; rpc.bootparamd $bootparamd_flags
	else
		echo
		logger -s "WARNING: /etc/bootparams not found. " \
		    "bootparamd not started."
	fi
fi

echo '.'

# load kernel modules specified in /etc/lkm.conf
if checkyesno lkm; then
	if [ -r /etc/rc.lkm ]; then
		lkmstage=BEFOREMOUNT
		. /etc/rc.lkm
	else
		logger -s "WARNING: /etc/rc.lkm not found; LKMs not loaded."
	fi
fi

mount -a

# now start the rpc servers, for NFS server/client.
echo -n 'starting nfs daemons:'

nfs_locking=NO

if checkyesno nfs_server; then
	if [ -r /etc/exports ]; then
		rm -f /var/db/mountdtab
		echo -n > /var/db/mountdtab
		echo -n ' mountd';              mountd $mountd_flags
		echo -n ' nfsd';                nfsd $nfsd_flags
		nfs_locking=MAYBE
	else
		echo
		logger -s "WARNING: /etc/exports not readable; " \
		    "NFS server not started."
	fi
fi

if checkyesno nfs_client; then
        echo -n ' nfsiod';              nfsiod $nfsiod_flags
	nfs_locking=MAYBE
fi

if [ "$nfs_locking" != NO ]; then
	if checkyesno statd; then
		echo -n ' rpc.statd';		rpc.statd $statd_flags
	fi
	if checkyesno lockd; then
		echo -n ' rpc.lockd';		rpc.lockd $lockd_flags
	fi
fi

if checkyesno amd; then
	if [ -d "$amd_dir" ]; then
		if [ -r "$amd_master" ]; then
			echo -n ' amd'
			amd $amd_flags -p -a $amd_dir `cat $amd_master` \
			    > /var/run/amd.pid
		else
			echo
			logger -s "WARNING: \$amd_master ($amd_master)not " \
			    "readable; amd not started."
		fi
	else
		echo
		logger -s "WARNING: \$amd_dir ($amd_dir) not a directory; " \
		    "amd not started."
	fi
fi

echo '.'

if [ -f /sbin/ldconfig ]; then
	echo 'creating runtime link editor directory cache.'
	ldconfig
fi 

# load kernel modules specified in /etc/lkm.conf
if checkyesno lkm && [ -f /etc/rc.lkm ]; then
	lkmstage=AFTERMOUNT
	. /etc/rc.lkm
fi

echo -n 'checking quotas:'; quotacheck -a; echo ' done.'
quotaon -a

# build ps databases
echo 'building databases...'
kvm_mkdb /netbsd
dev_mkdb

chmod 666 /dev/tty[pqrs]*

# check the password temp/lock file
if [ -f /etc/ptmp ]
then
	logger -s -p auth.err \
	'password file may be incorrect -- /etc/ptmp exists'
fi

virecovery=`echo /var/tmp/vi.recover/recover.*`
if [ "$virecovery" != "/var/tmp/vi.recover/recover.*" ]; then
	echo preserving editor files
	for i in $virecovery; do
		sendmail -t < $i
	done
fi

echo clearing /tmp

# Prune quickly with one rm, then use find to clean up /tmp/[lq]* (this
# is not needed with mfs /tmp, but doesn't hurt anything).
(cd /tmp && rm -rf [a-km-pr-zA-Z]* &&
    find . ! -name . ! -name lost+found ! -name quota.user \
	! -name quota.group -exec rm -rf -- {} \; -type d -prune)

# Update kernel info in /etc/motd
# Must be done *before* interactive logins are possible to prevent
# possible race conditions.
if checkyesno update_motd; then
	echo 'updating motd.'
	if [ ! -f /etc/motd ]; then
		install -c -o root -g wheel -m 664 /dev/null /etc/motd
	fi
	T=/tmp/_motd
	rm -f $T
	sysctl -n kern.version | sed 1q > $T
	echo "" >> $T
	sed '1,/^$/d' < /etc/motd >> $T
	cmp -s $T /etc/motd || cp $T /etc/motd
	rm -f $T
fi

if [ -f /var/account/acct ]; then
	echo 'turning on accounting';	accton /var/account/acct
fi

echo -n standard daemons:
if checkyesno update; then
	echo -n ' update';		update $update_flags
fi
echo -n ' cron';		cron
echo '.'

# now start all the other daemons
echo -n starting network daemons:

if checkyesno gated && checkyesno routed; then
	echo
	logger -s "WARNING: gated and routed both requested to be run: " \
	    "running only gated."
	routed=NO
fi

if checkyesno gated; then
	if [ -r /etc/gated.conf ]; then
		echo -n ' gated';		gated $gated_flags
	else
		logger -s "WARNING: no /etc/gated.conf; gated not started."
	fi
fi

if checkyesno routed; then
	echo -n ' routed';		routed $routed_flags
fi

if checkyesno mrouted; then
	echo -n ' mrouted';		mrouted $mrouted_flags
fi

if checkyesno timed; then
	echo -n ' timed'; 		timed $timed_flags
fi

if checkyesno xntpd; then
	echo -n ' xntpd';		xntpd $xntpd_flags
fi

if checkyesno dhcpd; then
	if [ -r /etc/dhcpd.conf ]; then
		echo -n ' dhcpd';		dhcpd $dhcpd_flags
	else
		echo
		logger -s "WARNING: /etc/dhcpd.conf not readable; " \
		    "dhcpd not started."
	fi
fi

if checkyesno rwhod; then
	echo -n ' rwhod';		rwhod
fi

if checkyesno lpd; then
	echo -n ' lpd';			lpd $lpd_flags
fi

# We call sendmail with a full path so that SIGHUP works.
if checkyesno sendmail; then
	if [ -r /etc/sendmail.cf ]; then
		echo -n ' sendmail';	/usr/sbin/sendmail $sendmail_flags
	else
		echo
		logger -s "WARNING: /etc/sendmail.cf not readable; " \
		    "sendmail not started."
	fi
fi

# Start xfs before boot daemons, so its ready before client xterminals.
if checkyesno xfs; then
	echo -n ' xfs';			xfs $xfs_flags &
fi

if checkyesno rarpd; then
	if [ -r /etc/ethers ]; then
		echo -n ' rarpd';	rarpd $rarpd_flags
	else
		echo
		logger -s "WARNING: /etc/ethers not readable; " \
		    "rarpd not started."
	fi
fi

if checkyesno rbootd; then
	if [ -r /etc/rbootd.conf ]; then
		echo -n ' rbootd';	rbootd $rbootd_flags
	else
		echo
		logger -s "WARNING: /etc/rbootd.conf not readable; " \
		    "rarpd not started."
	fi
fi

if checkyesno mopd; then
	echo -n ' mopd';		mopd $mopd_flags
fi

if checkyesno apmd; then
	echo -n ' apmd';		apmd $apmd_flags
fi

if checkyesno inetd; then
	if [ -r /etc/inetd.conf ]; then
		echo -n ' inetd';	inetd $inetd_flags
	else
		echo
		logger -s "WARNING: /etc/inetd.conf not readable; " \
		    "inetd not started."
	fi
fi

if checkyesno xdm; then
	echo -n ' xdm';			xdm $xdm_flags
fi

echo '.'

# Kerberos runs ONLY on the Kerberos server machine
if checkyesno kerberos; then
	echo -n 'starting kerberos daemons:'
	echo -n ' kerberos';	kerberos >> /var/log/kerberos.log &
	echo -n ' kadmind';	kadmind -n >> /var/log/kadmind.log &
	echo '.'
fi

. /etc/rc.local

date
exit 0