# /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 RC_TZ=/etc/rc.timezone export TERM PATH usage() { echo >&2 "Usage: $0 [-saf] start|stop|down" exec intr sh } up() { service=$1 shift # Function to dynamically start a system service echo -n " $service" service up /sbin/$service "$@" } 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 -n "Multiuser startup in progress ...:" # National keyboard? test -f /etc/keymap && loadkeys /etc/keymap up is -period 5HZ up cmos -dev /dev/cmos -period 5HZ echo . # Set timezone. export TZ=GMT0 if [ -f "$RC_TZ" ] then . "$RC_TZ" fi # 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="$cddev"p2 echo "Setting /usr on cd is $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 echo "fsck / - $root" intr fsck -r $root echo "fsck /usr - $usr" intr fsck -r $usr if [ ! -z "$home" ] then echo "fsck /home - $home" intr fsck -r $home fi mount $usr /usr fi if [ ! -z "$home" ] then mount $home /home || echo "WARNING: couldn't mount $home on /home" 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 # put the compiler on ram cp /usr/lib/em* /usr/lib/cpp* /lib esac # Things should be alright now. ;; down|stop) sync # Tell RS server we're going down. service shutdown ;; 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 test -f /etc/rc.rescue && sh /etc/rc.rescue $action # Any messages? test "$action" = start -a -f /etc/issue && cat /etc/issue exit 0