Configuration de Network Management Tools (NUT) à partir de zéro pour gérer un onduleur connecté localement

Configuration des outils UPS réseau sur Linux en utilisant l'onduleur Eaton 5E650iUSB comme exemple


La description


Le service Linux NUT (Network UPS Tools) est un ensemble de programmes de surveillance et de contrôle pour diverses unités d'alimentation sans coupure (ci-après UPS). Une liste complète des modèles pris en charge peut être obtenue en consultant la liste des pilotes dans le fichier /usr/share/nut/driver.list .


Le manuel décrit comment désactiver l'arrêt du PC par l'agent NUT en cas de perte de tension dans le réseau en utilisant l'exemple de l'onduleur Eaton 5E 650iUSB sur des distributions de type Ubuntu. Pour une utilisation sous d'autres distributions, utilisez le gestionnaire de packages de votre distribution ou compilez à partir des codes source. La dernière version de Network UPS Tools peut être téléchargée sur GitHub à partir du lien lien .


Installer NUT


Vous devez d'abord installer NUT:


root@hostname~# apt install nut 

Faites une copie de sauvegarde du dossier avec les fichiers de configuration NUT:


  root@hostname~# cp -r /etc/nut /etc/nut.orig 

Ajoutez maintenant une directive indiquant que l'onduleur est connecté à cet ordinateur, et non à celui distant:


  root@hostname~# echo "MODE=standalone" > /etc/nut/nut.conf 

Connectez maintenant l'onduleur à l'ordinateur et voyez la sortie de la commande lsusb :


  root@hostname~# lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 093a:2510 Pixart Imaging, Inc. Optical Mouse Bus 001 Device 003: ID 1a2c:2124 China Resource Semico Co., Ltd Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS 

Nous recherchons si l'onduleur est pris en charge par le service NUT. Vous pouvez le visualiser manuellement ou afficher des lignes avec le nom de marque de l'onduleur, par exemple:


  root@hostname~# grep Eaton /usr/share/nut/driver.list ... "Eaton" "ups" "5" "5E650iUSB" "USB port" "usbhid-ups" ... 

Maintenant que nous avons choisi le pilote, vous pouvez configurer le NUT.


Protection des fichiers de configuration


Les autorisations et les propriétaires corrects doivent être définis pour les fichiers de configuration NUT


  root@hostname~# chown root:nut /etc/nut/* root@hostname~# chmod 640 /etc/nut/* 

Configuration de NUT


Configuration du pilote, de la méthode de connexion et de l'heure d'arrêt


Ajoutez les lignes à la fin du fichier /etc/nut/ups.conf ou créez-en une nouvelle avec le contenu suivant:


  root@hostname~# nano /etc/nut/ups.conf #    NUT.         [eaton] #   driver = usbhid-ups #  .           port = auto #        offdelay = 90 #          ondelay = 5 #   desc = "Eaton 5E 650iUSB" 

Configuration de l'accès du groupe de systèmes NUT à l'onduleur via USB


Pour que le NUT ait accès à l'interface USB de l'onduleur, vous devez écrire une règle d'accès pour udev .


udev est un sous-système de gestion de périphériques Linux. Grâce à udev, seuls les appareils actuellement connectés se trouvent dans le dossier / dev .


Exécutez la commande


  root@hostname~# lsusb 

et recherchez la ligne correspondant à l'onduleur. Dans notre exemple, cette


 Bus 001 Device 002: ID 0463:ffff MGE UPS Systems UPS 

où après l' ID va idVendor: idProduct ( 0463: ffff )


Créez maintenant un fichier de règles pour udev :


  root@hostname~# /etc/udev/rules.d/90-nut-ups.rules # Eaton 5E650iUSB ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0463", ATTR{idProduct}=="ffff", MODE="0660", GROUP="nut" 

Après avoir créé la règle, vous devez redémarrer le service udev :


  root@hostname~# service udev restart 

Après cela, déconnectez et reconnectez le câble USB de l'onduleur. Après cela, exécutez la commande pour vérifier l' intégrité de la règle udev :


 root@hostname~# upsdrvctl start Network UPS Tools - UPS driver controller 2.7.4 Network UPS Tools - Generic HID driver 0.41 (2.7.4) USB communication driver 0.33 Using subdriver: MGE HID 1.39 

Si la sortie est approximativement la même, alors tout est configuré correctement.


Configurer les adresses NUT et les ports d'écoute pour les connexions à NUT


