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