Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 094536f010c39298a1b4d4f786e7edbd > files > 2

nut-server-0.45.4-1mdk.i586.rpm

#!/bin/bash
#
# chkconfig: 0 0 99
# description: This deals with final shutdown in power out situations
# config: /etc/ups/

# Red Hat provides no appropriate call out for this functionality,
# so we just reproduce the whole of the halt script, along with
# the call out to the UPS powerdown functionality.
# Since the UPS powerdown would mostly duplicate whats in the ups script,
# the extra code has been added to that script - this just
# calls that appropriately

# Believe it or not, the way these things are called actually depends
# on whether a grep from the rc script finds certain magic words
# within this script.  One of those magic words is daemon and so this
# comment makes sure that its called in the appropriate fashion :-)

POWERDOWNFLAG=/etc/killpower

# Check that we really are doing a shutdown - which is a start
# for this script
if [ "$1" != "start" ]
then
    exit 0
fi


if [ ! -f $POWERDOWNFLAG ] 
then
    # just let the shutdown continue normally
    gprintf "Powerdown sequence is not required\n"
    exit 0
fi

### set up some stuff thats going to be incorrect otherwise
message="Halting system..."
command="halt"

### --- included standard halt script
#!/bin/bash
#
# rc.halt       This file is executed by init when it goes into runlevel
#               0 (halt) or runlevel 6 (reboot). It kills all processes,
#               unmounts file systems and then either halts or reboots.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Damien Neil
#

# Set the path.
PATH=/sbin:/bin:/usr/bin:/usr/sbin

export NOLOCALE=1
. /etc/init.d/functions

runcmd() {
   gprintf "%s " "$1"
   shift
   if [ "$BOOTUP" = "color" ]; then
      $* && echo_success || echo_failure
   else
      $*
   fi
   echo
}

halt_get_remaining() {
	awk '!/(^#|proc|loopfs|autofs|^none|^\/dev\/root| \/ )/ {print $2}' /proc/mounts
	awk '{ if ($3 ~ /^proc$/ && $2 !~ /^\/proc/) print $2; }' /proc/mounts
}

# See how we were called.
###case "$0" in
###  *halt)
###	message=$"Halting system..."
###	command="halt"
###	;;
###  *reboot)
###	message=$"Please stand by while rebooting the system..."
###	command="reboot"
###	;;
###  *)
###	gprintf "%s: call me as 'rc.halt' or 'rc.reboot' please!\n" "$0"
###	exit 1
###	;;
esac
if [ -n "$1" ]; then
 case "$1" in
   *start)
   	;;
   *)
   	gprintf "Usage: (halt|reboot) {start}\n"
	exit 1
	;;
 esac
fi

# Kill all processes.
[ "${BASH+bash}" = bash ] && enable kill

runcmd $"Sending all processes the TERM signal..." /sbin/killall5 -15
sleep 5
runcmd $"Sending all processes the KILL signal..."  /sbin/killall5 -9

# Write to wtmp file before unmounting /var
halt -w

# Save mixer settings, here for lack of a better place.
grep -q "\(sparcaudio\|sound\)" /proc/devices
if [ $? = 0 -a -x /bin/aumix-minimal ]; then
   runcmd $"Saving mixer settings" /bin/aumix-minimal -f /etc/.aumixrc -S
fi

# Sync the system clock.
ARC=0
SRM=0
UTC=0

if [ -f /etc/sysconfig/clock ]; then
   . /etc/sysconfig/clock

   # convert old style clock config to new values
   if [ "${CLOCKMODE}" = "GMT" ]; then
      UTC=true
   elif [ "${CLOCKMODE}" = "ARC" ]; then
      ARC=true
   fi
fi

CLOCKDEF=""
CLOCKFLAGS="$CLOCKFLAGS --systohc"

case "$UTC" in
   yes|true)
    CLOCKFLAGS="$CLOCKFLAGS -u";
    CLOCKDEF="$CLOCKDEF (utc)";
   ;;
   no|false)
    CLOCKFLAGS="$CLOCKFLAGS --localtime";
    CLOCKDEF="$CLOCKDEF (localtime)";
   ;;
esac

case "$ARC" in
     yes|true)
     	CLOCKFLAGS="$CLOCKFLAGS -A";
     	CLOCKDEF="$CLOCKDEF (arc)";
     ;;
esac
case "$SRM" in
     yes|true)
	CLOCKFLAGS="$CLOCKFLAGS -S";
	CLOCKDEF="$CLOCKDEF (srm)";
     ;;
esac

runcmd $"Syncing hardware clock to system time" /sbin/hwclock $CLOCKFLAGS

# Turn off swap, then unmount file systems.
SWAPS=`awk '! /^Filename/ { print $1 }' /proc/swaps`
[ -n "$SWAPS" ] && runcmd $"Turning off swap: " swapoff $SWAPS

[ -x /sbin/accton ] && runcmd $"Turning off accounting: " /sbin/accton

[ -x /sbin/quotaoff ] && runcmd $"Turning off quotas: " /sbin/quotaoff -aug

# Unmount file systems, killing processes if we have to.
# Unmount loopback stuff first
remaining=`awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}' /proc/mounts`
[ -n "$remaining" ] && {
	sig=
	retry=3
	while [ -n "$remaining" -a "$retry" -gt 0 ]
	do
		if [ "$retry" -lt 3 ]; then
			runcmd $"Unmounting loopback filesystems (retry):" umount $remaining
		else
			runcmd $"Unmounting loopback filesystems: " umount $remaining
		fi
		for dev in $remaining ; do
			losetup $dev > /dev/null 2>&1 && \
				runcmd $"Detaching loopback device $dev: " losetup -d $device
		done
		remaining=`awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/mounts`
		[ -z "$remaining" ] && break
		/sbin/fuser -k -m $sig $remaining >/dev/null
		sleep 5
		retry=$(($retry -1))
		sig=-9
	done
}

sig=
retry=3
remaining=`halt_get_remaining | sort -r`

while [ -n "$remaining" -a "$retry" -gt 0 ]
do
	if [ "$retry" -lt 3 ]; then
		LANG=C runcmd $"Unmounting file systems (retry): "  umount -f $remaining
	else
		LANG=C runcmd $"Unmounting file systems: "  umount -f $remaining
	fi
	sleep 2
	remaining=`halt_get_remaining | sort -r`
	[ -z "$remaining" ] && break
	/sbin/fuser -k -m $sig $remaining >/dev/null
	sleep 5
	retry=$(($retry-1))
	sig=-9
done
[ -f /proc/bus/usb/devices ] && umount /proc/bus/usb

# remove the crash indicator flag
rm -f /.autofsck

# Try them all, one last time.
umount -a -f

# Remount read only anything that's left mounted.
#gprintf "Remounting remaining filesystems (if any) readonly\n"
mount | awk '/( \/ |^\/dev\/root)/ { print $3 }' | while read line; do
    mount -n -o ro,remount $line
done

# Now halt or reboot.
gprintf "%s\n" "$message"
if [ -f /fastboot ]; then
 gprintf "On the next boot fsck will be skipped.\n"
elif [ -f /forcefsck ]; then
 gprintf "On the next boot fsck will be forced.\n"
fi

HALTARGS="-i -d"
if [ -f /poweroff -o ! -f /halt ]; then
 HALTARGS="$HALTARGS -p"
fi

### RH standard NUT calls stripped out and replaced with 
### Current method to kill off UPSes for NUT
/etc/rc.d/init.d/upsd powerdown

eval $command $HALTARGS