#!/bin/bash
# Original Author: Tomas M
# Author: Daniel K.
action="${1}"
. /lib/.config
. /lib/functions
detach_loops()
{
losetup -a | cut -d : -f 1 | xargs -r -n 1 losetup -d
}
umount_all()
{
for i in $(tac /proc/mounts | cut -d" " -f2 | grep "^${1}"); do
umount -fld ${i}
detach_loops
done
}
exec >/dev/console 2>>/dev/console
[ "${DEBUG_IS_ENABLED}" = "true" ]&&set -x
debugShell
echo "Minimal Linux Booter - Shutdown Magic!"
echo "Entering to clean-up things before final step."
(
mdev -s
sleep 1.5
detach_loops
umount_all /oldroot
NR=100
for i in $(tac /proc/mounts | cut -d" " -f2 | grep ^/oldroot/.); do
NR=$((${NR}+1))
mkdir -p /move/${NR}
mount --move ${i} /move/${NR}
umount -fld /oldroot
done
for i in 1 2 3 4; do
for d in $(ls -1 /move 2>/dev/null | sort); do
umount_all /move/${d}
done
done
umount_all /memory
) >/dev/null 2>&1
case ${action} in
reboot|poweroff|halt|shutdown) ${action} -f;;
*) reboot -f;;
esac
emergencyShell #Last luck emergency shell after reboot doesn't work; usefull for debugging