Table des matières

, , ,

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 :

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 :

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 :

É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"

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

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 :

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 :

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é :

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é :

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