Ressources en vrac
Doc debian-fr.xyz
Doc officielle Debian
Doc ArchLinux
Doc Ubuntu, un peu vieille
https://ignace72.eu/utiliser-un-onduleur-eaton-sur-gnu-linux.html
Présentation
NUT (Network UPS Tools) est un ensemble de logiciels qui servent à surveiller les onduleurs et réagir à leur état. Il y’a :
- le démon nut-driver (commande
upsdrvctl
) qui communique avec l’onduleur
- le démon nut-server (commande
upsd
) qui permet de répondre à des requêtes (locales ou réseau)
Ces 2 démons doivent être lancés sur le poste qui communique en USB avec l’onduleur.
- le logiciel
upsc
qui va interroger les démons upsd (en local ou sur d’autres postes)
- le démon upsmon qui permet d’interroger différents démons upsd et lancer des alertes
Dépôt git du projet
Dans l’exemple ici, il y’a un seul pc qui contrôlera NUT et qui sera relié à l’onduleur ; on ignore donc toutes les configurations réseau.
L’onduleur utilisé est un Eaton Ellipse ECO 800.
Install de NUT et vérification du branchement de l’onduleur
apt install nut
sous Debian.
C’est un paquet virtuel qui dépend de nut-client et nut-server.
nut-client contient entre autres les exécutables upsc
, upscmd
, upsmon
.
nut-server contient entre autre upsd
, upsdrvctl
.
Brancher l’onduleur via USB.
lsusb donne :
Bus 006 Device 005: ID 0463:ffff MGE UPS Systems UPS
On peut vérifier que le fichier appartient bien au groupe nut (adapter les chiffres au résultat ci-dessus) :
ls -l /dev/bus/usb/006/005
Pilote de l’onduleur
sudo nano /etc/nut/ups.conf
Chaque onduleur doit être défini sous la forme
[upsname]
driver = <drivername>
port = <portname>
avec éventuellement d’autres options facultatives. On peut mettre auto
pour le port. Le champ desc
semble être là pour mettre une description plus complète commentaire).
Pour identifier la liste des pilotes en fonction du matériel, consulter cette page.
Pour un Eaton Ellipse Eco 800, c’est usbhid-ups
. Si on clique sur le nom du pilote, on accède à ses otions de configuration.
On peut aussi tester la commande nut-scanner
, qui renvoie un bloc de configuration auto-detecté (+ d’infos avec sudo).
Cela me donne le bloc suivant à ajouter à la fin du fichier :
[eaton800]
driver = usbhid-ups
port = auto
desc = "Eaton Ellipse ECO 800"
Lancement
On peut vérifier en lançant manuellement :
sudo upsdrvctl start eaton800
Le processus sera visible via
ps aux | grep usbhid
On peut lancer le service
sudo service nut-driver start
mais visiblement, si le service nut-server n’est pas en route, il quitte au bout de quelques secondes.
Configuration du démon upsd
Celui-ci sert à mettre les informations de l’onduleur à disposition de clients.
Lancement manuel
À fin de compréhension et de debug. On peut lancer upsd manuellement avec le chemin
/usr/lib/nut/upsd
La commande upsd intégrée dans le path (/usr/sbin/) est un script qui va lancer la commande ci-dessus uniquement si la configuration du fichier upsd.conf autorise le lancement.
Si on a l’erreur Can't connect to UPS [...]
au lancement, c’est probablement que le processus driver (upsdrvctl) n’est pas lancé.
Sinon on doit avoir Connected to UPS [...]
On peut vérifier le bon lancement du processus via
ps aux | grep upsd | grep nut
Lancement via service
Cette méthode permettra le démarrage automatique de l’ensemble des services nut.
sudo nano /etc/nut/nut.conf
mettre MODE=standalone
On démarre le service :
sudo service nut-server start
Utilisateur
Il faut définir (au moins) un utilisateur dans upsd car une authentification sera nécessaire pour effectuer certaines commandes, notamment celles d’upscmd qui permettent de contrôler l’onduleur (bip, extinction etc).
Pour ceci,
sudo nano /etc/nut/upsd.users
et ajouter à la fin un bloc par utilisateur, de type :
[myadmin]
password = mypass
#allowfrom = localhost
actions = SET
actions = FSD
instcmds = all
upsmon master
Détail des options : man upsd.users
(ou https://linux.die.net/man/5/upsd.users )
Actuellement (2022), fsd (forced shutdown) et set (définir des variables sur l’onduleur) sont les 2 seules actions.
instcmds sont les options disponibles dans upscmd -l
.
Logiciels clients
upsrw ??
upscmd
upscmd
permet de s’adresser directement à l’onduleur.
upscmd -l eaton800
pour voir les commandes supportées par l’onduleur (par exemple contrôler le bip, forcer l’extinction etc)
upscmd eaton800 command:enable
pour lancer la commande en question sur l’onduleur
Sur mon Ellipse ECO 800, il semlble que beeper.disable n’ait pas d’effet, et que load.off et shutdown aient le même effet : couper les prises de courant de l’onduleur ET éteindre l’onduleur, le rendant injoignable sans rallumage manuel de l’onduleur.
upsc
upsc
permet de s’adresser à un démon upsd.
upsc -L [host]
pour lister tous les onduleurs détectés sur host ; si l’host n’est pas spécifié, c’est localhost.
Si on a le message d’erreur Error: Connection failure: Cannot assign requested address
, c’est que upsc n’arrive pas à communiquer avec upsd ; soit que ce dernier n’est pas lancé, soit qu’il n’accepte pas la requête (voir dans ce cas la directive LISTEN du fichier upsd.conf
, même s’il me semble qu’il n’est pas nécessaire de la configurer si tout se fait en local sur 1 seul poste).
upsc eaton800[@host]
pour voir les données actuelles de l’onduleur ; on peut quérir un seul attribut en le mentionnant ; par exemple
upsc eaton800 ups.status
qui peut être OL (OnLine, sur secteur), OB (OnBattery)
ou encore
upsc eaton800 battery.charge
Si non a l’erreur Error: Driver not connected
, c’est que upsc arrive à communiquer avec upsd, mais que upsd n’arrive pas à communiquer avec le pilote (par exemple processus pilote qui a été tué).
Si prise USB débranchée -> “Error: Data stale”
Monitoring automatique - upsmon
upsmon
est le composant qui va surveiller l’état de l’onduleur, et lancer des actions selon l’état (surt batterie, batterie critique etc).
On définit au moins 1 onduleur à surveiller :
sudo nano /etc/nut/upsmon.conf
Le fichier documente chaque section.
Il faut une ligne MONITOR par onduleur ; par exemple
MONITOR eaton800@localhost 1 myadmin mypass master
Le “1” correspond au nombre d’alims qui sont alimentés par l’onduleur en question ; pour la plupart des pcs standard, qui n’ont qu’une seule alim, ce sera 1.
On peut toutefois entrer “0” si le pc surveille l’onduleur mais n’est pas branché dessus ; il effectuera les actions d’alerte (mail etc.) mais ne s’éteindra pas en cas de batterie critique. En ca cas, il faut aussi définir la variable MINSUPPLIES
à 0 (pour déclarer que le poste peut fonctionner sans aucun onduleur).
master & slave
En général, un poste branché sur l’onduleur ET capable de communiquer avec lui sera considéré comme master ;
Un poste branché sur l’onduleur mais sans communication de données sera considéré comme slave.
En action automatique, un poste master ne s’éteindra que lorsque tous les slaves seront éteints.
NOTIFYCMD
https://networkupstools.org/docs/user-manual.chunked/ar01s07.html
Toujours dans upsmon.conf
, on peut définir la commande appelée pour informer l’admin lorsqu’un événement se produit (coupure courant, batterie faible etc). C’est le paramètre NOTIFYCMD.
Cette commande ne sera exécutée que pour les alertes possédant le flag EXEC !! (voir plus bas)
Ce peut être un script custom, ou bien le planificateur intégré à NUT (upssched). Le message de l’événement sera envoyé à cet exécutable en tant que 1er et seul argument.
Penser aux droits d’accès ! La commande sera exécutée par l’utilisateur nut (sur Debian), il doit pouvoir y accéder en exécution.
NOTIFYMSG
Permet de personnaliser le message associé à chaque alerte.
NOTIFYFLAGS
Définit le type d’actions à effectuer pour chaque type d’alerte. Il y’a :
- WALL : prévient chaque utilisateur sur le système
- SYSLOG : inscrit dans le syslog
- EXEC : lance la commande définie à NOTIFYCMD
- IGNORE : ne rien faire
Il faut noter FLAG+FLAG+FLAG, par exemple
EXEC+SYSLOG+WALL
Lancement via service
sudo service nut-client start
upssched
upssched est un script qui permet de gérer la planification des alertes plus finement. Par exemple de définir un délai avant de déclencher l’alerte, pour ne pas êztre prévenu en cas de micro-coupure de courant.
On le configure via le fichier /etc/nut/upssched.conf
.
Je n’aborde pas son usage ici.
GUI
nut-monitor
nut-cgi (interface web)
Journaux et contrôle des services
Voir les journaux de nut-driver (upsdrvctl) :
sudo journalctl -u nut-driver
sudo service nut-driver status
Voir les journaux de nut-server (upsd) :
sudo journalctl -u nut-server
sudo service nut-server status
Voir les journaux de nut-client (nut-monitor, upsmon) :
sudo journalctl -u nut-monitor
sudo service nut-monitor status
sudo service nut-client status
sudo service ups-monitor ??