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