mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
167 lines
4 KiB
Bash
Executable file
167 lines
4 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# /etc/rc.shutdown
|
|
#
|
|
|
|
. /etc/rc.conf
|
|
. /etc/rc.d/functions
|
|
|
|
run_hook shutdown_start
|
|
|
|
# avoid staircase effect
|
|
/bin/stty onlcr
|
|
|
|
echo " "
|
|
printhl "Initiating Shutdown..."
|
|
echo " "
|
|
|
|
# avoid NIS hanging syslog-ng on shutdown by unsetting the domainname
|
|
if [ -x /bin/domainname ]; then
|
|
/bin/domainname ""
|
|
fi
|
|
|
|
if [ -x /etc/rc.local.shutdown ]; then
|
|
/etc/rc.local.shutdown
|
|
fi
|
|
|
|
# Find daemons NOT in the DAEMONS array. Shut these down first
|
|
if [ -d /var/run/daemons ]; then
|
|
for daemon in $(/bin/ls -1t /var/run/daemons); do
|
|
if ! in_array $daemon ${DAEMONS[@]}; then
|
|
stop_daemon $daemon
|
|
fi
|
|
done
|
|
fi
|
|
# Shutdown daemons in reverse order
|
|
let i=${#DAEMONS[@]}-1
|
|
while [ $i -ge 0 ]; do
|
|
if [ "${DAEMONS[$i]:0:1}" != '!' ]; then
|
|
ck_daemon ${DAEMONS[$i]#@} || stop_daemon ${DAEMONS[$i]#@}
|
|
fi
|
|
let i=i-1
|
|
done
|
|
|
|
# Terminate all processes
|
|
stat_busy "Sending SIGTERM To Processes"
|
|
run_hook shutdown_prekillall
|
|
/sbin/killall5 -15 &> /dev/null
|
|
/bin/sleep 5
|
|
stat_done
|
|
|
|
stat_busy "Sending SIGKILL To Processes"
|
|
/sbin/killall5 -9 &> /dev/null
|
|
/bin/sleep 1
|
|
stat_done
|
|
|
|
run_hook shutdown_postkillall
|
|
|
|
stat_busy "Saving Random Seed"
|
|
RANDOM_SEED=/var/lib/misc/random-seed
|
|
[ -d $(dirname $RANDOM_SEED) ] || mkdir -p $(dirname $RANDOM_SEED)
|
|
: > $RANDOM_SEED
|
|
/bin/chmod 0600 $RANDOM_SEED
|
|
POOL_FILE=/proc/sys/kernel/random/poolsize
|
|
if [ -r $POOL_FILE ]; then
|
|
POOL_SIZE=$(/bin/cat $POOL_FILE)
|
|
else
|
|
POOL_SIZE=512
|
|
fi
|
|
/bin/dd if=/dev/urandom of=$RANDOM_SEED count=1 bs=$POOL_SIZE &> /dev/null
|
|
stat_done
|
|
|
|
stat_busy "Saving System Clock"
|
|
if [ "$TIMEZONE" != "" -a -e "/usr/share/zoneinfo/$TIMEZONE" ]; then
|
|
/bin/rm -f /etc/localtime
|
|
/bin/cp "/usr/share/zoneinfo/$TIMEZONE" /etc/localtime
|
|
fi
|
|
|
|
HWCLOCK_PARAMS="--systohc"
|
|
if [ "$HARDWARECLOCK" = "UTC" ]; then
|
|
HWCLOCK_PARAMS="$HWCLOCK_PARAMS --utc"
|
|
elif [ "$HARDWARECLOCK" = "localtime" ]; then
|
|
HWCLOCK_PARAMS="$HWCLOCK_PARAMS --localtime"
|
|
else
|
|
HWCLOCK_PARAMS=""
|
|
fi
|
|
if [ -n "$HWCLOCK_PARAMS" ]; then
|
|
/sbin/hwclock $HWCLOCK_PARAMS
|
|
fi
|
|
stat_done
|
|
|
|
# removing psmouse module to fix some reboot issues on newer laptops
|
|
/sbin/modprobe -r psmouse >/dev/null 2>&1
|
|
|
|
# Write to wtmp file before unmounting
|
|
/sbin/halt -w
|
|
|
|
stat_busy "Deactivating Swap"
|
|
/sbin/swapoff -a
|
|
stat_done
|
|
|
|
stat_busy "Unmounting Filesystems"
|
|
/bin/umount -a -r -t noramfs,notmpfs,nosysfs,noproc,nodevtmpfs -O no_netdev
|
|
stat_done
|
|
|
|
# Kill non-root encrypted partition mappings
|
|
if [ -f /etc/crypttab -a -n "$(/bin/grep -v ^# /etc/crypttab | /bin/grep -v ^$)" ]; then
|
|
stat_busy "Deactivating encrypted volumes:"
|
|
# Arch cryptsetup packages traditionally contained the binaries
|
|
# /usr/sbin/cryptsetup
|
|
# /sbin/cryptsetup.static
|
|
# By default, initscripts used the /sbin/cryptsetup.static.
|
|
# Newer packages will only have /sbin/cryptsetup and no static binary
|
|
# This ensures maximal compatibility with the old and new layout
|
|
if [ -x /sbin/cryptsetup ]; then
|
|
CS=/sbin/cryptsetup
|
|
elif [ -x /usr/sbin/cryptsetup ]; then
|
|
CS=/usr/sbin/cryptsetup
|
|
else
|
|
CS=/sbin/cryptsetup.static
|
|
fi
|
|
do_uncrypt() {
|
|
if [ $# -ge 3 ]; then
|
|
if [ -b /dev/mapper/$1 ] ;then
|
|
stat_append "${1}.."
|
|
$CS remove $1 >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
stat_append "failed "
|
|
else
|
|
stat_append "ok "
|
|
fi
|
|
fi
|
|
fi
|
|
}
|
|
while read line; do
|
|
eval do_uncrypt "$line"
|
|
done </etc/crypttab
|
|
stat_done
|
|
fi
|
|
|
|
if [ "$USELVM" = "yes" -o "$USELVM" = "YES" ]; then
|
|
if [ -x /sbin/lvm -a -d /sys/block ]; then
|
|
stat_busy "Deactivating LVM2 groups"
|
|
/sbin/lvm vgchange --ignorelockingfailure -an >/dev/null 2>&1
|
|
stat_done
|
|
fi
|
|
fi
|
|
|
|
stat_busy "Remounting Root Filesystem Read-only"
|
|
/bin/mount -n -o remount,ro /
|
|
stat_done
|
|
|
|
run_hook shutdown_poweroff
|
|
|
|
# Power off or reboot
|
|
if [ "$RUNLEVEL" = "0" ]; then
|
|
printsep
|
|
printhl "${C_H2}POWER OFF"
|
|
/sbin/poweroff -d -f -h -i
|
|
else
|
|
printsep
|
|
printhl "${C_H2}REBOOTING"
|
|
# if kexec is installed and a kernel is loaded, use it
|
|
[ -x /sbin/kexec ] && /sbin/kexec -e > /dev/null 2>&1
|
|
/sbin/reboot -d -f -i
|
|
fi
|
|
|
|
# End of file
|