Boot-to-ramdisk image generation scripts
[minix3.git] / etc / rc
blobf9fcd21405d720e735f1d281bd8c0ccea9151285
1 # /etc/rc - System startup script run by init before going multiuser.
3 if sysenv bootramdisk >/dev/null
4 then
5         /bin/sh /etc/rc.ramdisk
6 fi
8 # Are we booting from CD?
9 bootcd="`/bin/sysenv bootcd`"
11 exec >/dev/log
12 exec 2>/dev/log
13 exec </dev/null
15 umask 022
17 # Same settings as in the default /etc/profile. We do not source this file
18 # as the system administrator may decide to change those values for his users.
19 RC_TZ=/etc/rc.timezone
20 PATH=/usr/local/sbin:/usr/pkg/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/pkg/bin:/usr/bin:/bin
22 # Set TERM to minix if not present.
23 TERM="${TERM-minix}"
25 export TERM PATH
27 # Local variables
28 ARCH="`sysenv arch`"
30 usage()
32     echo >&2 "Usage: $0 [-saf] autoboot|start|stop|down"
33     exec intr sh
36 up()
38     # Function to dynamically start a system service
39     opt=""
40     prefix=$(expr "$1 " : '\(-\)')
41     if [ "$prefix" = "-" ];
42     then
43          opt=$1
44          shift
45     fi
46     service=$1
47     shift
49     service $opt up /service/$service "$@"
52 edit()
54     # Function to dynamically edit system service settings
55     opt=""
56     prefix=$(expr "$1 " : '\(-\)')
57     if [ "$prefix" = "-" ];
58     then
59          opt=$1
60          shift
61     fi
62     service=$1
63     shift
65     # Assume binaries are always in /service or /usr/pkg/service
66     binlocation=/service/$service
67     if [ ! -x $binlocation ]
68     then        binlocation=/usr/pkg/service/$service
69     fi
71     # Mostly to find init...
72     if [ ! -x $binlocation ]
73     then        binlocation=/sbin/$service
74     fi
75     service $opt edit $binlocation -label $service "$@"
78 while getopts 'saf' opt
80     case $opt in
81     s)  sflag=t ;;      # Single user
82     a)  aflag=t ;;      # Ask for /usr
83     f)  fflag=-f ;;     # Force a full file system check
84     *)  usage
85     esac
86 done
87 shift `expr $OPTIND - 1`
89 case "$#:$1" in
90 1:start|1:stop|1:down|1:autoboot)
91     action=$1
92     ;;
93 *)  usage
94 esac
96 case $action in
97 autoboot|start)
98     # If booting from CD, we want some directories to be ramdisks
99     if [ ! -z "$bootcd" ]
100     then
101         . /etc/rc.cd
102     fi
104     # National keyboard?
105     test -f /etc/keymap && loadkeys /etc/keymap
107     # options for fsck. default is -r, which prompts the user for repairs.
108     optname=fsckopts
109     fsckopts=-p
110     if sysenv $optname >/dev/null
111     then       fsckopts="`sysenv $optname`"
112     fi
114     if [ "`sysenv debug_fkeys`" != 0 ]
115     then
116         up -n is -period 5HZ
117     fi
119     # Set timezone.
120     export TZ=GMT0
121     if [ -f "$RC_TZ" ]
122     then
123          . "$RC_TZ"
124     fi
126     # Start real time clock driver & set system time, otherwise default date.
127     up readclock.drv
128     readclock -q || date 201301010000
130     # We are not shutting down.
131     if [ -f /etc/nologin ]
132     then
133         rm -f /etc/nologin
134     fi
136     # Use MFS binary only from kernel image?
137     if [ "`sysenv bin_img`" = 1 ]
138     then
139         bin_img="-i "
140     fi
142     # fsck + mount using /etc/fstab.
143     fsck -x / $fflag $fsckopts
144     mount -a
146     if [ -z "`sysenv bootramdisk`" ]
147     then
148         # Unmount and free now defunct ramdisk
149         umount /dev/imgrd > /dev/null || echo "Failed to unmount boot ramdisk"
150         ramdisk 0 /dev/imgrd || echo "Failed to free boot ramdisk"
151     fi
153     # Initialize files.
154     >/var/run/utmp                              # /etc/utmp keeps track of logins
155     >/var/run/utmpx                             # /etc/utmpx keeps track of logins
157     # Edit settings for boot system services
158     if [ "`sysenv skip_boot_config`" != 1 ]
159     then
160         edit rs
161         edit vm
162         edit pm
163         edit sched
164         edit vfs
165         edit ds
166         edit tty
167         edit memory
168         edit mib
169         edit pfs
170         edit init
171         #
172         # Keep a copy around to recover the root FS from crashes
173         #
174         rootline=`cat /etc/mtab | grep "on / "`
175         rootfs=fs_`echo "$rootline" | cut -d' ' -f1 | cut -d'/' -f3`
176         roottype=`echo "$rootline" | cut -d' ' -f5`
177         service -c edit /service/$roottype -label $rootfs
178     fi
180     if [ "$sflag" ]
181     then
182         echo "Single user. Press ^D to resume multiuser startup."
183         intr sh
184         echo
185     fi
187     echo "Multiuser startup in progress ..."
189     case "`printroot -r`":$bootcd in
190     /dev/ram:)
191         # Remove boot-only things to make space,
192         # unless booting from CD, in which case we need them.
193         rm -rf /boot
194         # put the compiler on ram
195         cp /usr/lib/em* /usr/lib/cpp* /lib
196     esac
198     echo -n "Starting hotplugging infrastructure... "
199     rm -f /var/run/devmand.pid
200     devmand -d /etc/devmand -d /usr/pkg/etc/devmand &
201     echo "done."
203     # Things should be alright now.
204     ;;
205 down|stop)
206     sync
207     if [ -f /var/run/devmand.pid ]
208     then
209         kill -INT `cat /var/run/devmand.pid`
210         # without this delay the following will
211         # be printed in the console
212         # RS: devman not running?
213         sleep 1
214     fi
215     #
216     # usbd needs to be stopped exactly
217     # at this stage(before stopping devman
218     # and after stopping the services
219     # stated by devmand)
220     if [ -x /usr/pkg/etc/rc.d/usbd ]
221     then
222         /usr/pkg/etc/rc.d/usbd stop
223     fi
225     if [ -x /service/usbd ]
226     then
227         service down usbd
228     fi
230     # Tell RS server we're going down.
231     service shutdown
232     ;;
233 esac
235 # Further initialization.
236 test -f /usr/etc/rc && sh /usr/etc/rc $action
237 test -f /usr/local/etc/rc && sh /usr/local/etc/rc $action
239 # Any messages?
240 if [ "$action" = start -o "$action" = autoboot ]
241 then    if [ -f /etc/issue ]
242         then    cat /etc/issue
243         fi
246 exit 0