Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > 8c6202abd5c23d52fed280e28dc23b0a > files > 47

initscripts-7.06-12.3.91mdk.i586.rpm

#!/bin/bash
#
# /etc/rc.d/rc.sysinit - run once at boot time
#
# Taken in part from Miquel van Smoorenburg's bcheckrc.
#

# Rerun ourselves through initlog
if [ -z "$IN_INITLOG" -a -x /sbin/initlog ]; then
    exec /sbin/initlog $INITLOG_ARGS -r /etc/rc.d/rc.sysinit
fi

# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

HOSTNAME=`/bin/hostname`
if [ -f /etc/sysconfig/network ]; then
    . /etc/sysconfig/network
else
    NETWORKING=no
fi

# Read in config data.
if [ -f /etc/sysconfig/usb ]; then
    . /etc/sysconfig/usb
fi

if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
    HOSTNAME=localhost
fi

. /etc/init.d/functions

# This must be done before Aurora can be started (See
# /sbin/Monitor for explanational code :)
# Mount /proc (done here so volume labels can work with fsck)
#
# warly commented not to have a message in quiet mode
#action "Mounting proc filesystem" mount -n -t proc none /proc
mount -n -t proc none /proc

initquiet
grep -q quiet /proc/cmdline && grep -vq noquiet /proc/cmdline && export quiet=yes && quiet on

# This must be done before anything else because now most messages
# are translated so we need correct system font very early
# This must be done before Aurora is started too, since screenchars
# --tty=foo is broken :(
# Note that if setting of system font fails here boot messages
# may be unreadable so we may need to reset LANGUAGE to C in this case
# Load system font
if [ -x /sbin/setsysfont ]; then
    [ -f /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n
    if [ -n "$SYSFONT" ]; then
	   [ -f /etc/sysconfig/console/consolefonts/$SYSFONT.psf.gz ] || \
			DELAYED_FONT=yes
    fi 
    if [ -n "$SYSFONTACM" ]; then
	   [ -f /etc/sysconfig/console/consoletrans/$SYSFONTACM \
		-o -f /etc/sysconfig/console/consoletrans/$SYSFONTACM.acm.gz \
		-o -f /etc/sysconfig/console/consoletrans/$SYSFONTACM.acm ] || \
			DELAYED_FONT=yes
    fi
    if [ -n "$UNIMAP" ]; then
	   [ -f /etc/sysconfig/console/consoletrans/$UNIMAP \
		-o -f /etc/sysconfig/console/consoletrans/$UNIMAP.sfm.gz \
		-o -f /etc/sysconfig/console/consoletrans/$UNIMAP.sfm ] || \
			DELAYED_FONT=yes
    fi
    # We have to set font before printing message, so we cannot
    # use ``action message command'' directly because it prints
    # message before executing command
    [ "$DELAYED_FONT" != "yes" -o -r /usr/lib/kbd/consolefonts ] && \
	case "$LC_ALL$LC_CTYPE$LANG" in 
	    *.utf8*|*.UTF-8*)
		action "Setting default font ($SYSFONT): " /bin/unicode_start $SYSFONT
		# this is done by unicode_start, but apparently "action"
		# filters the output, so it has to be redone again
		echo -n -e '\033%G'
		;;
	    *)
		CHARSET=${CHARSET=`locale charmap 2> /dev/null`}
		case "$CHARSET" in 
		    UTF-8)
			action "Setting default font ($SYSFONT): " /bin/unicode_start $SYSFONT
			# this is done by unicode_start, but apparently
			# "action" filters the output, so it has to be redone
			echo -n -e '\033%G'
			;;
		    *)
			action "Setting default font ($SYSFONT): " /sbin/setsysfont
			;;
		esac
		;;
	esac
fi

quiet off
echo 
gprintf "\t\t\tBooting, please wait..."
echo
echo

# Do the following while waiting for an 'I' from the user...
{
# Print a banner. ;)
# C-like escape sequences don't work as 2nd and up parameters of gprintf,
# so real escap chars were written
PRODUCT=`sed "s/.*release \([0-9.]*\).*/\1/g" /etc/mandrake-release 2> /dev/null`
if [ "$BOOTUP" != "serial" ]; then
 gprintf "\t\t\tWelcome to %sMandrake%s Linux %s" `echo -en "\\033[1;36m"` `echo -en "\\033[0;39m"` "$PRODUCT"
else
 gprintf "\t\t\tWelcome to %sMandrake%s Linux %s" "" "" "$PRODUCT"
fi
echo -en "\r"
echo
quiet on

if [ "$PROMPT" != "no" ]; then
 quiet off
 gprintf "\t\tPress 'I' to enter interactive startup."
 echo -en "\r"
 echo
 quiet on
 sleep 1
fi

# Try to get devfsd
if [ -c /dev/.devfsd ]; then
  if [ -x /sbin/devfsd ]; then
    action "Running DevFs daemon" devfsd /dev
  else
      if ! grep -q "nodevfsd" /proc/cmdline;then
	  # devfs is used but devfsd isn't installed
	  quiet off
	  gprintf " #### your system is currently using devfs but devfsd isn't available"
	  gprintf " #### you should disable devfs (add 'devfs=nomount' to the paramaters"
	  gprintf " #### that your bootloader gives to the kernel"
	  # Let devfs being tested, but disable it on /dev
	  action " Disabling devfs (was mounted on /dev)" umount /dev
    fi
  fi
fi

# If brltty exist start it
[ -x /bin/brltty ] && action "Starting braille terminal" /bin/brltty

quiet off
# If user was not fast enough he gets another chance
# before exiting rc.sysinit
kill -TERM `/sbin/pidof getkey` >/dev/null 2>&1
} &
if [ "$PROMPT" != "no" ]; then
   /sbin/getkey i && export CONFIRM=yes
