#!/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