1b684a8edSBen Gras# /usr/etc/rc - continued system initialization. 2b684a8edSBen Gras 361a4e15bSJorrit HerderRANDOM_FILE=/usr/adm/random.dat 4e21c135fSBen GrasLOCAL_FILE=/usr/etc/rc.local 561a4e15bSJorrit Herder 6b684a8edSBen Grascase "$#:$1" in 7b684a8edSBen Gras1:start|1:stop|1:down) 8b684a8edSBen Gras action=$1 9b684a8edSBen Gras ;; 10b684a8edSBen Gras*) echo >&2 "Usage: $0 start|stop|down" 11b684a8edSBen Gras exit 1 12b684a8edSBen Grasesac 13b684a8edSBen Gras 14e21c135fSBen Grasif [ -f "$LOCAL_FILE" ] 15e21c135fSBen Grasthen . "$LOCAL_FILE" $1 16e21c135fSBen Grasfi 17e21c135fSBen Gras 1840e9875fSJorrit Herderdisabled() 1940e9875fSJorrit Herder{ 2040e9875fSJorrit Herder ifs="$IFS"; IFS=, 218cb902dcSJorrit Herder for skip in `sysenv disable` 2240e9875fSJorrit Herder do 238cb902dcSJorrit Herder if [ "$skip" = "$1" ] 2440e9875fSJorrit Herder then 2540e9875fSJorrit Herder IFS="$ifs"; unset ifs 2640e9875fSJorrit Herder return 0 2740e9875fSJorrit Herder fi 2840e9875fSJorrit Herder done 2940e9875fSJorrit Herder IFS="$ifs"; unset ifs 3040e9875fSJorrit Herder return 1 3140e9875fSJorrit Herder} 3240e9875fSJorrit Herder 33b684a8edSBen Grasdaemonize() 34b684a8edSBen Gras{ 35b684a8edSBen Gras # Function to start a daemon, if it exists. 36b684a8edSBen Gras local IFS=':' 37b684a8edSBen Gras local name="$1" 38b684a8edSBen Gras test "$1" = tcpd && name="$2" 39b684a8edSBen Gras 40b684a8edSBen Gras for dir in $PATH 41b684a8edSBen Gras do 42b684a8edSBen Gras if [ -f "$dir/$1" ] 43b684a8edSBen Gras then 4440e9875fSJorrit Herder 4540e9875fSJorrit Herder # check if this service is disabled at the boot monitor. 4640e9875fSJorrit Herder if disabled $name; then return; fi 4740e9875fSJorrit Herder 48b684a8edSBen Gras echo -n " $name" 49b684a8edSBen Gras "$@" & 50b684a8edSBen Gras return 51b684a8edSBen Gras fi 52b684a8edSBen Gras done 53b684a8edSBen Gras} 54b684a8edSBen Gras 5561a4e15bSJorrit Herderup() 5661a4e15bSJorrit Herder{ 5761a4e15bSJorrit Herder service=$1 582aac756eSJorrit Herder shift 5961a4e15bSJorrit Herder 6061a4e15bSJorrit Herder # Function to dynamically start a system service 6161a4e15bSJorrit Herder 6261a4e15bSJorrit Herder # First check if this service is disabled at the boot monitor. 6340e9875fSJorrit Herder if disabled $service; then return; fi 6461a4e15bSJorrit Herder 6561a4e15bSJorrit Herder # Service is not disabled. Try to bring it up. 6661a4e15bSJorrit Herder echo -n " $service" 672aac756eSJorrit Herder service up /usr/sbin/$service "$@" 6861a4e15bSJorrit Herder} 69f8c380c1SPhilip Homburg 70b684a8edSBen Grascase $action in 71b684a8edSBen Grasstart) 72b684a8edSBen Gras # Select console font. 73b684a8edSBen Gras test -f /etc/font && loadfont /etc/font </dev/console 74b684a8edSBen Gras 75b684a8edSBen Gras # Cleanup. 76b684a8edSBen Gras rm -rf /tmp/. /usr/run/. /usr/spool/lpd/. /usr/spool/locks/. 77b684a8edSBen Gras 78e5610815SJorrit Herder # Start servers and drivers set at the boot monitor. 793cb00065SJorrit Herder echo -n "Starting services:" 802aac756eSJorrit Herder up random -dev /dev/random -period 3HZ 81c12b74daSPhilip Homburg 82f8c380c1SPhilip Homburg # load random number generator 83f8c380c1SPhilip Homburg if [ -f $RANDOM_FILE ] 84f8c380c1SPhilip Homburg then 85f8c380c1SPhilip Homburg cat < $RANDOM_FILE >/dev/random 86f8c380c1SPhilip Homburg # overwrite $RANDOM_FILE. We don't want to use this data again 870bd61375SJorrit Herder dd if=/dev/random of=$RANDOM_FILE bs=1024 count=1 2> /dev/null 88f8c380c1SPhilip Homburg fi 89f8c380c1SPhilip Homburg 90e5610815SJorrit Herder # start only network drivers that are in use 9175cb21f4SBen Gras for driver in lance rtl8139 fxp dpeth dp8390 92e5610815SJorrit Herder do 9387732bd6SBen Gras if grep " $driver " /etc/inet.conf > /dev/null 2>&1 94e5610815SJorrit Herder then 95e21c135fSBen Gras eval arg=\$${driver}_arg 962aac756eSJorrit Herder if [ ! -z "$arg" ]; then arg="-args \"$arg\""; fi 972aac756eSJorrit Herder eval up $driver $arg -period 5HZ 98e5610815SJorrit Herder fi 99e5610815SJorrit Herder done 1002aac756eSJorrit Herder up inet 1012aac756eSJorrit Herder up printer -dev /dev/lp -period 10HZ 10261a4e15bSJorrit Herder echo . 103b684a8edSBen Gras 104b684a8edSBen Gras # Network initialization. 105b684a8edSBen Gras (: </dev/tcp) 2>/dev/null && net=t # Is there a TCP/IP server? 106b684a8edSBen Gras 107b684a8edSBen Gras echo -n "Starting daemons:" 108b684a8edSBen Gras daemonize update 1099748a653SBen Gras 1109748a653SBen Gras # Ugly error message when starting cron from CD. 1119748a653SBen Gras # (and cron unnecessary then so..) 1129748a653SBen Gras if [ ! -f /CD ] 113*ea398f99SBen Gras then daemonize cron 1143775ce2eSBen Gras else mkdir /tmp/log 115*ea398f99SBen Gras rm -f /var/log || true 1163775ce2eSBen Gras ln -s /tmp/log /var/log || true 1173775ce2eSBen Gras . /etc/rc.cd 1189748a653SBen Gras fi 119a3dfe3c9SBen Gras daemonize syslogd 1200bd61375SJorrit Herder echo . 121b684a8edSBen Gras 122b684a8edSBen Gras if [ "$net" ] 123b684a8edSBen Gras then 124b684a8edSBen Gras if [ -f /etc/rc.net ] 125b684a8edSBen Gras then 126b684a8edSBen Gras # Let a customized TCP/IP initialization script figure it out. 127b684a8edSBen Gras . /etc/rc.net 128b684a8edSBen Gras else 129b684a8edSBen Gras # Standard network daemons. 1300bd61375SJorrit Herder echo -n "Starting networking:" 1313e6ec290SBen Gras if grep 'psip0.*default' /etc/inet.conf >/dev/null 132ef676bd3SBen Gras then ifconfig -h 10.0.0.1 133ef676bd3SBen Gras else daemonize dhcpd 134ef676bd3SBen Gras fi 135b684a8edSBen Gras daemonize nonamed 136b684a8edSBen Gras daemonize talkd 137b684a8edSBen Gras daemonize tcpd shell in.rshd 138b684a8edSBen Gras daemonize tcpd login in.rlogind 139b684a8edSBen Gras daemonize tcpd telnet in.telnetd 140b684a8edSBen Gras daemonize tcpd ftp in.ftpd 141b684a8edSBen Gras # The last daemon has been started, so close the list: 142b684a8edSBen Gras echo . 14394095d87SBen Gras fi 14494095d87SBen Gras fi 145b684a8edSBen Gras 146b684a8edSBen Gras if [ "$net" ] 147b684a8edSBen Gras then 148b684a8edSBen Gras # Get the nodename from the DNS and set it. 149b684a8edSBen Gras trap '' 2 150682efc75SBen Gras intr -t 20 hostaddr -h || echo "Unable to obtain an IP address." 151b684a8edSBen Gras trap 2 152b684a8edSBen Gras fi 153b684a8edSBen Gras 154b684a8edSBen Gras # Recover files being edited when the system crashed. 155b684a8edSBen Gras test -f /usr/bin/elvprsv && elvprsv /usr/tmp/elv* 156b684a8edSBen Gras 157b684a8edSBen Gras # Run the daily cleanup on systems that are not on at night. 158b684a8edSBen Gras test -f /usr/etc/daily && sh /usr/etc/daily boot & 159f8c380c1SPhilip Homburg 160f8c380c1SPhilip Homburg;; 161f8c380c1SPhilip Homburgstop|down) 162093cfe11SBen Gras # Save random data, if /usr is mounted rw. 163093cfe11SBen Gras if grep ' \/usr .*rw' /etc/mtab >/dev/null 164093cfe11SBen Gras then 165f8c380c1SPhilip Homburg if dd if=/dev/random of=$RANDOM_FILE.new bs=1024 count=1 2>/dev/null 166f8c380c1SPhilip Homburg then 167f8c380c1SPhilip Homburg mv $RANDOM_FILE.new $RANDOM_FILE 168f8c380c1SPhilip Homburg else 169f8c380c1SPhilip Homburg echo 'Failed to save random data.' 170f8c380c1SPhilip Homburg fi 171428f9d63SBen Gras fi 172b684a8edSBen Grasesac 173ba667a07SBen Gras 174ba667a07SBen Grasd=/usr/local/etc/rc.d 175ba667a07SBen Gras# Let packages run their own scripts 176ba667a07SBen Grasif [ -d "$d" ] 177ba667a07SBen Grasthen if cd $d 178ba667a07SBen Gras then 179fec2fa95SBen Gras echo -n "Local packages ($action): " 180ba667a07SBen Gras for f in * 181ba667a07SBen Gras do 182ba667a07SBen Gras if [ -x "$f" ] 183ba667a07SBen Gras then echo -n "$f " 184ba667a07SBen Gras sh "$f" "$action" 185ba667a07SBen Gras fi 186ba667a07SBen Gras done 187ba667a07SBen Gras echo " done." 188ba667a07SBen Gras fi 189ba667a07SBen Grasfi 190ba667a07SBen Gras 191