Re: Any one followed "how to build a minimal linux system from source code" and succeded?

linq936_at_hotmail.com
Date: 06/20/05


Date: 20 Jun 2005 08:41:08 -0700


Bill Marcum wrote:
> On 19 Jun 2005 17:33:16 -0700, linq936@hotmail.com
> <linq936@hotmail.com> wrote:
> >
> > The book only says copy the init scripts from the host, as my host is
> > Fedora, I downloaded the bootscript RPM and installed it. But in
> > booting the machine and select the new system, init fails and I am
> > always led to maintaince shell.
> >
> > Yes, I come to a shell, it is sort of the goal is achieved, but I do
> > not see log-in, so I really want to make it.
> >
> > My gut feeling is the boot scripts I use are too complex for the job
> > I am trying to do. So any suggestion how I can simplify the scipt or
> > where I can find one is highly appreciated.
> >
> > From the error message I know that init fails in executing rc.sysinit
> > and here is the inittab file,
> >
> If you know that it fails in rc.sysinit, why not post that script? Or
> you could download a small Linux distro like tomsrtbt or baslinux and
> look at their boot scripts. Does your minimal Linux use busybox?
>
That script, rc.sysinit is so big, but I will post it below.

I will check out the 2 distro and look at their boot script.

As for the bootloader of my build, I use GRUB. This is the one used in
the host, what I do is create a new partition, build my minimal system
over there and modify the grub.conf to pick up my build.

Any other suggestion?

Here is the rc.sysinit below, there are many error messages flashing
over the screen in booting, I add some "sleep 3" to the script and see
some errors like this,

"mount:mount point /proc does not exist"

#!/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 -r /etc/rc.d/rc.sysinit
fi

# If we're using devfs, start devfsd now - we need the old device names
[ -e /dev/.devfsd -a -x /sbin/devfsd ] && /sbin/devfsd /dev

HOSTNAME=`/bin/hostname`
if [ -f /etc/sysconfig/network ]; then
    . /etc/sysconfig/network
fi
if [ -z "$HOSTNAME" -o "$HOSTNAME" = "(none)" ]; then
    HOSTNAME=localhost
fi

# Mount /proc (done here so volume labels can work with fsck)
mount -n -t proc /proc /proc

. /etc/init.d/functions

HOSTTYPE=`uname -m`

if [ "$HOSTTYPE" != "s390" -a "$HOSTTYPE" != "s390x" ]; then
  last=0
  for i in `LC_ALL=C grep '^[0-9].*respawn:/sbin/mingetty' /etc/inittab
| sed 's/^.* tty\([0-9][0-9]*\).*/\1/g'`; do
> /dev/tty$i
        last=$i
  done
  if [ $last -gt 0 ]; then
> /dev/tty$((last+1))
> /dev/tty$((last+2))
  fi
fi

if [ "$CONSOLETYPE" = "vt" -a -x /sbin/setsysfont ]; then
   echo -n "Setting default font ($SYSFONT): "
   /sbin/setsysfont
   if [ $? -eq 0 ]; then
      success
   else
      failure
   fi
   echo ; echo
fi

# Print a text banner.
echo -en $"\t\tWelcome to "
if LC_ALL=C fgrep -q "Red Hat" /etc/redhat-release ; then
 [ "$BOOTUP" = "color" ] && echo -en "\\033[0;31m"
 echo -en "Red Hat"
 [ "$BOOTUP" = "color" ] && echo -en "\\033[0;39m"
 PRODUCT=`sed "s/Red Hat \(.*\) release.*/\1/" /etc/redhat-release`
 echo " $PRODUCT"
else
 PRODUCT=`sed "s/ release.*//g" /etc/redhat-release`
 echo "$PRODUCT"
fi
if [ "$PROMPT" != "no" ]; then
 echo -en $"\t\tPress 'I' to enter interactive startup."
 echo
fi

# Fix console loglevel
if [ -n "$LOGLEVEL" ]; then
        /bin/dmesg -n $LOGLEVEL
fi

# Start the graphical boot, if necessary; /usr may not be mounted yet,
so we
# may have to do this again after mounting
RHGB_STARTED=0
mount -n -t devpts /dev/pts /dev/pts

# Unmount the initrd, if necessary
if LC_ALL=C fgrep -q /initrd /proc/mounts && ! LC_ALL=C fgrep -q
/initrd/loopfs /proc/mounts ; then
   if [ -e /initrd/dev/.devfsd ]; then
      umount /initrd/dev
   fi
   umount /initrd
   /sbin/blockdev --flushbufs /dev/ram0 >/dev/null 2>&1
fi

