# --- T2-COPYRIGHT-NOTE-BEGIN --- # T2 SDE: package/*/sysvinit/system.init # Copyright (C) 2004 - 2024 The T2 SDE Project # Copyright (C) 1998 - 2003 ROCK Linux Project # # This Copyright note is generated by scripts/Create-CopyPatch, # 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 version 2. # --- T2-COPYRIGHT-NOTE-END --- # # Desc: System bootup and shutdown # Runlevel: 01 rcX rc1 rc2 rc3 rc4 rc5 export PATH="/sbin:/usr/sbin:$PATH" main_begin block_begin(start, `Mounting /proc, /sys, /dev/shm and /dev/pts') [ -d /proc/self ] && mount -n -o remount /proc || mount -n /proc [ -d /sys/class ] && mount -n -o remount /sys || mount -n /sys mkdir -p /dev/shm check(`mount -n /dev/shm') mkdir -p /dev/pts 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(`Activating Volume Groups') check(`vgchange --sysinit -a ay') 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 /') rm -f /etc/mtab~* # lingering lock files ln -sf /proc/mounts /etc/mtab check(`mount -a -t nocoda,nfs,proc,sysfs') dnl block_split(`Activating swap devices') # initialize any /dev/zram* sed -n 's/#.*//; /zram/p' /etc/fstab | while read dev mnt typ opt x y; do [[ "$typ" != swap || "$dev" != /dev/zram* ]] && continue opts= for o in ${opt//,/ }; do if [[ $o = size=* ]]; then o="${o#size=}" [[ "$o" = *% ]] && # total mem in kB mem=$(sed -n 's/MemTotal: *\([0-9]*\).*/\1/p' /proc/meminfo) && opts="-s $(( $mem * ${o//%/} / 100))k" fi done modprobe zram && zramctl $dev $opts && mkswap $dev done 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 hostname="hostname= $(cat /proc/cmdline 2> /dev/null)" hostname=${hostname##*hostname=} hostname=${hostname%% *} [ "$hostname" ] || hostname=$(cat /etc/hostname 2> /dev/null) [ "$hostname" ] && hostname "$hostname" dnl block_split(`Activating udevd') udevd -d udevadm trigger check(`udevadm settle') if [ -f /etc/conf/kernel ]; then block_split(`Configuring the kernel with /etc/conf/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(`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; con_blength=0 [ -f /etc/conf/console ] && . /etc/conf/console check(`D_prefix/bin/setterm -term $con_term -blank $con_blank -blength $con_blength > /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'); [ $error -eq 2 ] && error=0 || sleep 3 block_split(`Sending all processes a 2nd SIGTERM (15)') check(`killall5'); [ $error -eq 2 ] && error=0 || sleep 5 block_split(`Sending all processes a SIGKILL (9)') check(`killall5 -9'); [ $error -eq 2 ] && error=0 || sleep 5 dnl block_split(`Turning off swap devices') check(`swapoff -a') dnl block_split(`Remounting sync/ro and unmounting 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(`Deactivating Volume Groups') check(`vgchange --sysinit -a n || lvchange --sysinit -a n $(lvdisplay -c | cut -d : -f 1)') 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 noproc,sysfs mount -vn -o remount,ro / sync dnl block_split() if [ "$INIT_DOES_REBOOTHALT" != "1" ]; then command="" [ "$RUNLEVEL" = 0 ] && command=halt [ "$RUNLEVEL" = 6 ] && command="reboot -k" 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