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:

/etc/ups/upsd.users
[monuser]
password = password
upsmon master
/etc/ups/upsmon.conf
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:

/etc/ups/ups.conf
[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

/etc/ups/ups.conf
[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
/etc/ups/notify-mail
#!/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
/etc/ups/upsmon.conf
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 die vendorid und die productid. Mit lsusb -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 oder dialout 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