try multiple reset methods
[minix3.git] / etc / rc
blob9254e540cf39d61122815bf34c376580769ad03d
1 # /etc/rc - System startup script run by init before going multiuser.
3 . /etc/rc.subr.minix
5 exec >/dev/log
6 exec 2>/dev/log
7 exec </dev/null
9 umask 022
10 FSTAB=/etc/fstab
11 TERM="${TERM-minix}"
12 PATH=/usr/local/bin:/bin:/usr/bin:/usr/sbin:/usr/pkg/bin:/usr/pkg/sbin:/sbin
13 RC_TZ=/etc/rc.timezone
14 export TERM PATH
16 usage()
18     echo >&2 "Usage: $0 [-saf] start|stop|down"
19     exec intr sh
22 up()
24     # Function to dynamically start a system service
25     opt=""
26     prefix=$(expr "$1 " : '\(-\)')
27     if [ "$prefix" = "-" ];
28     then
29          opt=$1
30          shift
31     fi
32     service=$1
33     shift
35     service $opt up /sbin/$service "$@"
38 edit()
40     # Function to dynamically edit system service settings
41     opt=""
42     prefix=$(expr "$1 " : '\(-\)')
43     if [ "$prefix" = "-" ];
44     then
45          opt=$1
46          shift
47     fi
48     service=$1
49     shift
51     # Assume binaries are always in /usr/sbin
52     service $opt edit /usr/sbin/$service -label $service "$@" 
55 # This function parses the deprecated minix shellscript-style 
56 # /etc/fstab, and fscks and mounts its filesystems.
57 mountfstab_poorman()
59     echo "WARNING: old fstab format, please upgrade!"
61     # /etc/fstab lists the root, home, and usr devices.
62     . $FSTAB
64     intr fsck.mfs $fsckopts $usr
65     if [ ! -z "$home" ]
66     then intr fsck.mfs $fsckopts $home
67     fi
69     # mount /usr
70     mount $bin_img $usr /usr
72     if [ ! -z "$home" ]
73     then mount $bin_img $home /home || echo "WARNING: couldn't mount $home on /home"
74     fi
77 while getopts 'saf' opt
79     case $opt in
80     s)  sflag=t ;;      # Single user
81     a)  aflag=t ;;      # Ask for /usr
82     f)  fflag=-f ;;     # Force a full file system check
83     *)  usage
84     esac
85 done
86 shift `expr $OPTIND - 1`
88 case "$#:$1" in
89 1:start|1:stop|1:down)
90     action=$1
91     ;;
92 *)  usage
93 esac
95 case $action in
96 start)
97     echo -n "Multiuser startup in progress ..."
99     # National keyboard?
100     test -f /etc/keymap && loadkeys /etc/keymap
102     # options for fsck. default is -r, which prompts the user for repairs.
103     optname=fsckopts
104     fsckopts=-p
105     if sysenv $optname >/dev/null
106     then       fsckopts="`sysenv $optname`"
107     fi
109     if [ "`sysenv debug_fkeys`" != 0 ]
110     then
111         up -n is -period 5HZ
112     fi
113     echo
115     # Set timezone.
116     export TZ=GMT0
117     if [ -f "$RC_TZ" ]
118     then . "$RC_TZ"
119     fi
121     # Try to read the hardware real-time clock, otherwise do it manually.
122     readclock || intr date -q
124     # Initialize files.
125     printroot >/etc/mtab                # /etc/mtab keeps track of mounts
126     >/etc/utmp                          # /etc/utmp keeps track of logins
128     # Unmount now defunct ramdisk
129     umount /dev/imgrd > /dev/null || echo "Failed to unmount boot ramdisk"
131     # Use MFS binary only from kernel image?
132     if [ "`sysenv bin_img`" = 1 ]
133     then
134         bin_img="-i "
135     fi
137     # Are we booting from CD?
138     bootcd="`/bin/sysenv bootcd`"
140     # If booting from CD, mounting is a special case.
141     # We know what to do - only /usr is mounted and it's readonly.
142     if [ "$bootcd" = 1 ]
143     then        usrdev="$cddev"p2
144                 echo "/usr on cd is $usrdev"
145                 mount -r $usrdev /usr
146     else        
147     # If we're not booting from CD, fsck + mount using /etc/fstab.
148                 read <$FSTAB fstabline
149                 if [ "$fstabline" = "# Poor man's File System Table." ]
150                 then    mountfstab_poorman      # Old minix /etc/fstab
151                 else    fsck -x / $fflag $fsckopts
152                         mountfstab $FSTAB
153                 fi
154     fi
156     # Edit settings for boot system services
157     if [ "`sysenv skip_boot_config`" != 1 ]
158     then
159         edit rs
160         edit vm
161         edit pm
162         edit sched
163         edit vfs
164         edit ds
165         edit tty
166         edit memory
167         edit -p log
168         edit -c pfs
169         edit init
170     fi
172     # This file is necessary for above 'shutdown -C' check.
173     # (Silence stderr in case of running from cd.)
174     touch /usr/adm/wtmp /etc/wtmp 2>/dev/null
176     if [ "$sflag" ]
177     then
178         echo "Single user."
179         intr sh
180     fi
182     case "`printroot -r`":$bootcd in
183     /dev/ram:)
184         # Remove boot-only things to make space,
185         # unless booting from CD, in which case we need them.
186         rm -rf /boot
187         # put the compiler on ram
188         cp /usr/lib/em* /usr/lib/cpp* /lib
189     esac
191     # Things should be alright now.
192     ;;
193 down|stop)
194     sync
195     # Tell RS server we're going down.
196     service shutdown
197     ;;
198 esac
200 # Further initialization.
201 test -f /usr/etc/rc && sh /usr/etc/rc $action
202 test -f /usr/local/etc/rc && sh /usr/local/etc/rc $action
204 # Any messages?
205 test "$action" = start -a -f /etc/issue && cat /etc/issue
207 exit 0