minix/etc/usr/rc
Jorrit Herder 74711a3b14 Check if kernel calls is allowed (from process' call mask) added. Not yet
enforced. If a call is denied, this will be kprinted. Please report any such
errors, so that I can adjust the mask before returning errors instead of
warnings.

Wrote CMOS driver. All CMOS code from FS has been removed. Currently the
driver only supports get time calls. Set time is left out as an exercise
for the book readers ... startup scripts were updated because the CMOS driver
is needed early on. (IS got same treatment.) Don't forget to run MAKEDEV cmos
in /dev/, otherwise the driver cannot be loaded.
2005-08-04 19:23:03 +00:00

180 lines
3.8 KiB
Text

# /usr/etc/rc - continued system initialization.
RANDOM_FILE=/usr/adm/random.dat
case "$#:$1" in
1:start|1:stop|1:down)
action=$1
;;
*) echo >&2 "Usage: $0 start|stop|down"
exit 1
esac
disabled()
{
ifs="$IFS"; IFS=,
for skip in `sysenv disable`
do
if [ "$skip" = "$1" ]
then
IFS="$ifs"; unset ifs
return 0
fi
done
IFS="$ifs"; unset ifs
return 1
}
daemonize()
{
# Function to start a daemon, if it exists.
local IFS=':'
local name="$1"
test "$1" = tcpd && name="$2"
for dir in $PATH
do
if [ -f "$dir/$1" ]
then
# check if this service is disabled at the boot monitor.
if disabled $name; then return; fi
echo -n " $name"
"$@" &
return
fi
done
}
up()
{
service=$1
args=$2
device=$3
# Function to dynamically start a system service
# First check if this service is disabled at the boot monitor.
if disabled $service; then return; fi
# Service is not disabled. Try to bring it up.
command="/usr/sbin/$service"
if [ ! -z "$args" ]; then command="$command -args \"$args\""; fi
if [ ! -z "$device" ]; then command="$command -dev \"$device\""; fi
echo -n " $service"
eval service up $command
}
case $action in
start)
# Select console font.
test -f /etc/font && loadfont /etc/font </dev/console
# Cleanup.
rm -rf /tmp/. /usr/run/. /usr/spool/lpd/. /usr/spool/locks/.
# Start servers and drivers set at the boot monitor.
echo -n "More services:"
up random "" /dev/random
# load random number generator
if [ -f $RANDOM_FILE ]
then
cat < $RANDOM_FILE >/dev/random
# overwrite $RANDOM_FILE. We don't want to use this data again
dd if=/dev/random of=$RANDOM_FILE bs=1024 count=1 2> /dev/null
fi
# start only network drivers that are in use
for driver in rtl8139 fxp dpeth
do
if grep " $driver " /etc/inet.conf > /dev/null
then
up $driver
fi
done
up inet ""
up printer "" /dev/lp
# up floppy "" /dev/fd0
echo .
# Network initialization.
(: </dev/tcp) 2>/dev/null && net=t # Is there a TCP/IP server?
echo -n "Starting daemons:"
daemonize update
daemonize usyslogd
# Ugly error message when starting cron from CD.
# (and cron unnecessary then so..)
if [ ! -f /CD ]
then daemonize cron
fi
echo .
if [ "$net" ]
then
if [ -f /etc/rc.net ]
then
# Let a customized TCP/IP initialization script figure it out.
. /etc/rc.net
else
# Standard network daemons.
echo -n "Starting networking:"
daemonize dhcpd
daemonize nonamed
daemonize talkd
daemonize tcpd shell in.rshd
daemonize tcpd login in.rlogind
daemonize tcpd telnet in.telnetd
daemonize tcpd ftp in.ftpd
fi
fi
# The last daemon has been started, so close the list:
echo .
if [ "$net" ]
then
# Get the nodename from the DNS and set it.
t='-t 10'
trap '' 2
while :;
do
intr $t hostaddr -h
case $? in
142)
echo "\
Unable to obtain an IP address after 10 seconds. Hit DEL to get a root
prompt to investigate, otherwise just wait until an address is received..."
t=
;;
130)
echo "Single user."
intr sh
echo "Continue waiting for an address..."
;;
*) break
esac
done
trap 2
fi
# Recover files being edited when the system crashed.
test -f /usr/bin/elvprsv && elvprsv /usr/tmp/elv*
# Run the daily cleanup on systems that are not on at night.
test -f /usr/etc/daily && sh /usr/etc/daily boot &
;;
stop|down)
# Save random data.
if dd if=/dev/random of=$RANDOM_FILE.new bs=1024 count=1 2>/dev/null
then
mv $RANDOM_FILE.new $RANDOM_FILE
else
echo 'Failed to save random data.'
fi
esac