rc-scripts/trunk/rc.d: rc rc.shutdown rc.sysinit

baggins cvs at pld-linux.org
Tue Oct 25 20:23:03 CEST 2005


Author: baggins
Date: Tue Oct 25 20:22:44 2005
New Revision: 6489

Modified:
   rc-scripts/trunk/rc.d/rc
   rc-scripts/trunk/rc.d/rc.shutdown
   rc-scripts/trunk/rc.d/rc.sysinit
Log:
- add support for running inside vservers, the diff may seem huge but it's
  mostly white space change


Modified: rc-scripts/trunk/rc.d/rc
==============================================================================
--- rc-scripts/trunk/rc.d/rc	(original)
+++ rc-scripts/trunk/rc.d/rc	Tue Oct 25 20:22:44 2005
@@ -21,9 +21,14 @@
 
 # Get terminal size of standard input of the system console
 [ -z "$CONSOLE" ] && CONSOLE=/dev/console
-set -- $(stty size < $CONSOLE 2>/dev/null)
-  LINES=$1
-COLUMNS=$2
+if [ -c $CONSOLE ]; then
+	set -- $(stty size < $CONSOLE 2>/dev/null)
+	  LINES=$1
+	COLUMNS=$2
+else
+	  LINES=
+	COLUMNS=
+fi
 export LINES COLUMNS CONSOLE
   
 # NLS
@@ -79,7 +84,8 @@
 # virtual console, and send messages to /dev/console 
 # (it can be serial console too) 
 if [ "$COLUMNS" -gt 0 ]; then
-	if [ "$argv2" != "chroot" ] && [ "$runlevel" = "0" -o "$runlevel" = "6" ]; then
+	if [ "$argv2" != "chroot" ] && ! is_yes "$VSERVER" && \
+	   [ "$runlevel" = "0" -o "$runlevel" = "6" ]; then
 		CONSOLE=/dev/tty1
 		[ -x /usr/bin/chvt ] && /usr/bin/chvt 1 && echo > $CONSOLE
 		exec 0<> /dev/console 1>&0 2>&0
@@ -93,7 +99,7 @@
 # See if we want to be in user confirmation mode
 if [ "$previous" = "N" ]; then
 	if grep -qi confirm /proc/cmdline >/dev/null 2>/dev/null \
-		|| [ -f /var/run/confirm ]; then
+		|| [ -f /var/run/confirm ] || ! is_yes "$VSERVER"; then
 		rm -f /var/run/confirm
 		CONFIRM="yes"
 		nls "Entering interactive startup"
@@ -139,8 +145,16 @@
 	export progress=0
 fi
 
+if is_yes "$VSERVER"; then
+	# if runlevel is not 0 (halt) or 6 (reboot) run rc.sysinit
+	# BUT only if rc is run standalone (not run by init, as init will run rc.sysinit)
+	if [ "$previous" != "N" -a "$runlevel" != "0" -a "$runlevel" != "6" ]; then
+		/etc/rc.d/rc.sysinit $runlevel
+	fi
+fi
+
 # set onlcr to avoid staircase effect and do not lock scrolling
-stty onlcr -ixon 0>&1
+stty onlcr -ixon 0>&1 2>/dev/null
 
 # Say something ;)
 af2=$(termput setaf $CRESMAN)
@@ -233,7 +247,7 @@
 	TMPDIR=/dev/null
 	export TMPDIR
 	if [ "$argv2" != "chroot" ]; then
-    	    exec /etc/rc.d/rc.shutdown $runlevel
+    	    exec /etc/rc.d/rc.shutdown $runlevel $previous
 	else
 	    exit 0
 	fi
@@ -258,4 +272,4 @@
 exit 0
 
 # This must be last line !
-# vi:syntax=sh:ts=8:sw=4
+# vi:syntax=sh

Modified: rc-scripts/trunk/rc.d/rc.shutdown
==============================================================================
--- rc-scripts/trunk/rc.d/rc.shutdown	(original)
+++ rc-scripts/trunk/rc.d/rc.shutdown	Tue Oct 25 20:22:44 2005
@@ -28,6 +28,7 @@
 [ "${BASH+bash}" = bash ] && enable kill
 
 runlevel=$1
+previous=$2
 
 run_cmd "Sending all processes the TERM signal" killall5 -15
 sleep 5
@@ -45,92 +46,94 @@
 	run_cmd "Turning off quotas for local filesystems" /sbin/quotaoff -a
 fi
 
-# Unmount file systems, killing processes if we have to.
-sig=-15
-retry=3
-force=
-remaining=$(awk '!/(^#| proc | loopfs | devfs | devpts | shm | iso9660 | ramfs | tmpfs | sysfs | squashfs |^none|^\/dev\/root| \/ )/ {print $2}' /proc/mounts)
-while [ -n "$remaining" -a "$retry" -gt 0 ]
-do	
-	show "Unmounting file systems" ; busy
-	if ERRORS=$(umount -a $FORCE -t noproc,devfs 2>&1) ; then
-		ok
-	else
-		fail
-		[ -n "$ERRORS" ] && echo "$ERRORS"
-	fi
-	
-	sleep 2
+if ! is_yes "$VSERVER"; then
+	# Unmount file systems, killing processes if we have to.
+	sig=-15
+	retry=3
+	force=
 	remaining=$(awk '!/(^#| proc | loopfs | devfs | devpts | shm | iso9660 | ramfs | tmpfs | sysfs | squashfs |^none|^\/dev\/root| \/ )/ {print $2}' /proc/mounts)
-	[ -z "$remaining" ] && break
-	/sbin/fuser -k -m $sig $remaining > /dev/null
-	sleep 5
-	retry=$(($retry-1))
-	sig=-9
-	force="-f"
-done
-
-run_cmd "Remounting root filesystem in ro mode" mount -n -o remount,ro /
-
-if is_yes "$EVMS_LVM" || [ -x /sbin/vgscan -a -x /sbin/vgchange ]; then
-        lvmversion=$(/sbin/vgchange --version 2>/dev/null | awk '{gsub("vgchange: Logical Volume Manager ",""); gsub("LVM version:     ",""); gsub(/\..*/,"");print $1; exit}')
-	if [ "$lvmversion" = "2" ] ; then
-		lvmignorelock="--ignorelockingfailure"
-	else
-		lvmignorelock=""
+	while [ -n "$remaining" -a "$retry" -gt 0 ]
+	do	
+		show "Unmounting file systems" ; busy
+		if ERRORS=$(umount -a $FORCE -t noproc,devfs 2>&1) ; then
+			ok
+		else
+			fail
+			[ -n "$ERRORS" ] && echo "$ERRORS"
+		fi
+		
+		sleep 2
+		remaining=$(awk '!/(^#| proc | loopfs | devfs | devpts | shm | iso9660 | ramfs | tmpfs | sysfs | squashfs |^none|^\/dev\/root| \/ )/ {print $2}' /proc/mounts)
+		[ -z "$remaining" ] && break
+		/sbin/fuser -k -m $sig $remaining > /dev/null
+		sleep 5
+		retry=$(($retry-1))
+		sig=-9
+		force="-f"
+	done
+
+	run_cmd "Remounting root filesystem in ro mode" mount -n -o remount,ro /
+
+	if is_yes "$EVMS_LVM" || [ -x /sbin/vgscan -a -x /sbin/vgchange ]; then
+		lvmversion=$(/sbin/vgchange --version 2>/dev/null | awk '{gsub("vgchange: Logical Volume Manager ",""); gsub("LVM version:     ",""); gsub(/\..*/,"");print $1; exit}')
+		if [ "$lvmversion" = "2" ] ; then
+			lvmignorelock="--ignorelockingfailure"
+		else
+			lvmignorelock=""
+		fi
+		run_cmd "Stopping LVM volume groups" /sbin/vgchange -a n $lvmignorelock
 	fi
-	run_cmd "Stopping LVM volume groups" /sbin/vgchange -a n $lvmignorelock
-fi
 
-goraidtab=1
-if [ -x /sbin/mdadm -a -f /etc/mdadm.conf ]; then
-	if (grep -qE "^([[:blank:]]|)ARRAY[[:blank:]]" /etc/mdadm.conf 2>/dev/null); then
-		    run_cmd "Turning off RAID devices" /sbin/mdadm --stop --scan
-		    rc=$?
-		    [ "$rc" -eq 0 ] && goraidtab=0
+	goraidtab=1
+	if [ -x /sbin/mdadm -a -f /etc/mdadm.conf ]; then
+		if (grep -qE "^([[:blank:]]|)ARRAY[[:blank:]]" /etc/mdadm.conf 2>/dev/null); then
+			    run_cmd "Turning off RAID devices" /sbin/mdadm --stop --scan
+			    rc=$?
+			    [ "$rc" -eq 0 ] && goraidtab=0
+		fi
 	fi