Ajoutez les lignes à la fin du fichier /etc/nut/upsd.conf ou créez-en une nouvelle avec le contenu suivant:


  root@hostname~# nano /etc/nut/upsd.conf #  Loopback    3493 LISTEN 127.0.0.1 3493 

Gardez à l'esprit que LISTEN doit être écrit en majuscules, sinon rien ne fonctionnera.


Configurer le profil utilisateur pour accéder à NUT


Nous créons l'utilisateur upsmonitor sans droit de connexion et dossier d'accueil, avec un UID inférieur à 1000, afin qu'il soit considéré comme un service et non sur l'écran de connexion de l'utilisateur, et avec le GID du groupe nut .


Découvrez le GID du groupe de noix :


  root@hostname~# cat /etc/group | grep nut:x: nut:x:134: 

Maintenant, nous prenons l'UID pour l'utilisateur. Soit nous en choisissons un qui n'est guère utilisé par aucun programme, par exemple 339, soit nous exécutons:


 root@hostname~# cat /etc/passwd | grep [  100  1000] 

et s'il n'affiche rien, l'UID est gratuit et peut être utilisé pour créer l'utilisateur upsmonitor :


 root@hostname~# useradd -d /dev/null -s /usr/sbin/nologin -u 339 -g 134 -p UPSPASS upsmonitor 

Ajoutez maintenant cet utilisateur au fichier de profil utilisateur NUT /etc/nut/upsd.users :


 root@hostname~# nano /etc/nut/upsd.users #   [upsmonitor] #   password = UPSPASS #      ,     .. actions = SET #          upscmd instcmds = ALL #       NUT upsmon master 

Paramètres de surveillance NUT


Ajoutez les lignes à la fin du fichier /etc/nut/upsmon.conf ou créez-en une nouvelle avec le contenu suivant:


 root@hostname~# nano /etc/nut/upsmon.conf #   eaton  localhost     upsmonitor MONITOR eaton@localhost 1 upsmonitor UPSPASS master #    MINSUPPLIES 1 #    NUT,      NOTIFYCMD /sbin/upssched #           POLLFREQ 5 #           POLLFREQALERT 5 #      NUT    HOSTSYNC 15 #  NUT                "" DEADTIME 15 #  ,  ,           POWERDOWNFLAG /etc/killpower #          NOTIFYMSG ONLINE "UPS %s on line power" #           NOTIFYMSG ONBATT "UPS %s on battery" #             NOTIFYMSG LOWBATT "UPS %s battery is low" #          NOTIFYMSG FSD "UPS %s: forced shutdown in progress" #           NOTIFYMSG COMMOK "Communications with UPS %s established" #           , ,    USB  NOTIFYMSG COMMBAD "Communications with UPS %s lost" #                        NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding" #            NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced" #            NOTIFYMSG NOCOMM "UPS %s is unavailable" #            NUT upsmon NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible" #     ,   NOTIFYFLAG. # SYSLOG        ,   /var/log/syslog # WALL          # EXEC   ,    /etc/nut/upsshed.conf,    NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC NOTIFYFLAG FSD SYSLOG+WALL+EXEC NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC NOTIFYFLAG REPLBATT SYSLOG+WALL+EXEC NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC NOTIFYFLAG NOPARENT SYSLOG+WALL+EXEC #           (12 ) RBWARNTIME 43200 #  NUT      ,    NOCOMM  300  NOCOMMWARNTIME 300 #       FINALDELAY 5 

Test de connexion


Voyons ce que l'onduleur peut signaler sur son état:


  root@hostname~# upsc eaton@localhost battery.charge: 100 battery.runtime: 1964 battery.type: PbAc device.mfr: EATON device.model: 5E 650i device.type: ups driver.name: usbhid-ups driver.parameter.offdelay: 60 driver.parameter.pollfreq: 30 driver.parameter.pollinterval: 2 driver.parameter.port: auto driver.parameter.synchronous: no driver.version: 2.7.4 driver.version.data: MGE HID 1.39 driver.version.internal: 0.41 input.voltage: 228.0 outlet.1.status: on outlet.desc: Main Outlet outlet.id: 1 outlet.switchable: no output.frequency: 50.0 output.frequency.nominal: 50 output.voltage: 226.0 output.voltage.nominal: 230 ups.beeper.status: enabled ups.delay.shutdown: 60 ups.firmware: 03.08.0018 ups.load: 18 ups.mfr: EATON ups.model: 5E 650i ups.power.nominal: 650 ups.productid: ffff ups.start.battery: yes ups.status: OL ups.timer.shutdown: -1 ups.vendorid: 0463 

