Linux et onduleur

A la faveur d’une coupure de courant je me suis rendu compte que les batteries de mon onduleur speex pp210 étaient nazes.


du coup mon serveur Poweredge T310 est tombé brutalement, heureusement sans conséquence facheuse. Ni une ni deux, j’ai commandé deux batteries en remplacement et j’ai configuré NUT comprendre Network UPS Tools sur mon serveur. J’ai d’abord essayé le package par défaut de ma mageia mais rien ne marchait finalement j’ai installé les tarballs de NUT avec la version 2.7.4 que j’ai compilé avec les options suivantes:

[pastacode lang= »bash » manual= ».%2Fconfigure%20–with-cgi%20–with-cgipath%3D%2Fusr%2Flocal%2Fapache2%2Fcgi-bin%20–prefix%3D%2Fusr%2Flocal%20–with-statepath%3D%2Fvar%2Fstate%2Fups%20–with-user%3Dups%20–with-group%3Dups%20–with-pidpath%3D%2Fvar%2Frun%2Fnut » message= » » highlight= » » provider= »manual »/]

voilà ce que ça donne avant de lancer la compilation

[pastacode lang= »markup » manual= »Configuration%20summary%3A%0A%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%0Abuild%20serial%20drivers%3A%20yes%20%0Abuild%20USB%20drivers%3A%20yes%20%0Abuild%20SNMP%20drivers%3A%20no%20%0Abuild%20neon%20based%20XML%20driver%3A%20no%20%0Aenable%20Avahi%20support%3A%20no%20%0Abuild%20Powerman%20PDU%20client%20driver%3A%20no%20%0Abuild%20IPMI%20driver%3A%20no%20%0Abuild%20Mac%20OS%20X%20meta-driver%3A%20no%20%0Abuild%20i2c%20based%20drivers%3A%20no%20%0Aenable%20SSL%20support%3A%20yes%20(OpenSSL)%0Aenable%20libwrap%20(tcp-wrappers)%20support%3A%20yes%20%0Aenable%20libltdl%20(Libtool%20dlopen%20abstraction)%20support%3A%20yes%20%0Abuild%20nut-scanner%3A%20yes%0Abuild%20CGI%20programs%3A%20yes%20%0Abuild%20and%20install%20documentation%3A%20no%20%0Abuild%20and%20install%20the%20development%20files%3A%20no » message= » » highlight= » » provider= »manual »/]

quant à mon onduleur, quand je le branche sur son port USB,

voilà ce que me remonte journalctl

[pastacode lang= »bash » manual= »mai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20usb%202-1.1%3A%20new%20low-speed%20USB%20device%20number%203%20using%20ehci-pci%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20usb%202-1.1%3A%20New%20USB%20device%20found%2C%20idVendor%3D0665%2C%20idProduct%3D5161%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20usb%202-1.1%3A%20New%20USB%20device%20strings%3A%20Mfr%3D1%2C%20Product%3D2%2C%20SerialNumber%3D3%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20usb%202-1.1%3A%20Product%3A%20USB%20to%20Serial%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20usb%202-1.1%3A%20Manufacturer%3A%20INNO%20TECH%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20usb%202-1.1%3A%20SerialNumber%3A%2020100205%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20mtp-probe%5B5713%5D%3A%20checking%20bus%202%2C%20device%203%3A%20%22%2Fsys%2Fdevices%2Fpci0000%3A00%2F0000%3A00%3A1d.0%2Fusb2%2F2-1%2F2-1.1%22%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20mtp-probe%5B5713%5D%3A%20bus%3A%202%2C%20device%3A%203%20was%20not%20an%20MTP%20device%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20hidraw%3A%20raw%20HID%20events%20driver%20(C)%20Jiri%20Kosina%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20usbcore%3A%20registered%20new%20interface%20driver%20usbhid%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20usbhid%3A%20USB%20HID%20core%20driver%0Amai%2028%2012%3A04%3A33%20mana.kervao.fr%20kernel%3A%20hid-generic%200003%3A0665%3A5161.0001%3A%20hiddev0%2Chidraw0%3A%20USB%20HID%20v1.00%20Device%20%5BINNO%20TECH%20USB%20to%20Serial%5D%20on%20usb-0000%3A00%3A1d.0-1.1%2Finput0″ message= » » highlight= » » provider= »manual »/]

lsusb donne

[pastacode lang= »bash » manual= »Bus%20002%20Device%20003%3A%20ID%200665%3A5161%20Cypress%20Semiconductor%20USB%20to%20Serial » message= » » highlight= » » provider= »manual »/]