-fi
-														
-# turn off raid
-if [ -x /sbin/raidstop -a -f /etc/raidtab -a "$goraidtab" -eq 1 ]; then
-	# we can not use raidstop -a here because this will only stop
-	# devices listed in the default config file which is not always
-	# the case. So we look only for the active raid devices
-	if [ -f /proc/mdstat ] ; then
-		mddevs=$(awk '/^md.* active/ {print $1}' /proc/mdstat)
-		for mddev in $mddevs ; do
-			show "Turning off RAID for %s" "$mddev"
-			daemon /sbin/raidstop /dev/$mddev
-		done
-		unset mddev mddevs
+															
+	# turn off raid
+	if [ -x /sbin/raidstop -a -f /etc/raidtab -a "$goraidtab" -eq 1 ]; then
+		# we can not use raidstop -a here because this will only stop
+		# devices listed in the default config file which is not always
+		# the case. So we look only for the active raid devices
+		if [ -f /proc/mdstat ] ; then
+			mddevs=$(awk '/^md.* active/ {print $1}' /proc/mdstat)
+			for mddev in $mddevs ; do
+				show "Turning off RAID for %s" "$mddev"
+				daemon /sbin/raidstop /dev/$mddev
+			done
+			unset mddev mddevs
+		fi
+		# runcmd "Turning off RAID" /sbin/raidstop -a
 	fi
-	# runcmd "Turning off RAID" /sbin/raidstop -a
-fi
 
-show "Remounting remaining filesystems ro mode"; busy
-if ( mount | awk '/ext2|ext3|reiserfs|xfs|jfs/ { print $3 }' | \
-	while read line; do 
-	mount -n -o ro,remount $line; done ); then
-	ok
-else
-	fail
+	show "Remounting remaining filesystems ro mode"; busy
+	if ( mount | awk '/ext2|ext3|reiserfs|xfs|jfs/ { print $3 }' | \
+		while read line; do 
+		mount -n -o ro,remount $line; done ); then
+		ok
+	else
+		fail
+	fi
 fi
 
 if [ "$runlevel" = "0" ] ; then
        	show "The system is halted"; ok
 	[ -f /fastboot ] && (show "On the next boot fsck will be skipped."; ok)
 
-	 if [ -x /sbin/poweroff-ups -a -f /etc/killpower -a -f /etc/sysconfig/ups ] ; then
+	if [ -x /sbin/poweroff-ups -a -f /etc/killpower -a -f /etc/sysconfig/ups ] ; then
 	     . /etc/sysconfig/ups
 	     is_yes "$POWEROFF_UPS" && /sbin/poweroff-ups
-	 fi
-	eval halt -d -p
+	fi
+	[ "$previous" != "unknown" ] && eval halt -d -p
 else
 	show "Please stand by while rebooting the system"; ok
 	[ -f /fastboot ] && (show "On the next boot fsck will be skipped."; ok)
 	[ -x /sbin/kexec ] && /sbin/kexec -e
-	eval reboot -d
+	[ "$previous" != "unknown" ] && eval reboot -d
 fi
 
 # This must be last line !
-# vi:syntax=sh:ts=8:sw=4
+# vi:syntax=sh

Modified: rc-scripts/trunk/rc.d/rc.sysinit
==============================================================================
--- rc-scripts/trunk/rc.d/rc.sysinit	(original)
+++ rc-scripts/trunk/rc.d/rc.sysinit	Tue Oct 25 20:22:44 2005
@@ -61,12 +61,12 @@
 . /etc/rc.d/init.d/functions
 
 # sysfs is also needed before any other things (under kernel > 2.5)
-if grep -q sysfs /proc/filesystems 2>/dev/null ; then
+if ! is_yes "$VSERVER" && grep -q sysfs /proc/filesystems 2>/dev/null ; then
     mount -n -o gid=17 -t sysfs sysfs /sys
 fi
 
 # selinux
-if grep -q selinuxfs /proc/filesystems 2>/dev/null && ! grep -q selinuxfs /proc/mounts 2>/dev/null; then
+if ! is_yes "$VSERVER" && grep -q selinuxfs /proc/filesystems 2>/dev/null && ! grep -q selinuxfs /proc/mounts 2>/dev/null; then
     mount -n -o gid=17 -t selinuxfs selinuxfs /selinux
 fi
 
@@ -126,242 +126,244 @@
 	sleep 1
 fi
 
-# Set console loglevel
-if [ -n "$CONSOLE_LOGLEVEL" ]; then
-	/bin/dmesg -n $CONSOLE_LOGLEVEL
-fi
+# Set the hostname
+run_cmd "$(nls 'Host:') ${HOSTNAME}" hostname ${HOSTNAME}
 
-if [ -f /etc/udev/udev.conf ];then
-	. /etc/udev/udev.conf
+# Set the NIS domain name
+if [ -n "$NISDOMAIN" ]; then
+	run_cmd "$(nls 'NIS Domain:') ${NISDOMAIN}" domainname $NISDOMAIN
+else
+	domainname ""
 fi
 
-[ -x /sbin/start_udev ] && run_cmd "Starting udev" /sbin/start_udev
-	
-# /dev must be also mounted before everything but only if we want use them ;-)
-if is_yes "$MOUNT_DEVFS"; then
-	run_cmd "Mounting Device Filesystem" mount -n -t devfs /dev /dev
-fi
+if ! is_yes "$VSERVER"; then
+	# Set console loglevel
+	if [ -n "$CONSOLE_LOGLEVEL" ]; then
+		/bin/dmesg -n $CONSOLE_LOGLEVEL
+	fi
 
-# set up devfsd
-if [ -e /dev/.devfsd -a -x /sbin/devfsd ]; then
-        run_cmd "Starting Device Filesystem Daemon" /sbin/devfsd /dev
-fi
+	if [ -f /etc/udev/udev.conf ];then
+		. /etc/udev/udev.conf
+	fi
 
-# cpuset support (mounted unconditionally, shouldn't be a problem)
-if grep -q cpuset /proc/filesystems 2>/dev/null ; then
-    mount -n -t cpuset none /dev/cpuset
-fi
+	[ -x /sbin/start_udev ] && run_cmd "Starting udev" /sbin/start_udev
+		
+	# /dev must be also mounted before everything but only if we want use them ;-)
+	if is_yes "$MOUNT_DEVFS"; then
+		run_cmd "Mounting Device Filesystem" mount -n -t devfs /dev /dev
+	fi
 
-# Configure Linux kernel (initial configuration, some required modules still
-# may be missing).
-/sbin/sysctl -e -p /etc/sysctl.conf > /dev/null 2>&1
+	# set up devfsd
+	if [ -e /dev/.devfsd -a -x /sbin/devfsd ]; then
+		run_cmd "Starting Device Filesystem Daemon" /sbin/devfsd /dev
+	fi
 
-# Set the system clock.
-ARC=0
-SRM=0
-UTC=0
+	# cpuset support (mounted unconditionally, shouldn't be a problem)
+	if grep -q cpuset /proc/filesystems 2>/dev/null ; then
+	    mount -n -t cpuset none /dev/cpuset
+	fi
 
-if [ -f /etc/sysconfig/clock ]; then
-	. /etc/sysconfig/clock
+	# Configure Linux kernel (initial configuration, some required modules still
+	# may be missing).
+	/sbin/sysctl -e -p /etc/sysctl.conf > /dev/null 2>&1
 
-	# convert old style clock config to new values
-	if [ "${CLOCKMODE}" = "GMT" ]; then
-		UTC=true
-	elif [ "${CLOCKMODE}" = "ARC" ]; then
-		ARC=true
-	fi
-fi
+	# Set the system clock.
+	ARC=0
+	SRM=0
+	UTC=0
 
-if grep "system serial" /proc/cpuinfo 2>/dev/null | grep -q MILO 2>/dev/null ; then
-	ARC=true
-fi
+	if [ -f /etc/sysconfig/clock ]; then
+		. /etc/sysconfig/clock
 
-CLOCKDEF=""
-CLOCKFLAGS="--hctosys"
+		# convert old style clock config to new values
+		if [ "${CLOCKMODE}" = "GMT" ]; then
+			UTC=true
+		elif [ "${CLOCKMODE}" = "ARC" ]; then
+			ARC=true
+		fi
+	fi
 
-if is_yes "$UTC" ; then
-	CLOCKFLAGS="$CLOCKFLAGS --utc"
-	CLOCKDEF="$CLOCKDEF (utc)"
-else
-	CLOCKFLAGS="$CLOCKFLAGS --localtime"
-	CLOCKDEF="$CLOCKDEF (local)"
-fi
+	if grep "system serial" /proc/cpuinfo 2>/dev/null | grep -q MILO 2>/dev/null ; then
+		ARC=true
+	fi
 
