Provided by: powstatd_1.5.1-9.1_amd64 bug

NAME

       powstatd - a configurable UPS monitor.

SYNOPSIS

       powstatd [ -t | -k ]

DESCRIPTION

       powstatd  is  a  configurable  UPS  monitoring  daemon  designed  to work with SysVinit (e.g., most Linux
       distributions).

       powstatd monitors a serial connection from a "dumb" or "relay" UPS  for  power  failures  and  shuts  the
       machine  down  gracefully  if  the power remains off for more than a prespecified interval.  powstatd can
       also be configured to allow a master machine to control several slave machines connected to the same  UPS
       via  a network connection. This allows you to run several machines off the same UPS, with only one of the
       machines actually reading the UPS status over the serial line.  When compiled  with  appropriate  options
       enabled,  powstatd  also  provides  security by means of fast encryption of master/slave communication to
       prevent malicious shutdown of slave systems.

       powstatd has two options:

       -t     Test mode. Used to explore what a given UPS signals under various  failure  modes  as  an  aid  to
              constructing  an  appropriate  configuration  file.  When operating in test mode, powstatd doesn't
              actually signal init, so while changes in UPS status are detected, they are not  acted  upon.  See
              configuration information for more details.

       -k     Kill  mode.   Directs  powstatd to attempt to shut down the UPS.  Most UPS systems will ignore the
              shutdown signal unless the power is actually off. By shutting down the UPS, powstatd ensures  that
              once the main power returns the UPS will automatically turn on and cause the machine to reboot.

CAVEATS

       powstatd  uses  the  connectionless  UDP protocol to communicate UPS status from master to slave. To keep
       just anyone from generating a  UDP  packet  that  will  shut  your  slave  machine  down  when  encrypted
       master/slave  communication is not in use, the slave checks the IP address of origin in the UDP packet it
       receives. If your master has more than one network card, a master with multiple addresses may provide  an
       unexpected IP address, which results in the slave ignoring (legitimate) status reports.

       So  when  you  have  a  machine with multiple network cards, you must either ensure that the master has a
       unique IP address (try connecting the single-NIC slave to the UPS and demoting  the  dual-NIC  master  to
       slave  instead),  or  use  encrypted  master/slave  communication, which does not need to check IP source
       addresses thanks to the cryptographic measures used.

       When using encrypted master/slave communication, powstatd also uses a timestamp to foil  replay  attacks.
       Outdated  status  messages  (as  defined by a compile-time constant) are simply rejected; thus master and
       slave clocks should be reasonably synchronized (using, for example, the NTP  protocol)  or  valid  status
       messages may be rejected.

