UPS (NUT)#

Un gruppo di continuità (UPS, Uninterruptible Power Supply) è un dispositivo che fornisce alimentazione di riserva quando la fonte di alimentazione principale viene meno. Viene utilizzato per proteggere hardware come computer, apparecchiature di telecomunicazione o altri dispositivi elettrici in cui un’interruzione improvvisa dell’alimentazione potrebbe causare interruzioni operative o perdita di dati.

Network UPS Tools (NUT) è una raccolta di programmi che fornisce un’interfaccia comune per il monitoraggio e l’amministrazione dell’hardware UPS.

Questa guida spiega come configurare un UPS collegato via USB con NUT su NethSecurity. Al termine della guida, l’UPS dovrebbe essere monitorato e il sistema dovrebbe spegnersi quando la batteria è scarica.

NUT non è installato di default. Fa parte dei pacchetti extra di NethSecurity e può essere installato dalla riga di comando. La suite NUT è composta da diversi pacchetti, ma i più importanti sono:

  • nut-server: Il demone NUT server si connette direttamente all’UPS, fornendo i dati al client.

  • nut-upsc: Uno strumento da riga di comando per interrogare lo stato dell’UPS.

  • nut-upsmon: Il demone di monitoraggio NUT UPS comunica con nut-server e avvia lo spegnimento del sistema quando la batteria dell’UPS è scarica.

  • nut-upscmd: Uno strumento da riga di comando per inviare comandi all’UPS (supportato solo da alcuni modelli di UPS).

Nota

La configurazione di NUT non è supportata sulle macchine con una subscription NethSecurity. La funzionalità è destinata a utenti avanzati e non è coperta dal servizio di supporto.

Configurare un UPS locale#

Prima di configurare l’UPS, assicurarsi che l’UPS sia collegato al firewall (un cavo è solitamente fornito con l’UPS). Quindi, seguire questi passaggi:

  1. Installare i pacchetti NUT.

  2. Individuare il modello di UPS, quindi installare e configurare il driver appropriato.

  3. Configurare i demoni del server UPS.

  4. Abilitare il monitor UPS.

Passaggio 1: installare i pacchetti richiesti#

Installare i pacchetti richiesti:

opkg update
opkg install nut-server nut-upsc nut-upsmon nut-upscmd

Nota

A partire dalla versione 8.7.2, i pacchetti extra vengono reinstallati automaticamente dopo l’aggiornamento del sistema. Per le versioni precedenti e per ulteriori informazioni, consultare questa documentazione: Ripristinare pacchetti aggiuntivi.

Passaggio 2: configurare il driver appropriato#

  1. Usare lsusb per elencare i dispositivi USB:

    Bus 002 Device 002: ID 0463:ffff EATON 5E
    Bus 002 Device 001: ID 1d6b:0002 Linux 5.15.150 xhci-hcd xHCI Host Controller
    Bus 001 Device 002: ID 8087:8001
    

    In questo esempio, l’UPS è un modello EATON 5E collegato alla seconda porta USB del secondo bus USB.

  2. Selezionare il driver dalla pagina dei driver NUT.

  3. Tutti i pacchetti driver iniziano con il prefisso nut-driver-. Alcuni modelli di UPS possono richiedere un driver specifico, ma la maggior parte di essi funziona con il driver usbhid-ups. Installare il pacchetto driver selezionato, in questo caso il driver usbhid-ups:

    opkg install nut-driver-usbhid-ups
    
  4. Configurare il driver all’interno del server upsd (nut-server). Il nut-server si collegherà all’UPS utilizzando il driver e la porta specificati. Monitorerà l’UPS a intervalli regolari e fornirà le informazioni ai client come upsmon. Eseguire:

    uci set nut_server.eaton5e=driver
    uci set nut_server.eaton5e.driver=usbhid-ups
    uci set nut_server.eaton5e.port=auto
    uci set nut_server.upsd=upsd
    uci commit nut_server
    

    Ricordare il nome dell’UPS, in questo caso eaton5e, poiché verrà utilizzato nei passaggi successivi.

