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{ 57*3de6a807SCristiano Giuffrida # Function to dynamically start a system service 58*3de6a807SCristiano Giuffrida opt="" 59*3de6a807SCristiano Giuffrida prefix=$(expr "$1 " : '\(-\)') 60*3de6a807SCristiano Giuffrida if [ "$prefix" = "-" ]; 61*3de6a807SCristiano Giuffrida then 6265ef5397SCristiano Giuffrida opt=$1 6365ef5397SCristiano Giuffrida shift 64*3de6a807SCristiano Giuffrida fi 6561a4e15bSJorrit Herder service=$1 662aac756eSJorrit Herder shift 6761a4e15bSJorrit Herder 6861a4e15bSJorrit Herder # First check if this service is disabled at the boot monitor. 6940e9875fSJorrit Herder if disabled $service; then return; fi 7061a4e15bSJorrit Herder 7161a4e15bSJorrit Herder # Service is not disabled. Try to bring it up. 7261a4e15bSJorrit Herder echo -n " $service" 7365ef5397SCristiano Giuffrida service $opt up /usr/sbin/$service "$@" 7461a4e15bSJorrit Herder} 75f8c380c1SPhilip Homburg 769ba65d2eSDavid van Moolenbroekget_eth_labels() { 779ba65d2eSDavid van Moolenbroek # Filter out the non-vlan ethernet entries from inet.conf. 789ba65d2eSDavid van Moolenbroek # Produce as output a list of "drivername_instancenr"-formatted labels. 799ba65d2eSDavid van Moolenbroek # The first sed is taken from /bin as older GNU sed versions don't know '\t'. 809ba65d2eSDavid van Moolenbroek /bin/sed 's/\t/ /g' /etc/inet.conf | \ 819ba65d2eSDavid van Moolenbroek sed -n 's/^ *eth[0-9][0-9]* *\([^ ][^ ]*\) *\([0-9][0-9]*\).*$/\1_\2/p' | \ 829ba65d2eSDavid van Moolenbroek grep -v '^vlan_' 839ba65d2eSDavid van Moolenbroek} 84103f18cbSBen Gras 85103f18cbSBen GrasDAEMONS=/etc/rc.daemons 86103f18cbSBen Gras 87b684a8edSBen Grascase $action in 88b684a8edSBen Grasstart) 89b684a8edSBen Gras # Select console font. 90b684a8edSBen Gras test -f /etc/font && loadfont /etc/font </dev/console 91b684a8edSBen Gras 92b684a8edSBen Gras # Cleanup. 93b684a8edSBen Gras rm -rf /tmp/. /usr/run/. /usr/spool/lpd/. /usr/spool/locks/. 94b684a8edSBen Gras 95e5610815SJorrit Herder # Start servers and drivers set at the boot monitor. 963cb00065SJorrit Herder echo -n "Starting services:" 97*3de6a807SCristiano Giuffrida up -n random -dev /dev/random -devstyle STYLE_DEVA -period 3HZ 98c12b74daSPhilip Homburg 99f8c380c1SPhilip Homburg # load random number generator 100f8c380c1SPhilip Homburg if [ -f $RANDOM_FILE ] 101f8c380c1SPhilip Homburg then 102f8c380c1SPhilip Homburg cat < $RANDOM_FILE >/dev/random 103f8c380c1SPhilip Homburg # overwrite $RANDOM_FILE. We don't want to use this data again 1040bd61375SJorrit Herder dd if=/dev/random of=$RANDOM_FILE bs=1024 count=1 2> /dev/null 105f8c380c1SPhilip Homburg fi 106f8c380c1SPhilip Homburg 1079ba65d2eSDavid van Moolenbroek # start network driver instances for all configured ethernet devices 1089ba65d2eSDavid van Moolenbroek for label in $(get_eth_labels); do 1099ba65d2eSDavid van Moolenbroek driver=$(echo $label | sed 's/\(.*\)_.*/\1/') 1109ba65d2eSDavid van Moolenbroek instance=$(echo $label | sed 's/.*_//') 1119ba65d2eSDavid van Moolenbroek eval arg=\$${label}_arg 1129ba65d2eSDavid van Moolenbroek if [ ! -z "$arg" ]; then arg=" $arg"; fi 1139ba65d2eSDavid van Moolenbroek arg="-args \"instance=$instance$arg\"" 1149ba65d2eSDavid van Moolenbroek eval up $driver -label $label $arg -period 5HZ 115e5610815SJorrit Herder done 1165a98cd3eSCristiano Giuffrida up inet -script /etc/rs.inet -dev /dev/ip -devstyle STYLE_CLONE 117*3de6a807SCristiano Giuffrida up -n printer -dev /dev/lp -period 10HZ 118*3de6a807SCristiano Giuffrida up -n ipc 11961a4e15bSJorrit Herder echo . 120b684a8edSBen Gras 121b684a8edSBen Gras # Network initialization. 122b684a8edSBen Gras (: </dev/tcp) 2>/dev/null && net=t # Is there a TCP/IP server? 123b684a8edSBen Gras 124b684a8edSBen Gras echo -n "Starting daemons:" 125b684a8edSBen Gras daemonize update 1269748a653SBen Gras 1279748a653SBen Gras # Ugly error message when starting cron from CD. 1289748a653SBen Gras # (and cron unnecessary then so..) 1299748a653SBen Gras if [ ! -f /CD ] 130ea398f99SBen Gras then daemonize cron 1313775ce2eSBen Gras else mkdir /tmp/log 132ea398f99SBen Gras rm -f /var/log || true 1333775ce2eSBen Gras ln -s /tmp/log /var/log || true 1343775ce2eSBen Gras . /etc/rc.cd 1359748a653SBen Gras fi 1367a1853a5SBen Gras # syslogd has not been started yet 1376137c589SBen Gras rm -f /var/run/syslogd.pid 138a3dfe3c9SBen Gras daemonize syslogd 1390bd61375SJorrit Herder echo . 140b684a8edSBen Gras 141b684a8edSBen Gras if [ "$net" ] 142b684a8edSBen Gras then 143b684a8edSBen Gras if [ -f /etc/rc.net ] 144b684a8edSBen Gras then 145b684a8edSBen Gras # Let a customized TCP/IP initialization script figure it out. 146b684a8edSBen Gras . /etc/rc.net 147b684a8edSBen Gras else 148b684a8edSBen Gras # Standard network daemons. 1490bd61375SJorrit Herder echo -n "Starting networking:" 1509a37f632SDavid van Moolenbroek if grep -s 'psip0.*default' /etc/inet.conf >/dev/null 151ef676bd3SBen Gras then ifconfig -h 10.0.0.1 15248c6bb79SCristiano Giuffrida else 153816f5dd5SBen Gras daemonize dhcpd 154ef676bd3SBen Gras fi 1557a0f8e28SBen Gras daemonize nonamed -L 156103f18cbSBen Gras if [ -f "$DAEMONS" ] 157103f18cbSBen Gras then . "$DAEMONS" 158103f18cbSBen Gras fi 159b684a8edSBen Gras # The last daemon has been started, so close the list: 160b684a8edSBen Gras echo . 16194095d87SBen Gras fi 16294095d87SBen Gras fi 163b684a8edSBen Gras 164b684a8edSBen Gras if [ "$net" ] 165b684a8edSBen Gras then 166b684a8edSBen Gras # Get the nodename from the DNS and set it. 167b684a8edSBen Gras trap '' 2 168b857dec7SBen Gras intr -t 20 hostaddr -h 169b684a8edSBen Gras trap 2 170b684a8edSBen Gras fi 171b684a8edSBen Gras 172b684a8edSBen Gras # Recover files being edited when the system crashed. 173b684a8edSBen Gras test -f /usr/bin/elvprsv && elvprsv /usr/tmp/elv* 174b684a8edSBen Gras 175b684a8edSBen Gras # Run the daily cleanup on systems that are not on at night. 176b684a8edSBen Gras test -f /usr/etc/daily && sh /usr/etc/daily boot & 177f8c380c1SPhilip Homburg 178f8c380c1SPhilip Homburg;; 179f8c380c1SPhilip Homburgstop|down) 180093cfe11SBen Gras # Save random data, if /usr is mounted rw. 181093cfe11SBen Gras if grep ' \/usr .*rw' /etc/mtab >/dev/null 182093cfe11SBen Gras then 183f8c380c1SPhilip Homburg if dd if=/dev/random of=$RANDOM_FILE.new bs=1024 count=1 2>/dev/null 184f8c380c1SPhilip Homburg then 185f8c380c1SPhilip Homburg mv $RANDOM_FILE.new $RANDOM_FILE 186f8c380c1SPhilip Homburg else 187f8c380c1SPhilip Homburg echo 'Failed to save random data.' 188f8c380c1SPhilip Homburg fi 189428f9d63SBen Gras fi 190b684a8edSBen Grasesac 191ba667a07SBen Gras 192ba667a07SBen Grasd=/usr/local/etc/rc.d 193ba667a07SBen Gras# Let packages run their own scripts 194ba667a07SBen Grasif [ -d "$d" ] 195ba667a07SBen Grasthen if cd $d 196ba667a07SBen Gras then 197fec2fa95SBen Gras echo -n "Local packages ($action): " 198ba667a07SBen Gras for f in * 199ba667a07SBen Gras do 200ba667a07SBen Gras if [ -x "$f" ] 201ba667a07SBen Gras then echo -n "$f " 202ba667a07SBen Gras sh "$f" "$action" 203ba667a07SBen Gras fi 204ba667a07SBen Gras done 205ba667a07SBen Gras echo " done." 206ba667a07SBen Gras fi 207ba667a07SBen Grasfi 208ba667a07SBen Gras 209