On Fri, 26 Oct 2012, Kris Jordan wrote:
Did you install NUT from a package? Note, 2.6.5 is the current
version and 2.6.4 had fixed a vulnerability.

I'm using the nut 2.6.3 package included in the openSUSE 12.2 distribution.

Check that your distribution's shutdown script is running 'upsdrvctl shutdown' in the presence of the killpower file
(POWERDOWNFLAG).

Summary: looks like an openSUSE bug, simple fix available.

OpenSUSE 12.2 has a script /usr/sbin/rcupsd for starting and stopping the upsd service. This is a link to script /etc/init.d/upsd which contains:

    powerdown)
        ## Special command: Instruct UPS to shutdown.
        sync &
        if grep -q '^\[' $UPS_CONFIG ; then
            echo -n "Instructing UPS to powerdown "
            $UPSDRVCTL_BIN shutdown >/dev/null 2>&1 || rc_failed
            rc_check
        else
            echo "No local UPS defined, skipping powerdown "
        fi
        rc_status -v
        ;;
    try-powerdown)
        ## Special command: Instruct UPS to shutdown, if halt is running
        ## or variable UPSD_POWERDOWN_CONDITION is set and power is failing.
        ## Otherwise silently quit.
        ##
        if test "$RUNLEVEL" = "0" -o -n "$UPSD_POWERDOWN_CONDITION" ; then
            if test -n "$POWERDOWNFLAG" -a -f "$POWERDOWNFLAG" ; then
                exec $0 powerdown
            fi
        fi
        ;;

where  UPSDRVCTL_BIN=/usr/lib/ups/driver/upsdrvctl

In addition, file /etc/sysconfig/shutdown contains the configuration parameter

  # Hook during system shutdown to run extra command
  HALT_POWERDOWN_INSERT="/etc/init.d/upsd try-powerdown"

but when upsd try-powerdown is called it fails silently because $RUNLEVEL and $UPSD_POWERDOWN_CONDITION are empty. upsd powerdown is never called.

I changed the configuration parameter to HALT_POWERDOWN_INSERT="/etc/init.d/upsd powerdown", reran command SuSEconfig, and tried again but there was no change. However typing the command /etc/init.d/upsd powerdown does shut down the UPS unit.

OpenSUSE 12.2 has fully embraced systemctl and systemd: I tried grepping around in the /lib/systemd shutdown specifications, but I cannot find any reference to /etc/init.d/upsd powerdown. This is beginning to look like a bug in openSUSE 12.2 which I will report in their forums.

Here is a fix: There is a file /etc/init.d/halt.local which is currently empty:

 # /etc/init.d/halt.local
 # script with local commands to be executed from init on system shutdown
 # Here you should add things, that should happen directly before shuting
 # down.

I added the lines

 # RP 2012-10-28 Turn off the UPS unit.
 # Needed for automatic system restart when wall power returns.
 UPSDRVCTL_BIN=/usr/lib/ups/driver/upsdrvctl
 echo `date -I` `date +%T` "$0 calls $UPSDRVCTL_BIN shutdown" >> 
/var/log/halt.local
 $UPSDRVCTL_BIN shutdown

I pulled the plug from the wall and witnessed a server shutdown followed 10 seconds later by a UPS shutdown. Pushing the plug back into the wall got the system running again.

Roger

_______________________________________________
Nut-upsuser mailing list
Nut-upsuser@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/nut-upsuser

Reply via email to