Le fichier spécial /dev/hidraw0 est automatiquement créé. A ce stade là j’ai créé un utilisateur et un groupe ups et je fais de donner les bons droits au fichier spécial en créant le fichier /etc/udev/rules.d/99_nut-serialups.rules qui va contenir

[pastacode lang= »bash » manual= »KERNEL%3D%3D%22hidraw0%22%2C%20GROUP%3D%22ups%22%2C%20MODE%3D%220666%22″ message= » » highlight= » » provider= »manual »/]

maintenant on va faire en sorte que les répertoires (à créer éventuellement) /var/run/nut, /var/state/ups et /var/state/ups/upssched appartiennent à l’utilisateur ups et au groupe ups (droits 755).

On va maintenant créer les fichiers de configuration qu’on retrouve sous /usr/local/etc, on commence par ups.conf

[pastacode lang= »bash » manual= »%5Bonduleur%5D%0A%20driver%20%3D%20blazer_usb%0A%20port%20%3D%20%2Fdev%2Fhidraw0%0A%20vendorid%20%3D%200665%0A%20productid%20%3D%205161%0A%20desc%20%3D%20%22Sweex%20PP210%22″ message= » » highlight= » » provider= »manual »/]

A noter qu’on trouvera ici la liste des onduleurs reconnus. On passe maintenant à upsd.conf

[pastacode lang= »bash » manual= »MAXAGE%2015%0ALISTEN%20127.0.0.1%203493%0AMAXCONN%201024″ message= » » highlight= » » provider= »manual »/]

ne pas oublier d’ouvrir le port TCP 3493 sous shorewall (ça vous évitera de perdre une heure comme moi à ne pas comprendre pourquoi la connexion était refusée). Et upsd.users

[pastacode lang= »bash » manual= »%5Badmin%5D%0A%20%20%20%20password%20%3D%20adminpass%0A%20%20%20%20actions%20%3D%20SET%0A%20%20%20%20instcmds%20%3D%20ALL%0A%0A%5Bupsmonitor%5D%0A%20%20%20%20password%20%20%3D%20userpass%0A%20%20%20%20upsmon%20master » message= » » highlight= » » provider= »manual »/]

nut.conf

[pastacode lang= »bash » manual= »MODE%3Dstandalone » message= » » highlight= » » provider= »manual »/]

et pour terminer upsmon.conf

[pastacode lang= »bash » manual= »RUN_AS_USER%20ups%0AMONITOR%20onduleur%40localhost%201%20upsmonitor%20userpass%20master%20%0AMINSUPPLIES%201%0ASHUTDOWNCMD%20%22%2Fsbin%2Fshutdown%20-h%20%2B0%22%0APOLLFREQ%205%0APOLLFREQALERT%205%0AHOSTSYNC%2015%0ADEADTIME%2015%0APOWERDOWNFLAG%20%2Fetc%2Fkillpower%0ARBWARNTIME%2043200%0ANOCOMMWARNTIME%20300%0AFINALDELAY%205″ message= » » highlight= » » provider= »manual »/]

pour le détail des paramètres je vous invite à consulter la doc (copieuse) de NUT, à l’occasion je ferai une page sur mon site FUNIX pour synthétiser tout ça.

On peut maintenant si ça marche, on se connecte sur l’onduleur en tant que root en tapant

blazer_usb -a onduleur -D -u root

et voilà le résultat

[pastacode lang= »bash » manual= »Network%20UPS%20Tools%20-%20Megatec%2FQ1%20protocol%20USB%20driver%200.12%20(2.7.4)%0A%20%20%200.000000%09debug%20level%20is%20’1’%0A%20%20%200.457449%09Supported%20UPS%20detected%20with%20mustek%20protocol%0A%20%20%200.649380%09Vendor%20information%20read%201%20failed%0A%20%20%200.713380%09Vendor%20information%20read%202%20failed%0A%20%20%200.777382%09Vendor%20information%20read%203%20failed%0A%20%20%200.777401%09Vendor%20information%20unavailable%0A%20%20%200.777407%09No%20values%20provided%20for%20battery%20high%2Flow%20voltages%20in%20ups.conf%0A%0A%20%20%200.777426%09Using%20’guestimation’%20(low%3A%2020.800000%2C%20high%3A%2026.000000)!%0A%20%20%200.777433%09Battery%20runtime%20will%20not%20be%20calculated%20(runtimecal%20not%20set) » message= » » highlight= » » provider= »manual »/]

on peut essayer de se connecter en tant qu’utilisateur ups pour voir s’il n’y a pas de problème de droits en tapant

blazer_usb -a onduleur -D -u ups