fi
wait

# must be done after devfsd launching
initsplash 5
quiet on
if [[ "$splash" = "yes" && -n "$pw" && -f /proc/splash ]]; then
    grep -q "Splash.*on" /proc/splash && export progress=yes
fi
progress 1

# Fix console loglevel
/bin/dmesg -n $LOGLEVEL

# Unmount the initrd, if necessary
# (pixel) do not unmount if /initrd/loopfs is mounted (happens for root loopback)
if LC_ALL=C grep -q /initrd /proc/mounts && ! LC_ALL=C grep -q /initrd/loopfs /proc/mounts ; then
   if [ -e /initrd/dev/.devfsd ]; then
      umount /initrd/dev
   fi
   action "Unmounting initrd: " umount /initrd
   /sbin/blockdev --flushbufs /dev/ram0 >/dev/null 2>&1
fi

# Configure kernel parameters
action "Configuring kernel parameters: " sysctl -e -p /etc/sysctl.conf

progress 2

#
ARCH=$(/bin/uname -m)

# Set the system clock.
ARC=0
SRM=0
UTC=0

if [ -f /etc/sysconfig/clock ]; then
   . /etc/sysconfig/clock

   # convert old style clock config to new values
   if [ "${CLOCKMODE}" = "GMT" ]; then
      UTC=true
   elif [ "${CLOCKMODE}" = "ARC" ]; then
      ARC=true
   fi
fi

CLOCKDEF=""
if [ "$ARCH" = "ppc" ];then
CLOCKFLAGS="$CLOCKFLAGS -s"
else
CLOCKFLAGS="$CLOCKFLAGS --hctosys"
fi

case "$UTC" in
   yes|true)
    CLOCKFLAGS="$CLOCKFLAGS --utc";
    CLOCKDEF="$CLOCKDEF (utc)";
   ;;
   no|false)
    CLOCKFLAGS="$CLOCKFLAGS --localtime";
    CLOCKDEF="$CLOCKDEF (localtime)";
   ;;
esac

case "$ARC" in
     yes|true)
     	CLOCKFLAGS="$CLOCKFLAGS --arc";
     	CLOCKDEF="$CLOCKDEF (arc)";
     ;;
esac
case "$SRM" in
     yes|true)
	CLOCKFLAGS="$CLOCKFLAGS --srm";
	CLOCKDEF="$CLOCKDEF (srm)";
     ;;
esac

if [ "$ARCH" = "alpha" -a -f /lib/modules/$(uname -r)/modules.dep ];then
/sbin/hwclock $CLOCKFLAGS
elif [ "$ARCH" != "alpha" ];then
/sbin/hwclock $CLOCKFLAGS
fi

action "Setting clock %s: %s" "$CLOCKDEF" "`date`" date

progress 3

if [ "`/sbin/consoletype`" = "vt" -a -x /bin/loadkeys ]; then
 KEYTABLE=
 KEYMAP=
 if [ -f /etc/sysconfig/console/default.kmap ]; then
  KEYMAP=/etc/sysconfig/console/default.kmap
 else
  if [ -f /etc/sysconfig/keyboard ]; then
    . /etc/sysconfig/keyboard
  fi
  if [ -n "$KEYTABLE" -a -d /usr/lib/kbd/keymaps -o -d /lib/kbd/keymaps ]; then
     KEYMAP=$KEYTABLE
  fi
 fi
 if [ -n "$KEYMAP" ]; then 
  # Since this takes in/output from stdin/out, we can't use initlog
  if [ -n "$KEYTABLE" ]; then
    gprintf "Loading default keymap (%s): " $KEYTABLE
  else
    gprintf "Loading default keymap: "
  fi
  loadkeys $KEYMAP < /dev/tty0 > /dev/tty0 2>/dev/null && \
     success "Loading default keymap" || failure "Loading default keymap"
  echo
 fi
fi   

# Set the hostname.
action "Setting hostname %s: " ${HOSTNAME} hostname ${HOSTNAME}

# Set the NIS domain name
if [ -n "$NISDOMAIN" ]; then
    action "Setting NIS domain name %s: " $NISDOMAIN nisdomainname $NISDOMAIN
fi

# Load usb now to be able to use an usb keyboard to answer questions 
if ! LC_ALL=C grep -iq "nousb" /proc/cmdline 2>/dev/null && ! LC_ALL=C grep -iq "usb" /proc/devices 2>/dev/null ; then
    /etc/init.d/usb start
fi

if [ -f /fastboot ] || LC_ALL=C grep -iq "fastboot" /proc/cmdline 2>/dev/null ; then
	fastboot=yes
    else
        fastboot=
fi