if fgrep rhgb /proc/cmdline > /dev/null 2>&1 && [ "$BOOTUP" = "color"
-a "$GRAPHICAL" = "yes" -a -x /usr/bin/rhgb ]; then
   /usr/bin/rhgb
   RHGB_STARTED=1
fi

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

# Set the system clock.
update_boot_stage RCclock
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=""
CLOCKFLAGS="$CLOCKFLAGS --hctosys"

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

/sbin/hwclock $CLOCKFLAGS

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

if [ "$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 "/lib/kbd/keymaps" ]; then
     KEYMAP="$KEYTABLE.map"
  fi
 fi
 if [ -n "$KEYMAP" ]; then
  # Since this takes in/output from stdin/out, we can't use initlog
  if [ -n "$KEYTABLE" ]; then
    echo -n $"Loading default keymap ($KEYTABLE): "
  else
    echo -n $"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.
update_boot_stage RChostname
action $"Setting hostname ${HOSTNAME}: " hostname ${HOSTNAME}

# Only read this once.
cmdline=$(cat /proc/cmdline)

# Initialiaze ACPI bits
if [ -d /proc/acpi ]; then
   for module in /lib/modules/`uname -r`/kernel/drivers/acpi/* ; do
      insmod $module
   done
fi

# Initialize USB controller and HID devices
update_boot_stage RCusb
usb=0
if ! strstr "$cmdline" nousb ; then
  if ! LC_ALL=C fgrep -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
      modprobe usbcore
      for alias in $aliases ; do
              [ "$alias" = "off" ] && continue
        action $"Initializing USB controller ($alias): " modprobe $alias
      done
      [ $? -eq 0 -a -n "$aliases" ] && usb=1
    fi
  fi
  if LC_ALL=C fgrep -q "usb" /proc/devices 2>/dev/null ; then
    usb=1
  fi
fi

if [ $usb = 1 -a ! -f /proc/bus/usb/devices ]; then
    action $"Mounting USB filesystem: " mount -t usbdevfs usbdevfs
/proc/bus/usb
fi

needusbstorage=
if [ $usb = "1" ]; then
    needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /proc/bus/usb/devices
2>/dev/null`
    LC_ALL=C fgrep 'hid' /proc/bus/usb/drivers || action $"Initializing
USB HID interface: " modprobe hid 2> /dev/null
    action $"Initializing USB keyboard: " modprobe keybdev 2> /dev/null
    action $"Initializing USB mouse: " modprobe mousedev 2> /dev/null
fi

if [ -f /fastboot ] || strstr "$cmdline" fastboot ; then
        fastboot=yes
fi

if [ -f /fsckoptions ]; then
        fsckoptions=`cat /fsckoptions`
fi

if [ -f /forcefsck ] || strstr "$cmdline" forcefsck ; then
        fsckoptions="-f $fsckoptions"
elif [ -f /.autofsck ]; then
        if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping ;
then
             chvt 1
        fi
        echo $"Your system appears to have shut down uncleanly"
        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
                                AUTOFSCK_OPT=
                        fi
                else
                        if /sbin/getkey -c $AUTOFSCK_TIMEOUT -m $"Press Y within %d seconds
to force file system integrity check..." y ; then
                                AUTOFSCK_OPT=-f
                        fi
                fi
                echo
        else
                # PROMPT not allowed
                if [ "$AUTOFSCK_DEF_CHECK" = "yes" ]; then
                        echo $"Forcing file system integrity check due to default setting"
                else
                        echo $"Not forcing file system integrity check due to default
setting"
                fi
        fi
        fsckoptions="$AUTOFSCK_OPT $fsckoptions"
fi

if [ "$BOOTUP" = "color" ]; then
        fsckoptions="-C $fsckoptions"
else
        fsckoptions="-V $fsckoptions"
fi

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

        STRING=$"Checking root filesystem"
        echo $STRING
        initlog -c "fsck -T -a / $fsckoptions"
        rc=$?

        if [ "$rc" = "0" ]; then
                success "$STRING"
                echo
        elif [ "$rc" = "1" ]; then
                passed "$STRING"
                echo
        fi

        # A return of 2 or higher means there were serious problems.
        if [ $rc -gt 1 ]; then
                if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping
; then
                    chvt 1
                fi

                failure "$STRING"
                echo
                echo
                echo $"*** An error occurred during the file system check."
                echo $"*** Dropping you to a shell; the system will reboot"
                echo $"*** when you leave the shell."

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

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

# Possibly update quotas if fsck was run on /.
LC_ALL=C grep -E '[[:space:]]+/[[:space:]]+' /etc/fstab | \
    awk '{ print $4 }' | \
    LC_ALL=C fgrep -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 ! strstr "$cmdline" nopnp ; 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.
update_boot_stage RCmountfs
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 ]; then
    [ -e /proc/lvm ] || modprobe lvm-mod > /dev/null 2>&1
    if [ -e /proc/lvm -a -x /sbin/vgchange ]; then
        action $"Setting up Logical Volume Management:" /sbin/vgscan &&
/sbin/vgchange -a y
    fi
fi

# Start up swapping.
update_boot_stage RCswap
action $"Activating swap partitions: " swapon -a -e

# 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.
mount -f /
mount -f /proc
mount -f /dev/pts
[ -f /proc/bus/usb/devices ] && mount -f -t usbdevfs usbdevfs
/proc/bus/usb
[ -e /dev/.devfsd ] && mount -f -t devfs devfs /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 ! strstr "$cmdline" nomodules && [ -f /proc/modules ] ; then
    USEMODULES=y
fi

unamer=`uname -r`

# 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 ! strstr $unamer - ; then
       ktag="`cat /proc/version`"
       mtag=`LC_ALL=C fgrep -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 fgrep -q "options sound dmabuf=1" /etc/modules.conf
2>/dev/null ; then
  alias=`/sbin/modprobe -c | awk '/^alias sound / { print $3 }'`
  if [ -n "$alias" -a "$alias" != "off" ]; then
      action $"Loading sound module ($alias): " modprobe sound
  fi
  alias=`/sbin/modprobe -c | awk '/^alias sound-slot-0 / { print $3 }'`
  if [ -n "$alias" -a "$alias" != "off" ]; then
      action $"Loading sound module ($alias): " modprobe sound-slot-0
  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 modules (for backward compatibility with VARs)
if [ -f /etc/rc.modules ]; then
        /etc/rc.modules
fi

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

    if [ -f /proc/mdstat ]; then
        echo -n $"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 fgrep -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
                if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping
; then
                    chvt 1
                fi
                echo
                echo
                echo $"*** An error occurred during the RAID startup"
                echo $"*** Dropping you to a shell; the system will reboot"
                echo $"*** when you leave the shell."

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

                echo $"Unmounting file systems"
                umount -a
                mount -n -o remount,ro /
                echo $"Automatic reboot in progress."
                reboot -f
        fi
        # LVM initialization, take 2 (it could be on top of RAID)
        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
    fi
fi

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

_RUN_QUOTACHECK=0
# Check filesystems
if [ -z "$fastboot" ]; then
        STRING=$"Checking filesystems"
        echo $STRING
        initlog -c "fsck -T -R -A -a $fsckoptions"
        rc=$?
        if [ "$rc" = "0" ]; then
                success "$STRING"
                echo
        elif [ "$rc" = "1" ]; then
                passed "$STRING"
                echo
        fi

        # A return of 2 or higher means there were serious problems.
        if [ $rc -gt 1 ]; then
                if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping
; then
                    chvt 1
                fi

                failure "$STRING"
                echo
                echo
                echo $"*** An error occurred during the file system check."
                echo $"*** Dropping you to a shell; the system will reboot"
                echo $"*** when you leave the shell."

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

                echo $"Unmounting file systems"
                umount -a
                mount -n -o remount,ro /
                echo $"Automatic reboot in progress."
                reboot -f
        elif [ "$rc" = "1" -a -x /sbin/quotacheck ]; then
                _RUN_QUOTACHECK=1
        fi
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.
action $"Mounting local filesystems: " mount -a -t nonfs,smbfs,ncpfs -O
no_netdev

# Start the graphical boot, if necessary and not done yet.
if fgrep rhgb /proc/cmdline > /dev/null 2>&1 && [ "$RHGB_STARTED" -eq 0
-a "$BOOTUP" = "color" -a "$GRAPHICAL" = "yes" -a -x /usr/bin/rhgb ];
then
   /usr/bin/rhgb
   RHGB_STARTED=1
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

if [ -x /sbin/quotaon ]; then
    action $"Enabling local filesystem quotas: " /sbin/quotaon -aug
fi

# Configure machine if necessary.
if [ -f /.unconfigured ]; then
    if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping ;
then
        chvt 1
    fi

    if [ -x /usr/sbin/kbdconfig ]; then
        /usr/sbin/kbdconfig
    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/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 ${HOSTNAME}: " hostname ${HOSTNAME}
    fi

    rm -f /.unconfigured
fi

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

# 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 "$afile" in
                */news|*/mon) ;;
                */sudo|*/vmware) rm -f $afile/*/* ;;
                *) rm -f $afile/* ;;
           esac
        else
           rm -f $afile
        fi
done
rm -f /var/lib/rpm/__db*

# Reset pam_console permissions
[ -x /sbin/pam_console_apply ] && /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

# Delete ICE locks
rm -rf /tmp/.ICE-unix

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

# Now turn on swap in case we swap to files.
swapon -a
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 -a -n "$USEMODULES" ]; then
    if LC_ALL=C fgrep -q 'Type: Sequential-Access' /proc/scsi/scsi
2>/dev/null ; then
        if LC_ALL=C fgrep -qv ' 9 st' /proc/devices ; then
                modprobe st >/dev/null 2>&1
        fi
    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 ! strstr "$cmdline" nofirewire ; 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
        action $"Initializing firewire controller ($alias): " modprobe $alias
      done
      LC_ALL=C fgrep -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 strstr "$cmdline" ide-scsi ; 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
${disk[$device]}: " /sbin/hdparm ${HDFLAGS[$device]}
/dev/${disk[$device]}
                  fi
             fi
        fi
   done
fi

# Boot time profiles. Yes, this should be somewhere else.
if [ -x /usr/sbin/redhat-config-network-cmd ]; then
  if strstr "$cmdline" netprofile= ; then
    for arg in $cmdline ; do
        if [ "${arg##netprofile=}" != "${arg}" ]; then
            /usr/sbin/redhat-config-network-cmd --profile ${arg##netprofile=}
        fi
    done
  fi
fi

# Generate a header that defines the boot kernel.
/sbin/mkkerneldoth

# 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-$unamer -a \
        ! /boot/System.map -ef /boot/System.map-$unamer ]; then
        ln -s -f System.map-$unamer /boot/System.map
fi
if [ ! -e /boot/System.map -a -r /boot/System.map-$unamer ]; then
        ln -s -f System.map-$unamer /boot/System.map
fi

# The special Red Hat kernel library symlink must point to the right
library
# We need to deal with cases where there is no library, and we need to
# deal with any version numbers that show up.
shopt -s nullglob
for library in /lib/kernel/$unamer/libredhat-kernel.so* ; do
        ln -f $library /lib/
        ldconfig -n /lib/
done
shopt -u nullglob

# 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
                chmod 0600 /var/log/ksyms.$i
                mv /var/log/ksyms.$i /var/log/ksyms.$(($i+1))
        fi
        i=$(($i-1))
done
{ date
  uname -a
  cat /proc/cpuinfo
  [ -r /proc/modules ] && cat /proc/modules
  [ -r /proc/ksyms ] && cat /proc/ksyms
} > /var/log/ksyms.0
chmod 600 /var/log/ksyms.0
# create the crash indicator flag to warn on crashes, offer fsck with
timeout
touch /.autofsck
kill -TERM `/sbin/pidof getkey` >/dev/null 2>&1
} &
if strstr "$cmdline" confirm ; then
        touch /var/run/confirm
fi
if [ "$PROMPT" != "no" ]; then
        /sbin/getkey i && touch /var/run/confirm
fi
wait

# Let rhgb know that we're leaving rc.sysinit
if [ -x /usr/bin/rhgb-client ] && /usr/bin/rhgb-client --ping ; then
    /usr/bin/rhgb-client --sysinit
fi



Relevant Pages

  • Re: Problem with ata layer in 2.6.24
    ... In my script, its one line: ... No module pata_amd found for kernel 2.6.24, ... It will boot one or the other ... build and install a new kernel for the distro, ...
    (Linux-Kernel)
  • Re: How to start mysql at boot time?
    ... I can only assume the values are read into memory during the boot ... > the script to start the mysql server and passing the user mysqld to the ... > script so that the script will run as that user. ... The echo just prints " mysqld" to the console during bootup. ...
    (comp.unix.bsd.openbsd.misc)
  • Re: Commanding rc.local not to run at boot..possible.?
    ... >>Right after the kernel is unpacked in the beginning of boot, ... > If you can tell me where it is ever assigned/used in the script I would ... The snippet above is what produces the prompt to press the "I" key. ...
    (Fedora)
  • Re: FreeBSD-6.2, 7.0-BETA1 on X60
    ... After I follow below instruction it boot kernel, but then give me error says /etc/fstab not found etc., ... After 10-20 minutes it give me error message "can't load kernel", ... echo Loading mfsroot... ...
    (freebsd-stable)
  • RE: Installing from USB Flash Drive
    ... Included below is my working script to populate a 1GB USB flash stick disk with the FreeBSD cd1 iso file. ... # Change system bios to boot from USB-dd and away you go. ... echo " " ...
    (freebsd-questions)

Loading