Contenu | Rechercher | Menus
Selon les tags présents sur cette page, les informations qu'elle contient n'ont pas été vérifiées depuis Ubuntu 12.04 LTS.
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.

À partir de Ubuntu 9.04, la version de nut est issue de la branche 2.4. Cette présentation est basée sur la version 2.4.1-2 livrée avec Ubuntu 9.04 Jaunty.

Les options des fichiers de configuration de la version 2.4 ont été modifiées par rapport à la version 2.2 fournie avec Ubuntu 8.10 et antérieurs. Consulter le tutoriel de Olivier Van Hoof sur le site developpez.com (fr) pour réaliser l'installation dans cette version de 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

Si ce n'est pas le cas, reportez-vous au paragraphe « Problèmes & solutions - Le périphérique USB n'appartient pas au groupe nut » de cette page pour corriger ce problème !

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.

Le fichier de configuration nut.conf permet depuis la version 2.4 de NUT, d'unifier les configurations sur les distributions Debian ou RedHat. Ainsi il n'est plus nécessaire de créer un fichier /etc/default/nut pour indiquer les démons à lancer.

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.

Remplacer les valeurs "adminpass" et "userpass" pour plus de sécurité !

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

Le fichier doit comporter un paramètre MONITOR et MINSUPPLIES au minimum.

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.

Pour fixer la valeur du paramètre DEADTIME :
Prendre la plus grande valeur entre POLLFREQ et POLLFREQALERT et multiplier par 3.

Dans certains cas, il est nécessaire de modifier la commande d'extinction. En effet, il peut être nécessaire de rajouter un sudo pour que celle-ci soit prise en compte :
SHUTDOWNCMD "sudo /sbin/shutdown -h +0"

Augmenter la valeur de POLLFEQ permet :

  • 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

Sous Ubuntu 9.04 Jaunty Jackalope, NUT indique qu'aucun démon n'est lancé, malgré la présence des processus. Ce bug n'apparait plus depuis Ubuntu 9.10 Karmic Koala.

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 :

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

Adaptez le numéro du bus (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 :


draco31.fr 2009/06/23 22:50

1) en anglais UPS (Uninterruptible Power Supply) signifie onduleur
2) Le pilote de l'onduleur doit pouvoir répondre dans un temps inférieur. Si ce n'est pas le cas, augmenter la valeur de MAXAGE
3) OL = On Line
OB = On Battery
LB = Low Battery


Le contenu de ce wiki est sous licence : CC BY-SA v3.0