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 10948cb1bcbSBen Gras rotate /usr/log/messages 7 11042050e39SBen Gras daemonize usyslogd 1119748a653SBen Gras 1129748a653SBen Gras # Ugly error message when starting cron from CD. 1139748a653SBen Gras # (and cron unnecessary then so..) 1149748a653SBen Gras if [ ! -f /CD ] 1159748a653SBen Gras then daemonize cron 11687732bd6SBen Gras else . /etc/rc.cd 1179748a653SBen Gras fi 1180bd61375SJorrit Herder echo . 119b684a8edSBen Gras 120b684a8edSBen Gras if [ "$net" ] 121b684a8edSBen Gras then 122b684a8edSBen Gras if [ -f /etc/rc.net ] 123b684a8edSBen Gras then 124b684a8edSBen Gras # Let a customized TCP/IP initialization script figure it out. 125b684a8edSBen Gras . /etc/rc.net 126b684a8edSBen Gras else 127b684a8edSBen Gras # Standard network daemons. 1280bd61375SJorrit Herder echo -n "Starting networking:" 129b684a8edSBen Gras daemonize dhcpd 130b684a8edSBen Gras daemonize nonamed 131b684a8edSBen Gras daemonize talkd 132b684a8edSBen Gras daemonize tcpd shell in.rshd 133b684a8edSBen Gras daemonize tcpd login in.rlogind 134b684a8edSBen Gras daemonize tcpd telnet in.telnetd 135b684a8edSBen Gras daemonize tcpd ftp in.ftpd 136b684a8edSBen Gras # The last daemon has been started, so close the list: 137b684a8edSBen Gras echo . 13894095d87SBen Gras fi 13994095d87SBen Gras fi 140b684a8edSBen Gras 141b684a8edSBen Gras if [ "$net" ] 142b684a8edSBen Gras then 143b684a8edSBen Gras # Get the nodename from the DNS and set it. 144b684a8edSBen Gras trap '' 2 145ddb8e730SBen Gras intr -t 10 hostaddr -h || echo "Unable to obtain an IP address." 146b684a8edSBen Gras trap 2 147b684a8edSBen Gras fi 148b684a8edSBen Gras 149b684a8edSBen Gras # Recover files being edited when the system crashed. 150b684a8edSBen Gras test -f /usr/bin/elvprsv && elvprsv /usr/tmp/elv* 151b684a8edSBen Gras 152b684a8edSBen Gras # Run the daily cleanup on systems that are not on at night. 153b684a8edSBen Gras test -f /usr/etc/daily && sh /usr/etc/daily boot & 154f8c380c1SPhilip Homburg 155f8c380c1SPhilip Homburg;; 156f8c380c1SPhilip Homburgstop|down) 157f8c380c1SPhilip Homburg # Save random data. 158*428f9d63SBen Gras bootcd="`/bin/sysenv bootcd`" 159f8c380c1SPhilip Homburg if dd if=/dev/random of=$RANDOM_FILE.new bs=1024 count=1 2>/dev/null 160f8c380c1SPhilip Homburg then 161f8c380c1SPhilip Homburg mv $RANDOM_FILE.new $RANDOM_FILE 162f8c380c1SPhilip Homburg else 163*428f9d63SBen Gras if [ "$bootcd" != 1 ] 164*428f9d63SBen Gras then 165f8c380c1SPhilip Homburg echo 'Failed to save random data.' 166f8c380c1SPhilip Homburg fi 167*428f9d63SBen Gras fi 168b684a8edSBen Grasesac 169