204 lines
6.5 KiB
204 lines
6.5 KiB
#!/bin/sh |
|
# |
|
# --- SDE-COPYRIGHT-NOTE-BEGIN --- |
|
# This copyright note is auto-generated by ./scripts/Create-CopyPatch. |
|
# |
|
# Filename: package/.../sysvinit/system.init |
|
# Copyright (C) 2006 - 2009 The OpenSDE Project |
|
# Copyright (C) 2004 - 2006 The T2 SDE Project |
|
# Copyright (C) 1998 - 2003 Clifford Wolf |
|
# |
|
# More information can be found in the files COPYING and README. |
|
# |
|
# 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; version 2 of the License. A copy of the |
|
# GNU General Public License can be found in the file COPYING. |
|
# --- SDE-COPYRIGHT-NOTE-END --- |
|
# |
|
# Desc: System bootup and shutdown |
|
# Runlevel: 01 rcX rc1 rc2 rc3 rc4 rc5 |
|
# |
|
export PATH="/sbin:$PATH" |
|
|
|
main_begin |
|
# we are assuming /proc and /dev are already mounted |
|
block_begin(start, `Populating /dev.') |
|
for x in $( cd /lib/udev/devices/; ls -1 ); do |
|
if [ ! -L "/dev/./$x" -a ! -e "/dev/./$x" ]; |
|
then check(`cp -a /lib/udev/devices/$x /dev/$x') |
|
fi |
|
done |
|
dnl |
|
block_split(`Mounting /dev/shm and /dev/pts.') |
|
check(`mount -n /dev/shm') |
|
mount -n /dev/pts 2> /dev/null |
|
dnl |
|
if [ -f /etc/conf/hardware ] ; then |
|
. /etc/conf/hardware |
|
fi |
|
dnl |
|
[ -x /bin/dmesg ] && /bin/dmesg -n 3 |
|
dnl |
|
block_split(`Starting udevd ...') |
|
echo "" > /sys/kernel/uevent_helper |
|
check(`udevd --daemon') |
|
block_split(`Triggering coldplug ...') |
|
check(`udevadm trigger') |
|
check(`udevadm settle') |
|
|
|
dnl |
|
if [ -s /etc/lvmtab -o -s /etc/lvm/.cache ]; then |
|
block_split(`Activating Volume Groups...') |
|
modprobe dm-mod 2> /dev/null |
|
check(`/sbin/vgchange -ay --ignorelockingfailure 2> /dev/null') |
|
fi |
|
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 local file systems.') |
|
check(`mount -n -o remount,rw /') |
|
rm -f /etc/mtab~* # lingering lock files |
|
cat /proc/mounts > /etc/mtab |
|
check(`mount -a -t nocoda,nfs,devfs,proc,sysfs') |
|
dnl |
|
block_split(`Activating swap devices.') |
|
check(`swapon -a') |
|
dnl |
|
block_split(`Refresh utmp, delete lock and tmp files and other stuff.') |
|
find /var/lock /var/run /tmp -mindepth 1 -print0 2> /dev/null | xargs --null rm -rf |
|
rm -f /etc/nologin /nologin /fastboot ; touch /var/run/utmp |
|
chmod 664 /var/run/utmp ; chown root:tty /var/run/utmp |
|
mkdir /tmp/.ICE-unix && chmod 1777 /tmp/.ICE-unix |
|
dnl |
|
block_split(`Setting hostname to $(cat /etc/HOSTNAME).') |
|
check(`hostname "$(cat /etc/HOSTNAME)"') |
|
dnl |
|
block_split(`Configuring the kernel with /etc/conf/kernel.') |
|
check(`sh /etc/conf/kernel') |
|
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(`Writing /var/log/boot.msg.') |
|
check(`dmesg > /var/log/boot.msg') |
|
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(`setterm -term $con_term -blank $con_blank > /dev/console') |
|
dnl |
|
block_split(`Setting up loopback networking.') |
|
check(`ip link set lo up') |
|
[[ "$(ip addr show lo)" = *127.0.0.1/8* ]] || |
|
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') |
|
dnl |
|
block_split(`Remounting sync/ro and umount filesystems.') |
|
sync |
|
cut -d' ' -f-3 /etc/mtab /proc/mounts | sort -k2 -u -r | |
|
while read dev dir fs ; do |
|
case "$dir" in |
|
/|/dev|/proc|/sys|/tmp) continue ;; |
|
*) echo "Umounting $dev on $dir ($fs)." |
|
mount -o remount,sync $dir |
|
mount -o remount,ro $dir |
|
umount $dir ;; |
|
esac |
|
done |
|
dnl |
|
block_split(`Unmounting remaining file systems.') |
|
grep -v -e '^none /[a-z]\+' -e ' / ' /proc/mounts > /etc/mtab |
|
mount -vn -o remount,sync / |
|
sync |
|
umount -vran -t nodevfs,proc,sysfs |
|
mount -vn -o remount,ro / |
|
sync ; sleep 1 |
|
dnl |
|
block_split() |
|
if [ "$INIT_DOES_REBOOTHALT" != "1" ]; then |
|
command= |
|
[ "$RUNLEVEL" = 0 ] && command=halt |
|
[ "$RUNLEVEL" = 6 ] && command=reboot |
|
if [ -n "$command" ] ; then |
|
echo "Going to $command the system ..." |
|
$command -d -f -i -p |
|
[ "$INIT_WAITS" != "1" ] && \ |
|
while true ; do sleep 1 ; done |
|
fi |
|
fi |
|
block_end |
|
|
|
main_end
|
|
|