VFS CHANGES: - dmap table no longer statically initialized in VFS - Dropped FSSIGNON svrctl call no longer used by INET INET CHANGES: - INET announces its presence to VFS just like any other driver RS CHANGES: - The boot image dev table contains all the data to initialize VFS' dmap table - RS interface supports asynchronous up and update operations now - RS interface extended to support driver style and flags
		
			
				
	
	
		
			194 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
# /etc/rc - System startup script run by init before going multiuser.
 | 
						|
 | 
						|
exec >/dev/log
 | 
						|
exec 2>/dev/log
 | 
						|
exec </dev/null
 | 
						|
 | 
						|
umask 022
 | 
						|
TERM="${TERM-minix}"
 | 
						|
PATH=/usr/local/bin:/bin:/usr/bin:/usr/sbin
 | 
						|
RC_TZ=/etc/rc.timezone
 | 
						|
export TERM PATH
 | 
						|
 | 
						|
usage()
 | 
						|
{
 | 
						|
    echo >&2 "Usage: $0 [-saf] start|stop|down"
 | 
						|
    exec intr sh
 | 
						|
}
 | 
						|
 | 
						|
upopt()
 | 
						|
{
 | 
						|
    opt=$1
 | 
						|
    shift
 | 
						|
    service=$1
 | 
						|
    shift
 | 
						|
 | 
						|
    # Function to dynamically start a system service
 | 
						|
    echo -n " $service"
 | 
						|
    service $opt up /sbin/$service "$@"
 | 
						|
}
 | 
						|
 | 
						|
while getopts 'saf' opt
 | 
						|
do
 | 
						|
    case $opt in
 | 
						|
    s)	sflag=t ;;	# Single user
 | 
						|
    a)	aflag=t ;;	# Ask for /usr
 | 
						|
    f)	fflag=t ;;	# Force a full file system check
 | 
						|
    *)	usage
 | 
						|
    esac
 | 
						|
done
 | 
						|
shift `expr $OPTIND - 1`
 | 
						|
 | 
						|
case "$#:$1" in
 | 
						|
1:start|1:stop|1:down)
 | 
						|
    action=$1
 | 
						|
    ;;
 | 
						|
*)  usage
 | 
						|
esac
 | 
						|
 | 
						|
case $action in
 | 
						|
