~ubuntu-branches/ubuntu/saucy/nut/saucy

« back to all changes in this revision

Viewing changes to docs/shutdown.txt

  • Committer: Chuck Short
  • Date: 2013-05-13 12:57:25 UTC
  • Revision ID: zulcss@ubuntu.com-20130513125725-llq8wsohyhq9idsy
* Merge from Debian.  Remaining changes:
  - debian/control:
    + remove Build-Depends on libpowerman0-dev
    + remove nut-powerman-pdu
  - debian/nut-powerman-pdu.{install,manpages}: dropped for now
  - debian/{nut-cgi,nut-server}.postinst: add nut to the dialout and nut
    groups unconditonally to handle the upgrade from hardy release.
  - debian/source_nut.py, debian/{nut,nut-server,nut-client}.install,
    debian/rules: Install apport hooks for all top-level nut packages.
  - debian/rules: Use udev version for Ubuntu
  - debian/series, debian/patches/backport-fix-lp753661.patch: re-enabled
* Non-maintainer upload with fixes for wheezy.
* debian/nut-client.preinst: also revert /etc/nut/nut.conf mangling done
  by postinst during upgrade from lenny to squeeze (Really closes: #677054)
  Thanks to Andreas Beckmann for the review.
* Merge from Debian.  Remaining changes:
  - debian/control:
    + remove Build-Depends on libpowerman0-dev
    + remove nut-powerman-pdu
  - debian/nut-powerman-pdu.{install,manpages}: dropped for now
  - debian/{nut-cgi,nut-server}.postinst: add nut to the dialout and nut
    groups unconditonally to handle the upgrade from hardy release.
  - debian/source_nut.py, debian/{nut,nut-server,nut-client}.install,
    debian/rules: Install apport hooks for all top-level nut packages.
  - debian/rules: Use udev version for Ubuntu
  - debian/series, debian/patches/backport-fix-lp753661.patch: re-enabled
* Dropped the following patches, no longer required:
  - debian/patches/CVE-2012-2944.patch (included upstream)
* Non-maintainer upload with fixes for wheezy.
* Only remove /etc/init.d/nut from previous versions of nut in nut-server
  postinst if there are no local changes.
* Also remove /etc/init.d/nut in nut-client postinst. Thanks to 
  Laurent Bigonville for the hint.
* Only fix permissions of configfiles on first install.
* debian/control: Fix typo in package description. Thanks to Julien Cristau
  for spotting this.
* Non-maintainer upload.
* debian/nut-client.preinst: revert /etc/nut/nut.conf mangling done by older
  versions of the postinst (Closes: #677054)
* debian/rules: Stop the nut-client before nut-server on systems using
  static
  boot ordering (Closes: #679451)
* debian/nut-server.postinst: Remove /etc/init.d/nut on upgrade
  (Closes: #677822)
* Rename nut-server.lintian-overrides to nut-client.lintian-overrides and
  adjust overrides now that ups-monitor is shipped in nut-client package
  (Closes: #677947)
* Add debian/patches/0001-fix-upsmon-regression.patch: Fix upsmon/upssched
  regression (Taken from upstream) (Closes: #679513)
* Move nut metapackage to Section: metapackages
* Also create nut user when installing nut-client package and do not delete
  it on purge anymore (Closes: #682000)
* Drop /etc/default/nut → /etc/nut/nut.conf migration code, migration
  happends before squeeze release and this was against policy to have a
  maintainer script modifying a conffile in the first place (Closes: #684392)
* Add dependency against adduser and lsb-base on nut-client package
* Be sure that client is stopped before the server also when using
  dependencies based boot
* Fix package descriptions (Closes: #678068)
* Also install /bin/upssched-cmd in nut-client package as this script is
  referenced in default upssched.conf config file
* debian/watch: Update watch file
* Be sure that all maintainer scripts are returning 0 at their end
* New upstream release (Closes: #671444)
* acknowledges NMU (Closes: #613643)
* debian/nut-client.init: fix action "start" and use of log_*_*msg
  LSB log functions (Closes: #675619)
* debian/nut-server.preinst: remove obsolete file(s) left in
  /etc/udev/rules.d and related processing: udev files are now located
  in /lib/udev/rules, and there is no reason to modify the dedicated
  USB UPS rules (52-nut-usbups.rules) (Closes: #660072)
* debian/nut-server.init: rewrite to match upsd / drivers startup scope
* debian/nut-client.init: created to match upsmon startup scope
  (Closes: #634858)
* debian/nut.TODO.Debian, debian/Makefile.am: updated to reflect the above
* debian/rules: install nut-client.init, and update to reflect the above
* debian/control, debian/Makefile.am: updated to reflect the above
* debian/control:
  - add Breaks on nut-server (<< 2.6.3-1~)
  - bump Standards-Version to 3.9.3
* debian/nut-client.links: renamed from debian/nut-server.links, since
  ups-monitor is now provided by nut-client initscript
* debian/nut.README.Debian: renamed from nut-server.README.Debian,
  to provide it with both client and server packages
* debian/nut-server.install: add missing drivers (clone-outlet,
  liebert-esp2 and microdowell)
* debian/nut-server.manpages: add missing manual pages (apcsmart-old,
  ivtscd, liebert-esp2 and microdowell)
* SECURITY UPDATE: remote denial of service
 - debian/CVE-2012-2944.patch: limit the set of parsed characters to ' '
   through '~'
 - CVE-2012-2944
* Merge from Debian testing.  Remaining changes:
  - debian/control: Drop Build-Depends on libpowerman0-dev (currently in 
    universe)
  - debian/{nut-cgi,nut-server}.postinst: add nut to the dialout and nut 
    groups unconditonally to handle the upgrade from hardy release.
  - debian/nut-powerman-pdu.{install,manpages}: dropped for now.
  - debian/source_nut.py, debian/{nut,nut-server,nut-client}.install, 
    debian/rules: Install apport hooks for all top-level nut packages.
  - debian/rules: Use udev version for Ubuntu.
  - debian/series, debian/patches/backport-fix-lp753661.patch: re-enabled.
* New upstream release (Closes: #635186, #598741, #633756, #638221)
* debian/nut-server.{install,manpages}: add richcomm_usb
* debian/nut-server.install, debian/rules: install Avahi service file
* debian/rules, nut-client.install: install Augeas lenses
* debian/nut-server.README.Debian: clarify udev explanation (Closes: #529664)
* debian/patches/0001-fix_spelling_and_typo.patch,
  debian/patches/0003-libupsclient-version.patch: removed since these are now
  fixed upstream
* debian/patches/series: updated
* Merge from debian unstable.  Remaining changes:
  - debian/control: Drop Build-Depends on libpowerman0-dev (currently in 
    universe)
  - debian/{nut-cgi,nut-server}.postinst: add nut to the dialout and nut 
    groups unconditonally to handle the upgrade from hardy release.
  - debian/nut-powerman-pdu.{install,manpages}: dropped for now.
  - debian/source_nut.py, debian/{nut,nut-server,nut-client}.install, 
    debian/rules: Install apport hooks for all top-level nut packages.
  - debian/rules: Use udev version for Ubuntu.
  - debian/series, debian/patches/backport-fix-lp753661.patch: re-enabled.
* New upstream release (Closes: #594989)
* debian/control:
  - remove legacy Build-Depends for nut-hal-drivers on libdbus and libglib
  - Build-Depends-Indep on docbook-xsl for offline document
    generation (Closes: #635347)
* debian/nut-server.install: add apcsmart-old
* debian/nut-server.init:
  - add udev as Required-Start/Stop (Closes: #642412)
  - remove legacy support for /etc/default/nut (Closes: #638021)
* debian/patches/0003-libupsclient-version.patch: added to fix the missing
  libupsclient version info bump
* debian/libupsclient1-dev.links: update link name
* debian/libupsclient1.symbols: add with upscli_tryconnect
* debian/nut.TODO.Debian: update and complete the TODO list
* Fix FTBFS for Ubuntu (LP: #815760):
  - debian/control: Build-Depends-Indep on docbook-xsl for offline 
    document generation.
* Merge from Debian unstable (LP: #811976). Remaining changes:
  - debian/control: Drop Build-Depends on libpowerman0-dev (currently in 
    universe)
  - debian/{nut-cgi,nut-server}.postinst: add nut to the dialout and nut 
    groups unconditonally to handle the upgrade from hardy release.
  - debian/nut-powerman-pdu.{install,manpages}: dropped for now.
  - debian/source_nut.py, debian/{nut,nut-server,nut-client}.install, 
    debian/rules: Install apport hooks for all top-level nut packages.
  - debian/rules: Use udev version for Ubuntu.
  - debian/series, debian/patches/backport-fix-lp753661.patch: re-enabled.
* debian/nut.README.Debian: Adjust udev rules naming for permissions override
  (Closes: #529664)
* Re-add and refresh debian/patches/0001-fix_spelling_and_typo.patch:
  Some typos and spelling errors remain.
* Split nut package into nut-client and nut-server, keep nut package as
  metapackage
* Generate PDF and html doc and install it in nut-doc package
* debian/rules:
  - List non-installed files
  - Includes python-module.mk
  - Add flags to build documentation and install it
* debian/control:
  - Add python-nut package and add python build-dependency
  - Set nut-powerman-pdu priority to extras
  - Add nut-monitor package
  - Add nut-doc package and add required C/R/P
  - Add libups-nut-perl package
* debian/nut-server.prerm: Remove /var/run/nut during removal
* Merge from debian unstable.  Remaining changes:
  - debian/control:
    + Drop Build-Depends on libpowerman0-dev (currently in universe)
  - debian/{nut-cgi,nut}.postinst: add nut to the dialout and nut groups
    unconditonally to handle the upgrade from hardy release.
  - debian/nut-powerman-pdu.{install,manpages}: dropped for now.
  - debian/source_nut.py, debian/nut.install, debian/rules: Install apport hook.
  - debian/rules: Use udev version for Ubuntu.
* debian/patches/backport-fix-lp753661.patch: Refreshed.
* Drop changes due to .pc being not clean.
* New upstream release (Closes: #595953, #614842, #595773)
* debian/patches/*.patch: removed since these are now fixed upstream
* Drop HAL package and build-dependencies (Closes: #613197)
* debian/control:
  - Bump Standards-Version to 3.9.2 (no further changes)
  - Drop autotools build-dependencies (not needed anymore)
  - Drop non-existing build-dependencies
* debian/rules:
  - Correctly pass flags to configure
* Merge from debian unstable (LP: #789323).  Remaining changes:
  + debian/control:
    - Update maintainer as per spec.
    - Add Breaks on nut-hal-drivers to ensure we have correct udev version.
    - Drop libpowerman0-dev from the Build-Depends (currently in universe)
  + debian/{nut-cgi,nut}.postinst: add nut to the dialout and nut groups
    unconditonally to handle the upgrade from hardy release.
  + debian/nut-powerman-pdu.install, debian/nut-powerman-pdu.manpages: dropped for now.
  + debian/nul-hal-drivers.{docs,install,postinst,preinst}: Dropped since hal is in universe now
  + debian/nut.links: must create the init script link, used if the upse needs to be powered down
    (LP: #357583)
  + debian/source_nut.py, debian/nut.install, debian/rules: Install apport hook.
  + debian/patches/backport-fix-lp753661.patch
  + Dropped:
    - debian/patches/fix_pc_file.patch: replaced by debian's 0002-fix_libupsclient_pc.patch
* debian/patches/fix_pc_file.patch: add DEP3 patch header
* debian/patches/debian-changes-2.6.0-1: remove that accidental file
* debian/nut-snmp.docs: Distribute snmp.txt doc file (Closes: #548295)
* d/p/0001-fix_spelling_and_typo.patch: Update and refresh
* debian/nut.lintian-overrides: Fix typo
* debian/patch/0002-fix_libupsclient_pc.patch: Fix libupsclient.pc (Closes:
  #624255)
* debian/rules:
  - Switch to cdbs
  - Remove not existing configure options (Closes: #611813)
  - Drop Phony rules (Closes: #613699)
* debian/control:
  - Add cdbs build-dependency
* debian/patches/backport-fix-lp753661.patch: Backport fix 
  to trim extraneous end-of-line, in buggy HID string tables, 
  which results in upsc breaking the communication pipe.
  (LP: #753661)
* fix_pc_file.patch: fix .pc source files by using LIBSSL_LIBS instead of
  LIBSSL_LDFLAGS to avoid a FTBFS in packages that uses libupsclient.pc
  (LP: #743484)
* Merge from Debian unstable, remaining changes:
  + debian/control:
    - Update maintainer as per spec.
    - Add Breaks on nut-hal-drivers to ensure we have correct udev version.
    - Drop libpowerman0-dev from the Build-Depends (currently in universe)
  + debian/{nut-cgi,nut}.postinst: add nut to the dialout and nut groups
    unconditonally to hanle the upgrade from hardy release.
  + debian/nut-powerman-pdu.install, debian/nut-powerman-pdu.manpages: dropped for now.
  + debian/nul-hal-drivers.{docs,install,postinst,preinst}: Dropped since hal is in universe now
  + debian/nut.links: must create the init script link, used if the upse needs to be powered down
    (LP: #357583)
  + debian/source_nut.py, debian/nut.install, debian/rules: Install apport hook.
  + Dropped:
    - debian/patches/0002-fix_udev_action.patch: Accepted upstream.
    - debian/patches/0004-netvision-improvements-lp-600950: no longer needed.
    - debian/patches/0005-fix-nut-m4.patch: no longer needed.
    - debian/patches/9999-autoconf.patch: no longer needed.
* New upstream release (Closes: #575176, #588648, #609597, #687985)
* debian/patches/*.patch: removed since these are now fixed upstream
* debian/patches/0001-fix_spelling_and_typo.patch,
  debian/patches/series: reworked to match the new upstream release
* debian/nut.install, debian/nut.manpages: remove obsolete reference to
  megatec and megatec_usb, now respectively replaced by blazer_ser and
  blazer_usb
* debian/nut.docs: limit distributed documentation
* debian/control:
  - Wrap build-dependencies
  - Change nut-cgi Recommends to apache2 | httpd-cgi
* debian/nut.postinst: Only trigger USB subsystem, should Closes: #574769
* debian/patches/0002-fix_udev_action.patch: Use SUBSYSTEM instead of BUS
* debian/control, debian/rules, 
  debian/nut-hal-drivers.{docs,install,postinst,preinst}: Drop
  nut-hal-drivers since Nut doesnt go into universe.
* Split patches/debian-changes-2.4.3-2ubuntu1 into
  patches/0005-fix-nut-m4.patch and patches/9999-autoconf.patch
* Readd lost debian/patches0004-netvision-improvements-lp-600950.patch patch
  (LP: #707050)
* debian/patches/0002-fix_udev_action.patch:
  Change BUS to SUBSYSTEMS, since the former is deprecated. (LP: #692171)
* debian/nut.postinst: Uncomment missing call to adduser
* debian/control: Drop hal build dependency, we don't need the daemon to
  build the package. Add a hal dependency to nut-hal-drivers, which is the
  only thing that actually needs it.
* Merge from debian unstable.  Remaining changes:
  + debian/control:
    - Update maintainer as per spec.
    - Add Breaks on nut-hal-drivers to ensure we have correct udev version.
    - Drop libpowerman0-dev from the Build-Depends (currently in universe)
  + debian/{nut-cgi,nut}.postinst: add nut to the dialout and nut groups
    unconditonally to hanle the upgrade from hardy release.
  + debian/nut-powerman-pdu.install, debian/nut-powerman-pdu.manpages: dropped for now.
  + debian/nut.links: must create the init script link, used if the upse needs to be powered down
    (LP: #357583)
  + debian/nut.postinst: Update udevadm trigger.
    "libusb_get_report: error sending control message: 
     Operation not permitted" error on some UPS devices. (LP: #572262)
  + debian/source_nut.py, debian/nut.install, debian/rules: Install apport hook.
  + debian/patches/netvision-improvements-lp-600950.patch: Add improvements
    for netvision UPSes
  + Fix FTBFS with ld --as-needed.
  + Dropped:
    - debian/patches/03_udev_rules_change.dpatch: Use debian's instead.
    - debian/patches/04_nut_small-buffers.dpatch: Use debian's instead.
* debian/control:
  - Bump Standards-Version to 3.9.1
  - Update Vcs-* fields to new GIT repository
  - Add myself as Uploaders
* Switch to dpkg-source 3.0 (quilt) format (Closes: #573601)
* debian/patches/0001-low_speed_usb_ups.patch: Use patch system for changes
  that were applied directly in the source
* Add debian/gbp.conf file
* debian/watch: Bump version to 3
* Add debian/patches/0002-fix_udev_action.patch: Also set permission for
  "change" udev ACTION (Closes: #557178)
* debian/nut.postrm: Do not try to remove nut user is deluser is not
  installed anymore
* debian/nut.manpages: Install manpage nut.conf.5 (Closes: #528222)
* debian/copyright: Fix copyright-with-old-dh-make-debian-copyright
* Remove nut-snmp.lintian-overrides, not needed anymore
* debian/patches/0003-fix_spelling_and_typo.patch: Fix some spelling errors
* Add debian/libupsclient1.symbols file
* Add debian/nut.links: Re-add /etc/init.d/ups-monitor that was lost for
  some reasons (Closes: #592351)
* debian/nut.lintian-overrides: Add override for
  init.d-script-does-not-provide-itself /etc/init.d/ups-monitor
* Drop libupsclient1.post{inst,rm}: ldconfig call is added automatically by
  debhelper
* debian/libupsclient1-dev.install: Do not ship /lib/libupsclient.la anymore
* debian/rules: Remove dpatch logic as we are using package source version
  '3.0 (quilt)'
* debian/compat: Bump debhelper compatibility to 8
* Non-maintainer upload.
* drivers/libhid.c: Apply r2407 from upstream to fix bug with some
  low speed UPS devices. (Closes: #583371)
* Fix FTBFS with ld --as-needed.
* debian/patches/netvision-improvements-lp-600950.patch: Add improvements for netvision UPSes 
  (LP: #600950) 
* debian/source_nut.py, debian/nut.install, debian/rules: Install apport hook. 
* debian/patches/04_nut-small-buffers.dpatch: Fix "libusb_get_report: error sending control message: 
  Operation not permitted" error on some UPS devices. (LP: #572262)
* debian/nut.postinst: Revert dropping of --action=change. "add" events must
  not ever be triggered automatically.
* Add 03_udev_rules_change.dpatch: Run udev rules on change events, too.
* debian/control: grr...fix ftbfs. 
* Merge from debian testing.  Remaining changes (LP: #535152):
  + debian/control:
    - Update maintainer as per spec.
    - Add Breaks on nut-hal-drivers to ensure we have correct udev version.
    - Drop libpowerman0-dev from the Build-Depends (currently in universe)
  + debian/{nut-cgi,nut}.postinst: add nut to the dialout and nut groups
    unconditonally to hanle the upgrade from hardy release.
  + debian/nut-powerman-pdu.install, debian/nut-powerman-pdu.manpages: dropped for now.
  + debian/nut.links: must create the init script link, used if the upse needs to be powered down
    (LP: #357583)
  + debian/nut.postinst: Update udevadm trigger.
  + Dropped:
    - debian/patches/02-fix-trust-pw4130m.dpatch: No longer needed.
* New upstream release (Closes: #544390, #528222, #539747, #526811,
  #562064)
* debian/nut.install, debian/nut.manpages:
  - remove cyberpower driver and manpage
  - add bestfortress, clone and ivtscd drivers and manpages
* debian/rules:
  - change udev dir to /lib/udev (Closes: #522327)
  - replace deprecated calls to 'dh_clean -k' by dh_prep (Closes: #536599)
* debian/rules, debian/nut.install, debian/nut.install,
  debian/nut.README.Debian: install configuration files, without the
  sample suffix (Closes: #528641)
* debian/nut.links: restored (Closes: #522506)
* debian/nut.init:
  - source nut.conf instead of default/nut for POWEROFF_WAIT(Closes:
    #538173)
  - fix status checking (Closes: #538785)
  - improve detection of non configured system and beautify related
    output (Closes: #563112)
  - use 'invoke-rc.d' instead of calling the reboot script directly
  - add $remote_fs to Required-Start and Required-Stop
* debian/nut.postrm: remove udev files and simplify cleanup (Closes:
  #541629)
* debian/control:
  - remove Luca Filipozzi from the Uploaders list (Closes: #568987)
  - update Standards-Version to 3.8.4
  - remove the debconf dependency
  - bump debhelper version to (>= 7) in Build-Depends, for dh_prep
  - add Breaks on nut-hal-drivers to ensure we have correct udev version
* Remove debconf support since it was related to really old nut
  version (Closes: #518056):
  - remove nut-cgi.config, nut.config, nut-cgi.templates, nut.templates,
    and po/ directory
  - update nut-cgi.postinst
* debian/nut.dirs: remove /var/run/nut to conform to Debian Policy
* debian/nut.postint:
  - create /var/run/nut if needed
  - improve security checks
* debian/nut.README.Debian: add a security note for ups.conf
* debian/watch: URL update
* debian/patches/02-fix-trust-pw4130m.dpatch: Fix issues with Trust
  PW-4130M UPS. (LP: #447586) 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
Desc: Configuring automatic UPS shutdowns
2
 
File: shutdown.txt
3
 
Date: 24 August 2003
4
 
Auth: Russell Kroll <rkroll@exploits.org>
5
 
 
6
 
Shutdown design
7
 
===============
8
 
 
9
 
When your UPS batteries get low, the operating system needs to be brought
10
 
down cleanly.  Also, the UPS load should be turned off so that all devices
11
 
that are attached to it are forcibly rebooted.
12
 
 
13
 
Here are the steps that occur when a critical power event happens:
14
 
 
15
 
1. The UPS goes on battery
16
 
 
17
 
2. The UPS reaches low battery (a "critical" UPS)
18
 
 
19
 
3. The upsmon master notices and sets "FSD" - the "forced shutdown"
20
 
   flag to tell all slave systems that it will soon power down the load.
21
 
 
22
 
   (If you have no slaves, skip to step 6)
23
 
 
24
 
4. upsmon slave systems see "FSD" and:
25
 
 
26
 
   - generate a NOTIFY_SHUTDOWN event
27
 
   - wait FINALDELAY seconds - typically 5
28
 
   - call their SHUTDOWNCMD
29
 
   - disconnect from upsd
30
 
 
31
 
5. The upsmon master system waits up to HOSTSYNC seconds (typically 15) 
32
 
   for the slaves to disconnect from upsd.  If any are connected after 
33
 
   this time, upsmon stops waiting and proceeds with the shutdown 
34
 
   process.
35
 
 
36
 
6. The upsmon master:
37
 
 
38
 
   - generates a NOTIFY_SHUTDOWN event
39
 
   - waits FINALDELAY seconds - typically 5
40
 
   - creates the POWERDOWNFLAG file - usually /etc/killpower
41
 
   - calls the SHUTDOWNCMD
42
 
 
43
 
7. On most systems, init takes over, kills your processes, syncs and
44
 
   unmounts some filesystems, and remounts some read-only.
45
 
 
46
 
8. init then runs your shutdown script.  This checks for the
47
 
   POWERDOWNFLAG, finds it, and tells the UPS driver(s) to power off
48
 
   the load.
49
 
 
50
 
9. The system loses power.
51
 
 
52
 
10. Time passes.  The power returns, and the UPS switches back on.
53
 
 
54
 
11. All systems reboot and go back to work.
55
 
 
56
 
How you set it up
57
 
=================
58
 
 
59
 
1. Make sure your POWERDOWNFLAG setting in upsmon.conf points somewhere
60
 
   reasonable.  Specifically, that filesystem must be mounted when your
61
 
   shutdown script runs.
62
 
 
63
 
2. Edit your shutdown scripts to check for the POWERDOWNFLAG so they know
64
 
   when to power off the UPS.  You must check for this file, as you don't
65
 
   want this to happen during normal shutdowns!
66
 
 
67
 
   You can use upsdrvctl to start the shutdown process in your UPS 
68
 
   hardware.  Use this script as an example, but change the paths to
69
 
   suit your system:
70
 
 
71
 
   if (test -f /etc/killpower)
72
 
   then
73
 
        echo "Killing the power, bye!"
74
 
        /usr/local/ups/bin/upsdrvctl shutdown
75
 
 
76
 
        sleep 120
77
 
 
78
 
        # uh oh... the UPS poweroff failed!
79
 
        # you probably should reboot here to avoid getting stuck
80
 
        # *** see the section on power races below ***
81
 
   fi
82
 
 
83
 
   Make sure the filesystem containing upsdrvctl, ups.conf and your UPS
84
 
   driver(s) is mounted when the system gets to this point.  Otherwise
85
 
   it won't be able to figure out what to do.
86
 
 
87
 
RAID warning
88
 
============
89
 
 
90
 
   NOTE: If you run any sort of RAID equipment, make sure your arrays
91
 
   are either halted (if possible) or switched to "read-only" mode.
92
 
   Otherwise you may suffer a long resync once the system comes back up.
93
 
 
94
 
   The kernel may not ever run its final shutdown procedure, so you
95
 
   must take care of all array shutdowns in userspace before upsdrvctl
96
 
   runs.
97
 
 
98
 
   If you use software RAID (md) on Linux, get mdadm and try using
99
 
   'mdadm --readonly' to put your arrays in a safe state.  This has to
100
 
   happen after your shutdown scripts have remounted the filesystems.
101
 
 
102
 
   On hardware RAID or other kernels, you have to do some detective work.
103
 
   It may be necessary to contact the vendor or the author of your
104
 
   driver to find out how to put the array in a state where a power loss
105
 
   won't leave it "dirty".
106
 
 
107
 
   My understanding is that 3ware devices on Linux will be fine unless
108
 
   there are pending writes.  Make sure your filesystems are remounted
109
 
   read-only and you should be covered.
110
 
 
111
 
Multiple UPS shutdowns
112
 
======================
113
 
 
114
 
If you have multiple UPSes connected to your system, chances are that you
115
 
need to shut them down in a specific order.  The goal is to shut down
116
 
everything but the one keeping upsmon alive at first, then you do that one
117
 
last.
118
 
 
119
 
To set the order in which your UPSes receive the shutdown commands, define
120
 
the "sdorder" value in your ups.conf.
121
 
 
122
 
        [bigone]
123
 
                driver = apcsmart
124
 
                port = /dev/ttyS0
125
 
                sdorder = 2
126
 
 
127
 
        [littleguy]
128
 
                driver = bestups
129
 
                port = /dev/ttyS1
130
 
                sdorder = 1
131
 
 
132
 
        [misc]
133
 
                driver = megatec
134
 
                port = /dev/ttyS2
135
 
                sdorder = 0
136
 
 
137
 
The order runs from 0 to the highest number available.  So, for this
138
 
configuration, the order of shutdowns would be misc, littleguy, and then
139
 
bigone.
140
 
 
141
 
If you have a UPS that shouldn't be shutdown when running "upsdrvctl
142
 
shutdown", set the sdorder to -1.
143
 
 
144
 
Testing shutdowns
145
 
=================
146
 
 
147
 
To see how upsdrvctl will behave without actually turning off power, use
148
 
the -t argument.  It will display the sequence without actually calling
149
 
the drivers.
150
 
 
151
 
Other issues
152
 
============
153
 
 
154
 
You may delete the POWERDOWNFLAG in the startup scripts, but it is not
155
 
necessary.  upsmon will clear that file for you when it starts.
156
 
 
157
 
Remember that some operating systems unmount a good number of filesystems
158
 
when going into read-only mode.  If the UPS software is installed to /usr
159
 
and it's not mounted, your shutdowns will fail.  If this happens, either
160
 
make sure it stays mounted at shutdown, or install to another partition.
161
 
 
162
 
Power races
163
 
===========
164
 
 
165
 
There is a situation where the power may return during the shutdown
166
 
process.  This is known as a race.  Here's how we handle it.
167
 
 
168
 
"Smart" UPSes typically handle this by using a command that forces the UPS
169
 
to power the load off and back on.  This way, you are assured that the
170
 
systems will restart even if the power returns at the worst possible
171
 
moment.
172
 
 
173
 
Contact closure units (ala genericups), on the other hand, have the
174
 
potential for a race when feeding multiple systems.  This is due to the
175
 
design of most contact closure UPSes.  Typically, the "kill power" line
176
 
only functions when running on battery.  As a result, if the line power
177
 
returns during the shutdown process, there is no way to power down the
178
 
load.
179
 
 
180
 
The workaround is to force your systems to reboot after some
181
 
interval.  This way, they won't be stuck in the halted state with the UPS
182
 
running on line power.
183
 
 
184
 
Testing power races
185
 
===================
186
 
 
187
 
The easiest way to see if your configuration will handle a power race
188
 
successfully is to do 'upsmon -c fsd'.  This will force the UPS software
189
 
to shut down as if it had a OB+LB situation, and your shutdown script
190
 
should call the UPS driver(s) in shutdown mode.
191
 
 
192
 
If everything works correctly, the computer will be forcibly powered off,
193
 
may remain off for a few seconds to a few minutes (depending on the
194
 
driver and UPS type), then will power on again.
195
 
 
196
 
If your UPS just sits there and never resets the load, you are vulnerable
197
 
to the above power race and should add the "reboot after timeout" hack
198
 
at the very least.
199
 
 
200
 
Know your hardware
201
 
==================
202
 
 
203
 
UPS equipment varies from manufacturer to manufacturer and even within
204
 
model lines.  You should test the shutdown sequence on your systems before
205
 
leaving them unattended.  A successful sequence is one where the OS halts
206
 
before the battery runs out, and the system restarts when power returns.
207
 
 
208
 
One more tip
209
 
============
210
 
 
211
 
If your UPS powers up immediately after a power failure instead of
212
 
waiting for the batteries to recharge, you can rig up a little hack to
213
 
handle it in software.
214
 
 
215
 
Essentially, you need to test for the POWERDOWNFLAG in your *startup*
216
 
scripts while the filesystems are still read-only.  If it's there, you
217
 
know your last shutdown was caused by a power failure and the UPS
218
 
battery is probably still quite weak.
219
 
 
220
 
In this situation, your best bet is to sleep it off.  Pausing in your
221
 
startup script to let the batteries recharge with the filesystems in a
222
 
safe state is recommended.  This way, if the power goes out again, you
223
 
won't face a situation where there's not enough battery capacity left
224
 
for upsmon to do its thing.
225
 
 
226
 
Exactly how long to wait is a function of your UPS hardware, and will
227
 
require careful testing.
228
 
 
229
 
If this is too evil for you, buy another kind of UPS that will either
230
 
wait for a minimum amount of charge, a minimum amount of time, or both.