-if is_yes "$ARC" ; then
-	CLOCKFLAGS="$CLOCKFLAGS -A"
-	CLOCKDEF="$CLOCKDEF (arc)"
-fi
+	CLOCKDEF=""
+	CLOCKFLAGS="--hctosys"
 
-if is_yes "$SRM" ; then
-	CLOCKFLAGS="$CLOCKFLAGS -S"
-	CLOCKDEF="$CLOCKDEF (srm)"
-fi
+	if is_yes "$UTC" ; then
+		CLOCKFLAGS="$CLOCKFLAGS --utc"
+		CLOCKDEF="$CLOCKDEF (utc)"
+	else
+		CLOCKFLAGS="$CLOCKFLAGS --localtime"
+		CLOCKDEF="$CLOCKDEF (local)"
+	fi
 
-# Check if timezone definition is available
-if [ -e /etc/localtime ] ; then
-	if run_cmd "$(nls 'Setting clock')$CLOCKDEF" /sbin/hwclock $CLOCKFLAGS; then
-		show "$(nls 'Today`s date:') $(LC_CTYPE=C date)"; ok
+	if is_yes "$ARC" ; then
+		CLOCKFLAGS="$CLOCKFLAGS -A"
+		CLOCKDEF="$CLOCKDEF (arc)"
 	fi
-else
-	TIME_SETUP_DELAYED=yes
-fi
 
-# Start up swapping
-run_cmd "Activating swap partitions" swapon -a -e
+	if is_yes "$SRM" ; then
+		CLOCKFLAGS="$CLOCKFLAGS -S"
+		CLOCKDEF="$CLOCKDEF (srm)"
+	fi
 
-# Set the hostname
-run_cmd "$(nls 'Host:') ${HOSTNAME}" hostname ${HOSTNAME}
+	# Check if timezone definition is available
+	if [ -e /etc/localtime ] ; then
+		if run_cmd "$(nls 'Setting clock')$CLOCKDEF" /sbin/hwclock $CLOCKFLAGS; then
+			show "$(nls 'Today`s date:') $(LC_CTYPE=C date)"; ok
+		fi
+	else
+		TIME_SETUP_DELAYED=yes
+	fi
 
-# Set the NIS domain name
-if [ -n "$NISDOMAIN" ]; then
-	run_cmd "$(nls 'NIS Domain:') ${NISDOMAIN}" domainname $NISDOMAIN
-else
-	domainname ""
-fi
+	# Start up swapping
+	run_cmd "Activating swap partitions" swapon -a -e
 
-# Initialize USB controllers
-usb=0
-if ! grep -iq "nousb" /proc/cmdline 2>/dev/null && ! grep -q "usb" /proc/devices 2>/dev/null ; then
-        aliases=$(/sbin/modprobe -c | awk '/^alias usb-controller/ { print $3 }')
-        if [ -n "$aliases" -a "$aliases" != "off" ] ; then
-                /sbin/modprobe -k usbcore
-                for alias in $aliases ; do
-                        [ "$alias" = "off" ] && continue
-                        run_cmd "$(nls 'Initializing USB controller') ($alias)" /sbin/modprobe $alias
-                done
-                [ $? -eq 0 -a -n "$aliases" ] && usb=1
-        fi
-	if grep -iq "usb" /proc/devices 2>/dev/null ; then
-		usb=1
+	# Initialize USB controllers
+	usb=0
+	if ! grep -iq "nousb" /proc/cmdline 2>/dev/null && ! grep -q "usb" /proc/devices 2>/dev/null ; then
+		aliases=$(/sbin/modprobe -c | awk '/^alias usb-controller/ { print $3 }')
+		if [ -n "$aliases" -a "$aliases" != "off" ] ; then
+			/sbin/modprobe -k usbcore
+			for alias in $aliases ; do
+				[ "$alias" = "off" ] && continue
+				run_cmd "$(nls 'Initializing USB controller') ($alias)" /sbin/modprobe $alias
+			done
+			[ $? -eq 0 -a -n "$aliases" ] && usb=1
+		fi
+		if grep -iq "usb" /proc/devices 2>/dev/null ; then
+			usb=1
+		fi
 	fi
-fi
 
-if [ "$usb" = "1" -a ! -f /proc/bus/usb/devices ]; then
-	run_cmd "Mounting USB filesystem" mount -t usbfs usbfs /proc/bus/usb
-fi
+	if [ "$usb" = "1" -a ! -f /proc/bus/usb/devices ]; then
+		run_cmd "Mounting USB filesystem" mount -t usbfs usbfs /proc/bus/usb
+	fi
 
-needusbstorage=
-if [ "$usb" = "1" ]; then
-	needusbstorage=$(LC_ALL=C cat /proc/bus/usb/devices 2>/dev/null|grep -e "^I.*Cls=08" 2>/dev/null)
-	if [ "$(kernelverser)" -lt "002006" ]; then
-    	    LC_ALL=C grep -q 'hid' /proc/bus/usb/drivers 2>/dev/null || run_cmd "Initializing USB HID interface" modprobe hid 2> /dev/null
-    	    mouseoutput=$(cat /proc/bus/usb/devices 2>/dev/null|grep -E "^I.*Cls=03.*Prot=02" 2>/dev/null)
-    	    kbdoutput=$(cat /proc/bus/usb/devices 2>/dev/null|grep -E "^I.*Cls=03.*Prot=01" 2>/dev/null)
-    	    if [ -n "$kbdoutput" ]; then
-		run_cmd "Initializing USB keyboard" modprobe keybdev
-    	    fi
-    	    if [ -n "$mouseoutput" ]; then
-		run_cmd "Initializing USB mouse" modprobe mousedev
-    	    fi
+	needusbstorage=
+	if [ "$usb" = "1" ]; then
+		needusbstorage=$(LC_ALL=C cat /proc/bus/usb/devices 2>/dev/null|grep -e "^I.*Cls=08" 2>/dev/null)
+		if [ "$(kernelverser)" -lt "002006" ]; then
+		    LC_ALL=C grep -q 'hid' /proc/bus/usb/drivers 2>/dev/null || run_cmd "Initializing USB HID interface" modprobe hid 2> /dev/null
+		    mouseoutput=$(cat /proc/bus/usb/devices 2>/dev/null|grep -E "^I.*Cls=03.*Prot=02" 2>/dev/null)
+		    kbdoutput=$(cat /proc/bus/usb/devices 2>/dev/null|grep -E "^I.*Cls=03.*Prot=01" 2>/dev/null)
+		    if [ -n "$kbdoutput" ]; then
+			run_cmd "Initializing USB keyboard" modprobe keybdev
+		    fi
+		    if [ -n "$mouseoutput" ]; then
+			run_cmd "Initializing USB mouse" modprobe mousedev
+		    fi
+		fi
 	fi
-fi
 
-# Setup hdparm thing (if exists and is needed)
-if ! grep -iq nohdparm /proc/cmdline 2>/dev/null; then
-	[ -x /etc/rc.d/rc.hdparm ] && /etc/rc.d/rc.hdparm
-fi
+	# Setup hdparm thing (if exists and is needed)
+	if ! grep -iq nohdparm /proc/cmdline 2>/dev/null; then
+		[ -x /etc/rc.d/rc.hdparm ] && /etc/rc.d/rc.hdparm
+	fi
 
-if [ -f /fastboot ] || grep -iq "fastboot" /proc/cmdline 2>/dev/null ; then
-	fastboot=yes
-else
-	fastboot=
-fi
+	if [ -f /fastboot ] || grep -iq "fastboot" /proc/cmdline 2>/dev/null ; then
+		fastboot=yes
+	else
+		fastboot=
+	fi
 
-if [ -f /fsckoptions ]; then
-	fsckoptions=$(cat /fsckoptions)
-else
-	fsckoptions=''
-fi
+	if [ -f /fsckoptions ]; then
+		fsckoptions=$(cat /fsckoptions)
+	else
+		fsckoptions=''
+	fi
 
-if [ -f /forcefsck ]; then
-        fsckoptions="-f $fsckoptions"
-fi
+	if [ -f /forcefsck ]; then
+		fsckoptions="-f $fsckoptions"
+	fi
 
-_RUN_QUOTACHECK=0
-_ROOTFS_TYPE=$(grep " / " /proc/mounts 2>/dev/null | awk '{ print $3 }')
+	_RUN_QUOTACHECK=0
+	_ROOTFS_TYPE=$(grep " / " /proc/mounts 2>/dev/null | awk '{ print $3 }')
 
