NUT
Das Hauptziel des Projekts „Network UPS Tools“ (NUT) ist die Unterstützung von Stromversorgungsgeräten wie unterbrechungsfreien Stromversorgungen, Stromverteilungseinheiten und Solar-Controllern. NUT bietet dafür viele Steuerungs- und Überwachungsfunktionen mit einer einheitlichen Steuerungs- und Verwaltungsschnittstelle; mehr als 100 verschiedene Hersteller und mehrere tausend Modelle sind kompatibel.
Installation und Konfiguration
Siehe https://networkupstools.org/docs/user-manual.chunked/ar01s06.html
# from EPEL repo
dnf -y install nut
Automatischer Scan der USV-Eigenschaften:
nut-scanner
# using snmpv3
nut-scanner --start_ip 192.0.2.30 --end_ip 192.0.2.37 --snmp_scan --secLevel authNoPriv --secName myuser --authPassword linuxfabrik --authProtocol MD5
Anschliessend gefundene Ergebnisse zur /etc/ups/ups.conf
hinzufügen (Beispiel [hp-usv]
, siehe weiter unten). Ohne konfigurierte /etc/ups/ups.conf
können die nut-Dienste nicht starten - im Notfall also anhand des Beispiels weiter unten manuell konfigurieren.
Dann:
systemctl enable --now nut-driver@hp-usv.service
systemctl enable --now nut-monitor.service nut-server.service nut.target nut-driver.target
# test if values can be read
upsc hp-usv@localhost
Device aktiv überwachen:
[monuser]
password = password
upsmon master
MONITOR hp-usv@localhost 1 monuser password master
systemctl start nut-monitor
tail -f /var/log/messages
systemctl enable nut-server
systemctl enable nut-monitor
# maybe need to adjust or extend /usr/lib/udev/rules.d/62-nut-usbups.rules (for USB-Devices). See Troubleshooting below
SNMP-UPS
SNMP-USVs sind etwas aufwändiger einzubinden. Falls die USVs per SNMP erreicht werden können/sollen, muss Net-SNMP installiert werden:
dnf -y install net-snmp
Automatischer Scan der USV-Eigenschaften:
nut-scanner --start_ip 192.0.2.30 --end_ip 192.0.2.37 --snmp_scan --secLevel authNoPriv --secName myuser --authPassword linuxfabrik --authProtocol MD5
Auch hier: wenn nichts gefunden wurde, manuell konfigurieren:
[snmpv3]
driver = snmp-ups
port = 192.0.2.36:161
snmp_version = v3
secLevel = authNoPriv
secName = mysecurityname
authPassword = myauthenticationpassphrase
#privPassword = myprivatepassphrase
desc = "Example SNMP v3 device, with the highest security level"
SELinux - nicht schön, aber anders haben wir es nicht geschafft, NUT für SNMP unter SELinux zu überreden:
setenforce 0
# semanage permissive --add nut_upsd_t
# semanage permissive --add nut_upsdrvctl_t
# semanage permissive --add nut_upsmon_t
nach dem Start der Daemons:
cd /tmp
ausearch -c 'snmp-ups' --raw | audit2allow -M my-snmpups
semodule -i my-snmpups.pp
setenforce 1
Schwellwerte anpassen
Siehe https://networkupstools.org/docs/man/apcsmart.html#_ignoring_lb_state
[hp-usv]
driver = "usbhid-ups"
port = "auto"
vendorid = "0463"
productid = "ffff"
product = "Eaton 5SC"
serial = "4711"
vendor = "EATON"
ignorelb
override.battery.charge.low = 19
systemctl restart nut-server
# Werte überprüfen
upsc hp-usv@localhost
Mails bei Events versenden
Siehe: https://networkupstools.org/docs/user-manual.chunked/ar01s07.html
semanage permissive --add nut_upsmon_t
#!/usr/bin/env bash
echo "$*" | mail -s "UPS Event $NOTIFYTYPE for $UPSNAME@$(/usr/bin/hostname)" -r noreply@example.com admin@example.com
chmod +x /etc/ups/notify-mail
NOTIFYCMD /usr/bin/notify-email
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
systemctl restart nut-monitor
systemctl restart nut-server
Beispiele für Benachrichtigungen
Subject: UPS Event ONBATT for hp-usv@localhost
UPS hp-usv@localhost on battery
Subject: UPS Event ONLINE for hp-usv@localhost
UPS hp-usv@localhost on line power
Troubleshooting
- Nach Update von NUT verbietet SELINUX den Zugriff auf usbhid-ups-hp-usv:
nut-server.service - Network UPS Tools - power devices information server Loaded: loaded (/usr/lib/systemd/system/nut-server.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2024-04-19 15:23:36 CEST; 54min ago Main PID: 10854 (upsd) Tasks: 1 CGroup: /system.slice/nut-server.service └─10854 /usr/sbin/upsd -F Apr 19 15:53:38 server.example.com nut-server[10854]: Can't connect to UPS [hp-usv] (usbhid-ups-hp-usv): Permission denied Apr 19 15:53:38 server.example.com upsd[10854]: Can't connect to UPS [hp-usv] (usbhid-ups-hp-usv): Permission denied
Kurzfristige Lösung -
nut_upsd_t
in den permissive Mode setzen:semanage permissive --add nut_upsd_t
Falls der USV Treiber nicht läuft:
ps -ef | grep -i usbhid upsdrvctl start
- Rechte des USB-Devices prüfen, uDev-Regel einrichten:
Der
nut-scanner
liefert dievendorid
und dieproductid
. Mitlsusb -d [vendor]:[product]
wird nun der Bus und die Devnum ermittelt, womit das Device unter/dev/bus/usb/$bus/$devnum
gefunden werden kann.nut-scanner # Scanning USB bus. # No start IP, skipping SNMP # No start IP, skipping NUT bus (old connect method) # Scanning NUT bus (avahi method). # Scanning IPMI bus. # Failed to create client: Daemon not running # [nutdev1] # driver = "usbhid-ups" # port = "auto" # vendorid = "0463" # productid = "FFFF" # product = "Eaton 5SC" # serial = "3C87351608" # vendor = "EATON" # bus = "002" lsusb -d 0463:FFFF # Bus 002 Device 005: ID 0463:ffff MGE UPS Systems UPS ll /dev/bus/usb/002/005 # crw-rw-r--. 1 root dialout 189, 132 Aug 13 11:07 /dev/bus/usb/002/005
Die Gruppe sollte entweder
nut
oderdialout
sein, damit der Treiber zugreifen kann. Ist dies nicht der Fall, so muss eine uDev-Regel eingerichtet werden, zum Beispiel:ATTR{idVendor}=="0463", ATTR{idProduct}=="ffff", MODE="664", GROUP="dialout"
Built on 2024-11-18