CONFIGURATION

       powstatd is configured via a configuration file, /etc/powstatd.conf by default, that specifies the serial
       line  behavior  of  the  UPS  under  its  various  failure modes (note that, if compiled with appropriate
       security option enabled, powstatd will require that file permissions on the configuration file  deny  rwx
       access to "group" or "other").

       To configure your UPS, follow these steps:

       0.   Edit  the  Makefile  to suit your installation. In particular, the secure master/slave communication
       protocol is selected/deselected by making the appropriate change  to  the  definition  of  CFLGS  in  the
       Makefile. Note that users outside the United States wishing to use the secure communication protocol will
       first  need  to  download  the public-domain ANSI C implementation of TEA, the Tiny Encryption Algorithm,
       from ftp://vader.eeng.brad.ac.uk/pub/crypto/xtea.c

       1.  Compile powstatd:

          % make

       or, if you are compiling on a DEC Alpha platform:

          % make alpha

       2.  Make sure your new UPS is completely charged  and  is  connected  to  your  machine  via  the  serial
       monitoring  line  provided  by the UPS manufacturer to your machine (if you did not get such a monitoring
       line with your UPS, see the the UPS-HOWTO for information on how to make one).

       3.  In order to configure powstatd, make sure your machine is not powered from the  UPS  but  is  instead
       plugged  directly  into  the wall outlet (your UPS should still, however, be connected to the machine via
       the serial monitoring line). Instead, plug a desk light or radio into the UPS.

       4.  Determine what serial line is connected to your UPS and create an initial copy of  /etc/powstatd.conf
       (you  can look at the sample powstatd.conf.* files included in the distribution) containing a single line
       specifying the serial line, e.g.:

          watch ttyS0

       5.  As root, run powstatd in test mode (you'll have to be  root  to  have  rw  access  to  /dev/ttyS0  or
       whatever device corresponds to your UPS monitoring line).

          % ./powstatd -t

       Hit ^C to stop after you see something like:

          CTS  DSR  DCD  RNG    RxD  TxD    DTR  RTS    STATUS
          1    0    1    1      0    0      0    1      OK
          1    0    1    1      0    0      0    1      OK
          1    0    1    1      0    0      0    1      OK
          1    0    1    1      0    0      0    1      OK

       The  output  describes  the  state  of  the serial connection between the UPS and the computer. Since the
       signaling needs of a UPS/computer connection are really quite low (just a few  bits),  we  aren't  really
       using  the  serial  connection as it was designed to be used for higher-throughput applications. Instead,
       we'll use the individual control and transmission lines  in  the  nine  wire  standard  connector  a  bit
       differently.

       Of  the  nine  wires, six are of particular interest: four "input" control lines (CTS, DSR, DCD, RNG) and
       two "output" control lines (DTR, RTS).  The remaining three lines consist of an electrical ground and the
       two transmission lines (TxD and RxD, one running in each direction); the latter are  typically  used  for
       asynchronous  serial information rather than for control. Most "dumb" UPS systems ignore the transmission
       lines and operate only by toggling combinations of the four "input" wires to indicate the status  of  the
       UPS  and the two "output" wires to send commands back to the UPS from the computer (for now, we'll assume
       that the current UPS is one of these).

       Since the UPS is fully charged and  the  power  is  on,  we  want  to  play  with  the  configuration  in
       /etc/powstatd.conf  until  STATUS  reads  OK,  and not LOW or FAIL. Provided we are actually watching the
       correct serial line, getting STATUS to read OK entails setting initial values for the  output  lines  DTR
       and  RTS  (of  course,  it  makes  no  sense to try to set initial values on the input lines). Try adding
       permutations of init values like:

          init dtr 1
          init rts 1

       until you get the OK status reading.

       6.  Repeat step 4, but this time pull the plug on the UPS and then  reinsert  it  after  a  few  seconds.
       Observe  changes  in the values for the input lines; it should be easy to determine what line corresponds
       to power failure. For example:

          CTS  DSR  DCD  RNG    DTR  RTS    STATUS
          1    0    1    1      0    1      OK
          1    0    1    1      0    1      OK
          1    0    1    1      0    1      OK
          1    0    1    1      0    1      OK
          0    0    1    1      0    1      FAIL   <- plug pulled
          0    0    1    1      0    1      FAIL
          0    0    1    1      0    1      FAIL
          0    0    1    1      0    1      FAIL
          1    0    1    1      0    1      OK     <- plug reinserted
          1    0    1    1      0    1      OK
          1    0    1    1      0    1      OK

       would indicate that CTS going to 0 corresponds to a power failure. If you leave the  UPS  unplugged  long
       enough  to  discharge  (this  may  take  quite a while even with a good size light bulb!), the UPS should
       signal a battery failure in a similar fashion, e.g.,

          CTS  DSR  DCD  RNG    DTR  RTS    STATUS
          0    0    0    1      0    1      LOW
          0    0    0    1      0    1      LOW
          0    0    0    1      0    1      LOW
          0    0    0    1      0    1      LOW

       7.  At this point, you should know the power failure and low battery signals.  Now we must determine  the
       appropriate  UPS  shutdown  signal.  Fortunately,  for most UPS systems, there are only 4 possible simple
       signals. With the UPS on battery power (e.g., unplugged), try adding each of  the  following  lines  into
       /etc/powstatd.conf in turn:

          kill dtr 0
          kill dtr 1
          kill rts 0
          kill rts 1

       for each trial, try issuing the command:

          % ./powstatd -k

       one  of the line specifications should cause the desk lamp or radio to turn off; that's the one you want.
       Important: be aware that many UPS have a "dead time" after the signal is sent before the UPS turns itself
       off; this "dead time" can be as long as 30-45 seconds! So don't be too impatient here or you  won't  know
       which signal is responsible for actually turning the UPS off.

       8.    At  this  point  configuration  should  be  complete.  For  example,  for  the  Cyberpower  Power99
       325/385/450/500VA models, a reasonable /etc/powstatd.conf configuration file reads:

          watch ttyS0
          fail cts 0
          low dcd 0
          init rts 1
          init dtr 0
          kill dtr 1

       9.  If you have other machines running off the same UPS, include one or  more  slave  entries  specifying
       their names in the master's configuration file:

          slave slave1.domain.edu
          slave slave2.domain.edu

       The  slave  machines'  configuration files /etc/powstatd.conf should contain a single line specifying the
       name of the master machine that is actually monitoring the UPS that also powers the slave:

          watch master.domain.edu

       If you intend to run more than 2 slaves off a very large UPS, you  will  need  to  adjust  the  MAXSLAVES
       parameter in the source code accordingly and then recompile.

       If  powstatd  is  compiled  with  the  appropriate security option enabled, encryption is used to protect
       slaves from malicious shutdown messages. An identical password directive should therefore appear in  both
       master and slave configuration files:

          password MyPasswordHere

       In  addition  to  encrypting  status  information, powstatd will encrypt generate and check timestamps in
       order to foil replay attacks.

       10.  Make sure your inittab file contains appropriate lines to invoke  powstatd.fail,  powstatd.low,  and
       powstatd.ok:

          # UPS signals a power outage.
          pf:12345:powerfail:/sbin/powstatd.fail

          # UPS signals power restored before the shutdown kicks in.
          pr:12345:powerokwait:/sbin/powstatd.ok

          # UPS signals low battery power: emergency shutdown.
          pn:12345:powerfailnow:/sbin/powstatd.low

       11.  Edit scripts powstatd.ok, powstatd.fail, and powstatd.low to adjust time parameters, if desired.

       12.  "make install", then reboot the machine. If you don't want to reboot, issue instead:

          % /etc/rc.d/init.d/powstatd start
          % /sbin/init q

   How It Works:
       powstatd is initiated as a daemon in runlevels 3 and 5.

       A  UPS  can only be in one of three states; OK, FAIL, or LOW. Usually, when the main power is on, the UPS
       is operating in the OK state; when power fails, the UPS changes to FAIL mode, from which  it  can  either
       recover and return to OK (if the power is restored) or can move to LOW (if the battery starts running out
       of juice before the power returns).

       powstatd  monitors the UPS condition. When the state changes, powstatd writes the new state of the UPS in
       /etc/powerstatus and then signals init (the mother of all processes) of the change in the UPS  condition.
       The  init  process  receives  this  notice  (a SIGPWR interrupt) and checks /etc/powerstatus to see if it
       contains "OK", "FAIL" or "LOW".

       The contents of /etc/powerstatus tells init (which is configured by the /etc/inittab file) to run one  of
       three scripts: powstatd.fail, powstatd.ok, or powstatd.low The init process then removes /etc/powerstatus
       so as not to be confused on subsequent interrupts.

       powstatd.fail
              initiates  a  timed  shutdown -h (halt) in background, on the assumption that if power is restored
              the shutdown can be cancelled.

       powstatd.ok
              cancels the running shutdown and notifies all users that power is  restored  and  no  shutdown  is
              imminent.

       powstatd.low
              cancels the running shutdown and initiates an immediate shutdown -h in foreground; this means once
              the UPS tells you the battery is low, you will indeed shutdown (there is no recovery).

       Note  that  as  you halt the machine, the shutdown sequence invokes powstatd one last time, but this time
       with the kill flag (-k), forcing the UPS to turn off, but only if the UPS is indeed in either the FAIL or
       LOW state (in any case, most supplies will ignore the kill signal if power is still available).  In  this
       fashion,  once  the  power  eventually returns (even after a day or two), the system should automatically
       restart without intervention.

   Troubleshooting:
       1.  If your machine doesn't seem to notice power status changes even when the UPS  daemon  is  signalling
       them,  try adjusting the location of the powerstatus file by changing the value of STATUS in the Makefile
       and recompiling. Some versions of the init process look in /var/log/powerstatus rather than  the  default
       /etc/powerstatus.

       2.   If  your  machine  keeps shutting down even when the power is on, you're probably watching the wrong
       serial line. To recover, try rebooting in single user mode (issue "linux  1"  at  the  LILO  prompt)  and
       disable  powstatd  by renaming /etc/powstatd.conf to something else. Reboot and you should be able to fix
       the configuration.

       3.  Some older UPS systems as well as some homebuilt cable connections (see the UPS  HowTo)  may  require
       that  UPS  shutdown  signals  be sent on the transmission line rather than on one of the signaling lines.
       Usually, this implies that a serial break signal (e.g., a long series of zeros) is required for  the  UPS
       to shut down. For these situations, you can use the special configuration file command

          kill break

       to obtain the appropriate behavior.

       4.   If  your  slave  machines  keep rejecting seemingly valid status messages from the master when using
       encrypted master/slave communication, first make sure they are running the same version of the  software.
       Otherwise,  try changing the definition of "outdated" at compile time (MAXCLOCKDRIFT) and recompiling. If
       you are not using NTP or some other mechanism to ensure that  master  and  slave  clocks  are  reasonably
       synchronized, you may well be better off running powstatd compiled without -DSECURE.

       5.   Some  older  versions  of  init  are not capable of invoking one of several different scripts (e.g.,
       powstatd.ok, powstatd.fail, powstatd.low) on receipt of SIGPWR under  different  circumstances.  Instead,
       they  always  invoke the same script, which must then handle the control logic (i.e., deciding whether to
       shutdown gracefully, abort a shutdown, or shutdown immediately) internally  (SPARC/Solaris  and  SGI/Irix
       apparently  fall  in  this  catagory).  If  you  have  such  a version of init, look at the sample script
       powstatd.dumb included in the distribution for an example of how to go about handling this case.

