Gestione di un UPS in Debian con Nut
Server con UPS collegato
Installazione
Debian 6
- Installazione software
sudo -i apt-get install nut pwgen
Debian >=7
- Installazione software
sudo -i sudo apt-get install nut-client nut-server pwgen
Configurazione generale
export UPS_NAME="apc_smartups_1500_rm" export UPS_PASS="$(pwgen -B -c -1)" export UPS_IP="192.168.0.102"
- Impostare la modalità di esecuzione per un solo UPS:
export UPS_MODE=standalone
- Oppure per un server che controlla anche altri ups
export UPS_MODE=netserver
- Configurare la modalità:
sudo sed -i /etc/nut/nut.conf -e "s/^MODE=none/MODE=${UPS_MODE}/"
Configurazione UPS APC USB
cat | sudo tee -a /etc/nut/ups.conf > /dev/null <<EOFile
[$UPS_NAME]
driver = usbhid-ups
port = auto
EOFile
- Avviare il driver
sudo upsdrvctl start
- Se si riceve l'errore segeutne, togliere e rimettere il cavo USB, oppure riavviare, per far settare le permission sul device della porta usb:
Network UPS Tools - UPS driver controller 2.4.3 Network UPS Tools - Generic HID driver 0.34 (2.4.3) USB communication driver 0.31 Can't claim USB device [051d:0002]: could not detach kernel driver from interface 0: Operation not permitted Driver failed to start (exit status=1)
- Se non è possibile riavviare o staccare il cavo, provare le seguenti operazioni:
sudo rmmod usbhid sudo rmmod uhci_hcd sudo modprobe uhci_hcd sudo modprobe usbhid
sudo udevadm trigger
- Riprovare
sudo upsdrvctl start
- Se non va (perchè il device non è posseduto dal gruppo nut), lanciare (si sistemerà al reinserimento del cavo o al reboot)
sudo upsdrvctl -u root start
- Se non va ancora, verificare i dettagli dell'ups (in questo caso 003 005):
lsusb | grep American Bus 003 Device 005: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
- Cambiare l'owner del device usb:
chown nut: /dev/bus/usb/003/005
- Riprovare
sudo upsdrvctl start
Per UPS APC Seriale
cat | sudo tee -a /etc/nut/ups.conf > /dev/null <<EOFile
[$UPS_NAME]
driver = apcsmart
port = /dev/ttyS0
EOFile
- Aggiungere l'utente nut al gruppo dialout, per poter usare la seriale:
sudo gpasswd -a nut dialout
Altri UPS
Per altri modelli di UPS, vedi NUT hardware compatibility list
Configurazione server
- Stoppare i servizi, per Debian 6
sudo /etc/init.d/nut stop
- Stoppare i servizi, per Debian 7
sudo /etc/init.d/nut-server stop sudo /etc/init.d/nut-client stop
- Killare l'eventuale daemon attivo:
sudo killall upsd
- Avviare il demone per controllare il dialogo con l'UPS:
sudo upsdrvctl start
Network UPS Tools - UPS driver controller 2.2.2
Network UPS Tools (version 2.2.2) - APC Smart protocol driver
Driver version 1.99.8, command table version 2.0
- Se non dovesse funzionare, provare a scollegare e ricollegare il cavo di collegamento dell'ups, per caricare i moduli necessari.
sudo upsdrvctl stop
- Configurare il demone:
cat | sudo tee -a /etc/nut/upsd.conf > /dev/null <<EOFile
LISTEN 127.0.0.1 3493
LISTEN ${UPS_IP} 3493
EOFile
- Configurare gli utenti e le password:
cat | sudo tee -a /etc/nut/upsd.users > /dev/null <<EOFile
[local_mon] #username
password = $UPS_PASS #password
actions = set #permissions for upsrw -s
instcmds = ALL #permissions for upscmd
upsmon master #role
EOFile
- Configurare il monitor:
sudo sed -i -e "/# MONITOR myups@localhost 1 upsmon pass master/ a\
MONITOR ${UPS_NAME}@localhost 1 local_mon ${UPS_PASS} master" /etc/nut/upsmon.conf | grep ^MONITOR
- Riavviare il tutto, per Debian 6
sudo /etc/init.d/nut restart
- Riavviare il tutto, per Debian >=7
sudo /etc/init.d/nut-server restart sudo /etc/init.d/nut-client restart
- Nei log:
sudo tail -f /var/log/syslog
Apr 12 13:54:18 pubserver apcsmart[32070]: Startup successful Apr 12 13:54:18 pubserver upsd[32071]: listening on 0.0.0.0 port 3493 Apr 12 13:54:18 pubserver upsd[32071]: Connected to UPS [apc_smartups_620]: apcsmart-apc_smartups_620 Apr 12 13:54:18 pubserver upsd[32073]: Startup successful Apr 12 13:54:18 pubserver upsmon[32075]: Startup successful Apr 12 13:54:18 pubserver upsd[32073]: Connection from 127.0.0.1 Apr 12 13:54:18 pubserver upsd[32073]: Client local_mon@127.0.0.1 logged into UPS [apc_smartups_620]
Test dell'UPS
- Per leggere i dati dall'ups:
upsc $UPS_NAME
battery.alarm.threshold: L battery.charge: 100.0 battery.charge.restart: 00 battery.date: 02/05/02 battery.runtime: 1920 battery.runtime.low: 120 battery.voltage: 13.85 battery.voltage.nominal: 012 driver.name: apcsmart driver.parameter.pollinterval: 2 driver.parameter.port: /dev/ttyS0 driver.version: 2.2.2 driver.version.internal: 1.99.8 input.frequency: 50.00 input.quality: FF input.sensitivity: H input.transfer.high: 253 input.transfer.low: 208 input.transfer.reason: T input.voltage: 227.5 input.voltage.maximum: 227.5 input.voltage.minimum: 224.6 output.voltage: 227.5 output.voltage.nominal: 230 ups.delay.shutdown: 180 ups.delay.start: 000 ups.firmware: 22.5.I ups.id: UPS_IDEN ups.load: 031.8 ups.mfr: APC ups.mfr.date: 04/25/00 ups.model: Smart-UPS 620 ups.serial: NS0018141441 ups.status: OL ups.test.interval: 1209600 ups.test.result: NO
Impostazione dei parametri hardware per l'ups
- ATTENZIONE: CONTROLLARE SEMPRE, ANCHE SE SI RICEVER "OK", CHE LA VARIABILE SIA STATA SETTATA
- I parametri di
Type: ENUM
- si possono impostare solo ad uno dei valori elencati
- Elencare i parametri configurabili
upsrw $UPS_NAME
- si ottiene una lista del tipo:
[battery.alarm.threshold] Battery alarm threshold Type: ENUM Option: "0" Option: "T" Option: "L" SELECTED Option: "N" [battery.charge.restart] Minimum battery level for restart after power off (percent) Type: ENUM Option: "00" SELECTED Option: "15" Option: "50" Option: "90" ...
Parametri presenti su APC BackUPS e APC SmartUPS
- Nel caso di non si riescano a cambiare, o non sono disponibili dei valori, si possono gestire a livello di drivers:
http://www.networkupstools.org/docs/man/apcsmart.html
driver = usbhid-ups port = auto ignorelb override.battery.charge.low = 30 override.battery.runtime.low = 500
- battery.charge.low: indica a che percentuale di carica batteria rimasta iniziare lo shutdown
- Impostarla con
upsrw -u local_mon -p $UPS_PASS -s battery.charge.low=50 $UPS_NAME
- Controllarlo con
upsc $UPS_NAME battery.charge.low
50
- battery.runtime.low: indica a quanti secondi di batteria rimasta iniziare lo shutdown
- Impostarla con
upsrw -u local_mon -p $UPS_PASS -s battery.runtime.low=300 $UPS_NAME
- Controllarlo con
upsc $UPS_NAME battery.runtime.low
300
- ups.delay.shutdown: indica dopo quanto tempo verrà tolta la corrente. ATTENZIONE: se si riaccendono manualmente le macchine dopo uno shutdown, la corrente verrà di nuovo tolta dopo questo tempo !!!
- Impostare:
upsrw -u local_mon -p $UPS_PASS -s ups.delay.shutdown=60 $UPS_NAME
- Controllare:
upsc $UPS_NAME ups.delay.shutdown
60
- ups.delay.start: indica dopo quanto tempo verrà ridata corrente.
- Impostare (se non accetta 60, usare 060):
upsrw -u local_mon -p $UPS_PASS -s ups.delay.start=60 $UPS_NAME
- Controllare
upsc $UPS_NAME ups.delay.start
60
Parametri presenti solo su APC SmartUPS
- ups.id: indica il nome dell'ups, la su descrizione (da apporre sull'etichetta)
- Impostarla
upsrw -u local_mon -s ups.id="UPS001" $UPS_NAME
- Controllare
upsc $UPS_NAME ups.id
UPS001
- battery.charge.restart: indica quanto la batteria deve essere carica, prima di ridare corrente. Per evitare che quando si riaccendono le macchine, se dovesse rimancare la corrente, ci sia abbastanza tempo per rifare shutdown
- Impostare:
upsrw -u local_mon -s battery.charge.restart=15 $UPS_NAME
- Controllare:
upsc $UPS_NAME battery.charge.restart
15
Client Linux collegato in rete
Configurazione Accesso sul Server
export CLIENT_NAME="firemen"
export CLIENT_DOM="cross.priv"
export CLIENT_IP="192.168.0.254"
export CLIENT_PASS="jeeR9ied"
export UPS_NAME="apc_smartups_1500_rm"
export UPS_SERVER="crosrv01.${CLIENT_DOM}"
- Configurare il demone:
sudo sed -i -e"/^ACCEPT/i\ACL $CLIENT_NAME ${CLIENT_IP}/32" /etc/nut/upsd.conf
sudo sed -i -e"/^REJECT/i\ACCEPT $CLIENT_NAME" /etc/nut/upsd.conf
A mano:
cat | sudo tee /etc/nut/upsd.conf > /dev/null <<EOFile
ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACL $CLIENT_NAME ${CLIENT_IP}/32
ACCEPT localhost
ACCEPT $CLIENT_NAME
REJECT all
EOFile
- Configurare gli utenti e le password:
cat | sudo tee -a /etc/nut/upsd.users > /dev/null <<EOFile
[${CLIENT_NAME}]
password = $CLIENT_PASS
allowfrom = ${CLIENT_NAME}.$CLIENT_DOM
upsmon master
EOFile
sudo invoke-rc.d nut restart
Configurazione Client
Debian<9
- Installare
sudo aptitude install nut
- Configurare SOLO il monitor
cat | sudo tee /etc/nut/upsmon.conf > /dev/null <<EOFile
MONITOR ${UPS_NAME}@${UPS_SERVER} 1 ${CLIENT_NAME} ${CLIENT_PASS} slave
POWERDOWNFLAG /etc/killpower
SHUTDOWNCMD "/sbin/shutdown -h now"
EOFile
- Impostare le permission
sudo chown root:nut /etc/nut/upsmon.conf sudo chmod 640 /etc/nut/upsmon.conf
- Impostare l'autostart per il monitor:
sudo sed -i 's/^START_UPSMON=no/START_UPSMON=yes/' /etc/default/nut && \ echo "702612de8e9e1a34c35cd7d4b05baf30 /etc/default/nut" | md5sum --check
- Riavviare il monitor
sudo invoke-rc.d nut restart
- Vedere se fa login:
upsc -l $UPS_SERVER
- Vedere se legge i dati:
upsc ${UPS_NAME}@${UPS_SERVER} ups.model
Debian>=9
- Installare
apt-get install nut-client
- Configurare SOLO il monitor
cat | sudo tee /etc/nut/upsmon.conf > /dev/null <<EOFile
MONITOR ${UPS_NAME}@${UPS_SERVER} 1 ${CLIENT_NAME} ${CLIENT_PASS} slave
POWERDOWNFLAG /etc/killpower
SHUTDOWNCMD "/sbin/shutdown -h now"
EOFile
- Configurare il daemon:
vi /etc/nut/nut.conf
MODE=netclient
- Riavviare:
systemctl restart nut-client.service systemctl status nut-client.service
- Sul server verificare che il client sia connesso:
upsc -c apc_smartups_3000_xl@localhost
Client Windows collegato in rete
- Installare da uno dei due siti
- Lanciare il TOOL
- Installare come servizio
- Editare la configurazione, aggiungendo la sola riga:
MONITOR apc_smartups_620@server.host.dom 1 client_win PASSWORD_HERE slave
Riferimenti
- Monitoring UPS Power Status Using Network UPS Tools (NUT) 2.2.0 on Multiple OpenSuSE 10.3 Servers | HowtoForge - Linux Howtos and Tutorials
- Monitoring a UPS with nut on Debian or Ubuntu Linux | Random Bits
- Network UPS Tools: Documentation: README
- MGE UPS SYSTEMS - OpenSource > MGE and NUT How-To
- Re: [Linux-usb-users "unplugging" USB device by software?]
- [Nut-upsuser Can't claim USB device]