start)
 | 
						|
    echo -n "Multiuser startup in progress ...:"
 | 
						|
 | 
						|
    # National keyboard?
 | 
						|
    test -f /etc/keymap && loadkeys /etc/keymap
 | 
						|
 | 
						|
    # options for fsck. default is -r, which prompts the user for repairs.
 | 
						|
    fsckopts="`sysenv fsckopts`"
 | 
						|
    if [ ! "$fsckopts" ]
 | 
						|
    then	fsckopts=-r
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ "`sysenv debug_fkeys`" != 0 ]
 | 
						|
    then
 | 
						|
        upopt -n is -period 5HZ
 | 
						|
    fi
 | 
						|
    echo .
 | 
						|
 | 
						|
    # Set timezone.
 | 
						|
    export TZ=GMT0
 | 
						|
    if [ -f "$RC_TZ" ]
 | 
						|
    then . "$RC_TZ"
 | 
						|
    fi
 | 
						|
 | 
						|
    # Try to read the hardware real-time clock, otherwise do it manually.
 | 
						|
    readclock || intr date -q
 | 
						|
 | 
						|
    # Initialize files.
 | 
						|
    printroot >/etc/mtab		# /etc/mtab keeps track of mounts
 | 
						|
    >/etc/utmp				# /etc/utmp keeps track of logins
 | 
						|
 | 
						|
    # /etc/fstab lists the root, tmp and usr devices.
 | 
						|
    . /etc/fstab
 | 
						|
 | 
						|
    # Unmount now defunct ramdisk
 | 
						|
    umount /dev/imgrd > /dev/null || echo "Failed to unmount boot ramdisk"
 | 
						|
 | 
						|
    # Use MFS binary only from kernel image?
 | 
						|
    if [ "`sysenv bin_img`" = 1 ]
 | 
						|
    then
 | 
						|
        bin_img="-i "
 | 
						|
    fi
 | 
						|
 | 
						|
    # Are we booting from CD?
 | 
						|
    bootcd="`/bin/sysenv bootcd`"
 | 
						|
 | 
						|
    # If booting from CD, /usr has to be mounted readonly.
 | 
						|
    # Also, $usr won't be specified correctly in the
 | 
						|
    # fstab (the CD could be anywhere), so we decide
 | 
						|
    # where it is based on sysenv (set by FS when probing for CD).
 | 
						|
    if [ "$bootcd" = 1 ]
 | 
						|
    then	
 | 
						|
    		#imagedev="`/bin/sysenv cdproberoot`"
 | 
						|
    		#usrdev="`expr $imagedev + 1`"
 | 
						|
    		usr_roflag="-r"
 | 
						|
    		usr="$cddev"p2
 | 
						|
    		echo "Setting /usr on cd is $usr"
 | 
						|
    fi
 | 
						|
 
 | 
						|
 | 
						|
    # Mount the /usr partition unless this is a single floppy Minix.
 | 
						|
    if [ ! -d /usr/bin ]
 | 
						|
    then
 | 
						|
	if [ "$aflag" -o "$usr" = unknown ]
 | 
						|
	then
 | 
						|
	    # We need to ask what the /usr du jour is.
 | 
						|
	    intr sh -c '
 | 
						|
		echo -n "Finish the name of device to mount as /usr: /dev/"
 | 
						|
		read usr
 | 
						|
		echo "usr=/dev/$usr" >/tmp/usr'
 | 
						|
	    . /tmp/usr
 | 
						|
	fi
 | 
						|
 | 
						|
	mount $bin_img $usr_roflag $usr /usr || {
 | 
						|
	    echo "\
 | 
						|
Please try to mount something else as /usr, then hit CTRL-D to continue startup.
 | 
						|
Mount $usr /usr failed -- Single user."
 | 
						|
	    intr sh
 | 
						|
	}
 | 
						|
	rm -f /tmp/usr
 | 
						|
    fi
 | 
						|
 | 
						|
    # Check if the system crashed.
 | 
						|
    if shutdown -C
 | 
						|
    then
 | 
						|
	echo
 | 
						|
	echo "The system was not properly shut down.  Checking file systems."
 | 
						|
	fflag=t
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ "$fflag" ]
 | 
						|
    then
 | 
						|
	umount $usr
 | 
						|
	echo "fsck / - $root"
 | 
						|
	intr fsck $fsckopts $root
 | 
						|
	echo "fsck /usr - $usr"
 | 
						|
	intr fsck $fsckopts $usr
 | 
						|
	if [ ! -z "$home" ]
 | 
						|
	then	echo "fsck /home - $home"
 | 
						|
		intr fsck $fsckopts $home
 | 
						|
	fi
 | 
						|
	mount $bin_img $usr /usr
 | 
						|
    fi
 | 
						|
 | 
						|
    if [ ! -z "$home" ]
 | 
						|
    then mount $bin_img $home /home || echo "WARNING: couldn't mount $home on /home"
 | 
						|
    fi
 | 
						|
 | 
						|
    # This file is necessary for above 'shutdown -C' check.
 | 
						|
    # (Silence stderr in case of running from cd.)
 | 
						|
    touch /usr/adm/wtmp 2>/dev/null
 | 
						|
 | 
						|
    if [ "$sflag" ]
 | 
						|
    then
 | 
						|
	echo "Single user."
 | 
						|
	intr sh
 | 
						|
    fi
 | 
						|
 | 
						|
    case "`printroot -r`":$bootcd in
 | 
						|
    /dev/ram:)
 | 
						|
	# Remove boot-only things to make space,
 | 
						|
	# unless booting from CD, in which case we need them.
 | 
						|
	rm -rf /boot
 | 
						|
	# put the compiler on ram
 | 
						|
	cp /usr/lib/em* /usr/lib/cpp* /lib
 | 
						|
    esac
 | 
						|
 | 
						|
    # Things should be alright now.
 | 
						|
    ;;
 | 
						|
down|stop)
 | 
						|
    sync
 | 
						|
    # Tell RS server we're going down.
 | 
						|
    service shutdown
 | 
						|
    ;;
 | 
						|
esac
 | 
						|
 | 
						|
# Further initialization.
 | 
						|
test -f /usr/etc/rc && sh /usr/etc/rc $action
 | 
						|
test -f /usr/local/etc/rc && sh /usr/local/etc/rc $action
 | 
						|
 | 
						|
# Any messages?
 | 
						|
test "$action" = start -a -f /etc/issue && cat /etc/issue
 | 
						|
 | 
						|
exit 0
 |