-if [ -z "$fastboot" -a "$_ROOTFS_TYPE" != "nfs" -a "$_ROOTFS_TYPE" != "romfs" ]; then 
-	show "Checking root filesystem"; started
-	initlog -c "fsck -C -T -a $fsckoptions /"
+	if [ -z "$fastboot" -a "$_ROOTFS_TYPE" != "nfs" -a "$_ROOTFS_TYPE" != "romfs" ]; then 
+		show "Checking root filesystem"; started
+		initlog -c "fsck -C -T -a $fsckoptions /"
 
-	rc=$?
+		rc=$?
 
-	# A return of 4 or higher means there were serious problems.
-	if [ $rc -gt 3 ]; then
-	    	[ -e /proc/splash ] && echo "verbose" > /proc/splash
-		# don't use '\n' in nls macro !
-		echo
-		echo
-		nls "*** An error occurred during the file system check."
-		nls "*** Dropping you to a shell; the system will reboot"
-		nls "*** when you leave the shell."
-		echo
+		# A return of 4 or higher means there were serious problems.
+		if [ $rc -gt 3 ]; then
+			[ -e /proc/splash ] && echo "verbose" > /proc/splash
+			# don't use '\n' in nls macro !
+			echo
+			echo
+			nls "*** An error occurred during the file system check."
+			nls "*** Dropping you to a shell; the system will reboot"
+			nls "*** when you leave the shell."
+			echo
 
-		PS1="$(nls '(Repair filesystem)# ')"; export PS1
-		[ "$SELINUX" = "1" ] && disable_selinux
-		if is_yes "$RUN_SULOGIN_ON_ERR"; then
-			/sbin/sulogin
-		else
-			/bin/sh
-		fi
+			PS1="$(nls '(Repair filesystem)# ')"; export PS1
+			[ "$SELINUX" = "1" ] && disable_selinux
+			if is_yes "$RUN_SULOGIN_ON_ERR"; then
+				/sbin/sulogin
+			else
+				/bin/sh
+			fi
 
-		run_cmd "Unmounting file systems" umount -a
-		mount -n -o remount,ro /
-		run_cmd "Automatic reboot in progress" reboot
-	# A return of 2 or 3 means that filesystem was repaired but we need
-	# to reboot.
-	elif [ "$rc" = "2" -o "$rc" = "3" ]; then
-	    	[ -e /proc/splash ] && echo "verbose" > /proc/splash
-		echo
-		nls "*** Filesystem was repaired but system needs to be"
-		nls "*** rebooted before mounting it."
-		nls "*** REBOOTING ***"
-		echo
-
-		run_cmd "Unmounting file systems" umount -a
-		mount -n -o remount,ro /
-		run_cmd "Automatic reboot in progress" reboot
-	elif [ "$rc" = "1" ]; then
-		_RUN_QUOTACHECK=1
+			run_cmd "Unmounting file systems" umount -a
+			mount -n -o remount,ro /
+			run_cmd "Automatic reboot in progress" reboot
+		# A return of 2 or 3 means that filesystem was repaired but we need
+		# to reboot.
+		elif [ "$rc" = "2" -o "$rc" = "3" ]; then
+			[ -e /proc/splash ] && echo "verbose" > /proc/splash
+			echo
+			nls "*** Filesystem was repaired but system needs to be"
+			nls "*** rebooted before mounting it."
+			nls "*** REBOOTING ***"
+			echo
+
+			run_cmd "Unmounting file systems" umount -a
+			mount -n -o remount,ro /
+			run_cmd "Automatic reboot in progress" reboot
+		elif [ "$rc" = "1" ]; then
+			_RUN_QUOTACHECK=1
+		fi
 	fi
-fi
 
-# Unmount the initrd, if necessary
-if LC_ALL=C grep -q /initrd /proc/mounts 2>/dev/null && ! LC_ALL=C grep -q /initrd/loopfs /proc/mounts 2>/dev/null ; then
-    if [ -e /initrd/dev/.devfsd ]; then
-	umount /initrd/dev
-    fi
-    umount /initrd
-    /sbin/blockdev --flushbufs /dev/ram0 >/dev/null 2>&1
-fi
-		      
-# Check for arguments 
-if grep -iq nopnp /proc/cmdline 2>/dev/null; then
-	PNP=
-else
-	PNP=yes
-fi
+	# Unmount the initrd, if necessary
+	if LC_ALL=C grep -q /initrd /proc/mounts 2>/dev/null && ! LC_ALL=C grep -q /initrd/loopfs /proc/mounts 2>/dev/null ; then
+	    if [ -e /initrd/dev/.devfsd ]; then
+		umount /initrd/dev
+	    fi
+	    umount /initrd
+	    /sbin/blockdev --flushbufs /dev/ram0 >/dev/null 2>&1
+	fi
+			      
+	# Check for arguments 
+	if grep -iq nopnp /proc/cmdline 2>/dev/null; then
+		PNP=
+	else
+		PNP=yes
+	fi
 
-# set up pnp and kernel pnp
-if [ -n "$PNP" ]; then
-    if is_yes "$RUN_USERPNP" && [ -x /sbin/isapnp -a -f /etc/isapnp/isapnp.conf ]; then
-	run_cmd "Setting up ISA PNP devices (userspace pnp)" /sbin/isapnp /etc/isapnp/isapnp.conf
-    fi
-    if is_yes "$RUN_KERNELPNP"; then
-	/sbin/modprobe -k isa-pnp 2> /dev/null
-	if [ -e /proc/isapnp -a -f /etc/isapnp/isapnp-kernel.conf ]; then
-	    show "Setting up ISA PNP devices (kernelspace pnp)"; busy
-	    grep -v "^#" /etc/isapnp/isapnp-kernel.conf 2>/dev/null >/proc/isapnp && (deltext; ok) || (deltext; fail)
+	# set up pnp and kernel pnp
+	if [ -n "$PNP" ]; then
+	    if is_yes "$RUN_USERPNP" && [ -x /sbin/isapnp -a -f /etc/isapnp/isapnp.conf ]; then
+		run_cmd "Setting up ISA PNP devices (userspace pnp)" /sbin/isapnp /etc/isapnp/isapnp.conf
+	    fi
+	    if is_yes "$RUN_KERNELPNP"; then
+		/sbin/modprobe -k isa-pnp 2> /dev/null
+		if [ -e /proc/isapnp -a -f /etc/isapnp/isapnp-kernel.conf ]; then
+		    show "Setting up ISA PNP devices (kernelspace pnp)"; busy
+		    grep -v "^#" /etc/isapnp/isapnp-kernel.conf 2>/dev/null >/proc/isapnp && (deltext; ok) || (deltext; fail)
+		fi
+	    fi
 	fi
-    fi
-fi
 
-# Remount the root filesystem read-write
-run_cmd "Remounting root filesystem in rw mode" mount -n -o remount,rw /
+	# Remount the root filesystem read-write
+	run_cmd "Remounting root filesystem in rw mode" mount -n -o remount,rw /
 
-# Update quotas if fsck was run on /
-if [ "$_RUN_QUOTACHECK" = "1" -a -x /sbin/quotacheck ]; then
-	run_cmd "Checking root filesystem quotas" /sbin/quotacheck -vnug /
+	# Update quotas if fsck was run on /
+	if [ "$_RUN_QUOTACHECK" = "1" -a -x /sbin/quotacheck ]; then
+		run_cmd "Checking root filesystem quotas" /sbin/quotacheck -vnug /
+	fi
 fi
 
 # Clean up SELinux labels
@@ -378,22 +380,24 @@
 # Remove stale backups
 rm -f /etc/mtab~ /etc/mtab~~ /etc/cryptomtab~ /etc/cryptomtab~~
 
-# Enter root, /proc, /sys, devfs and other into mtab.
-mount -f /
-mount -f /proc
-[ -f /proc/bus/usb/devices ] && mount -f -t usbfs usbfs /proc/bus/usb
-[ -e /dev/.devfsd ] && mount -f -t devfs devfs /dev
+if ! is_yes "$VSERVER"; then
+	# Enter root, /proc, /sys, devfs and other into mtab.
+	mount -f /
+	mount -f /proc
+	[ -f /proc/bus/usb/devices ] && mount -f -t usbfs usbfs /proc/bus/usb
+	[ -e /dev/.devfsd ] && mount -f -t devfs devfs /dev
 
-if grep -q sysfs /proc/filesystems 2>/dev/null ; then
-	mount -f -t sysfs sysfs /sys
-fi
+	if grep -q sysfs /proc/filesystems 2>/dev/null ; then
+		mount -f -t sysfs sysfs /sys
+	fi
 
-if grep -q selinuxfs /proc/filesystems 2>/dev/null ; then
-    	mount -f -t selinuxfs selinuxfs /selinux
-fi
+	if grep -q selinuxfs /proc/filesystems 2>/dev/null ; then
+		mount -f -t selinuxfs selinuxfs /selinux
+	fi
 
