[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: "/etc/init.d/boot" relies on "/usr/." being mounted...



>>>>> "Michael" == Michael Meskes <meskes@topsystem.de> writes:

    Michael> Is there a scenario where /usr is not mounted but /proc
    Michael> is?  /etc/init.d/kerneld does check whether /proc is
    Michael> mounted.

 If the transnames patch has been applied to your kernel, then yes:

#! /bin/sh
#
# boot		boot-time system configuration.
#
# Version:	@(#)boot  2.8  04-Feb-1997  miquels@cistron.nl
#
#		Copyright (C) 1994-1997 Debian Association, Inc.
#		Written by Ian Murdock <imurdock@gnu.ai.mit.edu>
#		       and Miquel van Smoorenburg <miquels@cistron.nl>
#

#
# This script desperately needs to parse a config file
# (like /etc/default/boot) instead of having to edit it directly!
#

# Time files in /tmp are kept.
TMPTIME=0
# Set to yes if you want sulogin to be spawned on bootup
SULOGIN=yes
# Set to no if you want to be able to login over telnet/rlogin
# before system startup is complete (as soon as inetd is started)
DELAYLOGIN=yes
# Set GMT="-u" if your system clock is set to GMT, and GMT="" if not.
GMT="-u"
# Set VERBOSE to "no" if you would like a more quiet bootup.
VERBOSE=yes
# Set EDITMOTD to "no" if you don't want /etc/motd to be editted automatically
EDITMOTD=yes
# Set TRANSNAME to "yes" if you use the transnames kernel patch
TRANSNAME=yes

PATH="/sbin:/bin:/usr/sbin:/usr/bin"
umask 022
export PATH VERBOSE

if [ -x /sbin/unconfigured.sh ]
then
  /sbin/unconfigured.sh
fi

#
# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.
#
trap ":" INT QUIT TSTP

#
# For transname: mount /proc first, so that /proc/nametrans becomes
# available.
#
if [ "$TRANSNAME" = "yes" ]
then
  mount -n /proc
fi
#
# Set hostname
#
# For transnames, with fail-safe translation mode.
#   /etc/hostname --> /etc/hostname#ktype=server#
#
hostname --file /etc/hostname
echo hostname set to \"$(hostname)\"
# tell us about /proc/nametrans
echo /proc/namtrans: $(cat /proc/nametrans)

#
# Load the keymaps *as soon as possible*
#
if [ -r /etc/kbd/default.map ]
then
  loadkeys /etc/kbd/default.map
fi

#
# Set SULOGIN to yes if you want a sulogin to be spawned from
# this script *before anything else* with a timeout, like on SCO.
#
[ "$SULOGIN" = yes ] && sulogin -t 30 $CONSOLE

if [ "$VERBOSE" != no ]
then
  echo
  echo "Running /etc/init.d/boot..."
  echo
fi

#
# Activate the swap device(s) in /etc/fstab. This needs to be done
# before fsck, since fsck can be quite memory-hungry.
#
if [ -x /sbin/swapon ]
then
  [ "$VERBOSE" != no ] && echo "Activating swap..."
  swapon -a 2>/dev/null
fi

#
# Ensure that bdflush (update) is running before any major I/O is
# performed (the following fsck is a good example of such activity :).
#
[ -x /sbin/update ] && update

#
# Check the root file system.
#
if [ -f /fastboot ]
then
  echo "Fast boot, no file system check"
else
  #
  # Ensure that root is quiescent and read-only before fsck'ing.
  #
  mount -n -o remount,ro /
  if [ $? = 0 ]
  then
    echo "Checking root file system..."
    fsck -a /
    #
    # If there was a failure, drop into single-user mode.
    #
    # NOTE: "failure" is defined as exiting with a return code of
    # 2 or larger.  A return code of 1 indicates that file system
    # errors were corrected but that the boot may proceed.
    #
    if [ $? -gt 1 ]
    then
      # Surprise! Re-directing from a HERE document (as in
      # "cat << EOF") won't work, because the root is read-only.
      echo
      echo "fsck failed.  Please repair manually and reboot.  Please note"
      echo "that the root file system is currently mounted read-only.  To"
      echo "remount it read-write:"
      echo
      echo "   # mount -n -o remount,rw /"
      echo
      echo "CONTROL-D will exit from this shell and REBOOT the system."
      echo
      # Start a single user shell on the console
      /sbin/sulogin $CONSOLE
      reboot -f
    fi
  else
    echo "*** ERROR!  Cannot fsck root fs because it is not mounted read-only!"
    echo
  fi
fi

#
# Remount rootfs rw (default), but do not try to change mtab because it
# is on a ro fs until the remount succeeded.  Then clean up old mtabs and
# finally write the new mtab.
#
mount -n -o remount,rw /
rm -f /etc/mtab~ /etc/nologin /fastboot
: > /etc/mtab
mount -o remount,rw /

#
# For transname: remount /proc so it will show up in mtab.
#
if [ "$TRANSNAME" = "yes" ]
then
  mount -o remount /proc
fi

# There is an error here.  "/usr/." is not mounted
# yet. "/etc/init.d/modules" calls on "/etc/init.d/kerneld", which in
# turn calls `/usr/bin/grep` and `/usr/sbin/start-stop-daemon`, which
# relies on `/usr/bin/perl`.
#
# Load the appropriate modules. This needs to be done here in case fs modules
# are needed for accessing or mounting local file systems.
#
#if [ -x /etc/init.d/modules ]
#then
#  /etc/init.d/modules start
#fi

#
# Enable multiple devices. If /etc/mdtab doesn't exist or is
# empty we don't bother; likewise if mdadd isn't installed.
#
# Note that since this is called now you can't swap to an MD device; but
# you don't want to do that anyway as the Linux kernel can stripe swap
# partitions itself (see swapon manpage).
#
if [ -s /etc/mdtab -a -f /sbin/mdadd ]
then
  mdadd -ar
fi

#
# Check the rest of the file systems.
#
if [ ! -f /fastboot ]
then
    echo "Checking all file systems..."
    fsck -R -A -a
    if [ $? -gt 1 ]
    then
      echo
      echo "fsck failed.  Please repair manually."
      echo
      echo "CONTROL-D will exit from this shell and continue system startup."
      echo
      # Start a single user shell on the console
      /sbin/sulogin $CONSOLE
    fi
fi

#
# Put a nologin file in /etc to prevent people from logging in before
# system startup is complete.
#
if [ "$DELAYLOGIN" = yes ]
then
  echo "System bootup in progress - please wait" > /etc/nologin
  cp /etc/nologin /etc/nologin.boot
fi

#
# Mount local file systems in /etc/fstab.
#
[ "$VERBOSE" != no ] && echo "Mounting local file systems ..."
# For transname: /proc is already mounted, don't remount.
if [ "$TRANSNAME" != "yes" ]
then
  mount -avt nonfs
else
  mount -avt nonfs,noproc
fi

#
# Execute swapon command again, in case we want to swap to
# a file on a now mounted filesystem.
#
swapon -a 2>/dev/null

#
# Set hostname.
#
hostname --file /etc/hostname

#
# Setup the network interfaces. Note that /var/run and /var/lock
# are cleaned up after this, so don't put anything in the "network"
# script that leave a pidfile or a lockfile.
#
if [ -x /etc/init.d/network ]
then
  /etc/init.d/network start
fi

#
# Now that TCP/IP is configured, mount the NFS file systems in /etc/fstab.
#
echo "Mounting remote file systems ..."
mount -a -t nfs

#
# Set and adjust the CMOS clock.
#
if [ ! -f /etc/adjtime ]
then
  echo "0.0 0 0.0" > /etc/adjtime
fi
clock -a $GMT

#
# Now that /usr/lib/zoneinfo should be available, announce the local time.
#
if [ "$VERBOSE" != no ]
then
  echo
  echo "Local time: `date`"
  echo
fi

#
# Wipe /tmp (and don't erase `lost+found', `quota.user' or `quota.group')!
# Note that files _in_ lost+found _are_ deleted.
#
[ "$VERBOSE" != no ] && echo -n "Cleaning up /tmp "
( cd /tmp && \
  find . -xdev \
  ! -ctime -$TMPTIME \
  ! -name . \
  ! \( -name lost+found -uid 0 \) \
  ! \( -name quota.user -uid 0 \) \
  ! \( -name quota.group -uid 0 \) \
    -depth -exec rm -rf -- {} \; )
#
# Clean up any stale locks.
#
[ "$VERBOSE" != no ] && echo -n "/var/lock "
( cd /var/lock && find . -type f -exec rm -f -- {} \; )
#
# Clean up /var/run and create /var/run/utmp so that we can login.
#
[ "$VERBOSE" != no ] && echo -n "/var/run "
( cd /var/run && \
	find . ! -type d ! -name utmp ! -name innd.pid ! -name random-seed \
	-exec rm -f -- {} \; )
: > /var/run/utmp
[ "$VERBOSE" != no ] && echo " ... done"

#
# Save the random seed.
#
/etc/init.d/urandom start

#
# Run the package-specific boot scripts in /etc/rc.boot.
#
run-parts /etc/rc.boot

#
# Set pseudo-terminal access permissions.
#
chmod 666 /dev/tty[p-za-e][0-9a-f]
chown root.tty /dev/tty[p-za-e][0-9a-f]

#
# Update /etc/motd.
#
if [ "$EDITMOTD" != no ]
then
	uname -a > /tmp/motd
	sed 1d /etc/motd >> /tmp/motd
	mv /tmp/motd /etc/motd
fi

if [ -x /sbin/setup.sh ]
then
  /sbin/setup.sh
fi
-- 
Karl M. Hegbloom <karlheg@inetarena.com>
http://www.inetarena.com/~karlheg
Portland, OR  USA
Debian GNU 1.2  Linux 2.0.30t
You tell me and we'll both know.


Reply to: