Modifications entre les versions 2 et 24 (s'étendant sur 22 versions)
Version 2 à la date du 2007-02-22 17:39:57
Taille: 6282
Commentaire: précision port de communication
Version 24 à la date du 2013-09-08 12:40:29
Taille: 9109
Éditeur: WillyManga
Commentaire: noms des paquets sous wheezy
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
Cette page décrit la configuration de ''nut'' mise en place à Montréal, mais est suffisament générique pour être adaptée partout. Cette page décrit la configuration de ''nut'' pour [[Debian/Squeeze]].
Ligne 6: Ligne 6:
 * une bonne doc en français pour ["Debian"], claire et précise http://linux.developpez.com/cours/upsusb/  * une bonne doc en français pour [[Debian]], claire et précise http://linux.developpez.com/cours/upsusb/
Ligne 11: Ligne 11:
La plupart du temps, un onduleur alimente plusieurs serveurs, typiquement 2 à 4 pour un 1500VA. Mais un seul serveur est relié à l'onduleur par un port série, c'est donc ce serveur qui fait quand le courant est coupé, quand l'onduleur n'a plus assez d'autonomie, quand le courant revient, etc. Cependant les autres serveurs doivent aussi être informés de ces évenements, ne serait-ce que pour effectuer un ''shutdown'' propre en fin d'autonomie de l'onduleur. La plupart du temps, un onduleur alimente plusieurs serveurs, typiquement 2 à 4 pour un 1500VA. Mais un seul serveur est relié à l'onduleur par un port série, c'est donc ce serveur qui sait quand le courant est coupé, quand l'onduleur n'a plus assez d'autonomie, quand le courant revient, etc. Cependant les autres serveurs doivent aussi être informés de ces évenements, ne serait-ce que pour effectuer un ''shutdown'' propre en fin d'autonomie de l'onduleur.
Ligne 14: Ligne 14:
 * sur le serveur maître (''master'') qui relié à l'onduleur, on installe le ''controleur'' lit les informations via le port série et les propose via le réseau  * sur le serveur maître (''master'') qui relié à l'onduleur, on installe le ''controleur'' qui lit les informations via le port série et les propose via le réseau
Ligne 19: Ligne 19:
Ligne 21: Ligne 22:
A faire sur chaque serveur relié à un onduleur par port série ou USB. C'est ce serveur qui préviendra les autres (''slaves'').

 1. installer le contrôleur et le moniteur avec `aptitude install nut`
 1. cer le fichier `/etc/nut/ups.conf` :
 {{{
À faire sur chaque serveur relié à un onduleur par port série ou USB. C'est ce serveur qui préviendra les autres (''slaves'').

 1. installer le contrôleur et le moniteur avec `aptitude install nut`<<FootNote(ou `nut-server` depuis wheezy)>>
 1. compléter le fichier `/etc/nut/ups.conf` :
  * exemple pour le cas où l'onduleur est relié au serveur via un port RS-232 : {{{
Ligne 31: Ligne 32:
 1. créer le fichier `/etc/nut/upsd.conf` :
 {{{
ACL localhost 127.0.0.1/32
ACL dmzpub 199.84.140.0/24
ACL nut-cgi 10.36.0.10/32
ACL all 0.0.0.0/0
ACCEPT localhost dmzpub nut-cgi
REJECT all
}}}
 1. créer le fichier `/etc/nut/upsd.users` :
 {{{
  * exemple pour le cas où l'onduleur est relié au serveur via un port USB : {{{
[AUF_VN42]
  driver = usbhid-ups # pour Etch, utiliser hidups (support incomplet et bogué)
  port = auto
  desc = "APC SmartUPS SUA1500 RMI 2U"
}}}
  . /!\ Le pilote USB a besoin des droits accès au périphérique USB dans `/dev/bus/usb/VVV/NNN` (cf `lsusb` pour trouver les valeurs) ; ces droits sont donnés dynamiquement via des règles pour `udev`, mais cela réclame au minimum un redémarrage du serveur juste après l'installation du paquet `nut`.
 1. compléter le fichier `/etc/nut/upsd.conf` : {{{
LISTEN 127.0.0.1 3493
LISTEN 10.36.0.254 3493
}}}
 1. compléter le fichier `/etc/nut/upsd.users` : {{{
Ligne 44: Ligne 46:
  allowfrom = localhost
Ligne 47: Ligne 48:
Ligne 49: Ligne 51:
  allowfrom = localhost
Ligne 51: Ligne 52:
Ligne 53: Ligne 55:
  allowfrom = dmzpub
Ligne 56: Ligne 57:
 1. créer le fichier `/etc/nut/upsmon.conf`:
{{{
 1. rifier le fichier `/etc/nut/upsmon.conf` : {{{
Ligne 70: Ligne 70:
 1. mettre `START_UPSD=yes` et `START_UPSMON=yes` dans `/etc/default/nut`
 1. corriger les droits pour que nut accès au port série :
{{{
# chgrp nut /dev/ttyS0
}}}
 1. et pour qu'il puisse lire les configurations :
 {{{
 1. mettre `MODE=standalone` (unique serveur sur cet UPS) ou bien `MODE=netserver` (plusieurs serveurs sur cet UPS) dans `/etc/nut/nut.conf`
 1. ajouter `nut` au groupe `dialout` pour que nut ait accès au port série : {{{
# addgroup nut dialout
}}}
 1. et pour qu'il puisse lire les configurations : {{{
Ligne 80: Ligne 78:
 1. lancer la surveillance avec `invoke-rc.d nut start`

Mais il ne pas oublier de programmer l'onduleur quand c'est possible (et avec les APC justement ça l'est) ! Il faut par exemple signifier à l'onduleur qu'il ne doit redémarrer après une coupure que si les batteries sont chargées à 15%. Voici comment faire avec un APC :
 1. lancer la surveillance avec `service nut start`

 1. tester si nut peut bien communiquer avec l'onduleur : {{{
# upsc AUF_BAN1
battery.alarm.threshold: 0
battery.charge: 100.0
battery.charge.restart: 15
battery.date: 12/09/99
battery.pac
ks: 000
battery.runtime: 16740
...
}}}


Mais il ne faut pas oublier de programmer l'onduleur quand c'est possible (et avec les APC justement ça l'est) ! Il faut par exemple signifier à l'onduleur qu'il ne doit redémarrer après une coupure que si les batteries sont chargées à 15%. Voici comment faire avec un APC :
Ligne 86: Ligne 96:
   . `ups.id="AUF_BAN1"` (identifiant **interne** de l'onduleur, au cas où on ne l'aurait pas étiqueté ;-))
   . `battery.runtime.low="120"` (point critique quand il ne reste que 2 min de fonctionnement sur batterie)
   . `battery.charge.restart="15"` (on attend que la batterie soit rechargée au minimum à 15% avant de relancer)
   . `ups.delay.shutdown="180"` (on attend 3 min après la demande de shutdown avant de couper effectivement)
   . `ups.delay.start="060"` (on attend 1 min après le retour du courant avant de démarrer)
   . `ups.test.interval="604800"` (on effectue des auto-tests de l'onduleur toutes les semaines)
  . `ups.id="AUF_BAN1"` (identifiant **interne** de l'onduleur, au cas où on ne l'aurait pas étiqueté ;-))
  . `battery.runtime.low="120"` (point critique quand il ne reste que 2 min de fonctionnement sur batterie)
  . `battery.charge.restart="15"` (on attend que la batterie soit rechargée au minimum à 15% avant de relancer)
  . `ups.delay.shutdown="120"` (on attend 2 min après la demande de shutdown avant de couper effectivement)
  . `ups.delay.start="060"` (on attend 1 min après le retour du courant avant de démarrer)
  . `ups.test.interval="604800"` (on effectue des auto-tests de l'onduleur toutes les semaines)

__'''NB : onduleur relié au serveur via un port USB '''__
 Si vous obtenez un truc du genre :
  {{{
This APC device (051d:0003) is not (or perhaps not yet) supported
by usbhid-ups. Please make sure you have an up-to-date version of NUT. If
this does not fix the problem, try running the driver with the
'-x productid=0003' option.
  }}}
  Voici comment procéder :
   * modifier `/lib/udev/rules.d/52-nut-usbups.rules` pour ajouter une nouvelle ligne correspondant à votre ups (dans l'extrait ci-dessus APC device (051d:'''0003'''))
    {{{
     # various models - usbhid-ups
     ATTR{idVendor}=="051d", ATTR{idProduct}=="0002", MODE="664", GROUP="nut"
     ATTR{idVendor}=="051d", ATTR{idProduct}=="0003", MODE="664", GROUP="nut"
    }}}
   * relancer udev : `udevadm control --reload-rules`
   * configurer `ups.conf` comme suit :
    {{{
     [AUF_MTL1]
         driver = usbhid-ups
         productid = 0003
         port = auto
         desc = "APC SmartUPS SMX2200RMLV2U"
    }}}
C'est tout ! N'oubliez pas de relancer Nut.

 __'''A vérifier en cas de problème'''__


   # lsusb

   {{{
Bus 005 Device 002: ID 051d:0003 American Power Conversion UPS
}}}

   # ls -l /dev/bus/usb/005

   {{{
crw-rw-r-- 1 root root 189, 512 27 mars 10:42 001
crw-rw-r-- 1 root nut 189, 513 27 mars 11:12 002
}}}

   '''Le périphérique 005 doit être associé au groupe nut.'''

   crw-rw-r-- 1 root '''nut''' 189, 513 27 mars 11:12 002
Ligne 95: Ligne 152:
Si votre onduleur dispose d'un surveillance par SNMP :  Si votre onduleur dispose d'une surveillance par SNMP :
Ligne 98: Ligne 155:
 2. ajouter dans le fichier `/etc/nut/ups.conf` :
{{{
 2. ajouter dans le fichier `/etc/nut/ups.conf` : {{{
Ligne 114: Ligne 170:
 1. installer le moniteur avec `aptitude install nut`
 1. créer le fichier `/etc/nut/upsmon.conf` :
{{{
 1. installer le moniteur avec `aptitude install nut`<<FootNote(A partir de wheezy le paquet pour le moniteur s'appelle `nut-client`)>>
 1. compléter le fichier `/etc/nut/upsmon.conf` : {{{
Ligne 129: Ligne 184:
 1. mettre `START_UPSMON=yes` dans `/etc/default/nut`
 1. lancer la surveillance (connexion avec le master) avec `invoke-rc.d nut start`

Attention, les serveurs slaves pour communiquer avec le serveur master utilisent le port tcp 3493, si il y a un iptables qui traine dans le coin...
 1. mettre `MODE=netclient` dans `/etc/nut/nut.conf`
 1. lancer la surveillance (connexion avec le master) avec `service nut start`

/!\ Les serveurs ''slaves'' utilisent le port 3493/TCP pour communiquer avec le serveur ''master''.
Ligne 136: Ligne 191:
(!) Il est déconseillé d'installer l'interface web au même endroit que le service `nut` lui-même. Le service `nut` sera typiquement installé dans la partie hôte OpenVZ, alors que l'interface web `nut-cgi` sera installée dans un conteneur OpenVZ dédié au web.
Ligne 137: Ligne 194:
 1. copier quelques modèles avec `cp -a /usr/share/doc/nut-cgi/examples/* /etc/nut/`
 1. modifier le fichier `/etc/nut/hosts.conf` :
 {{{
 1. si l'onduleur est relié au serveur via un port USB il faut également ajuster la colonne de température dans le squelette `/etc/nut/upsstats.html` comme suit : {{{
<td BGCOLOR="#00FF00">
@IFSUPP ups.temperature@
@UPSTEMP@
@DEGREES@
@ELSE@
@IFSUPP battery.temperature@
@VAR battery.temperature@
@DEGREES@
@ENDIF@
</td>
}}}
 1. compléter le fichier `/etc/nut/hosts.conf` : {{{
Ligne 145: Ligne 212:
 1. consulter la page http://intranet.auf/cgi-bin/nut/upsstats.cgi Pratique, non ?  1. consulter la page http://new-intranet.auf/cgi-bin/nut/upsstats.cgi Pratique, non ?
Ligne 150: Ligne 217:

----

Cette page décrit la configuration de nut pour Debian/Squeeze.

Quelques liens sur nut

Principes de base

La plupart du temps, un onduleur alimente plusieurs serveurs, typiquement 2 à 4 pour un 1500VA. Mais un seul serveur est relié à l'onduleur par un port série, c'est donc ce serveur qui sait quand le courant est coupé, quand l'onduleur n'a plus assez d'autonomie, quand le courant revient, etc. Cependant les autres serveurs doivent aussi être informés de ces évenements, ne serait-ce que pour effectuer un shutdown propre en fin d'autonomie de l'onduleur.

nut permet cela via différents composant :

  • sur le serveur maître (master) qui relié à l'onduleur, on installe le controleur qui lit les informations via le port série et les propose via le réseau

  • sur tous les serveurs (master et slave) relié au même onduleur, on installe un moniteur qui ira chercher, en local ou via le réseau, les informations sur l'état de l'onduleur et agira en fonction (par exemple éteindre le serveur en cas d'autonomie trop faible).

nut propose aussi des outils pour programmer l'onduleur (notamment les délais de redémarrage), pour se connecter à un onduleur SNMP, pour diffuser les infos sur le web, etc.

Configuration d'un serveur master

À faire sur chaque serveur relié à un onduleur par port série ou USB. C'est ce serveur qui préviendra les autres (slaves).

  1. installer le contrôleur et le moniteur avec aptitude install nut1

  2. compléter le fichier /etc/nut/ups.conf :

    • exemple pour le cas où l'onduleur est relié au serveur via un port RS-232 :

      [AUF_BAN1]
        driver = apcsmart
        port = /dev/ttyS0
        desc = "APC SmartUPS SU3000 RM"
    • exemple pour le cas où l'onduleur est relié au serveur via un port USB :

      [AUF_VN42]
        driver = usbhid-ups # pour Etch, utiliser hidups (support incomplet et bogué)
        port = auto
        desc = "APC SmartUPS SUA1500 RMI 2U"
    • /!\ Le pilote USB a besoin des droits accès au périphérique USB dans /dev/bus/usb/VVV/NNN (cf lsusb pour trouver les valeurs) ; ces droits sont donnés dynamiquement via des règles pour udev, mais cela réclame au minimum un redémarrage du serveur juste après l'installation du paquet nut.

  3. compléter le fichier /etc/nut/upsd.conf :

    LISTEN 127.0.0.1 3493
    LISTEN 10.36.0.254 3493
  4. compléter le fichier /etc/nut/upsd.users :

    [admin]
      password = admin
      actions = SET
      instcmds = ALL
    
    [localhost]
      password = localhost
      upsmon master
    
    [dmzpub]
      password = dmzpub
      upsmon slave
  5. vérifier le fichier /etc/nut/upsmon.conf :

    # /etc/nut/upsmon.conf
    MONITOR AUF_BAN1@localhost 1 localhost localhost master
    MINSUPPLIES 1
    SHUTDOWNCMD "/sbin/shutdown -h +0"
    # NOTIFYCMD /usr/local/ups/bin/notifyme
    POLLFREQ 5
    POLLFREQALERT 5
    HOSTSYNC 15
    DEADTIME 15
    POWERDOWNFLAG /etc/killpower
    FINALDELAY 5
  6. mettre MODE=standalone (unique serveur sur cet UPS) ou bien MODE=netserver (plusieurs serveurs sur cet UPS) dans /etc/nut/nut.conf

  7. ajouter nut au groupe dialout pour que nut ait accès au port série :

    # addgroup nut dialout
  8. et pour qu'il puisse lire les configurations :

    # chown root:nut /etc/nut/upsd.* /etc/nut/upsmon.conf
    # chmod u=rw,g=r,o= /etc/nut/upsd.* /etc/nut/upsmon.conf
  9. lancer la surveillance avec service nut start

  10. tester si nut peut bien communiquer avec l'onduleur :

    # upsc AUF_BAN1
    battery.alarm.threshold: 0
    battery.charge: 100.0
    battery.charge.restart: 15
    battery.date: 12/09/99
    battery.packs: 000
    battery.runtime: 16740
    ...

Mais il ne faut pas oublier de programmer l'onduleur quand c'est possible (et avec les APC justement ça l'est) ! Il faut par exemple signifier à l'onduleur qu'il ne doit redémarrer après une coupure que si les batteries sont chargées à 15%. Voici comment faire avec un APC :

  1. lancer la commande upsrw AUF_BAN1@localhost pour voir les programmations possibles

  2. exemple d'utilisation : upsrw -s ups.id="AUF_BAN1" -u admin -p admin AUF_BAN1@localhost

  3. j'ai mis en place les paramètres suivants :
    • ups.id="AUF_BAN1" (identifiant **interne** de l'onduleur, au cas où on ne l'aurait pas étiqueté ;-))

    • battery.runtime.low="120" (point critique quand il ne reste que 2 min de fonctionnement sur batterie)

    • battery.charge.restart="15" (on attend que la batterie soit rechargée au minimum à 15% avant de relancer)

    • ups.delay.shutdown="120" (on attend 2 min après la demande de shutdown avant de couper effectivement)

    • ups.delay.start="060" (on attend 1 min après le retour du courant avant de démarrer)

    • ups.test.interval="604800" (on effectue des auto-tests de l'onduleur toutes les semaines)

NB : onduleur relié au serveur via un port USB

  • Si vous obtenez un truc du genre :
    • This APC device (051d:0003) is not (or perhaps not yet) supported
      by usbhid-ups. Please make sure you have an up-to-date version of NUT. If
      this does not fix the problem, try running the driver with the
      '-x productid=0003' option.
      Voici comment procéder :
      • modifier /lib/udev/rules.d/52-nut-usbups.rules pour ajouter une nouvelle ligne correspondant à votre ups (dans l'extrait ci-dessus APC device (051d:0003))

        •      #  various models  - usbhid-ups
               ATTR{idVendor}=="051d", ATTR{idProduct}=="0002", MODE="664", GROUP="nut"
               ATTR{idVendor}=="051d", ATTR{idProduct}=="0003", MODE="664", GROUP="nut"
      • relancer udev : udevadm control --reload-rules

      • configurer ups.conf comme suit :

        •      [AUF_MTL1]
                   driver = usbhid-ups
                   productid = 0003
                   port = auto
                   desc = "APC SmartUPS SMX2200RMLV2U"

C'est tout ! N'oubliez pas de relancer Nut.

  • A vérifier en cas de problème

    • # lsusb
      Bus 005 Device 002: ID 051d:0003 American Power Conversion UPS
      # ls -l /dev/bus/usb/005
      crw-rw-r-- 1 root root 189, 512 27 mars  10:42 001
      crw-rw-r-- 1 root nut  189, 513 27 mars  11:12 002

      Le périphérique 005 doit être associé au groupe nut.

      crw-rw-r-- 1 root nut 189, 513 27 mars 11:12 002

Cas d'un onduleur joignable via SNMP (merci TsvetanPetkov)

Si votre onduleur dispose d'une surveillance par SNMP :

  1. aptitude install nut-snmp

  2. ajouter dans le fichier /etc/nut/ups.conf :

    [MGE_EX30]
             driver = snmp-ups
             port = 168.8.26.116
             community = public
             snmp_version = v1
             mibs = ietf
             pollfreq = 15
             desc = "MGE EX30 - 1950W"
  3. relancer le service avec /etc/init.d/nut restart

  4. utiliser la commande: upsc MGE_EX30@localhost pour voir si l'onduleur est bien configuré

Configuration d'un slave

  1. installer le moniteur avec aptitude install nut2

  2. compléter le fichier /etc/nut/upsmon.conf :

    # /etc/nut/upsmon.conf
    MONITOR AUF_BAN1@zeus.auf.org 1 dmzpub dmzpub slave
    MINSUPPLIES 1
    SHUTDOWNCMD "/sbin/shutdown -h +0"
    # NOTIFYCMD /usr/local/ups/bin/notifyme
    POLLFREQ 5
    POLLFREQALERT 5
    HOSTSYNC 15
    DEADTIME 15
    POWERDOWNFLAG /etc/killpower
    FINALDELAY 5
  3. mettre MODE=netclient dans /etc/nut/nut.conf

  4. lancer la surveillance (connexion avec le master) avec service nut start

/!\ Les serveurs slaves utilisent le port 3493/TCP pour communiquer avec le serveur master.

Configuration de l'interface web

(!) Il est déconseillé d'installer l'interface web au même endroit que le service nut lui-même. Le service nut sera typiquement installé dans la partie hôte OpenVZ, alors que l'interface web nut-cgi sera installée dans un conteneur OpenVZ dédié au web.

  1. installer le script avec aptitude install nut-cgi

  2. si l'onduleur est relié au serveur via un port USB il faut également ajuster la colonne de température dans le squelette /etc/nut/upsstats.html comme suit :

    <td BGCOLOR="#00FF00">
    @IFSUPP ups.temperature@
    @UPSTEMP@
    @DEGREES@
    @ELSE@
    @IFSUPP battery.temperature@
    @VAR battery.temperature@
    @DEGREES@
    @ENDIF@
    </td>
  3. compléter le fichier /etc/nut/hosts.conf :

    # /etc/nut/hosts.conf
    MONITOR AUF_BAN1@zeus.auf "AUF_BAN1 : local technique 3032"
    MONITOR AUF_BAN5@db.auf "AUF_BAN5 : local technique 3032"
    MONITOR AUF_BAN6@backup.auf "AUF_BAN6 : local technique 3034"
  4. consulter la page http://new-intranet.auf/cgi-bin/nut/upsstats.cgi Pratique, non ?

Configuration des alertes par mail ou IM

...


  1. ou nut-server depuis wheezy (1)

  2. A partir de wheezy le paquet pour le moniteur s'appelle nut-client (2)

Nut (dernière édition le 2013-09-08 12:40:29 par WillyManga)