Passaggio 3: configurare il monitoraggio#

Il monitor UPS (upsmon) è un demone che monitora l’UPS e avvia l’arresto del sistema quando la batteria dell’UPS è scarica. Si connette al server UPS (upsd) e interroga lo stato dell’UPS.

In questo scenario il monitor UPS è in esecuzione sulla stessa macchina del server UPS, quindi si connetterà a localhost.

  1. Configurare l’utente per il monitoraggio all’interno di upsd. Si noti che la password è semplice perché non viene inviata attraverso la rete:

    uci set nut_server.upsuser=user
    uci set nut_server.upsuser.username=upsuser
    uci set nut_server.upsuser.password=password
    uci set nut_server.upsuser.upsmon=master
    
  2. Configurare il monitor:

    uci set nut_monitor.upsmon=upsmon
    uci set nut_monitor.master=master
    uci set nut_monitor.master.upsname=eaton5e
    uci set nut_monitor.master.hostname=localhost
    uci set nut_monitor.master.username=upsuser
    uci set nut_monitor.master.password=password
    
  3. Eseguire il commit e riavviare i servizi:

    uci commit nut_server
    uci commit nut_monitor
    /etc/init.d/nut-server restart
    /etc/init.d/nut-monitor restart
    

Passaggio 4: verificare lo stato dell’UPS#

Controllare lo stato dell’UPS:

upsc eaton5e

L’output dovrebbe apparire così:

battery.charge: 100
battery.runtime: 2637
battery.type: PbAc
device.mfr: EATON
device.model: 5E 850i
...

Se l’output è vuoto o viene visualizzato un errore, verificare il contenuto di /var/log/messages.

Un log corretto del server per un UPS collegato:

Nov 29 09:23:08 NethSec upsd[7111]: Connected to UPS [eaton5e]: usbhid-ups-eaton5e

Un log corretto per upsmon:

Nov 29 09:23:11 NethSec upsmon[7189]: Communications with UPS eaton5e@localhost established

Se viene visualizzato un errore, consultare Risoluzione dei problemi.

Se tutto funziona correttamente, l’UPS dovrebbe essere monitorato e il sistema dovrebbe spegnersi quando la batteria si trova in uno stato critico, solitamente al di sotto del 20%.

Consentire il monitoraggio remoto#

È possibile collegare più dispositivi hardware a un UPS e il server NUT può condividere lo stato dell’UPS con più client. Ad esempio, un altro sistema alimentato dallo stesso UPS può ispezionare lo stato dell’UPS collegandosi al server NUT e spegnersi quando la batteria è scarica.

Per impostazione predefinita, il server NUT è configurato per ascoltare solo su localhost. Per consentire il monitoraggio remoto, il server deve essere configurato per ascoltare su un indirizzo IP specifico o su tutte le interfacce.

  1. Ascolto su tutte le interfacce:

    uci set nut_server.listen=listen_address
    uci set nut_server.listen.address=0.0.0.0
    
  2. Aggiungere un utente per il monitoraggio remoto. Assicurarsi di selezionare una password sicura:

    uci set nut_server.remoteuser=user
    uci set nut_server.remoteuser.username=remoteuser
    uci set nut_server.remoteuser.password=password
    uci commit nut_server
    /etc/init.d/nut-server restart
    
  1. Verificare lo stato del server:

    netstat -tuln | grep 3493
    
  2. Creare una regola firewall per consentire il monitoraggio remoto dalla LAN, il servizio ascolta sulla porta TCP 3493:

    uci set firewall.ns_allow_https.name='Allow-NUT-from-LAN'
    uci set firewall.ns_allow_https.proto='tcp'
    uci set firewall.ns_allow_https.src='lan'
    uci set firewall.ns_allow_https.dest_port='3493'
    uci set firewall.ns_allow_https.target='ACCEPT'
    uci commit firewall
    /etc/init.d/firewall restart
    

