Ceci est une ancienne révision du document !
Table des matières
Nut
Liens
- Compatibilité: http://www.networkupstools.org/compat/stable.html
APC Smart-UPS RM 2U 1000VA
On a trouvé un Onduleur… mais comment le monitorer!
nut
Installer “nut”
# apt-get update # apt-get install nut
driver
Par le port série…
/etc/nut/ups.conf
Mettre dedans:
[smartups] driver = apcsmart port = /dev/ttyS0 desc = UPS filer5
test
# upsdrvctl start Network UPS Tools - UPS driver controller 2.0.4 Network UPS Tools (version 2.0.4) - APC Smart protocol driver Driver version 1.99.8, command table version 2.0 Detected Smart-UPS 1000 RM [AS0303211207(] on /dev/ttyS0
Yes !
Unable to open /dev/ttyS0: Permission denied |
Dans ce cas, on a peut être simplement oublié:
# adduser nut dialout
Afin que le user “nut” soi autorisé a utiliser le port serie!
Quand ca marche:
On peut arreter pour l'instant:
# upsdrvctl stop Network UPS Tools - UPS driver controller 2.0.4 Stopping UPS: smartups
Port USB
Non testé.
config
upsd
upsd.conf
ACL all 0.0.0.0/0 ACL localhost 127.0.0.1/32 ACL admin1 <IP_1> ACL admin2 <IP_2> ACL nagios <IP_3> ACCEPT localhost admin1 admin2 nagios REJECT all
Il faut donner l'ip avec le mask ! a.b.c.d/mask . Exemple: 10.20.12.34/32
daemon
Editer /etc/default/nut
, afin d'avoir:
# start upsd START_UPSD=yes
Retour sous shell:
# /etc/init.d/ups-monitor start Starting Network UPS Tools: upsdrvctl upsd.
test
# upsc smartups@localhost battery.alarm.threshold: 0 battery.charge: 100.0 battery.charge.restart: 00 battery.date: 01/15/03 battery.packs: 000 battery.runtime: 25080 battery.runtime.low: 120 battery.voltage: 27.67 battery.voltage.nominal: 024 driver.name: apcsmart driver.parameter.port: /dev/ttyS0 driver.version: 2.0.4 driver.version.internal: 1.99.8 input.frequency: 50.00 input.quality: FF input.sensitivity: H input.transfer.high: 253 input.transfer.low: 208 input.transfer.reason: S input.voltage: 228.9 input.voltage.maximum: 228.9 input.voltage.minimum: 227.5 output.voltage: 228.9 output.voltage.target.battery: 230 ups.delay.shutdown: 090 ups.delay.start: 000 ups.firmware: 618.3.I ups.id: UPS_IDEN ups.load: 000.0 ups.mfr: APC ups.mfr.date: 01/15/03 ups.model: Smart-UPS 1000 RM ups.serial: AS0303211207( ups.status: OL ups.temperature: 024.7 ups.test.interval: 1209600 ups.test.result: NO
C'est un bien vieille onduleur…
upsmon
Pas pour l'instant…
MGE
Par USB
J'ai suivit cette methode .
Packages
Pour APT:
# echo "deb http://opensource.mgeups.com/stable/debian binary/" >> /etc/apt/sources.list
Installer:
# apt-get update # apt-get install mgeups-psp nut
update 30/03/2009: Avec “lenny”, le package “nut” est suffisant ! |
On branche l'USB: entre le PC et l'onduleur:
# lsusb Bus 004 Device 002: ID 0463:ffff MGE UPS Systems UPS
Ok.
Tester pilote
On créé/modifie rapidement le fichier /etc/nut/ups.conf
pour avoir:
[upscave] driver = usbhid-ups port = auto desc = "MGE 1000" #vendorid = 0463
Et puis on test:
# upsdrvctl start Network UPS Tools - UPS driver controller 2.2.0- Network UPS Tools: 0.28 USB communication driver 0.28 - core 0.30 (2.2.0-) Detected a UPS: MGE UPS SYSTEMS/ELLIPSE Using subdriver: MGE HID 1.0
Mais j'ai surtout eu des erreurs… il a suffit que je débranche et rebranche l'USB, pour que ca marche.
Je n'ai plus eu d'erreur de ce genre par la suite: un reliquat de configuration “serie” devait parasiter l'USB ?
Mais surtout, ne pas oublier de faire:
# upsdrvctl stop Network UPS Tools - UPS driver controller 2.2.0-
Sinon, la suite va deconner…
Fichiers de config
# ls -lart /etc/nut -rw-r----- 1 root nut 3790 2008-08-03 00:31 ups.conf -rw-r----- 1 root nut 2118 2008-08-03 00:35 upsd.conf -rw-r----- 1 root nut 2322 2008-08-03 00:38 upsd.users -rwxr-xr-x 1 root root 1670 2008-08-03 13:50 upssched-cmd -rw-r----- 1 root nut 4611 2008-08-03 13:50 upssched.conf -rw-r----- 1 root nut 11928 2008-08-03 16:06 upsmon.conf
ups.conf
[upscave] driver = usbhid-ups port = auto desc = "MGE 1000" #vendorid = 0463
upsd.conf
ACL all 0.0.0.0/0 ACL localhost 127.0.0.1/32 ACL lan1 192.168.0.0/24 ACL lan2 192.168.0.0/24 ACCEPT localhost lan1 lan2 REJECT all
upsd.users
[user] password = <MOT_DE_PASSE_SECRET> allowfrom = localhost lan1 lan2 actions = SET instcmds = ALL upsmon master
upsmon.conf
MONITOR upscave@xencave 1 user <MOT_DE_PASSE_SECRET> master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h +0" # TJ ----------------------------- # 03/08/2008 # En fait ca ne fonctionne pas, et d'ailleurs, est-ce une bonne idée ? # Je pense qu'il est préférable que l'on redemarre le PC avec "wakeonlan" # ---------- #POWERDOWNFLAG /etc/killpower NOTIFYCMD /sbin/upssched POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC NOTIFYFLAG FSD SYSLOG+WALL NOTIFYFLAG COMMOK SYSLOG+EXEC NOTIFYFLAG COMMBAD SYSLOG+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC NOTIFYFLAG NOCOMM SYSLOG+EXEC RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5
La plupart de ces lignes sont celles par defaut… J'ai surtout personnalisé le truc pour recevoir des mails sur l'etat de l'onduleur !
Le POWERDOWNFLAG
est resté un mystere pour moi:
Alors que les scripts sont là (y compris /etc/init.d/halt
), impossible d'éteindre l'onduleur, au lieu d'eteindre le PC de par lui-même. Le fichier nommé par le flag POWERDOWNFLAG
n'est jamais créé…
L'autre problème évoqué ici, est le RAID qu'il vaut mieux arreter proprement: Or, je ne sais pas trop comment faire ca “proprement” ( mdadm –readonly –scan
? ).
Au final, je crois que c'est mieux ainsi: dés que la batterie est trop faible, la machine s'eteind. Il faudra la rallumer manuellement, eventuellement par un petit coup de “wakeonlan”.
upssched.conf
CMDSCRIPT /etc/nut/upssched-cmd PIPEFN /var/run/nut/upssched.pipe LOCKFN /var/run/nut/upssched.lock AT ONBATT * START-TIMER onbatt 120 AT ONLINE * CANCEL-TIMER onbatt AT COMMBAD * START-TIMER upsgone 10 AT COMMOK * CANCEL-TIMER upsgone AT ONBATT * EXECUTE ups-on-batt AT ONLINE * EXECUTE ups-on-line AT LOWBATT * EXECUTE ups-low-batt AT SHUTDOWN * EXECUTE ups-shutdown AT NOCOMM * EXECUTE ups-no-comm
Nota : |
Depuis Lenny (et/ou la version de nut >1.2.1 ), c'est plutôt:
PIPEFN /var/run/nut/upssched/upssched.pipe LOCKFN /var/run/nut/upssched/upssched.lock
Avec en préalable:
# mkdir /var/run/nut/upssched # chown root:nut /var/run/nut/upssched # chmod g+sw /var/run/nut/upssched
upssched-cmd
#! /bin/sh # # This script should be called by upssched via the CMDSCRIPT directive. # # Here is a quick example to show how to handle a bunch of possible # timer names with the help of the case structure. # # This script may be replaced with another program without harm. # # The first argument passed to your CMDSCRIPT is the name of the timer # from your AT lines. case $1 in # TJ ---------------------------- ups-on-batt) logger -t upssched-cmd "Coupure de courant!" echo "Coupure de courant a la cave!" | mail -s "upssched-cmd: $1" root@localhost ;; ups-on-line) logger -t upssched-cmd "Retour du courant." echo "Retour du courant a la cave." | mail -s "upssched-cmd: $1" root@localhost ;; onbatt) logger -t upssched-cmd "Coupure de courant - confirme !" echo "Coupure de courant a la cave!!!" | mail -s "upssched-cmd: $1" root@localhost ;; ups-low-batt) logger -t upssched-cmd "Charge faible." echo "Charge batterie faible." | mail -s "upssched-cmd: $1" root@localhost ;; ups-shutdown) logger -t upssched-cmd "Shutdown en cours..." echo "Le Shutdown est en cours..." | mail -s "upssched-cmd: $1" root@localhost ;; ups-no-comm) logger -t upssched-cmd "Communication absente" echo "Il n'y a plus de communication avec l'onduleur..." | mail -s "upssched-cmd: $1" root@localhost ;; # ------------------------------- upsgone) logger -t upssched-cmd "The UPS has been gone for awhile" ;; *) logger -t upssched-cmd "Unrecognized command: $1" # TJ ---------------------------- echo "UPS info: $1" | mail -s "upssched-cmd:Unrecognized command" root@localhost # ------------------------------- ;; esac
Demarrer
start daemon
Verifier que le fichier /etc/default/nut
contient:
# start upsd START_UPSD=yes # start upsmon START_UPSMON=yes
Et un petit coup de :
# /etc/init.d/nut start Starting Network UPS Tools: upsdrvctl upsd upsmon.
Verifions les logs:
# tail /var/log/syslog Aug 3 17:14:44 xencave usbhid-ups[4036]: Startup successful Aug 3 17:14:44 xencave upsd[4037]: listening on 0.0.0.0 port 3493 Aug 3 17:14:44 xencave upsd[4037]: Connected to UPS [upscave]: usbhid-ups-upscave Aug 3 17:14:44 xencave upsd[4038]: Startup successful Aug 3 17:14:44 xencave upsmon[4040]: Startup successful Aug 3 17:14:44 xencave upsd[4038]: Connection from 192.168.0.1 Aug 3 17:14:44 xencave upsd[4038]: Client user@192.168.0.1 logged into UPS [upscave]
Ok.
test
# upsc upscave@localhost battery.charge: 86 battery.charge.low: 30 battery.runtime: 2924 battery.type: PbAc driver.name: usbhid-ups driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.version: 2.2.0- driver.version.data: MGE HID 1.0 driver.version.internal: 0.30 input.transfer.high: 264.0 input.transfer.low: 184.0 outlet.0.desc: Main Outlet outlet.0.id: 1 outlet.0.switchable: no outlet.1.desc: PowerShare Outlet 1 outlet.1.id: 2 outlet.1.status: on outlet.1.switchable: no output.voltage: 230.0 ups.beeper.status: enabled ups.delay.shutdown: -1 ups.delay.start: -10 ups.load: 6 ups.mfr: MGE UPS SYSTEMS ups.model: Ellipse 1000 ups.power.nominal: 1000 ups.productid: ffff ups.serial: 1H6F4304V ups.status: OL CHRG ups.vendorid: 0463
Knutclient
Bilan
Plus stable que la version sur port “serie”: J'avais des “lags” étrange et la configuration était mal foutu.
Par port série
Il s'agit d'une vieille methode. la version USB est plus mieux. |
# aptitude install nut
En fait, j'ai betement recopié des fichiers que j'avais déja…
Xen et ttyS0
Par défaut, Xen se réserve l'usage du port ttyS0
(COM1, pour les vieux).
Voir comment récuperer l'usage de ce port ici.
dialout
Autorisé le user nut
a utiliser le port ttyS0
!
Effectivement:
# id nut uid=105(nut) gid=105(nut) groupes=105(nut) # ls /dev/ttyS0 -lart crw-rw---- 1 root dialout 4, 64 2008-08-02 12:00 /dev/ttyS0
Donc:
# adduser nut dialout Ajout de l'utilisateur « nut » au groupe « dialout »... Terminé.
Les fichiers
- rw-r—– 1 root nut 127 2006-01-15 18:45 upsd.conf
- rw-r—– 1 root nut 95 2006-01-15 18:47 upsd.users
- rw-r—– 1 root nut 325 2006-01-15 18:57 upssched.conf
- rw-r—– 1 root nut 43 2007-09-06 15:21 ups.conf
- rw-r—– 1 root nut 334 2008-08-02 12:04 upsmon.conf
Sans oublier, dans /root/prod/nut
:
- rwxr-xr-x 1 root root 175 2008-08-02 11:08 upssched-tj
upsd.conf
# access-lists: ACL all 0.0.0.0/0 ACL localhost 127.0.0.1/32 ACL lan 192.168.0.0/24 # rights: ACCEPT localhost lan REJECT all
upsd.users
[user] password = <MOT_DE_PASSE_SECRET> allowfrom = localhost lan actions = SET instcmds = ALL upsmon master
upssched.conf
# generated by myself
CMDSCRIPT /root/prod/nut/upssched-tj PIPEFN /var/run/nut/upssched-tj.pipe LOCKFN /var/run/nut/upssched-tj.lock # TJ # Appele le script 'upssched-tj.pl' apres 120 s sur batterie # (sinon, ca coupera ulterieurement, sur fin batterie) AT ONBATT * START-TIMER shutdown 120 AT ONLINE * CANCEL-TIMER shutdown
ups.conf
[upscave] driver=mge-shut port=/dev/ttyS0
upsmon.conf
# define ups to monitor MONITOR upscave@localhost 1 user <MOT_DE_PASSE_SECRET> master # define the shutdown command SHUTDOWNCMD "/sbin/shutdown -h now" # TJ POLLFREQ 20 POLLFREQALERT 10 DEADTIME 60 NOTIFYCMD /sbin/upssched NOTIFYFLAG COMMOK SYSLOG NOTIFYFLAG COMMBAD SYSLOG NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
/etc/aliases
Ajouter:
upscave: root
/root/prod/nut/upssched-tj
ce fichier est mal foutu. voir l'install USB plutot |
#!/bin/sh # actually send the shutdown signal to master (will broadcast to all slaves) # TJ : je desactive le shutdown programme sur timeout (sched...) # /sbin/upsmon -c fsd
(Sert plus a grand chose …?)
Bilan
Bof. Ca eteind la machine, alors que je voudrais que ca coupe le courant avant que le systeme eteigne la machine. (Sinon, la machine ne remonte pas quand le courant revient)
Tips
commandes
couper vite, mais proprement
Forcer l'arret du “maitre” comme si il y a avait eu une coupure de courant:
# upsmon -c fsd
La procedure “shutdown” est immédiatement engagé.
couper le jus
Couper le jus dans 10 secondes !
# upsrw -s ups.delay.shutdown=10 -u user -p <MOT_DE_PASSE_SECRET> upscave@localhost
oups !
A force de jouer, je me retrouve avec un onduleur avec ça:
battery.charge.low=10
Résultat ⇒ la batterie est a bout de souffle et s'arrete avant que les serveurs aient stoppés ! |
$ upsrw -s battery.charge.low=25 -u <USER> -p <PASS>