Files
Arquivotheca.SunOS-4.1.4/etc/files/rc.boot
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

211 lines
5.3 KiB
Clojure

#! /bin/sh -
#
# @(#)rc.boot 1.1 94/10/31 SMI
#
# Executed once at boot time
#
PATH=/sbin:/single:/usr/bin:/usr/etc; export PATH
HOME=/; export HOME
#
# It is important to fsck the root filesystem here
# to prevent spurious panics after system crashes.
#
# In SunOS 4.x, block devices are no longer consistent with file systems
# mounted read-write. To allow file systems to be reliably fsck'ed during
# system reboots, the root 4.2 (UFS) file system is by default mounted
# read-only. Fsck uses the raw device to check for any file system damage.
# This way fsck can repair any file system damage without the kernel
# overwriting it with any potentially corrupt in-core file system control
# information it might have. The file systems will remain mounted
# read-only until a "remount" operation by /etc/rc.single is done after
# the disks check out cleanly. Thus if fsck finds and repairs a corrupt
# file system which is currently mounted the system should be rebooted
# immediately.
#
# Simulate cat in sh so we don't need to have it on the root filesystem
#
shcat() {
while test $# -ge 1
do
while read i
do
echo "$i"
done < $1
shift
done
}
#
# Set hostname from /etc/hostname.xx0 file, if none exists no harm done
#
hostname="`shcat /etc/hostname.??0 2>/dev/null`"
if [ ! -f /etc/.UNCONFIGURED -a ! -z "$hostname" -a "$hostname" != "noname" ]; then
hostname $hostname
fi
#
# Get the list of ether devices to ifconfig by breaking /etc/hostname.* into
# separate args by using "." as a shell separator character, then step
# through args and ifconfig every other arg.
#
interface_names="`shcat /etc/hostname.* 2>/dev/null`"
if test -n "$interface_names"
then
(
IFS="$IFS."
set `echo /etc/hostname\.*`
while test $# -ge 2
do
shift
if [ "$1" != "xx0" ]; then
ifconfig $1 "`shcat /etc/hostname\.$1`" netmask + -trailers up
fi
shift
done
)
fi
#
# configure the rest of the interfaces automatically, quietly.
#
ifconfig -ad auto-revarp up
#
# set host info from bootparams if not locally configured
#
if [ -z "`hostname`" ]; then
hostconfig -p bootparams
fi
#
# If local and network configuration failed, re-try forever in an
# interruptable sub-shell. We want this sub-shell to be interruptable
# so that the machine can still be brought up manually when the servers
# are not cooperating.
#
if [ -z "`hostname`" -a ! -f /etc/.UNCONFIGURED ]; then
echo "host configuration failed - re-trying..."
intr sh /etc/rc.ip
fi
ifconfig lo0 127.0.0.1 up
#
# If "/usr" is going to be NFS mounted from a host on a different
# network, we must have a routing table entry before the mount is
# attempted. One may be added by the diskless kernel or by the
# "hostconfig" program above. Setting a default router here is a problem
# because the default system configuration does not include the
# "route" program in "/sbin". Thus we only try to add a default route
# at this point if someone managed to place a static version of "route" into
# "/sbin". Otherwise, we add the route in "/etc/rc.local" after "/usr"
# has been mounted and NIS is running.
#
# Note that since NIS is not running at this point, the router's name
# must be in "/etc/hosts" or its numeric IP address must be used in the file.
#
if [ -f /sbin/route -a -f /etc/defaultrouter ]; then
route -f add default `cat /etc/defaultrouter` 1
fi
unset shcat
#
# This function is used when fsck detects an error and we want to skip
# remounting the file systems read-write to facilitate any needed repair.
# The root 4.2 file system is always mounted read-only during booting
# unless the "-w" flag is given when booting the file system.
#
noremount() {
echo ""
echo "WARNING - file systems have NOT been remounted read-write."
echo "Use fsck to fix any file system problems, rebooting the"
echo "system if any problems are found with a mounted file system."
echo "After file systems have fsck'ed cleanly, you can remount file"
echo "systems and finish single-user setup using \"/etc/rc.single\"."
}
intr mount -n -r /usr
# trust that everything is ok when /fastboot exists
# and skip doing the fsck'ing the file systems.
if [ -r /fastboot ]; then
echo "Fast boot ... skipping disk checks"
error=0
else
if [ $1x = singleuserx ]; then
echo "checking / and /usr filesystems"
intr fsck -p -w / /usr
error=$?
what="Fsck"
else
echo "checking filesystems"
intr fsck -p -w
error=$?
what="Reboot"
fi
fi
case $error in
0|2)
#
# Everything looks good.
#
# Finish the single user setup which will remount the
# file systems read-write and do other work which can
# be done only on a writable root file system.
#
sh /etc/rc.single
#
# We need to check whether rc.single successfully completed.
# It can fail, for example, when /etc/fstab has gotten fouled up.
#
nerr=$?
case $nerr in
0)
error=$nerr
;;
1)
echo "Remount of / failed - check /etc/fstab"
error=$nerr
;;
2)
echo "Remount of /usr failed - check /etc/fstab"
error=$nerr
;;
*)
echo "Unknown error in /etc/rc.single - help!"
error=$nerr
;;
esac
;;
4)
if [ $1x = singleuserx ]; then
echo "Mounted FS fixed - rebooting single-user."
reboot -q -n -- -s
else
echo "Mounted FS fixed - rebooting."
reboot -q -n
fi
;;
8)
echo "$what failed...help!"
noremount
;;
12)
echo "$what interrupted."
noremount
;;
*)
echo "Unknown error in reboot fsck."
noremount
;;
esac
#
# exit with error status from fsck
#
exit $error