Ora è possibile connettersi al server NUT da un client upsmon remoto. Una volta configurato il client, esso si collegherà al server NUT e monitorerà lo stato dell’UPS. Se la batteria è scarica, il client avvierà lo spegnimento del sistema.

Connettersi a server NUT remoto#

Questo è il caso in cui un firewall secondario è collegato allo stesso UPS e il server NUT è in esecuzione sul firewall primario. Il firewall secondario si collegherà al firewall primario e monitorerà lo stato dell’UPS.

  1. Per prima cosa, installare i servizi NUT sulla macchina client:

    opkg update
    opkg install nut-upsc nut-upsmon
    

    Questi pacchetti non vengono conservati durante un aggiornamento del sistema. Per ulteriori informazioni, consultare Ripristinare pacchetti aggiuntivi.

  2. Quindi, configurare il client per connettersi al server remoto:

    uci set nut_monitor.upsmon=upsmon
    uci set nut_monitor.slave=slave
    uci set nut_monitor.slave.upsname=eaton5e
    uci set nut_monitor.slave.hostname=192.168.1.8
    uci set nut_monitor.slave.username=remoteuser
    uci set nut_monitor.slave.password=password
    uci commit nut_monitor
    /etc/init.d/nut-monitor restart
    
  3. Verificare se il client è connesso al server remoto:

    upsc eaton5e@192.168.1.8
    

    L’output dovrebbe essere lo stesso del server locale.

Ora il client è connesso al server remoto e monitorerà lo stato dell’UPS. Se la batteria è scarica, il client avvierà lo spegnimento del sistema.

Impostazioni UPS extra#

Alcuni modelli di UPS dispongono di impostazioni aggiuntive che possono essere configurate utilizzando il comando upscmd. Per eseguire il comando, l’utente deve disporre delle autorizzazioni appropriate.

  1. Concedere i permessi all’utente:

    uci add_list nut_server.upsuser.instcmd=all
    uci add_list nut_server.upsuser.actions=set
    uci commit nut_server
    /etc/init.d/nut-server restart
    
  2. Controllare i comandi disponibili:

    upscmd -l eaton5e
    
  3. Esempio per disabilitare il beep:

    upscmd -u upsuser -p password eaton5e beeper.disable
    

Risoluzione dei problemi#

Un errore comune è il permesso negato durante l’accesso al dispositivo UPS; ad esempio, è possibile vedere questo errore all’interno di /var/log/messages:

Can't open /etc/nut/ups.conf: Can't open /etc/nut/ups.conf: Permission denied openwrt

Un altro errore comune è che upsd non riesce a connettersi all’UPS; ad esempio, è possibile vedere questo errore all’interno di /var/log/messages:

Nov 29 10:34:51 NethSec upsd[7055]: [D1] mainloop: UPS [eaton5e] is not currently connected
Nov 29 10:34:51 NethSec upsd[7055]: [D1] mainloop: UPS [eaton5e] is now connected as FD -1

Di solito, questo accade quando nut-server si connette al dispositivo UPS prima che il dispositivo sia pronto. Per risolvere il problema, la soluzione più semplice è riavviare il firewall:

reboot

Se non è possibile riavviare il firewall, è possibile provare a fermare il nut-server:

/etc/init.d/nut-server stop

Quindi verificare se il driver riesce a connettersi al dispositivo UPS:

/lib/nut/usbhid-ups -a eaton5e

Output previsto:

Network UPS Tools - Generic HID driver 0.47 (2.8.0)
USB communication driver (libusb 1.0) 0.43
Using subdriver: MGE HID 1.46

In caso di errore, potrebbe essere visualizzato un messaggio simile al seguente:

Can't claim USB device [0463:ffff]@0/0: Entity not found

Si potrebbe quindi provare a reimpostare il dispositivo USB:

usbreset 002/003

Dove 002/003 è l’ID del dispositivo USB trovato con lsusb, 002 è il numero del bus e 003 è il numero del dispositivo.