if [ -r /etc/sysconfig/init ]; then
    . /etc/sysconfig/init
fi

if [ "$FSCKOPTIONS" ]; then
	fsckoptions="$FSCKOPTIONS"
    else
	fsckoptions=
fi


if [ -f /forcefsck ]; then
	fsckoptions="-f $fsckoptions"
elif [ -f /.autofsck ]; then
        quiet off
	gprintf "Your system appears to have shut down uncleanly\n"
	AUTOFSCK_TIMEOUT=5
	[ -f /etc/sysconfig/autofsck ] && . /etc/sysconfig/autofsck
	if [ "$AUTOFSCK_DEF_CHECK" = "yes" ]; then
		AUTOFSCK_OPT=-f
	fi

	if [ "$PROMPT" != "no" ]; then
		if [ "$AUTOFSCK_DEF_CHECK" = "yes" ]; then
			if /sbin/getkey -c $AUTOFSCK_TIMEOUT -m "Press N within %d seconds to not force file system integrity check..." n ; then
				quiet off
				AUTOFSCK_OPT=
			else
			        echo
			        quiet on
			fi
		else
			if /sbin/getkey -c $AUTOFSCK_TIMEOUT -m "Press Y within %d seconds to force file system integrity check..." y ; then
			        quiet off
				AUTOFSCK_OPT=-f
			else
				echo
			        quiet on
			fi
			
		fi
		echo
	else
		# PROMPT not allowed
		if [ "$AUTOFSCK_DEF_CHECK" = "yes" ]; then
			gprintf "Forcing file system integrity check due to default setting\n"
		else
			gprintf "Not forcing file system integrity check due to default setting\n"
		fi
	fi
	fsckoptions="$AUTOFSCK_OPT $fsckoptions"
fi

if [ "$BOOTUP" = "color" ]; then
	fsckoptions="-C $fsckoptions"
else
	fsckoptions="-V $fsckoptions"
fi
 
Fsck()
{	initlog -c "/sbin/fsck $*"
	rc=$?
	if [ $rc -ne 0 -a $rc -ne 1 ]; then
	    quiet off
	    gprintf "Failed to check filesystem. Do you want to repair the errors? (Y/N)\n"
	    gprintf "(beware, you can lose data)\n"	    
	    read answer

	    if strstr "yY" "$answer" ; then
		initlog -c "/sbin/fsck $* -y"
		rc=$?
	    fi
	fi
}

_RUN_QUOTACHECK=0
ROOTFSTYPE=`awk '/ \/ / && ($3 !~ /rootfs/) { print $3 }' /proc/mounts`
if [ -z "$fastboot" -a "X$ROOTFSTYPE" != "Xnfs" ]; then 

	quiet off
        gprintf "Checking root filesystem\n"
	Fsck -T -a $fsckoptions /
	
	if [ "$rc" = "0" ]; then
		echo_success
		echo
	elif [ "$rc" = "1" ]; then
	        echo_passed
		echo
        fi
	
        # A return of 2 or higher means there were serious problems.
	if [ $rc -gt 1 ]; then
	    echo_failure
	    echo
	    echo
	    gprintf "*** An error occurred during the file system check.\n"
	    gprintf "*** Dropping you to a shell; the system will reboot\n"
	    gprintf "*** when you leave the shell.\n"

	    PS1="(Repair filesystem) \# # "; export PS1
	    sulogin

            gprintf "Unmounting file systems\n"
	    umount -a
	    mount -n -o remount,ro /
            gprintf "Automatic reboot in progress.\n"
	    reboot -f
	elif [ "$rc" = "1" ]; then
		_RUN_QUOTACHECK=1
	fi
fi

quiet on

progress 4

# Possibly update quotas if fsck was run on /.
LC_ALL=C grep -E '[[:space:]]+/[[:space:]]+' /etc/fstab | \
    awk '{ print $4 }' | \
    LC_ALL=C grep -q quota
_ROOT_HAS_QUOTA=$?
if [ X"$_RUN_QUOTACHECK" = X1 -a \
    "$_ROOT_HAS_QUOTA" = "0" -a \
    -x /sbin/quotacheck ]; then
	if [ -x /sbin/convertquota ]; then
	    if [ -f /quota.user ]; then
		action "Converting old user quota files: " \
		    /sbin/convertquota -u / && rm -f /quota.user
	    fi
	    if [ -f /quota.group ]; then
		action "Converting old group quota files: " \
		    /sbin/convertquota -g / && rm -f /quota.group
	    fi
	fi
	action "Checking root filesystem quotas: " /sbin/quotacheck -nug /
fi

if [ -x /sbin/isapnp -a -f /etc/isapnp.conf -a ! -f /proc/isapnp ]; then
    # check for arguments passed from kernel
    if ! LC_ALL=C grep -iq nopnp /proc/cmdline >/dev/null 2>&1 ; then
	PNP=yes
    fi
    if [ -n "$PNP" ]; then
	action "Setting up ISA PNP devices: " /sbin/isapnp /etc/isapnp.conf
    else
	action "Skipping ISA PNP configuration at users request: " /bin/true
    fi
fi

