| 1 | #!/bin/sh |
|---|
| 2 | ### BEGIN INIT INFO |
|---|
| 3 | # Provides: live-reboot |
|---|
| 4 | # Required-Start: |
|---|
| 5 | # Required-Stop: |
|---|
| 6 | # Default-Start: |
|---|
| 7 | # Default-Stop: |
|---|
| 8 | # Short-Description: halt/reboot service |
|---|
| 9 | # Description: Halt/Reboot Service for Parsix |
|---|
| 10 | ### END INIT INFO |
|---|
| 11 | |
|---|
| 12 | PATH=/sbin:/bin:/usr/bin:/usr/sbin |
|---|
| 13 | export PATH |
|---|
| 14 | |
|---|
| 15 | # override tool behaviour through distro-defaults |
|---|
| 16 | FLL_DISTRO_MODE="installed" |
|---|
| 17 | FLL_DISTRO_NAME="PARSIX" |
|---|
| 18 | |
|---|
| 19 | #[ -r /etc/default/distro ] && . /etc/default/distro |
|---|
| 20 | #FLL_DISTRO_NAME="$(echo $FLL_DISTRO_NAME | tr [a-z] [A-Z])" |
|---|
| 21 | |
|---|
| 22 | [ ! "$FLL_DISTRO_MODE" = "live" ] && exit 0 |
|---|
| 23 | |
|---|
| 24 | case "$1" in |
|---|
| 25 | start) |
|---|
| 26 | ;; |
|---|
| 27 | stop) |
|---|
| 28 | ;; |
|---|
| 29 | restart|force-reload) |
|---|
| 30 | ;; |
|---|
| 31 | esac |
|---|
| 32 | |
|---|
| 33 | # Clean input/output |
|---|
| 34 | exec > /dev/console 2>&1 < /dev/console |
|---|
| 35 | |
|---|
| 36 | NORMAL="[0;39m" |
|---|
| 37 | RED="[1;31m" |
|---|
| 38 | GREEN="[1;32m" |
|---|
| 39 | YELLOW="[1;33m" |
|---|
| 40 | BLUE="[1;34m" |
|---|
| 41 | MAGENTA="[1;35m" |
|---|
| 42 | CYAN="[1;36m" |
|---|
| 43 | WHITE="[1;37m" |
|---|
| 44 | |
|---|
| 45 | case "$0" in |
|---|
| 46 | *halt) |
|---|
| 47 | message="${YELLOW}${FLL_DISTRO_NAME} halted.${NORMAL}" |
|---|
| 48 | command="halt" |
|---|
| 49 | options="-p -d -i -f" |
|---|
| 50 | ;; |
|---|
| 51 | *reboot) |
|---|
| 52 | message="${GREEN}Preparing for reboot...${NORMAL}" |
|---|
| 53 | command="reboot" |
|---|
| 54 | options="-d -i -f" |
|---|
| 55 | ;; |
|---|
| 56 | *) |
|---|
| 57 | echo "$0: call this script as \"halt\" or \"reboot\" please!" |
|---|
| 58 | exit 1 |
|---|
| 59 | ;; |
|---|
| 60 | esac |
|---|
| 61 | |
|---|
| 62 | # No sync and no wtmp entry if running from CD |
|---|
| 63 | options="$options -n" |
|---|
| 64 | |
|---|
| 65 | mysleep() |
|---|
| 66 | { |
|---|
| 67 | for i in $(seq 1 40); do |
|---|
| 68 | sleep "0.075s" |
|---|
| 69 | echo -n "$1.${NORMAL}" |
|---|
| 70 | done |
|---|
| 71 | echo "" |
|---|
| 72 | } |
|---|
| 73 | |
|---|
| 74 | # Disable kernel messages |
|---|
| 75 | echo "0" > /proc/sys/kernel/printk |
|---|
| 76 | |
|---|
| 77 | # poweroff pcmcia devices |
|---|
| 78 | if lsmod | grep -q pcmcia_core 2>&1 > /dev/null; then |
|---|
| 79 | echo -n "${BLUE}Shutting down PCMCIA devices...${NORMAL}" |
|---|
| 80 | pccardctl eject 2>&1 > /dev/null |
|---|
| 81 | sleep 2 |
|---|
| 82 | echo "" |
|---|
| 83 | fi |
|---|
| 84 | |
|---|
| 85 | # Now kill them all |
|---|
| 86 | killall5 -15 |
|---|
| 87 | sleep 1 |
|---|
| 88 | echo -n "${BLUE}Sent all processes the TERM signal...${NORMAL}" |
|---|
| 89 | mysleep "$BLUE" |
|---|
| 90 | |
|---|
| 91 | killall5 -9 |
|---|
| 92 | sleep 1 |
|---|
| 93 | echo -n "${RED}Sent all processes the KILL signal...${NORMAL}" |
|---|
| 94 | mysleep "$RED" |
|---|
| 95 | |
|---|
| 96 | # Unmount network filesystems first before shutting down network |
|---|
| 97 | NETMOUNTS="$(awk '{if($1~/:/){print $2}}' /proc/mounts 2> /dev/null)" |
|---|
| 98 | if [ -n "$NETMOUNTS" ]; then |
|---|
| 99 | echo "${BLUE}Unmounting network filesystems.${NORMAL}" |
|---|
| 100 | umount -t nfs -arvf 2> /dev/null |
|---|
| 101 | fi |
|---|
| 102 | |
|---|
| 103 | # Shutdown network |
|---|
| 104 | NETDEVICES="$(awk -F: '/ath.:|eth.:|tr.:|wlan.:/{print $1}' /proc/net/dev 2>/dev/null)" |
|---|
| 105 | if [ -n "$NETDEVICES" ]; then |
|---|
| 106 | pidof pump 2>&1 > /dev/null && { pump -k ; sleep 2; } |
|---|
| 107 | echo -n "${BLUE}Shutting down network device${NORMAL}" |
|---|
| 108 | for n in $NETDEVICES; do |
|---|
| 109 | echo -n " ${MAGENTA}$n${NORMAL}" |
|---|
| 110 | ifconfig "$n" down |
|---|
| 111 | done |
|---|
| 112 | echo "" |
|---|
| 113 | fi |
|---|
| 114 | |
|---|
| 115 | # read cmdline params |
|---|
| 116 | NOEJECT="" |
|---|
| 117 | NOPROMPT="" |
|---|
| 118 | read CMDLINE <<EOT |
|---|
| 119 | $(cat /proc/cmdline 2> /dev/null) |
|---|
| 120 | EOT |
|---|
| 121 | case "$CMDLINE" in *noeject*) NOEJECT="yes"; ;; esac |
|---|
| 122 | case "$CMDLINE" in *noprompt*) NOPROMPT="yes"; ;; esac |
|---|
| 123 | |
|---|
| 124 | CDROM="$(awk '/ \/cdrom /{print $1;exit 0;}' /proc/mounts)" |
|---|
| 125 | |
|---|
| 126 | # This uses standard sysvinit |
|---|
| 127 | FINALCMD="/etc/live-hack/$command" |
|---|
| 128 | rm -rf /etc/live-hack 2>&1 > /dev/null |
|---|
| 129 | mkdir -p /etc/live-hack |
|---|
| 130 | [ -x "/etc/live-hack/$command" ] || cp -p "/sbin/$command" /etc/live-hack/ |
|---|
| 131 | [ -x /usr/bin/eject ] && cp -p /usr/bin/eject /etc/live-hack/eject |
|---|
| 132 | LD_LINUX=ld-linux.so.2 |
|---|
| 133 | [ -x /lib/ld-linux-x86-64.so.2 ] && LD_LINUX=ld-linux-x86-64.so.2 |
|---|
| 134 | [ -x "/etc/live-hack/$LD_LINUX" ] || cp -p "/lib/$LD_LINUX" /etc/live-hack/ |
|---|
| 135 | |
|---|
| 136 | # Turn off swap, then unmount file systems. |
|---|
| 137 | swapoff -a 2>&1 > /dev/null |
|---|
| 138 | |
|---|
| 139 | echo "${BLUE}Unmounting file systems.${NORMAL}" |
|---|
| 140 | |
|---|
| 141 | cd / |
|---|
| 142 | |
|---|
| 143 | # Umount everything but root |
|---|
| 144 | umount -arvf 2> /dev/null |
|---|
| 145 | if [ "$?" != "0" ] ; then |
|---|
| 146 | # Free loopback devices if necessary, so we can unmount the host media |
|---|
| 147 | for i in /dev/loop*; do losetup -d "$i" 2> /dev/null; done |
|---|
| 148 | # And retry |
|---|
| 149 | umount -arf 2> /dev/null |
|---|
| 150 | fi |
|---|
| 151 | |
|---|
| 152 | # Remove remaining unused modules |
|---|
| 153 | rmmod -a 2>&1 > /dev/null |
|---|
| 154 | |
|---|
| 155 | echo "$message" > /dev/console |
|---|
| 156 | |
|---|
| 157 | # eject CD-ROM, noprompt implies noeject (backward compatibility) |
|---|
| 158 | if [ -z "$NOPROMPT" ]; then |
|---|
| 159 | [ -n "$CDROM" -a -z "$NOEJECT" ] && "/etc/live-hack/$LD_LINUX" /etc/live-hack/eject -m -p "$CDROM" 2>&1 >/dev/null |
|---|
| 160 | echo "${CYAN}Please remove CD, close cdrom drive and hit return.${NORMAL}" |
|---|
| 161 | read |
|---|
| 162 | fi |
|---|
| 163 | |
|---|
| 164 | # Now halt or reboot. |
|---|
| 165 | exec "/etc/live-hack/$LD_LINUX" "$FINALCMD" $options > /dev/console 2>&1 < /dev/console |
|---|
| 166 | |
|---|