Slightly more flexible packman.
[minix3.git] / etc / rc
blobae18ed6de38a5929745fdca0df1da667d1c84c86
1 # /etc/rc - System startup script run by init before going multiuser.
3 umask 022
4 TERM="${TERM-minix}"
5 PATH=/usr/local/bin:/bin:/usr/bin:/usr/sbin
6 RC_TZ=/etc/rc.timezone
7 export TERM PATH
9 usage()
11     echo >&2 "Usage: $0 [-saf] start|stop|down"
12     exec intr sh
15 up()
17     service=$1
18     shift
20     # Function to dynamically start a system service
21     echo -n " $service"
22     service up /sbin/$service "$@"
25 while getopts 'saf' opt
27     case $opt in
28     s)  sflag=t ;;      # Single user
29     a)  aflag=t ;;      # Ask for /usr
30     f)  fflag=t ;;      # Force a full file system check
31     *)  usage
32     esac
33 done
34 shift `expr $OPTIND - 1`
36 case "$#:$1" in
37 1:start|1:stop|1:down)
38     action=$1
39     ;;
40 *)  usage
41 esac
43 case $action in
44 start)
45     echo ""
46     echo -n "Multiuser startup in progress ...:"
48     # National keyboard?
49     test -f /etc/keymap && loadkeys /etc/keymap
51     up is -period 5HZ
52     echo .
54     # Set timezone.
55     export TZ=GMT0
56     if [ -f "$RC_TZ" ]
57     then . "$RC_TZ"
58     fi
60     # Try to read the hardware real-time clock, otherwise do it manually.
61     readclock || intr date -q
63     # Initialize files.
64     printroot >/etc/mtab                # /etc/mtab keeps track of mounts
65     >/etc/utmp                          # /etc/utmp keeps track of logins
67     # /etc/fstab lists the root, tmp and usr devices.
68     . /etc/fstab
70     # Any swapspace on a device?
71     test "$swap" : '/dev/' && mount -s $swap
73     # Are we booting from CD?
74     bootcd="`/bin/sysenv bootcd`"
76     # If booting from CD, /usr has to be mounted readonly.
77     # Also, $usr won't be specified correctly in the
78     # fstab (the CD could be anywhere), so we decide
79     # where it is based on sysenv (set by FS when probing for CD).
80     if [ "$bootcd" = 1 ]
81     then        
82                 #imagedev="`/bin/sysenv cdproberoot`"
83                 #usrdev="`expr $imagedev + 1`"
84                 usr_roflag="-r"
85                 usr="$cddev"p2
86                 echo "Setting /usr on cd is $usr"
87     fi
89     # Mount the /usr partition unless this is a single floppy Minix.
90     if [ ! -d /usr/bin ]
91     then
92         if [ "$aflag" -o "$usr" = unknown ]
93         then
94             # We need to ask what the /usr du jour is.
95             intr sh -c '
96                 echo -n "Finish the name of device to mount as /usr: /dev/"
97                 read usr
98                 echo "usr=/dev/$usr" >/tmp/usr'
99             . /tmp/usr
100         fi
101         mount $usr_roflag $usr /usr || {
102             echo "\
103 Please try to mount something else as /usr, then hit CTRL-D to continue startup.
104 Mount $usr /usr failed -- Single user."
105             intr sh
106         }
107         rm -f /tmp/usr
108     fi
110     # Check if the system crashed.
111     if shutdown -C
112     then
113         echo
114         echo "The system was not properly shut down.  Checking file systems."
115         fflag=t
116     fi
118     if [ "$fflag" ]
119     then
120         umount $usr
121         echo "fsck / - $root"
122         intr fsck -r $root
123         echo "fsck /usr - $usr"
124         intr fsck -r $usr
125         if [ ! -z "$home" ]
126         then    echo "fsck /home - $home"
127                 intr fsck -r $home
128         fi
129         mount $usr /usr
130     fi
132     if [ ! -z "$home" ]
133     then mount $home /home || echo "WARNING: couldn't mount $home on /home"
134     fi
136     # This file is necessary for above 'shutdown -C' check.
137     # (Silence stderr in case of running from cd.)
138     touch /usr/adm/wtmp 2>/dev/null
140     if [ "$sflag" ]
141     then
142         echo "Single user."
143         intr sh
144     fi
146     # Any swapspace on a file?
147     test -n "$swap" -a ! "$swap" : '/dev/' && mount -s $swap
150     case "`printroot -r`":$bootcd in
151     /dev/ram:)
152         # Remove boot-only things to make space,
153         # unless booting from CD, in which case we need them.
154         rm -rf /boot
155         # put the compiler on ram
156         cp /usr/lib/em* /usr/lib/cpp* /lib
157     esac
159     # Things should be alright now.
160     ;;
161 down|stop)
162     sync
163     # Update CMOS
164     echo -n 'Updating CMOS.. '
165     readclock -w && echo Done || echo Failed
166     # Tell RS server we're going down.
167     service shutdown
168     ;;
169 esac
171 # Further initialization.
172 test -f /usr/etc/rc && sh /usr/etc/rc $action
173 test -f /usr/local/etc/rc && sh /usr/local/etc/rc $action
174 #test -f /etc/rc.rescue && sh /etc/rc.rescue $action
176 # Any messages?
177 test "$action" = start -a -f /etc/issue && cat /etc/issue
179 exit 0