Apportez votre aide…
Network UPS Tools (NUT)
NUT est un ensemble d'outils permettant de monitorer un système relié à un ou des onduleurs1). Il se compose de plusieurs éléments :
- le démon nut lancé au démarrage du système
- le démon upsd qui permet d'interroger l'onduleur, il est lancé sur le PC relié à l'onduleur
- le démon upsmon qui permet de monitorer et lancer les commandes nécessaires sur le réseau ondulé (arrêt de machines …)
- différents programmes pour envoyer des commandes manuellement à l'onduleur : upsc, upsdrvctl …
upsd peut communiquer avec plusieurs onduleurs si nécessaire.
upsmon interroge à intervalle régulier la machine du réseau sur laquelle est lancée upsd.
Pour une configuration domestique, upsd et upsmon sont lancés sur la même machine, elle même connectée à l'onduleur. C'est la configuration supposée tout au long de cette présentation pour les exemples de fichiers de configuration.
Pré-requis
Disposer d'un onduleur reconnu par NUT.
Consulter la liste des onduleurs supportés par NUT et vérifier que le vôtre est dans la liste. Noter le nom du pilote associé à votre modèle dans la 3ième colonne.
Installation
Installer le paquet nut.
Configuration
Onduleur USB
Si l'onduleur est branché en USB, débrancher puis rebrancher le cable USB.
Repérer l'emplacement de l'onduleur avec lsusb
.
Par exemple, lsusb
doit détecter l'onduleur (ou le convertisseur USB>Série) :
Bus 001 Device 008: ID 045e:0745 Microsoft Corp. Bus 001 Device 007: ID 0ac8:301b Z-Star Microelectronics Corp. ZC0301 WebCam Bus 001 Device 002: ID 04cc:1520 Philips Semiconductors Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 006: ID 0665:5161 Cypress Semiconductor USB to Serial Bus 002 Device 005: ID 04f9:01ce Brother Industries, Ltd DCP-135C Bus 002 Device 004: ID 0db0:6970 Micro Star International Bluetooth adapter Bus 002 Device 003: ID 046d:c50e Logitech, Inc. MX-1000 Cordless Mouse Receiver Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Ici, l'onduleur est connecté au bus n°002, et est le périphérique n°006.
Bus 002 Device 006: ID 0665:5161 Cypress Semiconductor USB to Serial
Vérifier les droits sur le périphérique (remplacer 002 par le bus qui convient pour votre configuration).
ls -l /dev/bus/usb/002
total 0 crw-rw-r-- 1 root root 189, 128 2009-06-20 08:31 001 crw-rw-r-- 1 root root 189, 130 2009-06-21 14:58 003 crw-rw-r-- 1 root root 189, 131 2009-06-20 08:31 004 crw-rw-r-- 1 root root 189, 132 2009-06-20 08:31 005 crw-rw-r-- 1 root nut 189, 133 2009-06-21 14:58 006
Le périphérique 006 est bien associé au groupe nut.
crw-rw-r-- 1 root nut 189, 133 2009-06-21 14:54 006
Configuration du service NUT
NUT doit être installé sur toutes les machines du réseau qui :
- communiquent avec les onduleurs,
- monitorent le réseau ondulé (envoi de mail, notification utilisateurs …),
- doivent lancer des commandes d'arrêt de serveur.
Cependant, upsd et upsmon n'ont pas à être lancés dans tous les cas. Le fichier de configuration nut.conf permet d'identifier à NUT le cas présent.
nut.conf
Le fichier nut.conf permet de déterminer le comportement du démon NUT. Il ne contient que le paramètre MODE qui peut prendre les valeurs suivantes :
- none : C'est la valeur par défaut après l'installation du paquet, elle indique que NUT n'a pas été configuré.
- standalone :
- Dans ce mode, l'onduleur est relié à la machine actuelle.
- Le monitorage de l'onduleur est effectué depuis cette même machine.
- Le démon nut doit lancer upsd et upsmon (en mode "master").
- netserver :
- Dans ce mode, l'onduleur est relié à la machine actuelle.
- La gestion de l'onduleur est effectuée depuis un poste client sur le réseau.
- Le démon nut doit lancer upsd et upsmon (en mode serveur, c'est à dire en tant que "master").
- netclient :
- Dans ce mode, l'onduleur n'est pas relié à la machine actuelle.
- La gestion de l'onduleur est réalisée depuis la machine actuelle vers la machine à laquelle est connectée l'onduleur via le réseau.
- Le démon nut doit lancer uniquement upsmon (en mode client, c'est à dire en tant que "slave").
Éditer le fichier /etc/nut/nut.conf
et modifier la valeur du paramètre MODE.
Pour une configuration domestique, le mode standalone est le plus adapté.
MODE=standalone
Configuration du démon upsd
upsd est le démon responsable de la communication avec l'onduleur. Il est lancé lorsque NUT est configuré dans le mode standalone ou netserver. 3 fichiers de configuration sont nécessaires : ups.conf, upsd.conf et upsd.users.
ups.conf
Le fichier /etc/nut/ups.conf
permet de déclarer les différents onduleurs.
Éditer le fichier /etc/nut/ups.conf
et renseigner les paramètres pour chaque onduleur.
Des explications sont disponibles dans le fichier d'exemple /etc/nut/ups.conf.sample.
[myups] driver = megatec_usb port = auto desc = "Mustek PowerMust Office 650"
- Le nom entre crochets est libre, mais doit être un mot unique : il définit le nom de l'onduleur sur le réseau.
- Le paramètre de driver doit être le pilote associé à votre modèle d'onduleur (voir ici).
upsd.conf
Configuration pour le démon upsd.
Éditer le fichier /etc/nut/upsd.conf
et renseigner les paramètres nécessaires.
Des explications sont disponibles dans le fichier d'exemple /etc/nut/upsd.conf.sample.
MAXAGE 15 LISTEN 127.0.0.1 3493 MAXCONN 1024
- MAXAGE : permet de définir l'intervalle maximum au-delà duquel l'état de l'onduleur sera considéré comme périmée.2)
- LISTEN : permet de déclarer les PC qui pourront commander les onduleurs via upsd
- MAXCONN : permet de définir le nombre de clients, d'onduleurs et d'adresses maximum supportés.
upsd.users
Ce fichier permet de configurer les accès au démon upsd.
Seul les utilisateurs présents dans upsd.users seront habilités à connaitre l'état de l'onduleur.
Éditer le fichier /etc/nut/upsd.users
et renseigner les paramètres pour l'administrateur et au moins un utilisateur de type "master".
Des explications sont disponibles dans le fichier d'exemple /etc/nut/upsd.users.sample.
[admin] password = adminpass actions = SET instcmds = ALL [upsmonitor] password = userpass upsmon master
"upsmonitor" peut être modifié à votre guise mais doit rester un mot unique. Il identifie le nom d'utilisateur associé au moniteur. La valeur "master" ou "slave" du paramètre upsmon permet de définir le jeu de commandes par défaut auquel l'utilisateur aura droit.
Configuration du démon upsmon
Le démon upsmon permet d'interroger à travers le réseau les différents démon upsd pour connaître l'état du réseau ondulé. upsmon permet également de lancer des commandes spécifiques lorsque certains événements surviennent, comme l'extinction des machines lorsque la batterie des onduleurs devient trop faible.
upsmon.conf
Ce fichier permet de configurer upsmon. Il faut y déclarer les caractéristiques du réseau ondulé et des différents démons upsd lancés sur les machines du réseau.
Éditer le fichier /etc/nut/upsmon.conf
, et ajouter les paramètres suivants (les valeurs indiquées sont celles par défaut).
Des explications sont disponibles dans le fichier d'exemple /etc/nut/upsmon.conf.sample.
MONITOR myups@localhost 1 upsmonitor userpass "master" MINSUPPLIES 1 FINALDELAY 5 SHUTDOWNCMD "/sbin/shutdown -h +0" ------------------------------------------------ # POLLFREQ <n> # Fréquence d'interrogation en secondes en fonctionnement normal de l'onduleur. # La valeur par défaut est de 5 secondes. POLLFREQ 5 ------------------------------------------------ # POLLFREQALERT <n> # Fréquence d'interrogation en secondes pendant que l'onduleur est sur batterie. # La valeur par défaut est de 5 secondes. POLLFREQALERT 5 ------------------------------------------------ HOSTSYNC 15 DEADTIME 15 POWERDOWNFLAG /etc/killpower RBWARNTIME 43200 NOCOMMWARNTIME 300
La déclaration des différents démons upsmon serveurs à écouter et de la puissance nécessaire au réseau ondulé se fait grâce aux options suivantes :
- MONITOR <system> <powervalue> <username> <password> <type>
- <system> : définit le nom d'un onduleur et de la machine qui le contrôle. Par défaut, l'onduleur est supposé accessible depuis la machine actuelle (localhost).
- <powervalue> : un entier qui définit le nombre d'onduleurs contrôlés. Sauf cas particulier, la valeur est supposée de 1.
- <username> : le nom d'utilisateur utilisé pour interroger upsd. Il doit être définit dans le fichier upsd.users sur la machine qui contrôle l'onduleur.
- <password> : le mot de passe associé à l'utilisateur sur la machine qui contrôle l'onduleur.
- <type> : le type de monitorage tel que définit dans le fichier upsd.users de la machine qui contrôle l'onduleur.
- MINSUPPLIES : un entier qui définit le nombre d'onduleurs nécessaires pour que le système fonctionne ; en général, 1 onduleur.
Lorsque le nombre d'onduleurs nécessaires pour maintenir le système (MINSUPPLIES) devient inférieur au nombre d'onduleurs en statut "sur secteur" (ONLINE) ou "sur batterie" (ONBATT) sans être en statut "batterie faible" (LOWBATT), le réseau ondulé entre dans un état critique. En d'autres termes, le dernier onduleur pour maintenir le système vient de passer en statut "batterie faible" (LOWBATT), et l'alimentation va donc cesser prochainement : le but est donc d'éteindre proprement le système pour éviter une perte de données, il n'y a plus le temps d'attendre que le courant revienne ! À ce moment là, les paramètres suivants seront utilisés :
- FINALDELAY : délai en secondes entre la notification aux utilisateurs et le lancement de la commande d'arrêt du système.
- HOSTSYNC : délai laissé aux autres upsmon sur les postes clients pour s'arrêter correctement, au delà de ce délai l'upsmon serveur est stoppé et ne répond plus aux clients.
- SHUTDOWNCMD : définit la commande qui sera exécutée pour éteindre la machine actuelle.
- POWERDOWNFLAG : définit le fichier qui sera écrit juste avant la procédure d'arrêt. Il est possible de tester la présence de ce fichier dans vos scripts init pour accélérer la phase d'arrêt.
Pour permettre à l'upsmon client d'interroger le démon upsmon serveur ou le démon upsd et obtenir des informations "fraiches" sur l'état de (ou des) l'onduleur(s), il faut vérifier les paramètres suivants, et les adapter en fonction du pilote utilisé :
- POLLFREQ : intervalle de temps avant rafraîchissement des données sur l'état de l'onduleur.
- POLLFREQALERT : intervalle de temps avant rafraichissement une fois l'onduleur en statut "sur batterie" (ONBATT). Doit être inférieur ou égal à POLLFREQ.
- DEADTIME : délai maximal pendant lequel un onduleur peut être déclaré "absent" avant d'être déclaré "mort". Passé ce délai, si l'onduleur était précédemment en statut "sur batterie" (ONBATT) il sera considéré en statut "batterie faible" (LOWBATT), ce qui peut causer l'arrêt du système. Le délai doit être un multiple de POLLFREQ et POLLFREQALERT.
- NOCOMMWARNTIME : délai d'attente avant notification de la perte de communication avec l'onduleur.
- RBWARNTIME : lorsqu'un onduleur indique un changement de batterie, une notification sera envoyée toutes les RBWARNTIME secondes.
Prendre la plus grande valeur entre POLLFREQ et POLLFREQALERT et multiplier par 3.
SHUTDOWNCMD "sudo /sbin/shutdown -h +0"
- d'éviter un trop grand nombre de notifications si votre réseau électrique subit des micro-coupures,
- de désengorger le réseau local si votre débit est faible ou si vous avez un grand nombre de machines.
Par contre, si la valeur est trop élevée, vous risquez de perdre des informations d'état importantes (passage sur batterie …).
Réduire la valeur permet d'obtenir un suivi plus fin dans l'évolution de l'état de l'onduleur (charge, etc) mais il ne faut pas descendre en dessous du seuil de rafraichissement du pilote (en général de 2 secondes).
Utilisation
Le démon NUT sera lancé au prochain redémarrage, mais il est possible après la configuration de tester la communication entre le pilote et l'onduleur.
Lancer le démon NUT manuellement
De cette façon, le démon upsd et le moniteur upsmon seront lancés simultanément :
sudo invoke-rc.d nut start
Interroger l'état des démons
Une fois les démons lancés, interroger leur état :
sudo invoke-rc.d nut status
Lancer le pilote manuellement
Pour lancer les pilotes des onduleurs manuellement :
upsdrvctl start
ou pour ne lancer qu'un seul onduleur :
upsdrvctl start myups
En cas de problème, il est possible de lancer le pilote en mode verbeux (voir très verbeux) :
upsdrvctl -DDDD start
Obtenir la liste des onduleurs déclarés
Pour connaitre la liste des onduleurs déclarés sur la machine :
upsc -L
ou si l'onduleur est sur une machine distante ayant pour alias nom_de_la_machine_distante :
upsc -L nom_de_la_machine_distante
Connaître l'état d'un onduleur
Pour connaitre l'état d'un onduleur :
upsc myups
ou si l'onduleur est sur une machine distante :
upsc myups@nom_de_la_machine_distante
Pour connaître un paramètre en particulier, ici le statut de l'onduleur3) :
upsc myups ups.status
Envoyer une commande à l'onduleur
Pour connaître la liste des commandes supportées par le pilote et l'onduleur :
upscmd -l myups@localhost
Par exemple pour le pilote megatec_usb :
Instant commands supported on UPS [myups]: beeper.toggle - Toggle the UPS beeper load.off - Turn off the load immediately load.on - Turn on the load immediately reset.input.minmax - Reset minimum and maximum input voltage status reset.watchdog - Reset watchdog timer shutdown.return - Turn off the load and return when power is back shutdown.stayoff - Turn off the load and remain off shutdown.stop - Stop a shutdown in progress test.battery.start - Start a battery test test.battery.start.deep - Start a deep battery test test.battery.stop - Stop the battery test
Pour envoyer une commande,
upscmd -u <username> -p <password> <system> <command>
Par exemple, pour demander un test de batterie sur l'onduleur "myups" situé sur la machine actuelle :
upscmd -u admin -p adminpass myups@localhost test.battery.start
Et ensuite ?
Il est possible de configurer plus en détail upsmon pour la notification de changement d'état, ainsi que pour les actions à réaliser. Pour aider dans la planification de ces actions (utilisation de timer), le programme upssched est installé avec le paquet NUT. Le tutoriel d'Olivier Van Hoof peut vous aider dans sa mise en place.
Pour éviter de lancer continuellement la commande "upsc" pour connaître l'état de votre onduleur, il existe plusieurs clients :
- soit par une interface fenêtrée : KNutClient (pour KDE), NUT-Monitor (basé sur la classe python PyNut), MGE UPS SYSTEMS Personal Solution Pac, etc
- soit par une interface web : via l'installation du paquet nut-cgi (tuto ici [en]), via un script php, etc.
Problèmes & solutions
Le périphérique USB n'appartient pas au groupe nut
Si le périphérique USB correspondant à l'onduleur n'a pas été associé au groupe « nut », vous devrez changer les privilèges donnés par défaut.
Par exemple, si vous obtenez :
ls -l /dev/bus/usb/002
crw-rw-r-- 1 root vboxusers 189, 133 2009-06-21 14:58 006
Si seul NUT doit accéder à l'onduleur
Dans ce cas, vous pouvez fixer le groupe du périphérique correspondant à l'onduleur avec la commande :
sudo chgrp nut /dev/bus/usb/002/006
002
) et le numéro de périphérique (006
) selon votre cas.
Voir le paragraphe Onduleur USB pour plus de détail.
Si NUT ainsi que le groupe actuel doivent accéder à l'onduleur
Dans le cas où vous souhaiteriez monitorer l'onduleur dans VirtualBox, il faut laisser le groupe vboxusers propriétaire du périphérique, et ajouter l'utilisateur nut au groupe vboxusers :
sudo adduser nut vboxusers
Onduleur non détecté
Si malgré avoir indiqué le bon pilote dans le fichier /etc/nut/ups.conf
, vous avez l'erreur « Data Stale », ou que votre onduleur USB n'est pas détecté :
- Créez un périphérique spécial :
sudo mknod /dev/usb/hiddev0 c 180 96
- Indiquer le chemin vers ce périphérique dans le fichier
/etc/nut/ups.conf
:[myups] driver = megatec_usb port = /dev/usb/hiddev0 desc = "Mustek PowerMust Office 650"
- Relancer les démons NUT pour prendre en compte les modifications :
sudo invoke-rc.d nut restart
Désinstallation
Il vous suffit de supprimer le paquet NUT.
Les fichiers de configuration présents dans le dossier /etc/nut/
sont à supprimer manuellement.
Liens
Pour plus d'informations sur la mise en place de NUT :
- Le site officiel : http://www.networkupstools.org [en]
- Le tutoriel Installation et gestion d'un UPS USB en réseau sous linux [fr] d'Olivier Van Hoof.
- Installation de NUT sur plusieurs machines : Linux UPS Without Tears [en] par A. Lizard.
— draco31.fr 2009/06/23 22:50