Configuración de herramientas de administración de red (NUT) desde cero para administrar un UPS conectado localmente

Configuración de herramientas de UPS de red en Linux usando el UPS Eaton 5E650iUSB como ejemplo


Descripción


El servicio Linux NUT (Network UPS Tools) es un conjunto de programas de monitoreo y control para varias unidades de suministro de energía ininterrumpible (en adelante, UPS). Puede obtener una lista completa de los modelos compatibles mirando la lista de controladores en el archivo /usr/share/nut/driver.list .


El manual describe cómo deshabilitar el apagado de la PC por el agente NUT en caso de pérdida de voltaje en la red utilizando el ejemplo del UPS Eaton 5E 650iUSB en distribuciones similares a Ubuntu. Para usar bajo otras distribuciones, use el administrador de paquetes de su distribución o compile a partir de los códigos fuente. La última versión de Network UPS Tools se puede descargar en GitHub desde el enlace .


Instalar NUT


Primero necesitas instalar NUT:


root@hostname~# apt install nut 

Haga una copia de seguridad de la carpeta con los archivos de configuración NUT:


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

Ahora agregue una directiva que indique que el UPS está conectado a esta computadora, y no a la remota:


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

Ahora conecte el UPS a la computadora y vea la salida del comando 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 

Estamos buscando si el UPS es compatible con el servicio NUT. Puede verlo manualmente o mostrar líneas con la marca del UPS, por ejemplo:


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

Ahora que hemos decidido el controlador, puede configurar el NUT.


Protección de archivos de configuración


Deben establecerse los permisos y propietarios correctos para los archivos de configuración NUT


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

Configuración de la tuerca


Configuración del controlador, método de conexión y tiempo de apagado


Agregue las líneas al final del archivo /etc/nut/ups.conf o cree una nueva con el siguiente contenido:


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

Configuración del acceso de grupo del sistema NUT al UPS a través de USB


Para que NUT tenga acceso a la interfaz USB del UPS, debe escribir una regla de acceso para udev .


udev es un subsistema de gestión de dispositivos Linux. Gracias a udev, solo los dispositivos conectados actualmente se encuentran en la carpeta / dev .


Ejecuta el comando


  root@hostname~# lsusb 

y encuentre la línea correspondiente a la UPS. En nuestro ejemplo, esto


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

donde después la ID se convierte idVendor: idProduct ( 0463: ffff )


Ahora cree un archivo de reglas para 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" 

Después de crear la regla, debe reiniciar el servicio udev :


  root@hostname~# service udev restart 

Después de eso, desconecte y vuelva a conectar el cable USB del UPS. Después de eso, ejecute el comando para verificar el estado de la regla 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 salida es aproximadamente la misma, entonces todo está configurado correctamente.


Configure direcciones NUT y puertos de escucha para conexiones a NUT


Agregue las líneas al final del archivo /etc/nut/upsd.conf o cree una nueva con el siguiente contenido:


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

Tenga en cuenta que ESCUCHAR debe escribirse en mayúsculas, o nada funcionará.


Configurar el perfil de usuario para acceder a NUT


Creamos el monitor de usuario sin el derecho de inicio de sesión y la carpeta de inicio, con un UID de menos de 1000, para que se considere como un servicio y no en la pantalla de inicio de sesión del usuario, y con el GID del grupo de tuercas .


Descubra el GID del grupo de nueces :


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

Ahora recogemos el UID para el usuario. O elegimos uno que apenas es utilizado por ningún programa, por ejemplo, 339, o ejecutamos:


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

y si no muestra nada, el UID es gratuito y se puede usar para crear el usuario del monitor ascendente :


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

Ahora agregue este usuario al archivo de perfil de usuario NUT /etc/nut/upsd.users :


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

Configuraciones de monitoreo NUT


Agregue las líneas al final del archivo /etc/nut/upsmon.conf o cree una nueva con el siguiente contenido:


 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 

Prueba de conexión


Veamos qué puede informar el UPS sobre su estado:


  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 

Todos los campos son más o menos obvios o los definimos anteriormente en los archivos de configuración. Los códigos de estado del UPS se muestran en el campo ups.status: y pueden tomar valores:


  • OL: el sistema funciona con una red;
  • OB: el sistema funciona con batería;
  • LB: el sistema funciona con una batería descargada.

Comandos y variables internas del UPS


El UPS puede emitir comandos directamente desde la consola utilizando el comando upscmd . Se puede obtener una lista de comandos disponibles ejecutando el comando:


  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 

La señal acústica . * La configuración controla la alarma del UPS en caso de pérdida de energía, load.off apaga la PC de inmediato, load.off. Demora en segundos antes de apagar la PC, shutdown.stop : comando para interrumpir el proceso de apagado de la PC.


En algunos UPS hay otras opciones, por ejemplo, una prueba de batería o apagado . En ese caso, la computadora se apagará, pero el UPS enviará una señal de inicio de la PC tan pronto como vuelva la alimentación de la red. Para que esto funcione, en el BIOS de la PC, debe habilitarse la función correspondiente, que generalmente se encuentra en algún lugar del área de configuración de energía.


Por ejemplo, apague el chirrido del UPS cuando se va la luz:


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

Para habilitar, reemplace beeper.disable con beeper.enable .


Configuración del programador de tareas NUT actualizado


Agregue las líneas al final del archivo /etc/nut/upssched.conf o cree una nueva con el siguiente contenido:


  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 

Ahora necesitamos el script /etc/nut/cmd.sh . Créelo, establezca los derechos y complételo:


  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 

Conclusión


Esto completa la configuración. Puede probar arrancando el UPS del zócalo.

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


All Articles