une fois cette étape franchie, j’ai créé les fichiers suivants sous /usr/lib/systemd/system histoire que les daemons soient lancés automatiquement au démarrage et gérés par systemd. On commence par nut-driver.service

[pastacode lang= »bash » manual= »%5BUnit%5D%0ADescription%3DNetwork%20UPS%20Tools%20-%20power%20device%20driver%20controller%0AAfter%3Dlocal-fs.target%20network.target%0A%0A%5BService%5D%0AExecStart%3D%2Fusr%2Flocal%2Fsbin%2Fupsdrvctl%20start%0AExecStop%3D%2Fusr%2Flocal%2Fsbin%2Fupsdrvctl%20stop%0AType%3Dforking%0A%0A%5BInstall%5D%0AWantedBy%3Dmulti-user.target » message= » » highlight= » » provider= »manual »/]

nut-monitor.service

[pastacode lang= »bash » manual= »%5BUnit%5D%0ADescription%3DNetwork%20UPS%20Tools%20-%20power%20device%20monitor%20and%20shutdown%20controller%0AAfter%3Dlocal-fs.target%20network.target%20nut-server.service%0A%0A%5BService%5D%0AExecStart%3D%2Fusr%2Flocal%2Fsbin%2Fupsmon%0AType%3Dforking%0A%0A%5BInstall%5D%0AWantedBy%3Dmulti-user.target » message= » » highlight= » » provider= »manual »/]

et enfin nut-server.service

[pastacode lang= »bash » manual= »%5BUnit%5D%0ADescription%3DNetwork%20UPS%20Tools%20-%20power%20devices%20information%20server%0AAfter%3Dlocal-fs.target%20network.target%20nut-driver.service%0ARequires%3Dnut-driver.service%0ABefore%3Dnut-monitor.service%0A%0A%5BService%5D%0AExecStart%3D%2Fusr%2Flocal%2Fsbin%2Fupsd%20%0AType%3Dforking%0A%0A%5BInstall%5D%0AWantedBy%3Dmulti-user.target » message= » » highlight= » » provider= »manual »/]

on veillera à activer ses nouveaux services en tapant

systemctl enable nut-driver
systemctl enable nut-monitor
systemctl enable nut-serveur

on y est presque ! On lance maintenant le premier daemon upsdrvctl qui contrôle l’interfaçage physique avec l’onduleur

systemctl enable nut-driver

et voilà la trace que nous donne journalctl

[pastacode lang= »bash » manual= »mai%2028%2015%3A34%3A08%20mana.kervao.fr%20upsdrvctl%5B5792%5D%3A%20Supported%20UPS%20detected%20with%20mustek%20protocol%0Amai%2028%2015%3A34%3A08%20mana.kervao.fr%20upsdrvctl%5B5792%5D%3A%20Vendor%20information%20unavailable%0Amai%2028%2015%3A34%3A08%20mana.kervao.fr%20upsdrvctl%5B5792%5D%3A%20No%20values%20provided%20for%20battery%20high%2Flow%20voltages%20in%20ups.conf%0Amai%2028%2015%3A34%3A08%20mana.kervao.fr%20upsdrvctl%5B5792%5D%3A%20Using%20’guestimation’%20(low%3A%2020.800000%2C%20high%3A%2026.000000)!%0Amai%2028%2015%3A34%3A08%20mana.kervao.fr%20upsdrvctl%5B5792%5D%3A%20Battery%20runtime%20will%20not%20be%20calculated%20(runtimecal%20not%20set)%0Amai%2028%2015%3A34%3A08%20mana.kervao.fr%20blazer_usb%5B5799%5D%3A%20Startup%20successful%0Amai%2028%2015%3A34%3A08%20mana.kervao.fr%20upsdrvctl%5B5792%5D%3A%20Network%20UPS%20Tools%20-%20UPS%20driver%20controller%202.7.4%0A » message= » » highlight= » » provider= »manual »/]

on lance maintenant le deuxième daemon upds qui fait l’interface entre le daemon upsdrvctl et les clients

systemctl enable nut-server

et voilà la trace que nous donne journalctl

