74711a3b14
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.
159 lines
3.6 KiB
Text
Executable file
159 lines
3.6 KiB
Text
Executable file
# /etc/rc - System startup script run by init before going multiuser.
|
|
|
|
umask 022
|
|
TERM="${TERM-minix}"
|
|
PATH=/usr/local/bin:/bin:/usr/bin:/usr/sbin
|
|
export TERM PATH
|
|
|
|
usage()
|
|
{
|
|
echo >&2 "Usage: $0 [-saf] start|stop|down"
|
|
exec intr sh
|
|
}
|
|
|
|
up()
|
|
{
|
|
service=$1
|
|
args=$2
|
|
device=$3
|
|
|
|
# Function to dynamically start a system service
|
|
command="/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
|
|
}
|
|
|
|
while getopts 'saf' opt
|
|
do
|
|
case $opt in
|
|
s) sflag=t ;; # Single user
|
|
a) aflag=t ;; # Ask for /usr
|
|
f) fflag=t ;; # Force a full file system check
|
|
*) usage
|
|
esac
|
|
done
|
|
shift `expr $OPTIND - 1`
|
|
|
|
case "$#:$1" in
|
|
1:start|1:stop|1:down)
|
|
action=$1
|
|
;;
|
|
*) usage
|
|
esac
|
|
|
|
case $action in
|
|
start)
|
|
echo ""
|
|
echo "Multiuser startup in progress ..."
|
|
|
|
# National keyboard?
|
|
test -f /etc/keymap && loadkeys /etc/keymap
|
|
|
|
# Start crucial system services
|
|
echo -n "Starting services:"
|
|
up is ""
|
|
up cmos "" /dev/cmos
|
|
echo .
|
|
|
|
# Set timezone.
|
|
. /etc/profile
|
|
|
|
# Try to read the hardware real-time clock, otherwise do it manually.
|
|
readclock || intr date -q
|
|
|
|
# Initialize files.
|
|
printroot >/etc/mtab # /etc/mtab keeps track of mounts
|
|
>/etc/utmp # /etc/utmp keeps track of logins
|
|
|
|
# /etc/fstab lists the root, tmp and usr devices.
|
|
. /etc/fstab
|
|
|
|
# Any swapspace on a device?
|
|
test "$swap" : '/dev/' && mount -s $swap
|
|
|
|
# Are we booting from CD?
|
|
bootcd="`/bin/sysenv bootcd`"
|
|
|
|
# If booting from CD, /usr has to be mounted readonly.
|
|
# Also, $usr won't be specified correctly in the
|
|
# fstab (the CD could be anywhere), so we decide
|
|
# where it is based on sysenv (set by FS when probing for CD).
|
|
if [ "$bootcd" = 1 ]
|
|
then
|
|
imagedev="`/bin/sysenv cdproberoot`"
|
|
usrdev="`expr $imagedev + 1`"
|
|
usr_roflag="-r"
|
|
usr="`/bin/dev2name $usrdev`"
|
|
echo "Setting /usr to mount readonly from cd: $usrdev -> $usr"
|
|
fi
|
|
|
|
# Mount the /usr partition unless this is a single floppy Minix.
|
|
if [ ! -d /usr/bin ]
|
|
then
|
|
if [ "$aflag" -o "$usr" = unknown ]
|
|
then
|
|
# We need to ask what the /usr du jour is.
|
|
intr sh -c '
|
|
echo -n "Finish the name of device to mount as /usr: /dev/"
|
|
read usr
|
|
echo "usr=/dev/$usr" >/tmp/usr'
|
|
. /tmp/usr
|
|
fi
|
|
mount $usr_roflag $usr /usr || {
|
|
echo "\
|
|
Please try to mount something else as /usr, then hit CTRL-D to continue startup.
|
|
Mount $usr /usr failed -- Single user."
|
|
intr sh
|
|
}
|
|
rm -f /tmp/usr
|
|
fi
|
|
|
|
# Check if the system crashed.
|
|
if shutdown -C
|
|
then
|
|
echo
|
|
echo "The system was not properly shut down. Checking file systems."
|
|
fflag=t
|
|
fi
|
|
|
|
if [ "$fflag" ]
|
|
then
|
|
umount $usr
|
|
intr fsck -r $root
|
|
intr fsck -r $usr
|
|
mount $usr /usr
|
|
fi
|
|
|
|
# This file is necessary for above 'shutdown -C' check.
|
|
# (Silence stderr in case of running from cd.)
|
|
touch /usr/adm/wtmp 2>/dev/null
|
|
|
|
if [ "$sflag" ]
|
|
then
|
|
echo "Single user."
|
|
intr sh
|
|
fi
|
|
|
|
# Any swapspace on a file?
|
|
test -n "$swap" -a ! "$swap" : '/dev/' && mount -s $swap
|
|
|
|
|
|
case "`printroot -r`":$bootcd in
|
|
/dev/ram:)
|
|
# Remove boot-only things to make space,
|
|
# unless booting from CD, in which case we need them.
|
|
rm -rf /boot
|
|
esac
|
|
|
|
# Things should be alright now.
|
|
esac
|
|
|
|
# Further initialization.
|
|
test -f /usr/etc/rc && sh /usr/etc/rc $action
|
|
test -f /usr/local/etc/rc && sh /usr/local/etc/rc $action
|
|
|
|
# Any messages?
|
|
test "$action" = start -a -f /etc/issue && cat /etc/issue
|
|
exit 0
|