|
#!/bin/sh
|
|
#
|
|
# --- ROCK-COPYRIGHT-NOTE-BEGIN ---
|
|
#
|
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
|
|
# Please add additional copyright information _after_ the line containing
|
|
# the ROCK-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by
|
|
# the ./scripts/Create-CopyPatch script. Do not edit this copyright text!
|
|
#
|
|
# ROCK Linux: rock-src/package/base/sysfiles/system.init
|
|
# ROCK Linux is Copyright (C) 1998 - 2003 Clifford Wolf
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 2 of the License, or
|
|
# (at your option) any later version. A copy of the GNU General Public
|
|
# License can be found at Documentation/COPYING.
|
|
#
|
|
# Many people helped and are helping developing ROCK Linux. Please
|
|
# have a look at http://www.rocklinux.org/ and the Documentation/TEAM
|
|
# file for details.
|
|
#
|
|
# --- ROCK-COPYRIGHT-NOTE-END ---
|
|
#
|
|
# Desc: System bootup and shutdown
|
|
# Runlevel: 01 rcX rc1 rc2 rc3 rc4 rc5
|
|
#
|
|
|
|
main_begin
|
|
block_begin(start, `Mounting /dev, /proc, /dev/shm and /tmp.')
|
|
check(`[ -e /dev/.devfsd ] || mount -n /dev')
|
|
check(`mount -n /proc')
|
|
check(`mount -n /dev/shm')
|
|
mount -n /dev/pts 2> /dev/null
|
|
mount -n /tmp 2> /dev/null
|
|
dnl
|
|
if [ -f /etc/conf/hardware ]; then
|
|
. /etc/conf/hardware
|
|
fi
|
|
|
|
block_split(`Configuring the /dev filesystem ...')
|
|
check(`sh /etc/conf/devfs')
|
|
block_split(`Activating swap devices.')
|
|
check(`swapon -a')
|
|
dnl
|
|
block_split(`Checking file systems.')
|
|
fsck -A -C -a ; fsckrc=$?
|
|
if [ $(( $fsckrc & ~3 )) != 0 ] ; then
|
|
echo " **"
|
|
echo " ** Filesystem check failed (returncode=$fsckrc)."
|
|
echo " ** Please repair the broken disk(s) manually."
|
|
echo " **"
|
|
sulogin -t 600 /dev/console
|
|
umount -arv ; /sbin/reboot -d -f
|
|
while true ; do sleep 1 ; done
|
|
elif [ $(( $fsckrc & 2 )) != 0 ] ; then
|
|
for x in 10 9 8 7 6 5 4 3 2 ; do
|
|
echo -en "\rSystem reboot in $x seconds ... "
|
|
sleep 1
|
|
done ; echo -e "\rSystem reboot now! "
|
|
umount -arv ; /sbin/reboot -d -f
|
|
while true ; do sleep 1 ; done
|
|
fi
|
|
dnl
|
|
block_split(`Mounting file systems.')
|
|
check(`mount -n -o remount,rw /')
|
|
rootdev="/dev/$(ls -l /dev/root | sed 's,.* -> ,,')"
|
|
check(`grep -v "^rootfs " /proc/mounts | \
|
|
sed "s,^/dev/root ,$rootdev ," > /etc/mtab')
|
|
check(`mount -a -t nocoda,nfs')
|
|
dnl
|
|
if [ "$HARDWARE_SETUP" = rockplug ]; then
|
|
block_split(`Configuring hardware by activating rockplug.')
|
|
echo "/sbin/rockplug" > /proc/sys/kernel/hotplug
|
|
for file in /etc/rockplug/*.init ; do
|
|
[ -f $file ] && $file start
|
|
done
|
|
else
|
|
block_split(`Loading kernel modules and configuring the kernel.')
|
|
check(`sh /etc/conf/kernel')
|
|
fi
|
|
dnl
|
|
[ -f /etc/conf/clock ] && . /etc/conf/clock
|
|
if [ "$clock_tz" = localtime ] ; then
|
|
block_split(`Setting kernel clock to local time.')
|
|
check(`hwclock --hctosys --localtime')
|
|
fi
|
|
if [ "$clock_rtc" ] ; then
|
|
block_split(`Setting enhanced real time clock precision to $clock_rtc.')
|
|
if [ -w /proc/sys/dev/rtc/max-user-freq ] ; then
|
|
check(`echo $clock_rtc > /proc/sys/dev/rtc/max-user-freq')
|
|
else
|
|
echo "No /proc/sys/dev/rtc/max-user-freq found."
|
|
fi
|
|
fi
|
|
dnl
|
|
block_split(`Setting hostname to $(cat /etc/HOSTNAME).')
|
|
check(`hostname "$(cat /etc/HOSTNAME)"')
|
|
dnl
|
|
block_split(`Refresh utmp, delete lock files and other stuff.')
|
|
rm -f /var/lock/* /var/lock/*/* /var/run/* 2> /dev/null
|
|
rm -f /etc/nologin /nologin /fastboot ; touch /var/run/utmp
|
|
chmod 664 /var/run/utmp ; chown root.tty /var/run/utmp
|
|
dnl
|
|
block_split(`Writing /var/log/boot.msg.')
|
|
klogd -f /var/log/boot.msg -o ; dmesg -n 3
|
|
dnl
|
|
block_split(`Setting keyboard keymappings.')
|
|
if [ -L /etc/default.keymap ] ; then
|
|
mapfile=$(ls -l /etc/default.keymap | sed 's,.* -> ,,')
|
|
check(`loadkeys $mapfile')
|
|
elif [ -f /etc/default.keymap ] ; then
|
|
check(`loadkeys /etc/default.keymap')
|
|
else
|
|
echo "No /etc/default.keymap found."
|
|
fi
|
|
dnl
|
|
block_split(`Setting keyboard repeat rate and delay time.')
|
|
kbd_rate=30; kbd_delay=250
|
|
[ -f /etc/conf/kbd ] && . /etc/conf/kbd
|
|
check(`D_prefix/bin/kbdrate -r $kbd_rate -d $kbd_delay < /dev/console')
|
|
dnl
|
|
block_split(`Setting console screen font.')
|
|
if [ -L /etc/default.vcfont ] ; then
|
|
fontfile=$(ls -l /etc/default.vcfont | sed 's,.* -> ,,')
|
|
check(`setfont $fontfile')
|
|
elif [ -f /etc/default.vcfont ] ; then
|
|
check(`setfont /etc/default.vcfont')
|
|
else
|
|
echo "No /etc/default.vcfont found."
|
|
fi
|
|
dnl
|
|
block_split(`Setting console terminal type and blank interval.')
|
|
con_term=linux; con_blank=0
|
|
[ -f /etc/conf/console ] && . /etc/conf/console
|
|
check(`D_prefix/bin/setterm -term $con_term -blank $con_blank > /dev/console')
|
|
dnl
|
|
block_split(`Setting up loopback networking.')
|
|
check(`ip link set lo up')
|
|
check(`ip addr add 127.0.0.1/8 dev lo')
|
|
check(`ip route add 127/8 dev lo')
|
|
dnl
|
|
block_split(`Setting overflow UID and GID kernel parameters.')
|
|
check(`sysctl -w kernel.overflowuid=$(id -u nobody) > /dev/null')
|
|
check(`sysctl -w kernel.overflowgid=$(id -g nobody) > /dev/null')
|
|
dnl
|
|
block_split(`Reading /etc/sysctl.conf file.')
|
|
check(`sysctl -p')
|
|
dnl
|
|
block_split(`Initializing kernel random number generator.')
|
|
if [ -e /var/state/random-seed ] ; then
|
|
check(`cat /var/state/random-seed >/dev/urandom')
|
|
fi
|
|
block_end
|
|
|
|
|
|
block_begin(stop, `Saving /var/log/init.msg and /var/log/boot.msg.')
|
|
check(`touch /var/log/init.msg /var/log/boot.msg')
|
|
check(`mv /var/log/init.msg /var/log/init.old')
|
|
check(`mv /var/log/boot.msg /var/log/boot.old')
|
|
block_split(`Writing a wtmp record.')
|
|
if [ "$RUNLEVEL" = 0 ] ; then check(`halt -w')
|
|
else check(`reboot -w') ; fi
|
|
block_split(`Saving kernel random seed.')
|
|
dd if=/dev/urandom of=/var/state/random-seed count=1 2> /dev/null
|
|
dnl
|
|
block_split(`Sending all processes a SIGTERM (15).')
|
|
check(`killall5 -15') ; sleep 5
|
|
block_split(`Sending all processes a 2nd SIGTERM (15).')
|
|
check(`killall5 -15') ; sleep 5
|
|
block_split(`Sending all processes a SIGKILL (9).')
|
|
check(`killall5 -9') ; sleep 5
|
|
dnl
|
|
block_split(`Turning off swap devices.')
|
|
check(`swapoff -a')
|
|
sync ; sleep 1
|
|
dnl
|
|
block_split(`Remounting sync/ro and umount filesystems.')
|
|
cut -d' ' -f-3 /etc/mtab /proc/mounts | sort -k2 -u -r | \
|
|
while read dev dir fs ; do
|
|
[ "$dir" = "/" ] && continue
|
|
[ "$dir" = "/dev" ] && continue
|
|
[ "$dir" = "/dev/shm" ] && continue
|
|
[ "$dir" = "/proc" ] && continue
|
|
[ "$dir" = "/tmp" ] && continue
|
|
echo "Umounting $dev on $dir ($fs)."
|
|
mount -o remount,sync $dir
|
|
mount -o remount,ro $dir
|
|
umount $dir
|
|
done
|
|
dnl
|
|
block_split(`Unmounting remaining file systems.')
|
|
grep -E -v '^none (/|[a-z]+:) ' /proc/mounts > /etc/mtab
|
|
sync ; sleep 1 ; sync
|
|
umount -vnra -t noproc,devfs,shm
|
|
mount -vn -o remount,sync /
|
|
mount -vn -o remount,ro /
|
|
sleep 1 ; sync ; sleep 1
|
|
dnl
|
|
block_split()
|
|
[ "$RUNLEVEL" = 0 ] && command=halt || command=reboot
|
|
echo "Going to $command the system ..."
|
|
$command -d -f -i -p
|
|
while true ; do sleep 1 ; done
|
|
block_end
|
|
|
|
main_end
|