Configuração das ferramentas de gerenciamento de rede (NUT) do zero para gerenciar um no-break conectado localmente

Configurando as ferramentas UPS de rede no Linux usando o UPS Eaton 5E650iUSB como exemplo


Descrição do produto


O serviço Linux NUT (Network UPS Tools) é um conjunto de programas de monitoramento e controle para várias unidades de fonte de alimentação ininterruptas (doravante UPS). Uma lista completa dos modelos suportados pode ser obtida consultando a lista de drivers no arquivo /usr/share/nut/driver.list .


O manual descreve como desativar o desligamento do PC pelo agente NUT em caso de perda de tensão na rede usando o exemplo do no-break Eaton 5E 650iUSB em distribuições do tipo Ubuntu. Para uso em outras distribuições, use o gerenciador de pacotes da sua distribuição ou compile a partir dos códigos-fonte. A versão mais recente do Network UPS Tools pode ser baixada no GitHub no link do link .


Instalar NUT


Primeiro você precisa instalar o NUT:


root@hostname~# apt install nut 

Faça uma cópia de backup da pasta com os arquivos de configuração NUT:


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

Agora adicione uma diretiva indicando que o no-break está conectado a este computador, e não ao remoto:


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

Agora conecte o no-break ao computador e veja a saída do 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 procurando se o no-break é suportado pelo serviço NUT. Você pode visualizá-lo manualmente ou exibir linhas com o nome da marca do no-break, por exemplo:


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

Agora que decidimos o driver, você pode configurar a NUT.


Proteção de arquivo de configuração


As permissões e os proprietários corretos devem ser definidos para os arquivos de configuração NUT


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

Configuração NUT


Configurando o driver, método de conexão e tempo de desligamento


Adicione as linhas ao final do arquivo /etc/nut/ups.conf ou crie uma nova com o seguinte conteúdo:


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

Configurando o acesso do grupo de sistemas NUT ao no-break via USB


Para que a NUT tenha acesso à interface USB do no-break, você precisa escrever uma regra de acesso para o udev .


O udev é um subsistema de gerenciamento de dispositivos Linux. Graças ao udev, apenas os dispositivos atualmente conectados estão localizados na pasta / dev .


Execute o comando


  root@hostname~# lsusb 

e encontre a linha correspondente ao no-break. No nosso exemplo, isso


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

onde após o ID passa idVendor: idProduct ( 0463: ffff )


Agora crie um arquivo de regras para o 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" 

Após criar a regra, você deve reiniciar o serviço udev :


  root@hostname~# service udev restart 

Depois disso, desconecte e reconecte o cabo USB do no-break. Depois disso, execute o comando para verificar a integridade da regra do 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 

Se a saída for aproximadamente a mesma, tudo estará configurado corretamente.


Configurar endereços e portas NUT para ouvir conexões NUT


Adicione as linhas no final do arquivo /etc/nut/upsd.conf ou crie uma nova com o seguinte conteúdo:


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

Lembre-se de que ESCUTE deve ser escrito em letras maiúsculas ou nada funcionará.


Configurar perfil de usuário para acessar NUT


Criamos o monitor de usuário sem o direito de login e pasta inicial, com um UID menor que 1000, para que ele seja considerado um serviço e não na tela de login do usuário e com o GID do grupo nut .


Descubra o GID do grupo de nozes :


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

Agora escolhemos o UID para o usuário. Ou escolhemos um que dificilmente é usado por qualquer programa, por exemplo, 339, ou executamos:


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

e se ele não exibir nada, o UID é gratuito e pode ser usado para criar o usuário upsmonitor :


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

Agora adicione este usuário ao arquivo de perfil de usuário NUT /etc/nut/upsd.users :


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

Configurações de monitoramento NUT


Adicione as linhas ao final do arquivo /etc/nut/upsmon.conf ou crie uma nova com o seguinte conteúdo:


 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 

Teste de conexão


Vamos ver o que o no-break pode relatar sobre sua condição:


  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 os campos são mais ou menos óbvios ou foram definidos por nós nos arquivos de configuração anteriores. Os códigos de status do no-break são exibidos no campo ups.status: e podem receber valores:


  • OL - o sistema é alimentado por uma rede;
  • OB - o sistema funciona com energia da bateria;
  • LB - o sistema funciona com uma bateria descarregada.

Comandos e variáveis ​​internas do no-break


O no-break pode emitir comandos diretamente do console usando o comando upscmd . Uma lista de comandos disponíveis pode ser obtida executando o 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 

O sinal sonoro. * As configurações controlam o alarme do no-break em caso de perda de tensão, load.off desliga o PC imediatamente, load.off.delay demora em segundos antes de desligar o PC, shutdown.stop - comando para interromper o processo de desligamento do PC.


Em alguns no-breaks, existem outras opções, por exemplo, teste de bateria ou desligamento . Retorno ; nesse caso, o computador será desligado, mas o no-break enviará um sinal de início do PC assim que a energia da rede elétrica retornar. Para que isso funcione, na BIOS do PC, a função correspondente, que geralmente está localizada em algum lugar na área de configurações de energia, deve estar ativada.


Por exemplo, desligue o no-break quando a energia acabar:


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

Para ativar, substitua beeper.disable por beeper.enable .


Configurando o Agendador de Tarefas NUT atualizado


Adicione as linhas no final do arquivo /etc/nut/upssched.conf ou crie uma nova com o seguinte conteúdo:


  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 

Agora precisamos do script /etc/nut/cmd.sh . Crie, defina os direitos e preencha:


  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 

Conclusão


Isso completa a instalação. Você pode testar retirando o no-break do soquete.

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


All Articles