[pastacode lang= »bash » manual= »mai%2028%2017%3A04%3A02%20mana.kervao.fr%20upsd%5B26712%5D%3A%20%2Fvar%2Fstate%2Fups%20is%20world%20readable%0Amai%2028%2017%3A04%3A02%20mana.kervao.fr%20upsd%5B26712%5D%3A%20Connected%20to%20UPS%20%5Bonduleur%5D%3A%20blazer_usb-onduleur%0Amai%2028%2017%3A04%3A02%20mana.kervao.fr%20upsd%5B26714%5D%3A%20Startup%20successful%0Amai%2028%2017%3A04%3A02%20mana.kervao.fr%20upsd%5B26712%5D%3A%20listening%20on%20127.0.0.1%20port%203493%0Amai%2028%2017%3A04%3A02%20mana.kervao.fr%20upsd%5B26712%5D%3A%20%2Fvar%2Fstate%2Fups%20is%20world%20readable%0Amai%2028%2017%3A04%3A02%20mana.kervao.fr%20upsd%5B26712%5D%3A%20Connected%20to%20UPS%20%5Bonduleur%5D%3A%20blazer_usb-onduleur » message= » » highlight= » » provider= »manual »/]

il y a un petit mot bizarre car le répertoire /var/state/ups n’est pas à 777, on ignore donc. On lance maintenant nut-monitor qui permet d’interroger upsd pour connaître l’état de l’onduleur et surtout lancer les commandes spécifiques en fonction des évènements, en tapant

systemctl start nut-monitor

et voilà la trace que nous donne journalctl

[pastacode lang= »bash » manual= »mai%2028%2017%3A22%3A56%20mana.kervao.fr%20upsmon%5B27356%5D%3A%20UPS%3A%20onduleur%40localhost%20(master)%20(power%20value%201)%0Amai%2028%2017%3A22%3A56%20mana.kervao.fr%20upsmon%5B27358%5D%3A%20Startup%20successful%0Amai%2028%2017%3A22%3A56%20mana.kervao.fr%20upsmon%5B27356%5D%3A%20Using%20power%20down%20flag%20file%20%2Fetc%2Fkillpower%0Amai%2028%2017%3A22%3A56%20mana.kervao.fr%20upsd%5B26714%5D%3A%20User%20upsmonitor%40127.0.0.1%20logged%20into%20UPS%20%5Bonduleur%5D » message= » » highlight= » » provider= »manual »/]

pour voir si tout fonctionne je tape simplement upsc -L qui renvoie

[pastacode lang= »bash » manual= »onduleur%3A%20Sweex%20PP210″ message= » » highlight= » » provider= »manual »/]

maintenant on dispose d’un outil accessible via un navigateur, pour cela il faut disposer d’un serveur apache. On commence donc par déplacer les fichiers html qui sont sous /usr/local/html sous /usr/local/apache2/htdoc (ou n’importe où accessible via apache). On enlève bien sûr le sample à la fin du nom des fichiers. Le fichier /usr/local/etc/hosts.conf contiendra

[pastacode lang= »bash » manual= »MONITOR%20onduleur%40localhost%20%22mon%20onduleur%22″ message= » » highlight= » » provider= »manual »/]

on modifie également le fichier /usr/local/etc/upsset.conf qui contiendra

[pastacode lang= »bash » manual= »I_HAVE_SECURED_MY_CGI_DIRECTORY » message= » » highlight= » » provider= »manual »/]

on veillera à créer un fichier .htaccess sous /usr/local/apache2/cgi-bin permettant seulement aux machines du réseau local (192.168.0.X) de pouvoir accéder aux scripts CGI de NUT

[pastacode lang= »bash » manual= »%3CFiles%20upsset.cgi%3E%0A%20%20%20deny%20from%20all%0A%20%20%20allow%20from%20192.168.0.1%2F24%0A%3C%2FFiles%3E » message= » » highlight= » » provider= »manual »/]

dans le répertoire /usr/local/apache2/cgi-bin on trouve les scripts CGI upsimage.cgi, upsset.cgi et upsstats.cgi de de NUT. Et voilà ce que ça donne en cliquant sur Statistics

et en cliquant sur « mon onduleur »

dans Settings on a accès à certaines commandes (il faudra saisir préalablement le mot de passe admin défini sous upsd.users).

Maintenant y a plus qu’à tester ! Et c’est là que j’ai aperçu furtivement en débranchant la prise de l’onduleur le message suivant

[pastacode lang= »bash » manual= »mai%2028%2017%3A37%3A06%20mana.kervao.fr%20upsmon%5B27359%5D%3A%20UPS%20onduleur%40localhost%20on%20battery%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0ADiffusion%20de%20message%20de%20ups%40mana.kervao.fr%20(somewhere)%20(Sun%20May%2028%2017%3A37%3A06%20201″ message= » » highlight= » » provider= »manual »/]

sauf que mon onduleur est tombé dans la foulée ! Il faut que croire que je n’avais pas qu’un problème de batteries. Donc pour l’instant je n’ai pu valider totalement toute l’installation de NUT, il y aura sans doute un deuxième épisode après avoir investi dans un nouvel onduleur.

Laisser un commentaire