ACKNOWLEDGEMENTS

       I learned a lot from reading the publically-available source code for other UPS monitoring packages, like
       genpower, powerd and upsd.  I wrote powstatd primarily because  the  exact  combination  of  features  or
       configuration options I required were not available with these other packages.

       Peter  Galbraith  (galbraithp@dfo-mpo.gc.ca),  the  powstatd Debian package maintainer, provided numerous
       suggestions and bug fixes, as did Philippe Troin (phil@fifi.org), who was the  first  to  suggest  using,
       e.g.,  MD5-based  digital  signatures  to  avoid  malicious  shutdowns. Nick Holgate (holgate@debian.org)
       suggested an extension to powstatd signaling capabilities in order to support UPS systems that require  a
       break  signal  for  shutdown.  Nicolas Simonds (nic@bridge.com) provided information about changes to the
       code for both SPARC/Solaris and SGI/Irix.

       TEA, or the Tiny Encription Algorithm, is due to  David  Wheeler  and  Roger  Needham  of  the  Cambridge
       Computer Laboratory. Their implementation, used here, is in the public domain.

       Alberto Maria Segre
       segre@cs.uiowa.edu
       S378 Pappajohn Building
       The University of Iowa
       Iowa City, IA  52242-1000.

55VERSION55                                         55DATE55                                         POWSTATD(8)