xref: /minix3/etc/rc.minix (revision e4449940d2b35f81593c9bd2ab2b338d12ee8c9c)
1*325ce30bSDavid van Moolenbroek# /etc/rc.minix - MINIX system startup script
2*325ce30bSDavid van Moolenbroek
3*325ce30bSDavid van MoolenbroekPATH=/sbin:/usr/sbin:/bin:/usr/bin
4*325ce30bSDavid van Moolenbroek
5*325ce30bSDavid van Moolenbroek# The normal system boot situation is that init(8) invokes the ramdisk RC
6*325ce30bSDavid van Moolenbroek# script, which invokes the NetBSD rc infrastructure, which in turn calls this
7*325ce30bSDavid van Moolenbroek# script through /etc/rc.d/minixrc.  With a boot ramdisk (x86_ramimage), the
8*325ce30bSDavid van Moolenbroek# ramdisk RC is bypassed altogether, but stored as /etc/rc.ramdisk.  We then
9*325ce30bSDavid van Moolenbroek# have to invoke it here (for startup only!) to let it perform its tasks first.
10*325ce30bSDavid van Moolenbroekif sysenv bootramdisk >/dev/null
11*325ce30bSDavid van Moolenbroekthen
12*325ce30bSDavid van Moolenbroek	[ "$1" = "start" ] && sh /etc/rc.ramdisk "$@"
13*325ce30bSDavid van Moolenbroekfi
14*325ce30bSDavid van Moolenbroek
15*325ce30bSDavid van Moolenbroek# Same settings as in the default /etc/profile. We do not source this file
16*325ce30bSDavid van Moolenbroek# as the system administrator may decide to change those values for his users.
17*325ce30bSDavid van MoolenbroekRC_TZ=/etc/rc.timezone
18*325ce30bSDavid van Moolenbroek
19*325ce30bSDavid van Moolenbroek# Are we booting from CD?
20*325ce30bSDavid van Moolenbroekbootcd="`/bin/sysenv bootcd`"
21*325ce30bSDavid van Moolenbroek
22*325ce30bSDavid van Moolenbroek# Set TERM to minix if not present.
23*325ce30bSDavid van MoolenbroekTERM="${TERM-minix}"
24*325ce30bSDavid van Moolenbroek
25*325ce30bSDavid van Moolenbroekexport TERM PATH
26*325ce30bSDavid van Moolenbroek
27*325ce30bSDavid van Moolenbroek# Local variables
28*325ce30bSDavid van MoolenbroekARCH="`sysenv arch`"
29*325ce30bSDavid van Moolenbroek
30*325ce30bSDavid van Moolenbroekusage()
31*325ce30bSDavid van Moolenbroek{
32*325ce30bSDavid van Moolenbroek    echo >&2 "Usage: $0 [-saf] [start|stop]"
33*325ce30bSDavid van Moolenbroek    exec intr sh
34*325ce30bSDavid van Moolenbroek}
35*325ce30bSDavid van Moolenbroek
36*325ce30bSDavid van Moolenbroekup()
37*325ce30bSDavid van Moolenbroek{
38*325ce30bSDavid van Moolenbroek    # Function to dynamically start a system service
39*325ce30bSDavid van Moolenbroek    opt=""
40*325ce30bSDavid van Moolenbroek    prefix=$(expr "$1 " : '\(-\)')
41*325ce30bSDavid van Moolenbroek    if [ "$prefix" = "-" ];
42*325ce30bSDavid van Moolenbroek    then
43*325ce30bSDavid van Moolenbroek         opt=$1
44*325ce30bSDavid van Moolenbroek         shift
45*325ce30bSDavid van Moolenbroek    fi
46*325ce30bSDavid van Moolenbroek    service=$1
47*325ce30bSDavid van Moolenbroek    shift
48*325ce30bSDavid van Moolenbroek
49*325ce30bSDavid van Moolenbroek    minix-service $opt up /service/$service "$@"
50*325ce30bSDavid van Moolenbroek}
51*325ce30bSDavid van Moolenbroek
52*325ce30bSDavid van Moolenbroekedit()
53*325ce30bSDavid van Moolenbroek{
54*325ce30bSDavid van Moolenbroek    # Function to dynamically edit system service settings
55*325ce30bSDavid van Moolenbroek    opt=""
56*325ce30bSDavid van Moolenbroek    prefix=$(expr "$1 " : '\(-\)')
57*325ce30bSDavid van Moolenbroek    if [ "$prefix" = "-" ];
58*325ce30bSDavid van Moolenbroek    then
59*325ce30bSDavid van Moolenbroek         opt=$1
60*325ce30bSDavid van Moolenbroek         shift
61*325ce30bSDavid van Moolenbroek    fi
62*325ce30bSDavid van Moolenbroek    service=$1
63*325ce30bSDavid van Moolenbroek    shift
64*325ce30bSDavid van Moolenbroek
65*325ce30bSDavid van Moolenbroek    # Assume binaries are always in /service or /usr/pkg/service
66*325ce30bSDavid van Moolenbroek    binlocation=/service/$service
67*325ce30bSDavid van Moolenbroek    if [ ! -x $binlocation ]
68*325ce30bSDavid van Moolenbroek    then	binlocation=/usr/pkg/service/$service
69*325ce30bSDavid van Moolenbroek    fi
70*325ce30bSDavid van Moolenbroek
71*325ce30bSDavid van Moolenbroek    # Mostly to find init...
72*325ce30bSDavid van Moolenbroek    if [ ! -x $binlocation ]
73*325ce30bSDavid van Moolenbroek    then	binlocation=/sbin/$service
74*325ce30bSDavid van Moolenbroek    fi
75*325ce30bSDavid van Moolenbroek    minix-service $opt edit $binlocation -label $service "$@"
76*325ce30bSDavid van Moolenbroek}
77*325ce30bSDavid van Moolenbroek
78*325ce30bSDavid van Moolenbroekset -- `sysenv bootopt` "$@"
79*325ce30bSDavid van Moolenbroekwhile getopts 'saf' opt
80*325ce30bSDavid van Moolenbroekdo
81*325ce30bSDavid van Moolenbroek    case $opt in
82*325ce30bSDavid van Moolenbroek    s)	sflag=t ;;	# Single user
83*325ce30bSDavid van Moolenbroek    a)	aflag=t ;;	# Ask for /usr
84*325ce30bSDavid van Moolenbroek    f)	fflag=-f ;;	# Force a full file system check
85*325ce30bSDavid van Moolenbroek    *)	usage
86*325ce30bSDavid van Moolenbroek    esac
87*325ce30bSDavid van Moolenbroekdone
88*325ce30bSDavid van Moolenbroekshift `expr $OPTIND - 1`
89*325ce30bSDavid van Moolenbroek
90*325ce30bSDavid van Moolenbroekcase "$#:$1" in
91*325ce30bSDavid van Moolenbroek1:start|1:stop)
92*325ce30bSDavid van Moolenbroek    action=$1
93*325ce30bSDavid van Moolenbroek    ;;
94*325ce30bSDavid van Moolenbroek*)  usage
95*325ce30bSDavid van Moolenbroekesac
96*325ce30bSDavid van Moolenbroek
97*325ce30bSDavid van Moolenbroekcase $action in
98*325ce30bSDavid van Moolenbroekstart)
99*325ce30bSDavid van Moolenbroek    # If booting from CD, we want some directories to be ramdisks
100*325ce30bSDavid van Moolenbroek    if [ ! -z "$bootcd" ]
101*325ce30bSDavid van Moolenbroek    then
102*325ce30bSDavid van Moolenbroek	. /etc/rc.cd
103*325ce30bSDavid van Moolenbroek    fi
104*325ce30bSDavid van Moolenbroek
105*325ce30bSDavid van Moolenbroek    # National keyboard?
106*325ce30bSDavid van Moolenbroek    test -f /etc/keymap && loadkeys /etc/keymap
107*325ce30bSDavid van Moolenbroek
108*325ce30bSDavid van Moolenbroek    # options for fsck. default is -r, which prompts the user for repairs.
109*325ce30bSDavid van Moolenbroek    optname=fsckopts
110*325ce30bSDavid van Moolenbroek    fsckopts=-p
111*325ce30bSDavid van Moolenbroek    if sysenv $optname >/dev/null
112*325ce30bSDavid van Moolenbroek    then       fsckopts="`sysenv $optname`"
113*325ce30bSDavid van Moolenbroek    fi
114*325ce30bSDavid van Moolenbroek
115*325ce30bSDavid van Moolenbroek    if [ "`sysenv debug_fkeys`" != 0 ]
116*325ce30bSDavid van Moolenbroek    then
117*325ce30bSDavid van Moolenbroek        up -n is -period 5HZ
118*325ce30bSDavid van Moolenbroek    fi
119*325ce30bSDavid van Moolenbroek
120*325ce30bSDavid van Moolenbroek    # Set timezone.
121*325ce30bSDavid van Moolenbroek    export TZ=GMT0
122*325ce30bSDavid van Moolenbroek    if [ -f "$RC_TZ" ]
123*325ce30bSDavid van Moolenbroek    then
124*325ce30bSDavid van Moolenbroek         . "$RC_TZ"
125*325ce30bSDavid van Moolenbroek    fi
126*325ce30bSDavid van Moolenbroek
127*325ce30bSDavid van Moolenbroek    # Start real time clock driver & set system time, otherwise default date.
128*325ce30bSDavid van Moolenbroek    up readclock.drv
129*325ce30bSDavid van Moolenbroek    readclock -q || date 201301010000
130*325ce30bSDavid van Moolenbroek
131*325ce30bSDavid van Moolenbroek    # We are not shutting down.
132*325ce30bSDavid van Moolenbroek    if [ -f /etc/nologin ]
133*325ce30bSDavid van Moolenbroek    then
134*325ce30bSDavid van Moolenbroek        rm -f /etc/nologin
135*325ce30bSDavid van Moolenbroek    fi
136*325ce30bSDavid van Moolenbroek
137*325ce30bSDavid van Moolenbroek    # Use MFS binary only from kernel image?
138*325ce30bSDavid van Moolenbroek    if [ "`sysenv bin_img`" = 1 ]
139*325ce30bSDavid van Moolenbroek    then
140*325ce30bSDavid van Moolenbroek        bin_img="-i "
141*325ce30bSDavid van Moolenbroek    fi
142*325ce30bSDavid van Moolenbroek
143*325ce30bSDavid van Moolenbroek    # fsck + mount using /etc/fstab.
144*325ce30bSDavid van Moolenbroek    fsck -x / $fflag $fsckopts
145*325ce30bSDavid van Moolenbroek    mount -a
146*325ce30bSDavid van Moolenbroek
147*325ce30bSDavid van Moolenbroek    if [ -z "`sysenv bootramdisk`" ]
148*325ce30bSDavid van Moolenbroek    then
149*325ce30bSDavid van Moolenbroek	# Unmount and free now defunct ramdisk
150*325ce30bSDavid van Moolenbroek	umount /dev/imgrd > /dev/null || echo "Failed to unmount boot ramdisk"
151*325ce30bSDavid van Moolenbroek	ramdisk 0 /dev/imgrd || echo "Failed to free boot ramdisk"
152*325ce30bSDavid van Moolenbroek    fi
153*325ce30bSDavid van Moolenbroek
154*325ce30bSDavid van Moolenbroek    # Initialize files.
155*325ce30bSDavid van Moolenbroek    >/var/run/utmp				# /etc/utmp keeps track of logins
156*325ce30bSDavid van Moolenbroek    >/var/run/utmpx				# /etc/utmpx keeps track of logins
157*325ce30bSDavid van Moolenbroek
158*325ce30bSDavid van Moolenbroek    # Edit settings for boot system services
159*325ce30bSDavid van Moolenbroek    if [ "`sysenv skip_boot_config`" != 1 ]
160*325ce30bSDavid van Moolenbroek    then
161*325ce30bSDavid van Moolenbroek	edit rs
162*325ce30bSDavid van Moolenbroek	edit vm
163*325ce30bSDavid van Moolenbroek	edit pm
164*325ce30bSDavid van Moolenbroek	edit sched
165*325ce30bSDavid van Moolenbroek	edit vfs
166*325ce30bSDavid van Moolenbroek	edit ds
167*325ce30bSDavid van Moolenbroek	edit tty
168*325ce30bSDavid van Moolenbroek	edit memory
169*325ce30bSDavid van Moolenbroek	edit mib
170*325ce30bSDavid van Moolenbroek	edit pfs
171*325ce30bSDavid van Moolenbroek	edit init
172*325ce30bSDavid van Moolenbroek	#
173*325ce30bSDavid van Moolenbroek	# Keep a copy around to recover the root FS from crashes
174*325ce30bSDavid van Moolenbroek	#
175*325ce30bSDavid van Moolenbroek	rootline=`cat /etc/mtab | grep "on / "`
176*325ce30bSDavid van Moolenbroek	rootfs=fs_`echo "$rootline" | cut -d' ' -f1 | cut -d'/' -f3`
177*325ce30bSDavid van Moolenbroek	[ "$rootfs" = "fs_bootramdisk" ] && rootfs=fs_imgrd
178*325ce30bSDavid van Moolenbroek	roottype=`echo "$rootline" | cut -d' ' -f5`
179*325ce30bSDavid van Moolenbroek	minix-service -c edit /service/$roottype -label $rootfs
180*325ce30bSDavid van Moolenbroek    fi
181*325ce30bSDavid van Moolenbroek
182*325ce30bSDavid van Moolenbroek    if [ "$sflag" ]
183*325ce30bSDavid van Moolenbroek    then
184*325ce30bSDavid van Moolenbroek	echo "Single user. Press ^D to resume multiuser startup."
185*325ce30bSDavid van Moolenbroek	intr sh
186*325ce30bSDavid van Moolenbroek	echo
187*325ce30bSDavid van Moolenbroek    fi
188*325ce30bSDavid van Moolenbroek
189*325ce30bSDavid van Moolenbroek    echo "Multiuser startup in progress ..."
190*325ce30bSDavid van Moolenbroek
191*325ce30bSDavid van Moolenbroek    case "`printroot -r`":$bootcd in
192*325ce30bSDavid van Moolenbroek    /dev/ram:)
193*325ce30bSDavid van Moolenbroek	# Remove boot-only things to make space,
194*325ce30bSDavid van Moolenbroek	# unless booting from CD, in which case we need them.
195*325ce30bSDavid van Moolenbroek	rm -rf /boot
196*325ce30bSDavid van Moolenbroek	# put the compiler on ram
197*325ce30bSDavid van Moolenbroek	cp /usr/lib/em* /usr/lib/cpp* /lib
198*325ce30bSDavid van Moolenbroek    esac
199*325ce30bSDavid van Moolenbroek
200*325ce30bSDavid van Moolenbroek    echo -n "Starting hotplugging infrastructure... "
201*325ce30bSDavid van Moolenbroek    rm -f /var/run/devmand.pid
202*325ce30bSDavid van Moolenbroek    devmand -d /etc/devmand -d /usr/pkg/etc/devmand &
203*325ce30bSDavid van Moolenbroek    echo "done."
204*325ce30bSDavid van Moolenbroek
205*325ce30bSDavid van Moolenbroek    # Things should be alright now.
206*325ce30bSDavid van Moolenbroek    ;;
207*325ce30bSDavid van Moolenbroekstop)
208*325ce30bSDavid van Moolenbroek    sync
209*325ce30bSDavid van Moolenbroek    if [ -f /var/run/devmand.pid ]
210*325ce30bSDavid van Moolenbroek    then
211*325ce30bSDavid van Moolenbroek	kill -INT `cat /var/run/devmand.pid`
212*325ce30bSDavid van Moolenbroek	# without this delay the following will
213*325ce30bSDavid van Moolenbroek	# be printed in the console
214*325ce30bSDavid van Moolenbroek	# RS: devman not running?
215*325ce30bSDavid van Moolenbroek	sleep 1
216*325ce30bSDavid van Moolenbroek    fi
217*325ce30bSDavid van Moolenbroek
218*325ce30bSDavid van Moolenbroek    if [ -x /service/usbd ]
219*325ce30bSDavid van Moolenbroek    then
220*325ce30bSDavid van Moolenbroek	minix-service down usbd
221*325ce30bSDavid van Moolenbroek    fi
222*325ce30bSDavid van Moolenbroek
223*325ce30bSDavid van Moolenbroek    # Tell RS server we're going down.
224*325ce30bSDavid van Moolenbroek    minix-service shutdown
225*325ce30bSDavid van Moolenbroek    ;;
226*325ce30bSDavid van Moolenbroekesac
227*325ce30bSDavid van Moolenbroek
228*325ce30bSDavid van Moolenbroek# Further initialization.
229*325ce30bSDavid van Moolenbroektest -f /usr/etc/rc && sh /usr/etc/rc $action
230*325ce30bSDavid van Moolenbroektest -f /usr/local/etc/rc && sh /usr/local/etc/rc $action
231*325ce30bSDavid van Moolenbroek
232*325ce30bSDavid van Moolenbroek# Any messages?
233*325ce30bSDavid van Moolenbroekif [ "$action" = start ]
234*325ce30bSDavid van Moolenbroekthen	if [ -f /etc/issue ]
235*325ce30bSDavid van Moolenbroek	then	cat /etc/issue
236*325ce30bSDavid van Moolenbroek	fi
237*325ce30bSDavid van Moolenbroekfi
238*325ce30bSDavid van Moolenbroek
239*325ce30bSDavid van Moolenbroekexit 0
240