-if grep -q cpuset /proc/filesystems 2>/dev/null ; then
-    mount -n -t cpuset none /dev/cpuset
+	if grep -q cpuset /proc/filesystems 2>/dev/null ; then
+	    mount -n -t cpuset none /dev/cpuset
+	fi
 fi
 
 # Remove /etc/nologin when starting system
@@ -415,328 +419,330 @@
 	IN_INITLOG=""
 fi
 
-if [ ! -f /proc/modules ]; then
-	USEMODULES=
-elif ! grep -iq nomodules /proc/cmdline 2>/dev/null; then
-	USEMODULES=y
-else
-	USEMODULES=
-fi
+if ! is_yes "$VSERVER"; then
+	if [ ! -f /proc/modules ]; then
+		USEMODULES=
+	elif ! grep -iq nomodules /proc/cmdline 2>/dev/null; then
+		USEMODULES=y
+	else
+		USEMODULES=
+	fi
 
-# Adjust symlinks as necessary in /boot to keep system services from
-# spewing messages about mismatched System maps and so on.
-if is_yes "$SET_SLINKS"; then
-	if [ -L /boot/System.map -a -r /boot/System.map-`uname -r` ] ; then
-	        ln -s -f System.map-`uname -r` /boot/System.map
+	# Adjust symlinks as necessary in /boot to keep system services from
+	# spewing messages about mismatched System maps and so on.
+	if is_yes "$SET_SLINKS"; then
+		if [ -L /boot/System.map -a -r /boot/System.map-`uname -r` ] ; then
+			ln -s -f System.map-`uname -r` /boot/System.map
+		fi
+		if [ ! -e /boot/System.map -a -r /boot/System.map-`uname -r` ] ; then
+			ln -s -f System.map-`uname -r` /boot/System.map
+		fi
 	fi
-	if [ ! -e /boot/System.map -a -r /boot/System.map-`uname -r` ] ; then
-	        ln -s -f System.map-`uname -r` /boot/System.map
+
+	# Run depmod if RUN_DEPMOD != "no" and:
+	# a) user requested or RUN_DEPMOD="";
+	# b) modules.dep is missing
+	# c) modules.dep is older than /etc/modules.conf or /lib/modules/`uname -r`
+	if ! is_no "$RUN_DEPMOD" && [ -n "$USEMODULES" ]; then
+		if is_yes "$RUN_DEPMOD" || [ -z "$RUN_DEPMOD" ]; then
+			run_cmd "Finding module dependencies" depmod -a
+		elif [ "$RUN_DEPMOD" = "ifmissing" ]; then
+			run_cmd "Finding module dependencies" depmod -A
+		fi
 	fi
-fi
 
-# Run depmod if RUN_DEPMOD != "no" and:
-# a) user requested or RUN_DEPMOD="";
-# b) modules.dep is missing
-# c) modules.dep is older than /etc/modules.conf or /lib/modules/`uname -r`
-if ! is_no "$RUN_DEPMOD" && [ -n "$USEMODULES" ]; then
-    	if is_yes "$RUN_DEPMOD" || [ -z "$RUN_DEPMOD" ]; then
-		run_cmd "Finding module dependencies" depmod -a
-	elif [ "$RUN_DEPMOD" = "ifmissing" ]; then
-		run_cmd "Finding module dependencies" depmod -A
+	if [ -f /proc/sys/kernel/modprobe ]; then
+		if [ -n "$USEMODULES" ]; then
+			sysctl -w kernel.modprobe="/sbin/modprobe" >/dev/null 2>&1
+			sysctl -w kernel.hotplug="/sbin/hotplug" >/dev/null 2>&1
+		else
+			# We used to set this to NULL, but that causes
+			# 'failed to exec' messages"
+			sysctl -w kernel.modprobe="/bin/true" >/dev/null 2>&1
+			sysctl -w kernel.hotplug="/bin/true" >/dev/null 2>&1
+		fi
 	fi
-fi
 
-if [ -f /proc/sys/kernel/modprobe ]; then
-	if [ -n "$USEMODULES" ]; then
-		sysctl -w kernel.modprobe="/sbin/modprobe" >/dev/null 2>&1
-		sysctl -w kernel.hotplug="/sbin/hotplug" >/dev/null 2>&1
-	else
-		# We used to set this to NULL, but that causes
-		# 'failed to exec' messages"
-		sysctl -w kernel.modprobe="/bin/true" >/dev/null 2>&1
-		sysctl -w kernel.hotplug="/bin/true" >/dev/null 2>&1
-	fi
-fi
-
-# Load usb storage here, to match most other things
-if [ -n "$needusbstorage" ]; then
-        modprobe -k usb-storage >/dev/null 2>&1
-fi
-
-# Load firewire devices
-if ! grep -iq "nofirewire" /proc/cmdline 2>/dev/null ; then
-	aliases=$(/sbin/modprobe -c | awk '/^alias ieee1394-controller/ { print	$3 }')
-	if [ -n "$aliases" -a "$aliases" != "off" ] ; then
-	    for alias in $aliases ; do
-		[ "$alias" = "off" ] && continue
-		run_cmd "$(nls 'Initializing firewire controller') ($alias)" /sbin/modprobe $alias
-	    done
-	    LC_ALL=C grep -E "SBP2" /proc/bus/ieee1394/devices 2>/dev/null && /sbin/modprobe -s sbp2 > /dev/null 2>&1 
-	fi
-fi    
-    
-# Load sound modules if they need persistent DMA buffers
-if grep -q "^options sound dmabuf=1" "$MODULES_CONF" 2>/dev/null ; then
-	RETURN=0
-	alias=$(/sbin/modprobe -c | egrep -s "^alias[[:space:]]+sound[[:space:]]+" 2>/dev/null | awk '{ print $3 }')
-	if [ -n "$alias" -a "$alias" != "off" ] ; then
-		run_cmd "$(nls 'Loading sound module') ($alias)" modprobe -s $alias
-		RETURN=$?
-	fi
-	alias=$(/sbin/modprobe -c | egrep -s "^alias[[:space:]]+sound-slot-0[[:space:]]+" 2>/dev/null | awk '{ print $3 }')
-	if [ -n "$alias" -a "$alias" != "off" ] ; then
-		run_cmd "$(nls 'Loading sound module') ($alias)" modprobe -s $alias
-		RETURN=$?
-	fi
-fi
-
-# Load modules
-if [ -x /etc/rc.d/rc.modules ]; then
-	/etc/rc.d/rc.modules
-fi
-
-# Find and activate volume groups:
-# EVMS
-if [ -x /sbin/evms_activate ]; then
-    
-    	if [ "$(kernelverser)" -lt "002006" ]; then
-    	    # Linux 2.4 core modules
-    	    modprobe -s -k evms > /dev/null 2>&1
-    	    modprobe -s -k evms_passthru > /dev/null 2>&1
-    	    modprobe -s -k ldev_mgr > /dev/null 2>&1
-    	    modprobe -s -k dos_part > /dev/null 2>&1
-    	else
-    	    # Linux 2.6 core module
-    	    modprobe -s -k evmscore > /dev/null 2>&1
-	fi
-	
-	is_yes "$EVMS_GUID_PTABLE" && modprobe -s -k gpt_part >/dev/null 2>&1
-	is_yes "$EVMS_LVM" && modprobe -s -k lvm_vge >/dev/null 2>&1
-	is_yes "$EVMS_AIX" && modprobe -s -k AIXlvm_vge >/dev/null 2>&1
-	is_yes "$EVMS_OS2" && modprobe -s -k os2lvm_vge >/dev/null 2>&1
-        run_cmd "Discovering EVMS volumes" /sbin/evms_activate
-	if is_yes "$EVMS_LVM" && is_yes "$EVMS_LVM_COMPAT_NODES" ; then
-		# Link nodes for compatibility with LVM
-		if [ "echo /dev/evms/lvm/*" != '/dev/evms/lvm/*' ] ; then
-			ln -s /dev/evms/lvm/* /dev/
-		fi
-	fi
-fi
-# LVM (keep in sync with LVM starting after RAID run!)
-if is_yes "$EVMS_LVM" || [ -x /sbin/vgscan -a -x /sbin/vgchange ]; then
-	lvmversion=$(/sbin/vgchange --version 2>/dev/null | awk '{gsub("vgchange: Logical Volume Manager ",""); gsub("LVM version:     ",""); gsub(/\..*/,"");print $1; exit}')
-   	if [ "$lvmversion" = "1" ] ; then
-		modprobe -s -k lvm-mod >/dev/null 2>&1
-		lvmignorelock=""
-	elif [ "$lvmversion" = "2" ] ; then
-		modprobe -s -k dm-mod >/dev/null 2>&1
-		lvmignorelock="--ignorelockingfailure"
-	else
-	    modprobe -s -k lvm-mod >/dev/null 2>&1
-	    # device mapper (2.5+ and patched 2.4)
-	    modprobe -s -k dm-mod >/dev/null 2>&1
-	    lvmignorelock=""
+	# Load usb storage here, to match most other things
+	if [ -n "$needusbstorage" ]; then
+		modprobe -k usb-storage >/dev/null 2>&1
 	fi