# Remount the root filesystem read-write.
state=`awk '/ \/ / && ($3 !~ /rootfs/) { print $4 }' /proc/mounts`
[ "$state" != "rw" ] && \
  action "Remounting root filesystem in read-write mode: " mount -n -o remount,rw /

# LVM initialization
if [ -f /etc/lvmtab -a ! -e /proc/lvm ] ; then
        modprobe lvm-mod >/dev/null 2>&1
fi
if [ -e /proc/lvm -a -x /sbin/vgchange -a -f /etc/lvmtab ]; then
        action "Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
fi

# Start up swapping. #we don't do encryted swap now since
# (pixel) it was done between setting keytable and setting hostname
#         but it can't be done before "vgchange -a y", 
#         which can't be done before "vgscan" (which writes to /etc/lvmtab)
#         which can't be done before re-mounting rw /
action "Activating swap partitions: " swapon -a -e

progress 5

# Clear mtab
>/etc/mtab

# Remove stale backups
rm -f /etc/mtab~ /etc/mtab~~

# Enter root, /proc and (potentially) /proc/bus/usb and devfs into mtab.
# (pixel) also added /initrd/loopfs for loopback root
mount -f /initrd/loopfs 2>/dev/null
mount -f /
mount -f /proc
[ -f /proc/bus/usb/devices ] && mount -f -t usbdevfs none /proc/bus/usb
[ -e /dev/.devfsd ] && mount -f -t devfs none /dev 



# The root filesystem is now read-write, so we can now log
# via syslog() directly..
if [ -n "$IN_INITLOG" ]; then
    IN_INITLOG=
fi

if ! LC_ALL=C grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then
    USEMODULES=y
fi

# Our modutils don't support it anymore, so we might as well remove
# the preferred link.
rm -f /lib/modules/preferred /lib/modules/default
if [ -x /sbin/depmod -a -n "$USEMODULES" ]; then
    # If they aren't using a recent sane kernel, make a link for them
    if [ ! -n "`uname -r | LC_ALL=C grep -- "-"`" ]; then
       ktag="`cat /proc/version`"
       mtag=`LC_ALL=C grep -l "$ktag" /lib/modules/*/.rhkmvtag 2> /dev/null`
       if [ -n "$mtag" ]; then
	   mver=`echo $mtag | sed -e 's,/lib/modules/,,' -e 's,/.rhkmvtag,,' -e 's,[ 	].*$,,'`
       fi
       if [ -n "$mver" ]; then
         ln -sf /lib/modules/$mver /lib/modules/default
       fi
    fi
    if [ -L /lib/modules/default ]; then
    	INITLOG_ARGS= action "Finding module dependencies: " depmod -A default
    else
	INITLOG_ARGS= action "Finding module dependencies: " depmod -A
    fi
fi

# tweak isapnp settings if needed.
if [ -n "$PNP" -a  -f /proc/isapnp -a -x /sbin/sndconfig ]; then
    /sbin/sndconfig --mungepnp >/dev/null 2>&1
fi

# Load sound modules if and only if they need persistent DMA buffers
if LC_ALL=C grep -q "^[^#]*options sound dmabuf=1" /etc/modules.conf 2>/dev/null ; then
  RETURN=0
  alias=`/sbin/modprobe -c | awk '/^alias sound / { print $3 }'`
  if [ -n "$alias" -a "$alias" != "off" ]; then
      action "Loading sound module (%s): " $alias modprobe sound
      RETURN=$?
  fi
  alias=`/sbin/modprobe -c | awk '/^alias sound-slot-0 / { print $3 }'`
  if [ -n "$alias" -a "$alias" != "off" ]; then
      action "Loading sound module (%s): " $alias modprobe sound-slot-0
      RETURN=$?
  fi
fi

if [ -f /proc/sys/kernel/modprobe ]; then
   if [ -n "$USEMODULES" ]; then
       sysctl -n -w kernel.modprobe="/sbin/modprobe" >/dev/null 2>&1
       sysctl -n -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 -n -w kernel.modprobe="/bin/true" >/dev/null 2>&1
       sysctl -n -w kernel.hotplug="/bin/true" >/dev/null 2>&1
   fi
fi

# Load modules (for backward compatibility with VARs)
if [ -x /etc/rc.d/rc.modules ]; then
	/etc/rc.d/rc.modules
fi

# If they asked for ide-scsi, load it
# This must come before hdparm call because if hdd=ide-scsi
# /dev/hdd is inaccessible until ide-scsi is loaded
if grep -q "ide-scsi" /proc/cmdline ; then
	modprobe ide-cd >/dev/null 2>&1
	modprobe ide-scsi >/dev/null 2>&1
fi

if [ -f /etc/raidtab ]; then
	# Add raid devices
	[ -f /proc/mdstat ] || modprobe md >/dev/null 2>&1
