Ubuntu 14.04 Trusty Tahr
Ubuntu 12.04 Precise Pangolin
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
NUT ist ein Client/Server-Framework zur Ansteuerung und Verwaltung einer USV (unterbrechungsfreie Stromversorgung, englisch: UPS). Unterstützt werden über 100 verschiedene Hersteller und Modelle. Einige Programmkomponenten arbeiten normalerweise als Systemdienst (Daemon), d.h. diese werden automatisch beim Einschalten des Rechners gestartet.
Zunächst sollte geklärt werden, ob man ein zur USV passendes (serielles oder USB-) Kabel hat. Bauanleitungen für evtl. fehlende Kabel findet man auf der Projektseite .
Das Konfigurieren und Testen der USV sollte anfangs nur passiv geschehen. Das heißt, dass die USV nur über das Datenkabel angeschlossen ist. Diese Anleitung behandelt beispielhaft eine "APC Smart-UPS", deshalb müssen einige Angaben entsprechend angepasst werden.
Folgende Programme werden verwendet:
upsd - verwaltet Treiber und Zugriffsrechte
upsmon - überwacht die USV
upssched - Scheduler (Zeitplaner) für den upsmon
Folgendes Paket wird für die Installation benötigt [1]:
nut
mit apturl
Paketliste zum Kopieren:
sudo apt-get install nut
sudo aptitude install nut
Optional können weitere Zusatzpakete installiert werden:
nut-cgi (Weboberfläche, siehe unten)
nut-snmp (SNMP-Überwachung)
nut-xml (universe, für spezielle Modelle von Eaton oder MGE)
nut-ipmi (universe, für IPMI, erst ab Ubuntu 14.04)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install nut-cgi nut-snmp nut-xml nut-ipmi
sudo aptitude install nut-cgi nut-snmp nut-xml nut-ipmi
Danach sollte man (wenn noch nicht vorhanden) die Beispieldateien aus /usr/share/doc/nut/examples/ nach /etc/nut/ kopieren. Damit die Dateien auch genutzt werden können, müssen sie nur noch umbenannt werden: .sample im Dateinamen löschen. Das Konfigurationsbeispiel von upsmon muss gegebenenfalls noch entpackt [2] werden. Dies geschieht z.B. mit [3]:
gzip -d upsmon.conf.sample.gz
Damit ist die Installation des Servers abgeschlossen und es kann mit der Konfiguration begonnen werden.
Dazu editiert [4] man /etc/default/nut wie folgt:
START_UPSD=yes UPSD_OPTIONS="" START_UPSMON=yes UPSMON_OPTIONS=""
Dazu editiert man die /etc/nut/ups.conf:
[apc] driver = apcsmart # Treiber der verwendet werden soll port = /dev/ttyS0 # Port, an dem die USV angeschlossen ist (hier COM1) desc = "APC Smart-UPS" # Beschreibung der USV
Es gibt noch weitere Parameter, die man hier angeben kann. Diese kann man in der man-Page von ups.conf nachlesen. Eine Liste unterstützter USVs findet man unter Hardware compatibility list .
Dazu editiert man die /etc/nut/upsd.conf. Hier braucht nichts geändert werden, wenn die USV nur einen einzigen Rechner (Host) versorgt. Ansonsten kann man hier die Zugriffsrechte für das Netzwerk konfigurieren. Das sieht beispielsweise so aus:
ACL all 0.0.0.0/0 # komplettes Netzwerk ACL localhost 127.0.0.1/32 # eigener Rechner ACL netz 192.168.1.0/24 # Netzwerksegment 1 ACL netz2 192.168.2.0/24 # Netzwerksegment 2 ACCEPT localhost # erlaubt Zugriff von localhost ACCEPT netz # erlaubt Zugriff von netz ACCEPT netz2 # erlaubt Zugriff von netz2 REJECT all # verweigert Zugriff von all
Mit der Option LISTEN kann man noch eine bestimmte Netzwerkkarte angeben werden, auf der nur der Zugriff gestattet wird.
Dazu editiert man /etc/nut/upsd.users. Es bietet sich hier an, drei Benutzer anzulegen, und zwar einen "upsmaster" (der auf dem Server die Überwachung übernimmt), einen "upsslave" (der von den Clients die Überwachung übernimmt) und einen "upsadmin" (der Verwaltungsaufgaben übernehmen darf).
[upsmaster] # Benutzername password = upsmaster # Passwort für den Benutzer allowfrom = localhost # Zugriff von (man kann die ACLs verwenden) upsmon master # Art des Zugriffs [upsslave] password = upsslave allowfrom = netz netz2 localhost upsmon slave [upsadmin] password = upsadmin allowfrom = localhost actions = SET instcmds = ALL
Die Benutzer in dieser Datei müssen nicht zwingend lokal auf dem Rechner existieren.
Dazu editiert man die /etc/nut/upsmon.conf:
RUN_AS_USER root
Da das vorkompilierte NUT unter der Benutzerkennung nut erzeugt wurde, kann man einige Funktionen nicht richtig nutzen (z.B. den Zugriff auf den seriellen Port). Man kann zwar die Rechte und die dazugehörigen Benutzer auf dem Port zwar ändern, aber diese werden nach dem Neustart des PCs durch AppArmor wieder zurückgesetzt. Genau das selbe passiert auch unter /var/run/nut.
Als nächstes sagt man dem Monitor, was er sich anschauen soll:
MONITOR apc@localhost 1 upsmaster upsmaster master
Dies sagt dem Monitor, dass die USV "apc" am lokalen Rechner (wobei mind. 1 USV vorhanden sein muss) mit den Benutzer "upsmaster" und dem Passwort "upsmaster" abgefragt wird.
MINSUPPLIES 1
Gibt an, wie viele USVs mindestens verfügbar sein müssen.
SHUTDOWNCMD “/sbin/shutdown -h +0“
Der Befehl zum Herunterfahren des Systems.
NOTIFYCMD /sbin/upssched
Gibt an welches Programm gestartet werden soll, wenn ein bestimmtes Ereignis eintritt. Zu upsched später mehr.
POLLFREQ 5
Ist das Intervall in Sekunden, in dem der Monitor die USV abfragt.
POLLFREQALERT 5
Ist das Intervall in Sekunden, in dem der Monitor die USV abfragt, wenn die USV auf Alarm steht (bspw. die USV auf Batterie läuft).
HOSTSYNC 15
Ist die Zeit, die der Server wartet, dass die Clients ihre Verbindung trennen können, wenn FSD gesetzt worden ist (FSD wird gesetzt wenn z.B. die Batterie fast leer ist).
DEADTIME 15
Die Zeit die gewartet wird, wenn die USV nicht erreichbar ist (bevor sie als nicht verfügbar gilt). Sollte das 3-fache von POLLFREQ
und POLLFREQALERT
sein.
POWERDOWNFLAG /etc/killpower
Diese Datei wird vom Monitor erstellt, wenn der Rechner herunterfahren soll.
NOTIFYMSG ONLINE "USV-ONLINE" NOTIFYMSG ONBATT "USV-AUF-BATTERIE" # und so weiter ...
Hier werden die Nachrichten für bestimmte Ereignisse deklariert. Ereignisse können sein:
ONLINE
ONBATT
LOWBATT
FSD
COMMOK
COMMBAD
SHUTDOWN
REPLBATT
NOCOMM
NOPARENT
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC # und so weiter ...
Dies sind die Aktionen, die durchgeführt werden, wenn ein Ereignis eintritt. SYSLOG
gibt an, das das Ereignis ins Systemprotokoll geschrieben wird. WALL
sendet Nachrichten an alle angemeldeten Benutzer am lokalen PC (siehe auch wall). EXEC
gibt den Status an das Programm von NOTIFYCMD
weiter. Wenn z.B. nur Nachrichten gesendet werden sollen, reicht WALL
aus. Hier werden die selben Ereignisse verwendet wie bei NOTIFYMSG
.
RBWARNTIME 43200
Ist die Zeit in Sekunden bevor die Meldung für den Batteriewechsel kommt.
NOCOMMWARNTIME 300
Ist die Zeit in Sekunden, wo die Meldung kommt das die USV nicht erreichbar ist. Diese Meldung wiederholt sich so lange bis die USV wieder erreichbar ist.
FINALDELAY 5
Ist die Zeit die gewartet wird, nachdem der SHUTDOWNCMD aufgerufen wird bevor er ausgeführt wird.
Bevor man die Datei /etc/nut/upssched.conf editiert, sollte man einen Ordner unter /etc/nut/ mit dem Namen upssched anlegen.
CMDSCRIPT /etc/nut/upssched/upsscript
Ist der Pfad zu dem Skript, was ausgeführt werden soll, wenn die Trigger (Schalter) gesetzt werden.
PIPEFN /etc/nut/upssched/upssched.pipe LOCKFN /etc/nut/upssched/upssched.lock
Diese Dateien werden genutzt, um mit den Prozessen zu agieren. Sie werden automatisch erzeugt und gelöscht.
AT ONBATT * START-TIMER onbatt 90 AT ONLINE * CANCEL-TIMER onbatt AT LOWBATT * EXEC battleer
In diesem Fall wird ein Timer gestartet, wenn die USV auf Batterie umschaltet. Dieser wartet 90 Sekunden, bevor er den Parameter onbatt
an das CMDSCRIPT
weiter gibt. Schaltet die USV wieder ONLINE, so wird der Timer abgebrochen. Wenn die USV Batterie niedrig ist, wird sofort das Skript mit dem Parameter battleer
ausgeführt.
Das Skript ist ein einfaches Beispiel für die Konfiguration:
1 2 3 4 5 6 7 8 9 | #! /bin/sh case $1 in onbatt) /sbin/shutdown -h +0;; battleer) /sbin/upssched fsd;; *) echo "Falscher Parameter";; esac |
Im Ordner /etc/nut sollten alle Dateien root gehören und die Gruppe nut Leserechte [5] haben. Dies geschieht mit
chmod -R 740 /etc/nut/* chown -R root:nut /etc/nut/* chmod -R 750 /etc/nut/upssched
Wenn man alles nach seinen Wünschen eingestellt hat, kann man nun den Rechner neu starten. Dann kann man mit “upsc apc“ den Status seiner USV auslesen. Als nächstes zieht man die Stromversorgung der USV ab, um zu sehen ob alles so funktioniert wie gewünscht. Wenn alles funktioniert, kann man nun die USV richtig an den Rechner anschließen.
Folgendes Paket wird für die Installation benötigt:
nut-client
mit apturl
Paketliste zum Kopieren:
sudo apt-get install nut-client
sudo aptitude install nut-client
In der Datei /etc/default/nut muss der Monitor auf YES
gesetzt werden, der upsd
muss auf no
stehen.
Beim Client muss hier nichts eingetragen sein, also alles auskommentieren.
Im Prinzip genau wie beim Server, nur das die Zeile von Monitor anders ist.
MONITOR apc@192.168.1.1 1 upsslave upsslave slave
Anstatt der IP-Adresse kann hier auch der Hostname angegeben werden, falls er aufgelöst werden kann.
Kann hier genau so genutzt werden wie beim Server.
Rechner neu starten und mit:
upsc apc@192.168.1.1
testen, ob die Daten ausgelesen werden können.
Man kann eine Web-Oberfläche für Nut installieren, um diese von einen beliebigen Ort im Netzwerk zu kontrollieren und Testläufe zu starten. Voraussetzung ist ein laufender Webserver.
Folgendes Paket wird für die Installation benötigt:
nut-cgi
mit apturl
Paketliste zum Kopieren:
sudo apt-get install nut-cgi
sudo aptitude install nut-cgi
Ist dies installiert, so kann man mit einem Webbrowser auf die gerade erstellte Seite von NUT zugreifen. Zum Beispiel:
http://localhost/nut
Für die Anmeldung gelten die Benutzernamen, die in ups.users eingerichtet wurden.
Der Webserver sollte so eingerichtet werden, dass der Zugriff auf die Web-Oberfläche nur vom lokalen Netz erlaubt ist.
Diese Revision wurde am 26. Februar 2016 12:37 von aasche erstellt.