xref: /minix3/etc/usr/rc (revision 3de6a807ce6f8c5ecc01befee5588326ad3befe6)
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