-			
-    
-	run_cmd "Scanning for LVM volume groups" /sbin/vgscan $lvmignorelock && \
-	run_cmd "Activating LVM volume groups" /sbin/vgchange -a y $lvmignorelock
-	[ "$lvmversion" = "2" ] && /sbin/vgscan --mknodes $lvmignorelock > /dev/null 2>&1
 
-fi
+	# Load firewire devices
+	if ! grep -iq "nofirewire" /proc/cmdline 2>/dev/null ; then
+		aliases=$(/sbin/modprobe -c | awk '/^alias ieee1394-controller/ { print	$3 }')
+		if [ -n "$aliases" -a "$aliases" != "off" ] ; then
+		    for alias in $aliases ; do
+			[ "$alias" = "off" ] && continue
+			run_cmd "$(nls 'Initializing firewire controller') ($alias)" /sbin/modprobe $alias
+		    done
+		    LC_ALL=C grep -E "SBP2" /proc/bus/ieee1394/devices 2>/dev/null && /sbin/modprobe -s sbp2 > /dev/null 2>&1 
+		fi
+	fi    
+	    
+	# Load sound modules if they need persistent DMA buffers
+	if grep -q "^options sound dmabuf=1" "$MODULES_CONF" 2>/dev/null ; then
+		RETURN=0
+		alias=$(/sbin/modprobe -c | egrep -s "^alias[[:space:]]+sound[[:space:]]+" 2>/dev/null | awk '{ print $3 }')
+		if [ -n "$alias" -a "$alias" != "off" ] ; then
+			run_cmd "$(nls 'Loading sound module') ($alias)" modprobe -s $alias
+			RETURN=$?
+		fi
+		alias=$(/sbin/modprobe -c | egrep -s "^alias[[:space:]]+sound-slot-0[[:space:]]+" 2>/dev/null | awk '{ print $3 }')
+		if [ -n "$alias" -a "$alias" != "off" ] ; then
+			run_cmd "$(nls 'Loading sound module') ($alias)" modprobe -s $alias
+			RETURN=$?
+		fi
+	fi
 
-# Add raid devices
-if [ -x /sbin/mdadm -a -f /etc/mdadm.conf ] || [ -f /etc/raidtab ]; then
+	# Load modules
+	if [ -x /etc/rc.d/rc.modules ]; then
+		/etc/rc.d/rc.modules
+	fi
 
-	modprobe -s md >/dev/null 2>&1
-	if [ -f /proc/mdstat ]; then
-	    goraidtab=1
-	    golvm=0
-	    rc=0
+	# Find and activate volume groups:
+	# EVMS
+	if [ -x /sbin/evms_activate ]; then
 	    
-	    if [ -x /sbin/mdadm -a -f /etc/mdadm.conf ]; then
-		if (grep -qE "^([[:blank:]]|)ARRAY[[:blank:]]" /etc/mdadm.conf 2>/dev/null); then
-		    run_cmd "Starting up RAID devices" /sbin/mdadm --assemble --scan
-		    rc=$?
-		    [ "$rc" -eq 0 ] && goraidtab=0 && golvm=1
+		if [ "$(kernelverser)" -lt "002006" ]; then
+		    # Linux 2.4 core modules
+		    modprobe -s -k evms > /dev/null 2>&1
+		    modprobe -s -k evms_passthru > /dev/null 2>&1
+		    modprobe -s -k ldev_mgr > /dev/null 2>&1
+		    modprobe -s -k dos_part > /dev/null 2>&1
+		else
+		    # Linux 2.6 core module
+		    modprobe -s -k evmscore > /dev/null 2>&1
 		fi
-	    fi
-	    
-	    if [ -f /etc/raidtab -a "$goraidtab" -eq 1 ]; then
 		
-		for i in $(grep -v "^#" /etc/raidtab 2>/dev/null | grep "raiddev" 2>/dev/null | awk '{print $2}') ; do
-		    golvm=1
-		    RAIDDEV=$(basename $i)
-		    RAIDSTAT=$(grep "^$RAIDDEV : active" /proc/mdstat 2>/dev/null)
-		    show "Starting up RAID device %s" $RAIDDEV
-		    busy
-		    if [ -z "$RAIDSTAT" ]; then
-			# Try raidstart first...if that fails then
-			# fall back to raid0run and if that fails too
-			# fall back to raidadd, raidrun.
-			RESULT=1
-			if [ -x /sbin/raidstart ]; then
-				/sbin/raidstart $i
-				RESULT=$?
+		is_yes "$EVMS_GUID_PTABLE" && modprobe -s -k gpt_part >/dev/null 2>&1
+		is_yes "$EVMS_LVM" && modprobe -s -k lvm_vge >/dev/null 2>&1
+		is_yes "$EVMS_AIX" && modprobe -s -k AIXlvm_vge >/dev/null 2>&1
+		is_yes "$EVMS_OS2" && modprobe -s -k os2lvm_vge >/dev/null 2>&1
+		run_cmd "Discovering EVMS volumes" /sbin/evms_activate
+		if is_yes "$EVMS_LVM" && is_yes "$EVMS_LVM_COMPAT_NODES" ; then
+			# Link nodes for compatibility with LVM
+			if [ "echo /dev/evms/lvm/*" != '/dev/evms/lvm/*' ] ; then
+				ln -s /dev/evms/lvm/* /dev/
 			fi
-			if [ $RESULT -gt 0 -a -x /sbin/raid0run ]; then
-				/sbin/raid0run $i
-				RESULT=$?
-			fi
-			if [ $RESULT -gt 0 -a -x /sbin/raidadd -a -x /sbin/raidrun ]; then
-				/sbin/raidadd $i
-				/sbin/raidrun $i
-				RESULT=$?
+		fi
+	fi
+	# LVM (keep in sync with LVM starting after RAID run!)
+	if is_yes "$EVMS_LVM" || [ -x /sbin/vgscan -a -x /sbin/vgchange ]; then
+		lvmversion=$(/sbin/vgchange --version 2>/dev/null | awk '{gsub("vgchange: Logical Volume Manager ",""); gsub("LVM version:     ",""); gsub(/\..*/,"");print $1; exit}')
+		if [ "$lvmversion" = "1" ] ; then
+			modprobe -s -k lvm-mod >/dev/null 2>&1
+			lvmignorelock=""
+		elif [ "$lvmversion" = "2" ] ; then
+			modprobe -s -k dm-mod >/dev/null 2>&1
+			lvmignorelock="--ignorelockingfailure"
+		else
+		    modprobe -s -k lvm-mod >/dev/null 2>&1
+		    # device mapper (2.5+ and patched 2.4)
+		    modprobe -s -k dm-mod >/dev/null 2>&1
+		    lvmignorelock=""
+		fi
+				
+	    
+		run_cmd "Scanning for LVM volume groups" /sbin/vgscan $lvmignorelock && \
+		run_cmd "Activating LVM volume groups" /sbin/vgchange -a y $lvmignorelock
+		[ "$lvmversion" = "2" ] && /sbin/vgscan --mknodes $lvmignorelock > /dev/null 2>&1
+
+	fi
+
+	# Add raid devices
+	if [ -x /sbin/mdadm -a -f /etc/mdadm.conf ] || [ -f /etc/raidtab ]; then
+
+		modprobe -s md >/dev/null 2>&1
+		if [ -f /proc/mdstat ]; then
+		    goraidtab=1
+		    golvm=0
+		    rc=0
+		    
+		    if [ -x /sbin/mdadm -a -f /etc/mdadm.conf ]; then
+			if (grep -qE "^([[:blank:]]|)ARRAY[[:blank:]]" /etc/mdadm.conf 2>/dev/null); then
+			    run_cmd "Starting up RAID devices" /sbin/mdadm --assemble --scan
+			    rc=$?
+			    [ "$rc" -eq 0 ] && goraidtab=0 && golvm=1
 			fi