fi
if [ -f /etc/raidtab -a -f /proc/mdstat ]; then

	gprintf "Starting up RAID devices: " 

	rc=0
	
	for i in `awk '{if ($1=="raiddev") print $2}' /etc/raidtab`
	do
		RAIDDEV=`basename $i`
                RAIDSTAT=`LC_ALL=C grep "^$RAIDDEV : active" /proc/mdstat`
		if [ -z "$RAIDSTAT" ]; then
			# First scan the /etc/fstab for the "noauto"-flag
			# for this device. If found, skip the initialization
			# for it to avoid dropping to a shell on errors.
			# If not, try raidstart...if that fails then
			# fall back to raidadd, raidrun.  If that
			# also fails, then we drop to a shell
			RESULT=1
			INFSTAB=`LC_ALL=C grep -c "^$i" /etc/fstab`
			if [ $INFSTAB -eq 0 ] ; then
			    RESULT=0
			    RAIDDEV="$RAIDDEV(skipped)"
			fi
			NOAUTO=`LC_ALL=C grep "^$i" /etc/fstab | LC_ALL=C grep -c "noauto"`
			if [ $NOAUTO -gt 0 ]; then
			    RESULT=0
			    RAIDDEV="$RAIDDEV(skipped)"
			fi
			if [ $RESULT -gt 0 -a -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
			fi
			echo -n "$RAIDDEV "
		else
			echo -n "$RAIDDEV "
		fi
	done
	echo

	# A non-zero return means there were problems.
	if [ $rc -gt 0 ]; then
		quiet off
		local str=
		echo
		echo
		gprintf "*** An error occurred during the RAID startup\n"
		gprintf "*** Dropping you to a shell; the system will reboot\n"
		gprintf "*** when you leave the shell.\n"

 		str=`gprintf "(RAID Repair)"`
		PS1="$str \# # "; export PS1
		sulogin

            gprintf "Unmounting file systems\n"
	    umount -a
	    mount -n -o remount,ro /
            gprintf "Automatic reboot in progress.\n"
	    reboot -f
	fi
fi

# LVM initialization, take 2 (it could be on top of RAID)
if [ -x /sbin/vgchange -a -f /etc/lvmtab ]; then
        action "Setting up Logical Volume Management:" /sbin/vgscan && /sbin/vgchange -a y
fi

if [ -x /sbin/devlabel ]; then
	/sbin/devlabel restart
fi

_RUN_QUOTACHECK=0
# Check filesystems
# (pixel) do not check loopback files, will be done later (aren't available yet)
if [ -z "$fastboot" ]; then
	quiet off
        gprintf "Checking filesystems\n"
	Fsck -T -R -A -a -t noopts=loop $fsckoptions
        if [ "$rc" = "0" ]; then
		echo_success
		echo
	elif [ "$rc" = "1" ]; then
	        echo_passed
		echo
	fi

	# A return of 2 or higher means there were serious problems.
	if [ $rc -gt 1 ]; then
	    echo_failure
		echo
		echo
		gprintf "*** An error occurred during the file system check.\n"
		gprintf "*** Dropping you to a shell; the system will reboot\n"
		gprintf "*** when you leave the shell.\n"

		str=`gprintf "(Repair filesystem)"`
		PS1="$str \# # "; export PS1
		sulogin

            gprintf "Unmounting file systems\n"
	    umount -a
	    mount -n -o remount,ro /
	    gprintf "Automatic reboot in progress.\n"
	    reboot -f
	elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
		_RUN_QUOTACHECK=1
	fi
	quiet on
fi

# (stew) since we're defaulting to ext3 now, and kernel22 doesn't 
# support it yet - mount ext3 partitions as ext2 for kernel22
# mkinitrd covers the case for rootfs as ext3

IS22=$(/bin/uname -r | /bin/grep 2.2)

if [ -n "$IS22" ]; then
    for i in `grep ext3 /etc/fstab | grep defaults | awk '{print $1}'`
    do
        mntpt=`grep "^$i" /etc/fstab | awk '{print $2}'`
        if [ "$mntpt" != "/" ]; then
            gprintf "Mount $i on $mntpt as ext2 for kernel22"
            mount $i $mntpt -text2
            if [ "$rc" = "0" ]; then
                echo_success
                echo
            elif [ "$rc" = "1" ]; then
                echo_passed
                echo
            fi
        fi
    done
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.
# (pixel) also do not mount loopback, will be done later
action "Mounting local filesystems: " mount -a -t nonfs,smbfs,ncpfs -O no_netdev,noloop,noencrypted

progress 6

[[ -z $AUTOFSCK_CRYPTO_TIMEOUT ]] && AUTOFSCK_CRYPTO_TIMEOUT=15

#Mounting Encrypted filesystem
encrypted_swap=
if [[ ! -f /fastboot ]];then
    encrypted=
    while read -a entry;do
	device=${entry[0]}
	mountpoint=${entry[1]}
	options=${entry[3]}
	type=${entry[2]}
	if [[ $options == *encryption=* || $options == *encrypted* ]];then
	    [[ $options == *noauto* ]] && continue
	    if [[ $type == *swap* ]];then
		encrypted_swap="$encrypted_swap $device"
		continue
	    fi
	    encrypted="$encrypted $mountpoint"
	fi
    done < /etc/fstab
    if [[ -n $encrypted ]];then
	quiet off
	echo "We have discovered Encrypted filesystems, do you want to mount them now ?"
	if /sbin/getkey -c $AUTOFSCK_CRYPTO_TIMEOUT -m "Press Y within %d seconds to mount your encrypted filesystems..." y; then
	    echo -e '\n'
	    for i in ${encrypted};do
		echo -n "${i} "; mount ${i}
	    done
	else
	    echo -e '\n'
	fi
	quiet on
    fi
fi

# (pixel) Check loopback filesystems
if [ ! -f /fastboot ]; then
	quiet off
        gprintf "Checking loopback filesystems"
	Fsck -T -R -A -a -t opts=loop $fsckoptions
        if [ "$rc" = "0" ]; then
		echo_success
		echo
	elif [ "$rc" = "1" ]; then
	        echo_passed
		echo
	fi

	# A return of 2 or higher means there were serious problems.
	if [ $rc -gt 1 ]; then
	    echo_failure
		echo
		echo
		gprintf "*** An error occurred during the file system check.\n"
		gprintf "*** Dropping you to a shell; the system will reboot\n"
		gprintf "*** when you leave the shell.\n"

		PS1="(Repair filesystem) \#"; export PS1
		sulogin

	    gprintf "Unmounting file systems\n"
	    umount -a
	    mount -n -o remount,ro /
	    gprintf "Automatic reboot in progress.\n"
	    reboot -f
	elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
		action "Checking filesystem quotas: " /sbin/quotacheck -v -R -a
	fi
	quiet on
fi

# Mount loopback
action "Mounting loopback filesystems: " mount -a -O loop

progress 7

# Reset pam_console permissions
rm -rf /var/run/console.lock /var/run/console/*

# at this point everything should be mounted; if the loading
# of the system font failed, try again
if [ "$DELAYED_FONT" = "yes" ]; then
   if [ -x /sbin/setsysfont ]; then
       [ -f /etc/sysconfig/i18n ] && . /etc/sysconfig/i18n
	CHARSET=`locale charmap`
	case "$CHARSET" in 
	    UTF-8)
		action "Setting default font ($SYSFONT): " /bin/unicode_start $SYSFONT
		;;
	    *)
		action "Setting default font ($SYSFONT): " /sbin/setsysfont
		;;
	esac
   fi
fi
for i in 2 3 4 5 6; do
    > /dev/tty$i 2> /dev/null
done

if [ -x /etc/rc.d/init.d/keytable -a -d /usr/lib/kbd/keymaps ]; then
    /etc/rc.d/init.d/keytable start
fi

# check remaining quotas other than root
if [ X"$_RUN_QUOTACHECK" = X1 -a -x /sbin/quotacheck ]; then
	if [ -x /sbin/convertquota ]; then
	    # try to convert old quotas
	    for mountpt in `awk '$4 ~ /quota/{print $2}' /etc/mtab` ; do
		if [ -f "$mountpt/quota.user" ]; then
		    action "Converting old user quota files: " \
		    /sbin/convertquota -u $mountpt && \
			rm -f $mountpt/quota.user
		fi
		if [ -f "$mountpt/quota.group" ]; then
		    action "Converting old group quota files: " \
		    /sbin/convertquota -g $mountpt && \
			rm -f $mountpt/quota.group
		fi
	    done
	fi
	action "Checking local filesystem quotas: " /sbin/quotacheck -aRnug
fi

# Turn on process accounting
if [ -x /sbin/accton ] ; then
	action "Turning on process accounting" /sbin/accton /var/log/pacct
fi

# Configure machine if necessary.
if [ -f /.unconfigured ]; then
    if [ "$BOOTUP" = "graphical" ]; then
	chvt 1
    fi

    if [ -x /usr/bin/passwd ]; then 
        /usr/bin/passwd root
    fi
    if [ -x /usr/sbin/netconfig ]; then
	/usr/sbin/netconfig
    fi
    if [ -x /usr/sbin/timeconfig ]; then
	/usr/sbin/timeconfig
    fi
    if [ -x /usr/sbin/kbdconfig ]; then
	/usr/sbin/kbdconfig
    fi
    if [ -x /usr/sbin/authconfig ]; then
	/usr/sbin/authconfig --nostart
    fi
    if [ -x /usr/sbin/ntsysv ]; then
	/usr/sbin/ntsysv --level 35
    fi

    # Reread in network configuration data.
    if [ -f /etc/sysconfig/network ]; then
	. /etc/sysconfig/network

	# Reset the hostname.
	action "Resetting hostname %s: " ${HOSTNAME} hostname ${HOSTNAME}

	# Reset the NIS domain name.
	if [ -n "$NISDOMAIN" ]; then
	    action "Resetting NIS domain name %s: " $NISDOMAIN nisdomainname $NISDOMAIN
	fi
    fi

    rm -f /.unconfigured
fi

if [ -x /sbin/quotaon ]; then
    action "Turning on user and group quotas for local filesystems: " /sbin/quotaon -aug
fi

# Clean out /etc.
rm -f /fastboot /fsckoptions /forcefsck /.autofsck /halt /poweroff /etc/killpower

# Do we need (w|u)tmpx files? We don't set them up, but the sysadmin might...
_NEED_XFILES=
[ -f /var/run/utmpx -o -f /var/log/wtmpx ] && _NEED_XFILES=1

# Clean up /var.  I'd use find, but /usr may not be mounted.
for afile in /var/lock/* /var/run/* ; do
	if [ -d "$afile" ]; then
	   case "`basename $afile`" in
		news|mon)	;;
		sudo)
				rm -f $afile/*/* ;;
		*)		rm -f $afile/* ;;
	   esac
	else
      [ "$afile" = "/var/lock/TMP_1ST" ] && continue
	   rm -f $afile
	fi
done
rm -f /var/lib/rpm/__db*

# Reset pam_console permissions
[ -x /sbin/pam_console_apply -a ! -c /dev/.devfsd ] && \
    /sbin/pam_console_apply -r

{
# Clean up utmp/wtmp
>/var/run/utmp
touch /var/log/wtmp
chgrp utmp /var/run/utmp /var/log/wtmp
chmod 0664 /var/run/utmp /var/log/wtmp
if [ -n "$_NEED_XFILES" ]; then
  >/var/run/utmpx
  touch /var/log/wtmpx
  chgrp utmp /var/run/utmpx /var/log/wtmpx
  chmod 0664 /var/run/utmpx /var/log/wtmpx
fi

# Delete X locks
rm -f /tmp/.X*-lock

# Delete VNC & X locks
rm -rf /tmp/.X*-unix 

# Clean ICE locks
mkdir -p /tmp/.ICE-unix
chown root:root /tmp/.ICE-unix
rm -rf /tmp/.ICE-unix/*
chmod a+rwx,+t /tmp/.ICE-unix

# Delete Postgres sockets
rm -f /tmp/.s.PGSQL.*

# GNOME and KDE related cleanup
rm -rf /tmp/.fam_socket /tmp/kde-* /tmp/ksocket-* /tmp/mcop-* /tmp/orbit-* /tmp/.esd /tmp/.sawfish-*

#Detect and create/activate encrypted swap
#Changed by Michel Bouissou on 2002/04/08
if [[ -n $encrypted_swap ]];then
    loop=NONE
    action "Testing insertion of loop module" modprobe loop
    if [ $? == 0 ]; then
        for (( s = 1; s <= 10; s++ )); do
            if [ -b /dev/loop0 ]; then
                loop=OK
                s=11
            else
                sleep 1
            fi
	done
    fi
    if [ $loop == OK ]; then
        for swdev in ${encrypted_swap}; do
            loop=NONE
            for l in `echo /dev/loop[0-9]`; do
                if [ $loop == NONE ] && ! grep -q $l /proc/mounts && ! { losetup $l &> /dev/null; }; then
                    loop=$l
                fi
            done
            if [ $loop != NONE ]; then
                action "Found available loop device %s." $loop /bin/true
                swapoff $swdev > /dev/null 2>&1
                dd if=$swdev bs=1024 count=40 2>/dev/null |\
                mcookie -f /dev/stdin | losetup -p 0 -e AES128 $loop $swdev > /dev/null 2>&1
                if [ $? == 0 ]; then
                    action "Mounting %s on encrypted %s with random key" $swdev $loop /bin/true
                    dd if=/dev/zero of=$loop bs=1024 count=40 > /dev/null 2>&1
                    action "Creating encrypted swap on %s using %s:" $swdev $loop mkswap $loop
                    if [ $? == 0 ]; then
                       action "Activating encrypted swap on %s using %s:" $swdev $loop swapon -p 0 $loop
                    fi
                else
                    action "Mounting %s on encrypted %s with random key" $swdev $loop /bin/false
                fi
            else
                action "Could not find any available loop device!" /bin/false
            fi
        done
    fi
fi

# Now turn on swap in case we swap to files.
swapon -a >/dev/null 2>&1
action "Enabling swap space: " /bin/true

# Initialize the serial ports.
if [ -f /etc/rc.serial ]; then
	. /etc/rc.serial
fi

# If a SCSI tape has been detected, load the st module unconditionally
# since many SCSI tapes don't deal well with st being loaded and unloaded
if [ -f /proc/scsi/scsi ] && LC_ALL=C grep -q 'Type:   Sequential-Access' /proc/scsi/scsi 2>/dev/null ; then
	if LC_ALL=C grep -qv ' 9 st' /proc/devices && [ -n "$USEMODULES" ]; then
		modprobe st >/dev/null 2>&1
	fi
fi

# Load usb storage here, to match most other things
if [ -n "$needusbstorage" ]; then
	modprobe usb-storage >/dev/null 2>&1
fi

# Ooh, firewire too.
if ! LC_ALL=C 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" ] && action "Initializing firewire controller (%s): " $alias modprobe $alias
      done
      LC_ALL=C grep -q "SBP2" /proc/bus/ieee1394/devices 2>/dev/null && modprobe sbp2 >/dev/null 2>&1
   fi
fi

# If they asked for ide-scsi, load it
if LC_ALL=C grep -q "ide-scsi" /proc/cmdline ; then
	modprobe ide-cd >/dev/null 2>&1
	modprobe ide-scsi >/dev/null 2>&1
fi

# Turn on harddisk optimization
# There is only one file /etc/sysconfig/harddisks for all disks
# after installing the hdparm-RPM. If you need different hdparm parameters
# for each of your disks, copy /etc/sysconfig/harddisks to
# /etc/sysconfig/harddiskhda (hdb, hdc...) and modify it.
# Each disk which has no special parameters will use the defaults.
# Each non-disk which has no special parameters will be ignored.
# 
 
disk[0]=s;
disk[1]=hda;  disk[2]=hdb;  disk[3]=hdc;  disk[4]=hdd;
disk[5]=hde;  disk[6]=hdf;  disk[7]=hdg;  disk[8]=hdh;
disk[9]=hdi;  disk[10]=hdj; disk[11]=hdk; disk[12]=hdl;
disk[13]=hdm; disk[14]=hdn; disk[15]=hdo; disk[16]=hdp;
disk[17]=hdq; disk[18]=hdr; disk[19]=hds; disk[20]=hdt;
 
 
if [ -x /sbin/hdparm ]; then
   for device in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20; do
	unset MULTIPLE_IO USE_DMA EIDE_32BIT LOOKAHEAD EXTRA_PARAMS
        if [ -f /etc/sysconfig/harddisk${disk[$device]} ]; then
                . /etc/sysconfig/harddisk${disk[$device]}
                HDFLAGS[$device]=
                if [ -n "$MULTIPLE_IO" ]; then
                    HDFLAGS[$device]="-q -m$MULTIPLE_IO"
                fi
                if [ -n "$USE_DMA" ]; then
                    HDFLAGS[$device]="${HDFLAGS[$device]} -q -d$USE_DMA"
                fi
                if [ -n "$EIDE_32BIT" ]; then
                    HDFLAGS[$device]="${HDFLAGS[$device]} -q -c$EIDE_32BIT"
                fi
                if [ -n "$LOOKAHEAD" ]; then
                    HDFLAGS[$device]="${HDFLAGS[$device]} -q -A$LOOKAHEAD"
                fi
                if [ -n "$EXTRA_PARAMS" ]; then
                    HDFLAGS[$device]="${HDFLAGS[$device]} $EXTRA_PARAMS"
                fi
        else
                HDFLAGS[$device]="${HDFLAGS[0]}"
        fi
        if [ -e "/proc/ide/${disk[$device]}/media" ]; then
             hdmedia=`cat /proc/ide/${disk[$device]}/media`
             if [ "$hdmedia" = "disk" -o -f "/etc/sysconfig/harddisk${disk[$device]}" ]; then
                  if [ -n "${HDFLAGS[$device]}" ]; then
                      action "Setting hard drive parameters for %s: " ${disk[$device]}  /sbin/hdparm ${HDFLAGS[$device]} /dev/${disk[$device]}
                  fi
             fi
        fi
   done
fi

# Adjust symlinks as necessary in /boot to keep system services from
# spewing messages about mismatched System maps and so on.
if [ -L /boot/System.map -a -r /boot/System.map-`uname -r` -a \
	! /boot/System.map -ef /boot/System.map-`uname -r` ] ; then
	ln -s -f System.map-`uname -r` /boot/System.map 2>/dev/null
fi
if [ ! -e /boot/System.map -a -r /boot/System.map-`uname -r` ] ; then
	ln -s -f System.map-`uname -r` /boot/System.map 2>/dev/null
fi

# Adjust symlinks as necessary in /boot to have the default config
if [ -L /boot/config -a -r /boot/config-`uname -r` ] ; then
	ln -sf config-`uname -r` /boot/config 2>/dev/null
fi
if [ ! -e /boot/config -a -r /boot/config-`uname -r` ] ; then
	ln -sf config-`uname -r` /boot/config 2>/dev/null
fi

# 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
# Also keep kernel symbols around in case we need them for debugging
i=5
while [ $i -ge 0 ]; do
	if [ -f /var/log/ksyms.$i ]; then
		mv /var/log/ksyms.$i /var/log/ksyms.$(($i+1))
	fi
	i=$(($i-1))
done
(/bin/date;
 /bin/uname -a;
 /bin/cat /proc/cpuinfo;
 [ -r /proc/modules ] && /bin/cat /proc/modules;
 [ -r /proc/ksyms ] && /bin/cat /proc/ksyms) >/var/log/ksyms.0
# create the crash indicator flag to warn on crashes, offer fsck with timeout
touch /.autofsck
sleep 1
kill -TERM `/sbin/pidof getkey` >/dev/null 2>&1
} &
if [ "$PROMPT" != "no" -a "$CONFIRM" != "yes" ]; then
   /sbin/getkey i && export CONFIRM=yes
fi
wait
[ "$CONFIRM" == "yes" ] && touch /var/run/confirm

if grep -qi "failsafe" /proc/cmdline; then
    touch /var/run/failsafe
fi

if [ -f /var/lock/TMP_1ST ];then
 if [ -f /etc/init.d/mandrake_firstime ];then
	/bin/sh /etc/init.d/mandrake_firstime
 fi
fi

if [ -f /etc/init.d/mandrake_everytime ]; then 
	/bin/sh /etc/init.d/mandrake_everytime
fi

# (pixel) a kind of profile for XF86Config
# if no XFree=XXX given on kernel command-line, restore XF86Config.standard
for i in XF86Config XF86Config-4; do 
    if [ -L "/etc/X11/$i" ]; then
        XFree=`sed -n 's/.*XFree=\(\w*\).*/\1/p' /proc/cmdline`
        [ -n "$XFree" ] || XFree=standard
        [ -r "/etc/X11/$i.$XFree" ] && ln -sf "$i.$XFree" "/etc/X11/$i"
    fi
done