Tous les champs sont plus ou moins évidents ou ont été définis par nos soins dans les fichiers de configuration précédents. Les codes d'état de l'onduleur sont affichés dans le champ ups.status: et peuvent prendre des valeurs:


  • OL - le système fonctionne sur un réseau;
  • OB - le système fonctionne sur batterie;
  • LB - le système fonctionne sur une batterie déchargée.

Commandes et variables internes de l'onduleur


L'onduleur peut émettre des commandes directement à partir de la console à l'aide de la commande upscmd . Une liste des commandes disponibles peut être obtenue en exécutant la commande:


  root@hostname~# upscmd -l eaton@localhost Instant commands supported on UPS [eaton]: beeper.disable - Disable the UPS beeper beeper.enable - Enable the UPS beeper beeper.mute - Temporarily mute the UPS beeper beeper.off - Obsolete (use beeper.disable or beeper.mute) beeper.on - Obsolete (use beeper.enable) load.off - Turn off the load immediately load.off.delay - Turn off the load with a delay (seconds) shutdown.stop - Stop a shutdown in progress 

Le bip. * Les paramètres contrôlent l'alarme de l'onduleur en cas de perte de tension, load.off arrête immédiatement le PC, load.off.delay délai en secondes avant d'arrêter le PC, shutdown.stop - commande pour interrompre le processus d'arrêt du PC.


Dans certains onduleurs, il existe d'autres options, par exemple, un test de batterie ou un retour à l' arrêt , auquel cas l'ordinateur sera éteint, mais l'onduleur enverra un signal de démarrage PC dès que l'alimentation secteur sera rétablie. Pour que cela fonctionne, dans le BIOS du PC, la fonction correspondante, qui se trouve généralement quelque part dans la zone des paramètres d'alimentation, doit être activée.


Par exemple, éteignez l'onduleur UPS lorsque l'alimentation est coupée:


  root@hostname~# upscmd -u upsmonitor -p UPSPASS eaton@localhost beeper.disable 

Pour l'activer, remplacez beeper.disable par beeper.enable .


Configuration de NUT Task Scheduler upssched


Ajoutez les lignes à la fin du fichier /etc/nut/upssched.conf ou créez-en une nouvelle avec le contenu suivant:


  root@hostname~# nano /etc/nut/upssched.conf # ,       CMDSCRIPT /etc/nut/cmd.sh PIPEFN /tmp/upspipe LOCKFN /tmp/upslock #     case    /etc/nut/cmd.sh AT COMMBAD * EXECUTE commbad AT COMMOK * EXECUTE commok AT NOCOMM * EXECUTE nocomm #      .         AT ONBATT * EXECUTE powerout #  ,      shutdownnow  cmd.sh AT ONBATT * START-TIMER shutdownnow 90 AT LOWBATT * EXECUTE shutdowncritical AT ONLINE * CANCEL-TIMER shutdownnow AT ONLINE * EXECUTE powerup 

Nous avons maintenant besoin du script /etc/nut/cmd.sh . Créez-le, définissez les droits et remplissez-le:


  root@hostname~# touch /etc/nut/cmd.sh root@hostname~# chmod 666 /etc/nut/cmd.sh root@hostname~# nano /etc/nut/cmd.sh #!/bin/sh # logger     syslog case $1 in commbad) logger "UPS communications failure" ;; commok) logger "UPS communications restored" ;; nocomm) logger "UPS communications cannot be established" ;; powerout) #         logger "UPS on battery. Shutdown in 90 seconds...." upscmd -u upsmonitor -p UPSPASS eaton@localhost shutdown.return ;; shutdownnow) logger "UPS has been on battery for 120 seconds. Starting orderly shutdown" #     upsmon -c fsd ;; shutdowncritical) logger "UPS battery level CRITICAL. Shutting down NOW!!!!" #     upsmon -c fsd ;; powerup) logger "UPS on line. Shutdown aborted." #     upscmd -u upsmon -p pass mustek@localhost shutdown.stop ;; *) logger "Unrecognized command: $1" ;; esac 

Conclusion


Ceci termine la configuration. Vous pouvez tester en arrachant l'onduleur de la prise.

Source: https://habr.com/ru/post/fr443736/


All Articles