-			if [ $RESULT -gt 0 ]; then
-				rc=1
-				fail
-			else
+		    fi
+		    
+		    if [ -f /etc/raidtab -a "$goraidtab" -eq 1 ]; then
+			
+			for i in $(grep -v "^#" /etc/raidtab 2>/dev/null | grep "raiddev" 2>/dev/null | awk '{print $2}') ; do
+			    golvm=1
+			    RAIDDEV=$(basename $i)
+			    RAIDSTAT=$(grep "^$RAIDDEV : active" /proc/mdstat 2>/dev/null)
+			    show "Starting up RAID device %s" $RAIDDEV
+			    busy
+			    if [ -z "$RAIDSTAT" ]; then
+				# Try raidstart first...if that fails then
+				# fall back to raid0run and if that fails too
+				# fall back to raidadd, raidrun.
+				RESULT=1
+				if [ -x /sbin/raidstart ]; then
+					/sbin/raidstart $i
+					RESULT=$?
+				fi
+				if [ $RESULT -gt 0 -a -x /sbin/raid0run ]; then
+					/sbin/raid0run $i
+					RESULT=$?
+				fi
+				if [ $RESULT -gt 0 -a -x /sbin/raidadd -a -x /sbin/raidrun ]; then
+					/sbin/raidadd $i
+					/sbin/raidrun $i
+					RESULT=$?
+				fi
+				if [ $RESULT -gt 0 ]; then
+					rc=1
+					fail
+				else
+					ok
+				fi
+			    else
 				ok
-			fi
-		    else
-			ok
+			    fi
+			done
 		    fi
-		done
-	    fi
 
-	    # A non-zero return means there were problems
-	    if [ $rc -gt 0 ]; then
-		[ -e /proc/splash ] && echo "verbose" > /proc/splash
-		show "Starting up RAID devices"; fail
-		echo
-		echo
-		nls "*** An error occurred during the RAID startup."
-		nls "*** Dropping you to a shell; the system will reboot"
-		nls "*** when you leave the shell."
-		echo
-
-		PS1="$(nls '(RAID Repair)# ')"; export PS1
-		[ "$SELINUX" = "1" ] && disable_selinux
-		if is_yes "$RUN_SULOGIN_ON_ERR"; then
-			/sbin/sulogin
-		else
-			/bin/sh
-		fi
+		    # A non-zero return means there were problems
+		    if [ $rc -gt 0 ]; then
+			[ -e /proc/splash ] && echo "verbose" > /proc/splash
+			show "Starting up RAID devices"; fail
+			echo
+			echo
+			nls "*** An error occurred during the RAID startup."
+			nls "*** Dropping you to a shell; the system will reboot"
+			nls "*** when you leave the shell."
+			echo
+
+			PS1="$(nls '(RAID Repair)# ')"; export PS1
+			[ "$SELINUX" = "1" ] && disable_selinux
+			if is_yes "$RUN_SULOGIN_ON_ERR"; then
+				/sbin/sulogin
+			else
+				/bin/sh
+			fi
 
-		run_cmd "Unmounting file systems" umount -a
-		run_cmd "Remounting root filesystem in ro mode" mount -n -o remount,ro /
-		run_cmd "Automatic reboot in progress" reboot
-	    fi
-	    # LVM on RAID (keep in sync with LVM setting few lines above)
-	    if [ "$golvm" -eq "1" ]; then
-		if is_yes "$EVMS_LVM" || [ -x /sbin/vgscan -a -x /sbin/vgchange ]; then
-    		    run_cmd "Scanning for LVM volume groups (on RAID)" /sbin/vgscan $lvmignorelock && \
-			    run_cmd "Activating LVM volume groups (on RAID)" /sbin/vgchange -a y $lvmignorelock
-	    	    [ "$lvmversion" = "2" ] && /sbin/vgscan --mknodes $lvmignorelock > /dev/null 2>&1
+			run_cmd "Unmounting file systems" umount -a
+			run_cmd "Remounting root filesystem in ro mode" mount -n -o remount,ro /
+			run_cmd "Automatic reboot in progress" reboot
+		    fi
+		    # LVM on RAID (keep in sync with LVM setting few lines above)
+		    if [ "$golvm" -eq "1" ]; then
+			if is_yes "$EVMS_LVM" || [ -x /sbin/vgscan -a -x /sbin/vgchange ]; then
+			    run_cmd "Scanning for LVM volume groups (on RAID)" /sbin/vgscan $lvmignorelock && \
+				    run_cmd "Activating LVM volume groups (on RAID)" /sbin/vgchange -a y $lvmignorelock
+			    [ "$lvmversion" = "2" ] && /sbin/vgscan --mknodes $lvmignorelock > /dev/null 2>&1
+			fi
+		    fi
+		    show "Starting up RAID devices"; ok
 		fi
-	    fi
-	    show "Starting up RAID devices"; ok
 	fi
-fi
 
-_RUN_QUOTACHECK=0
-# Check filesystems
-if [ -z "$fastboot" ] && ! grep -q nofsck /proc/cmdline 2>/dev/null; then
-    	rc_splash "fsck start"
-	show "Checking filesystems"; started
-	initlog -c "fsck -C -T -R -A -a $fsckoptions"
-
-	rc=$?
-
-	# A return of 2 or higher means there were serious problems
-	if [ $rc -gt 1 ]; then
-	    	[ -e /proc/splash ] && echo "verbose" > /proc/splash
-		echo
-		echo
-		nls "*** An error occurred during the file system check."
-		nls "*** Dropping you to a shell; the system will reboot"
-		nls "*** when you leave the shell."
-		echo
-
-		PS1="$(nls '(Repair filesystem)# ')"; export PS1
-		[ "$SELINUX" = "1" ] && disable_selinux
-		if is_yes "$RUN_SULOGIN_ON_ERR"; then
-			/sbin/sulogin
-		else
-			/bin/sh
-		fi
+	_RUN_QUOTACHECK=0
+	# Check filesystems
+	if [ -z "$fastboot" ] && ! grep -q nofsck /proc/cmdline 2>/dev/null; then
+		rc_splash "fsck start"
+		show "Checking filesystems"; started
+		initlog -c "fsck -C -T -R -A -a $fsckoptions"
+
+		rc=$?
+
+		# A return of 2 or higher means there were serious problems
+		if [ $rc -gt 1 ]; then
+			[ -e /proc/splash ] && echo "verbose" > /proc/splash
+			echo
+			echo
+			nls "*** An error occurred during the file system check."
+			nls "*** Dropping you to a shell; the system will reboot"
+			nls "*** when you leave the shell."
+			echo
+
+			PS1="$(nls '(Repair filesystem)# ')"; export PS1
+			[ "$SELINUX" = "1" ] && disable_selinux
+			if is_yes "$RUN_SULOGIN_ON_ERR"; then
+				/sbin/sulogin
+			else
+				/bin/sh
+			fi
 
-		run_cmd "Unmounting file systems" umount -a
-		run_cmd "Remounting root filesystem in ro mode" mount -n -o remount,ro /
-		run_cmd "Automatic reboot in progress" reboot
-	elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
-		_RUN_QUOTACHECK=1
-	fi
-	rc_splash "fsck stop"
-fi
-
-# Mount all other filesystems (except for NFS and /proc, which is already
-# mounted). Contrary to standard usage,
-# filesystems are NOT unmounted in single user mode.
-
-run_cmd "Mounting local filesystems" mount -a -t nonfs,smbfs,ncpfs,proc,cifs -O no_netdev
-
-# Now do some workaround - encrypted filesystems couldn't have been fsck-ed
-# before mount - that's where the password is entered.
-# mount is buggy - when remounting loopback filesystem, loop=XXX
-# option is removed from /etc/mtab
-if [ -z "$fastboot" ] && grep "^[^#].*encryption=" /etc/fstab 2>/dev/null | grep -v -q "noauto" 2>/dev/null; then
-	show "Checking encrypted filesystems"; started
-	LOOPLIST="$(awk '
-	FILENAME=="/proc/mounts" {
-		TAB[$2]=$1;
-	}
-	FILENAME=="/etc/fstab" && /encryption=/ && ! /noauto/ && /[^a-zA-Z_]ro[^a-zA-Z_]/ {
-		if ($2 in TAB){print TAB[$2];}
-	}
-	FILENAME=="/etc/fstab" && /encryption=/ && ! /noauto/ && ! /[^a-zA-Z_]ro[^a-zA-Z_]/ {
-		if ($2 in TAB){print TAB[$2];}
-		sub("loop(=[^,]*)?","loop=" TAB[$2] ",ro",$4);
-		cmd="mount " $2 " -o remount," $4;
-		system(cmd);
-	}
-	' /proc/mounts /etc/fstab)"
-	initlog -c "fsck -T -C -a $fsckoptions $LOOPLIST"
-	rc=$?
-
-	# A return of 2 or higher means there were serious problems.
-	if [ $rc -gt 1 ]; then
-	    	[ -e /proc/splash ] && echo "verbose" > /proc/splash
-		echo
-		echo
-		nls "*** An error occurred during the file system check."
-		nls "*** Dropping you to a shell; the system will reboot"
-		nls "*** when you leave the shell."
-		echo
-
-		PS1="`nls '(Repair filesystem)# '`"; export PS1
-		[ "$SELINUX" = "1" ] && disable_selinux
-		if is_yes "$RUN_SULOGIN_ON_ERR"; then
-			/sbin/sulogin
-		else
-			/bin/sh
+			run_cmd "Unmounting file systems" umount -a
+			run_cmd "Remounting root filesystem in ro mode" mount -n -o remount,ro /
+			run_cmd "Automatic reboot in progress" reboot
+		elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
+			_RUN_QUOTACHECK=1
 		fi
+		rc_splash "fsck stop"
+	fi
 
-		run_cmd "Unmounting file systems" umount -a
-		run_cmd "Remounting root filesystem in ro mode" mount -n -o remount,ro /
-		run_cmd "Automatic reboot in progress" reboot
-	elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
-		_RUN_QUOTACHECK=1
-	fi
-	
-	show "Remounting encrypted filesystems back in rw mode"; busy
-	awk '
-	FILENAME=="/proc/mounts" {
-		TAB[$2]=$1;
-	}
-	FILENAME=="/etc/fstab" && /encryption=/ && ! /noauto/ && ! /[^a-zA-Z_]ro[^a-zA-Z_]/ {
-		sub("loop(=[^,]*)?","loop=" TAB[$2] ",rw",$4);
-		cmd="mount " $2 " -o remount," $4;
-		system(cmd);
-	}
-	' /proc/mounts /etc/fstab
-	ok
+	# Mount all other filesystems (except for NFS and /proc, which is already
+	# mounted). Contrary to standard usage,
+	# filesystems are NOT unmounted in single user mode.
+
+	run_cmd "Mounting local filesystems" mount -a -t nonfs,smbfs,ncpfs,proc,cifs -O no_netdev
+
+	# Now do some workaround - encrypted filesystems couldn't have been fsck-ed
+	# before mount - that's where the password is entered.
+	# mount is buggy - when remounting loopback filesystem, loop=XXX
+	# option is removed from /etc/mtab
+	if [ -z "$fastboot" ] && grep "^[^#].*encryption=" /etc/fstab 2>/dev/null | grep -v -q "noauto" 2>/dev/null; then
+		show "Checking encrypted filesystems"; started
+		LOOPLIST="$(awk '
+		FILENAME=="/proc/mounts" {
+			TAB[$2]=$1;
+		}
+		FILENAME=="/etc/fstab" && /encryption=/ && ! /noauto/ && /[^a-zA-Z_]ro[^a-zA-Z_]/ {
+			if ($2 in TAB){print TAB[$2];}
+		}
+		FILENAME=="/etc/fstab" && /encryption=/ && ! /noauto/ && ! /[^a-zA-Z_]ro[^a-zA-Z_]/ {
+			if ($2 in TAB){print TAB[$2];}
+			sub("loop(=[^,]*)?","loop=" TAB[$2] ",ro",$4);
+			cmd="mount " $2 " -o remount," $4;
+			system(cmd);
+		}
+		' /proc/mounts /etc/fstab)"
+		initlog -c "fsck -T -C -a $fsckoptions $LOOPLIST"
+		rc=$?
+
+		# A return of 2 or higher means there were serious problems.
+		if [ $rc -gt 1 ]; then
+			[ -e /proc/splash ] && echo "verbose" > /proc/splash
+			echo
+			echo
+			nls "*** An error occurred during the file system check."
+			nls "*** Dropping you to a shell; the system will reboot"
+			nls "*** when you leave the shell."
+			echo
+
+			PS1="`nls '(Repair filesystem)# '`"; export PS1
+			[ "$SELINUX" = "1" ] && disable_selinux
+			if is_yes "$RUN_SULOGIN_ON_ERR"; then
+				/sbin/sulogin
+			else
+				/bin/sh
+			fi
+
+			run_cmd "Unmounting file systems" umount -a
+			run_cmd "Remounting root filesystem in ro mode" mount -n -o remount,ro /
+			run_cmd "Automatic reboot in progress" reboot
+		elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
+			_RUN_QUOTACHECK=1
+		fi
+		
+		show "Remounting encrypted filesystems back in rw mode"; busy
+		awk '
+		FILENAME=="/proc/mounts" {
+			TAB[$2]=$1;
+		}
+		FILENAME=="/etc/fstab" && /encryption=/ && ! /noauto/ && ! /[^a-zA-Z_]ro[^a-zA-Z_]/ {
+			sub("loop(=[^,]*)?","loop=" TAB[$2] ",rw",$4);
+			cmd="mount " $2 " -o remount," $4;
+			system(cmd);
+		}
+		' /proc/mounts /etc/fstab
+		ok
+	fi
 fi
 
 if [ "$_RUN_QUOTACHECK" = "1" -a -x /sbin/quotacheck ]; then
@@ -755,26 +761,28 @@
 	/etc/rc.d/rc.acct start
 fi
 
-# Set the clock if timezone definition wasn't available (eg. /usr not mounted)
-if is_yes "$TIME_SETUP_DELAYED"; then
-	if run_cmd "$(nls 'Setting clock')$CLOCKDEF" /sbin/hwclock $CLOCKFLAGS; then
-		show "$(nls 'Today`s date:') $(LC_CTYPE=C date)"; ok
+if ! is_yes "$VSERVER"; then
+	# Set the clock if timezone definition wasn't available (eg. /usr not mounted)
+	if is_yes "$TIME_SETUP_DELAYED"; then
+		if run_cmd "$(nls 'Setting clock')$CLOCKDEF" /sbin/hwclock $CLOCKFLAGS; then
+			show "$(nls 'Today`s date:') $(LC_CTYPE=C date)"; ok
+		fi
+	fi
+
+	# Initialize the serial ports
+	if [ -f /etc/rc.d/rc.serial ]; then
+		. /etc/rc.d/rc.serial
 	fi
-fi
 
-# Initialize the serial ports
-if [ -f /etc/rc.d/rc.serial ]; then
-	. /etc/rc.d/rc.serial
-fi
+	if [ -f /proc/sys/kernel/panic -a "$PANIC_REBOOT_TIME" -gt "0" ]; then
+		show 'Setting %s seconds for kernel reboot after panic' "$PANIC_REBOOT_TIME"; busy
+		if (sysctl -w kernel.panic=$PANIC_REBOOT_TIME >/dev/null 2>&1); then ok; else fail; fi
+	fi
 
-if [ -f /proc/sys/kernel/panic -a "$PANIC_REBOOT_TIME" -gt "0" ]; then
-	show 'Setting %s seconds for kernel reboot after panic' "$PANIC_REBOOT_TIME"; busy
-	if (sysctl -w kernel.panic=$PANIC_REBOOT_TIME >/dev/null 2>&1); then ok; else fail; fi
+	# ... and here finish configuring parameters
+	/sbin/sysctl -e -p /etc/sysctl.conf > /dev/null 2>&1
 fi
 
-# ... and here finish configuring parameters
-/sbin/sysctl -e -p /etc/sysctl.conf > /dev/null 2>&1
-
 # Clean up /.
 rm -f /fastboot /fsckoptions /forcefsck /halt /poweroff
 
@@ -837,19 +845,21 @@
 # There could be a new kernel version. Remove old psdevtab database
 rm -f /etc/psdevtab
 
-# Now that we have all of our basic modules loaded and the kernel going,
-# let's dump the syslog ring somewhere so we can find it later
-dmesg -s 131072 > /var/log/dmesg
-i=5
-while [ $i -ge 0 ]; do
-        if [ -f /var/log/dmesg.$i ]; then
-            chmod 0600 /var/log/dmesg.$i
-            mv -f /var/log/dmesg.$i /var/log/dmesg.$(($i+1))
-        fi
-        i=$(($i-1))
-done
-cp -f /var/log/dmesg /var/log/dmesg.0
-chmod 0600 /var/log/dmesg /var/log/dmesg.0
+if ! is_yes "$VSERVER"; then
+	# Now that we have all of our basic modules loaded and the kernel going,
+	# let's dump the syslog ring somewhere so we can find it later
+	dmesg -s 131072 > /var/log/dmesg
+	i=5
+	while [ $i -ge 0 ]; do
+		if [ -f /var/log/dmesg.$i ]; then
+		    chmod 0600 /var/log/dmesg.$i
+		    mv -f /var/log/dmesg.$i /var/log/dmesg.$(($i+1))
+		fi
+		i=$(($i-1))
+	done
+	cp -f /var/log/dmesg /var/log/dmesg.0
+	chmod 0600 /var/log/dmesg /var/log/dmesg.0
+fi
 
 kill -TERM $(/sbin/pidof getkey) >/dev/null 2>&1
 } &
@@ -860,4 +870,4 @@
 echo
 
 # This must be last line !
-# vi:syntax=sh:ts=8:sw=4
+# vi:syntax=sh



More information about the pld-cvs-commit mailing list