sobota, 13 grudnia 2014

Network UPS Tools NUT Linux

Podstawowe informacje o NUT (Network UPS Tools)


Nut - Network UPS Tools to oprogramowanie umożliwiające nadzorowanie stanu zasilaczy UPS oraz pozwalające zaplanować odpowiednie reakcje programowe na zmiany stanu monitorowanych urządzeń zasilających. Nut umożliwia ponadto zaawansowane monitorowanie jednostek dystrybucji mocy, a także współpracuje z zaawansowanymi kontrolerami paneli słonecznych. Nut umożliwia ponadto kontrolowanie stanu zasilaczy UPS fizycznie podpiętych do odległych systemów poprzez sieć ethernet/internet, między innymi za pomocą protokołu tcp. Nut jest bardzo popularnym i lubianym pakietem programowym, w szczególności jeżeli chodzi o środowisku Linux. Kompatybilność z kilkoma tysiącami różnych urządzeń oraz prostota konfiguracji oprogramowania to podstawowe atuty Nut'a. Oprogramowanie dostępne jest w wersjach przeznaczonych dla różnych systemów operacyjnych, także dla Windows.

Nut a monitorowanie zasilacza UPS


W niniejszym artykule opiszę, przytaczając konkretne i przetestowane przeze mnie przykłady, w jaki sposób, krok po kroku, zainstalować i skonfigurować oprogramowanie Nut w celu monitorowania zasilacza UPS Eaton 5130 (USB), podłączonego do komputera  systemem operacyjnym Linux, poprzez port USB, z możliwością nadzoru stanu zasilacza i wywoływania odpowiednich procedur związanych ze zmianą stanu UPS na komputerze głównym oraz na innych komputerach z systemami operacyjnymi Linux, znajdujących się w tej samej sieci.

Wymagania


Poniżej przedstawione wymagania są niezbędne do przeprowadzenia instalacji i konfiguracji oprogramowania według wskazówek opisanych w niniejszym artykule:

System operacyjny Linux;

Narzędzia oraz biblioteki niezbędne do kompilowania oprogramowania ze źródeł, przykładowo
glibc glibc-devel gcc;

Zasilacz UPS kompatybilny z oprogramowaniem Nut (w tym przykładzie Eaton 5130 USB) z możliwością połączenia z komputerem poprzez port USB.


UPS Eaton 5130 - Nut
Zasilacz UPS Eaton 5130 jest w 100% kompatybilny z oprogramowaniem Nut


Założenia oraz czynności wstępne


Oprogramowanie Nut powinno zostać zainstalowane zarówno na komputerze do którego zostanie podpięty zasilacz UPS poprzez port USB, jak na pozostałych komputerach w sieci, na których stan zasilacza UPS ma być monitorowany.

Komputer/system, do którego zostanie podpięty zasilacz UPS poprzez port USB, będzie dalej nazywany netserver (master), a pozostałe komputery/systemy będą określane jako netclient (slave).
W sytuacji gdy występuje awaria zasilania, a komputery master / slave pozyskują napięcie z zasilacza UPS, w chwili gdy bateria zasilacza UPS słabnie wszystkie systemy powinny zostać prawidłowo zamknięte.
W przypadku awarii zasilania oraz niskiego poziomu naładowania bateri zasilacza UPS automatycznie rozpoczyna się procedura zamykania systemów. Komputer netserver (master) zamyka system jako ostatni, czekając na zamknięcie wszystkich systemów netclient (slave). Konfiguracja oprogramowania na systemach master / slave jest nieco odmienna. Systemy netclient (slave) generalnie wymagają bardzo prostej i podstawowej konfiguracji. Najbardziej pracochłonna jest konfiguracja systemów netserver (master).

Uwaga: Aby komunikacja sieciowa pomiędzy systemami netserver/netclient była możliwa w przypadku awarii zasilania, a procedura zamykania systemów mogła się odbywać prawidłowo, sprzęt potrzymujący sieć komputerową (switche, huby, routery itp) powinien być prawidłowo zasilany ze żródła UPS !

Wskazówki dotyczące czynności początkowych oraz instalacji odnoszą się zarówno do systemu netserver (master), jak i do systemów netclient (slave). Konfiguracja oprogramowania, po przeprowadzonej instalacji, jest jednak odmienna dla obu typów systemów.

Przed rozpoczęciem kompilacji oprogramowania należy podłączyć zasilacz UPS do portu USB komputera master i sprawdzić stan połączenia, jak przedstawiono poniżez. Uzyskane w poniżej przedstawiony sposób informacje o połączeniu z zasilaczem będą przydatne do prawidłowej konfiguracji oprogramowania Nut na systemie master.

[root@filemon1 nut]# lsusb
Bus 002 Device 002: ID 0463:ffff MGE UPS Systems UPS

Należy również utworzyć użytkownika oraz grupę dla oprogramowania Nut, tak aby mogło ono pracować z uprawnieniami utworzonego użytkownika oraz grupy. Dla celów niniejszego artykułu wybrałem ups:ups, co zostanie odpowiednio zdefiniowane podczas konfiguracji kompilacji (--with-user=ups --with-group=ups)

Oprogramowanie, skompilowane z plików źródłowych, jest instalowane w /usr/local/ups/, co jest ustawieniem standardowym.
Do przechowywania ważnych informacji dotyczących statusu pracy oprogramowania, zostaną wykorzystane następujące ścieżki, które zostaną uwzględnione w chwili konfigurowania opcji kompilacji oprogramowania:

/usr/local/ups/var/run
/usr/local/ups/var/run
/usr/local/ups/var/run 

Powyżej przedstawione ustawienia ścieżek można oczywiście dostosować do własnych potrzeb, tworząc odpowiednie katalogi oraz zwracając szczególną uwagę na prawidłowe ustawienie atrybutów uprawnień utworzonych katalogów. W przypadku zmiany katalogów na inne, należy pamiętać o odpowiednich zmianach w parametrach polecenia configure w chwili konfigurowania parametrów kompilacyjnych oprogramowania.

Należy zatem utworzyć niezbędne katalogi, a następnie ustawić odpowiednie atrybuty uprawnień, przykładowo:

[root@filemon /]# mkdir /usr/local/ups/var/run
[root@filemon /]# chown -R ups:ups /usr/local/ups/var
[root@filemon /]# chmod -R 770 /usr/local/ups/var

Należy dodatkowo utworzyć katalog /usr/local/ups/upssched oraz ustawić odpowiednie atrybuty uprawnień:

[root@filemon /]# mkdir /usr/local/ups/upssched
[root@filemon /]# chown ups:ups /usr/local/ups/upssched
[root@filemon /]# chmod 775 /usr/local/ups/upssched

Pozyskanie oraz instalacja Nut (Network UPS Tools)


Istnieje kilka różnych sposobów pozyskania oraz instalacji oprogramowania Nut. Najprostszym sposobem jest skorzystanie z odpowiednich narzędzi, np. yum lub apt-get, w zależności od dystrybucji systemu Linux. Można również pobrać pakiety binarne z oprogramowaniem Nut, korzystając z odnośników na stronie http://www.networkupstools.org/download.html

Postanowiłem jednak opisać tutaj najbardziej uniwersalny sposób instalacji oprogramowania Nut w wersji dla systemów Linux, a mianowicie metodę polegającą na skompilowaniu plików ze źródła. Przytoczone tutaj przykłady oparte są na wersji oprogramowania 2.7.2, działającj w środowisku Linux. Pliki źródłowe dostępne są w formacie archiwum .tar.gz na stronie http://www.networkupstools.org/download.html

Po ściągnięciu plików źródłowych, należy rozpakować zawartość archiwum do odpowiedniego katalogu. W tym przykładzie archiwum tar.gz zapisane jest w /usr/local/src/nut/, natomiast zawartość archiwum wyodrębniana jest automatycznie do  /usr/local/src/nut/nut-2.7.2/

Po zapisaniu archiwum w /usr/local/src/nut, należy przejść do /usr/local/src/nut, a następnie rozpakować archiwum:

tar -xzf nut-2.7.2.tar.gz

Prawidłowe rozpakowanie pliku-archiwum spowoduje utworzenie odpowiedniego katalogu, zawierającego pliki źródłowe:

[root@filemon1 nut]# ls -al
total 2176
drwxr-xr-x  3 root root      45 Nov 26 08:47 .
drwxr-xr-x  4 root root      35 Nov 26 08:45 ..
drwxr-xr-x 15 root root    4096 Nov 26 22:10 nut-2.7.2
-rw-r--r--  1 root root 2223307 Apr 17  2014 nut-2.7.2.tar.gz

W celu dokonaniu kompilacji oraz instalacji oprogramowania należy wykonać, sukcesywnie, następujęce czynności:

[root@filemon1 nut-2.7.2]# cd /usr/local/nut/

[root@filemon1 nut-2.7.2]# ./configure --with-user=ups --with-group=ups --with-statepath=/usr/local/ups/var/run --with-pidpath=/usr/local/ups/var/run --with-altpidpath=/usr/local/ups/var/run --with-usb

[root@filemon1 nut-2.7.2]# make

[root@filemon1 nut-2.7.2]# make install

Na tym etapie oprogramowanie powinno być prawidłowo zainstalowane, co można wstępnie sprawdzić:

[root@filemon1 /]# ls -al /usr/local/ups
total 12
drwxr-xr-x  9 root ups    84 Nov 26 22:01 .
drwxr-xr-x 14 root root  143 Nov 26 08:57 ..
drwxr-xr-x  2 root ups  4096 Nov 26 22:04 bin
drwxr-xr-x  2 root ups  4096 Nov 26 22:04 etc
drwxr-xr-x  3 root ups  4096 Nov 26 22:04 lib
drwxr-xr-x  2 root ups    61 Nov 26 22:04 sbin
drwxr-xr-x  3 root ups    50 Nov 26 22:04 share
drwxrwxr-x  2 ups  ups     6 Nov 26 21:34 upssched
drwxrwx---  3 ups  ups    16 Nov 26 22:01 var

W katalogu /usr/local/ups/etc powinny znajdować się teraz szablony plików konfiguracyjnych, które następnie powinny zostać wykorzystane do utworzenia odpowiedniej konfiguracji oprogramowania:

[root@filemon1 /]# ls -al /usr/local/ups/etc
total 84
drwxr-xr-x 2 root ups   4096 Nov 26 22:04 .
drwxr-xr-x 9 root ups     84 Nov 26 22:01 ..
-rwxr----- 1 root root  1538 Nov 26 22:04 nut.conf.sample
-rwxr----- 1 root root  3668 Nov 26 22:04 ups.conf.sample
-rwxr----- 1 root root  4578 Nov 26 22:04 upsd.conf.sample
-rwxr----- 1 root root  2131 Nov 26 22:04 upsd.users.sample
-rwxr----- 1 root root 15208 Nov 26 22:04 upsmon.conf.sample
-rwxr----- 1 root root  3921 Nov 26 22:04 upssched.conf.sample

System netserver master - Pliki konfiguracyjne


Na tym etapie należy edytować zawartość szablonów plików konfiguracyjnych Nut, znajdujących się w katalogu /usr/local/ups/etc, wprowadzając do nich poniżej przedstawione zmiany oraz zapisując edytowane pliki szablonów jako pliki konfiguracyjne, tzn. bez rozszerzenia .sample. Wszelkie zakomentowane znakiem # wiersze plików są ignorowane przez pakiet Nut, co oznacza, że wiersze, które mają być przetwarzane przez oprogramowanie Nut muszą zostać odkomentowane. Po zapisie plików konfiguracyjnych należy zwrócić uwagę na prawidłowe ustawienie atrubutów uprawnień plików, tak aby program Nut mógł odczytać ich zawartość:

-rwxr----- 1 root ups  1543 Nov 26 09:30 nut.conf
-rwxr----- 1 root ups  3786 Nov 27 08:19 ups.conf
-rwxr----- 1 root ups  4587 Nov 27 08:22 upsd.conf
-rwxr----- 1 root ups 2174 Nov 26 09:26 upsd.users
-rwxr----- 1 root ups 15185 Nov 26 09:19 upsmon.conf
-rwxr----- 1 root ups  3887 Nov 26 21:34 upssched.conf

1. Plik nut.conf


Plik nut.conf zawiera informacje o podstawowej konfiguracji oprogramowania Nut, określającej tryb pracy pakietu.

Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

MODE=netserver

2. Plik ups.conf


Plik ups.conf jest miejscem w którym określane są nadzorowane urządzenia UPS. Plik jest wykorzystywany przez narzędzie Nut upsdrvctl do uruchamiania i zatrzymywania określonych, w specjalnych sekcjach pliku, sterowników urządzeń. Demon upsd pozyskuje z pliku informacje o urządzeniach i sterownikach.

Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

[Eaton5130]
        driver = usbhid-ups
        port = /dev/bus/usb/002
        #desc = "Eaton5130"
        #vendor = "MGE UPS Systems"

3. Plik upsd.conf


Plik upsd.conf zawiera informacje związane z kontrolą dostępu, informacje o ewentualnych alternatywnych katalogach, w których program ma zapisywać ważne informacje o swoim działaniu, informacje o ewentualnych certyfikatach, informacje o adresie IP opraz porcie, na których demon upsd ma nadsłuchiwać oraz inne informacje.

Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

LISTEN 192.168.0.42 3493

Powyższy adres IP powinien być zgodny z adresem IP maszyny, na której Nut działa w trybie netserver. Port 3493 powinien zostać uwzględniony w ewentualnych regułach iptables oraz/lub w ewentualnie stosowanym oprogramowaniu zapory ogniowej.

4. Plik upsmon.conf


Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):


MONITOR Eaton5130@host1 1 mike cats master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /usr/local/ups/etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

Należy zwrócić szczególną uwagę na to, aby w wierszu MONITOR mike i cats odpowiadały wartością dotyczącym uzytkownika i hasła, określonym w pliku upsd.users. W wierszu MONITOR słowo master oznacza, iż w razie konieczności zamknięcia systemu z powodu awarii zasilania, niniejszy system zostanie zamknięty jako ostatni, po tym jak pozostałe komputery, typu slave, nadzorujące UPS, zostaną wyłączone. Konfigurację komputerów slave opiszę w dalszej części tego artykułu.

5. Plik upsd.users 


W pliku upsd.users należy określić użytkowników oraz ich poziom uprawnień do demona upsd. Dla każdego użytkownika tworzona jest odpowiednia sekcja. Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

[mike]
password = cats
upsmon master

6. Plik upssched.conf


Oto co powinien zawierać plik dla celów niniejszego artykułu (pozostałe wiersze powinny być zakomentowane znakiem #):

CMDSCRIPT /usr/local/ups/bin/upssched-cmd
PIPEFN /usr/local/ups/upssched/pipe
LOCKFN /usr/local/ups/upssched/lock

Sprawdzenie działania sterownika UPS na systemie master


Na tym etapie warto upewnić się, że sterownik urządzenia UPS jest prawidłowo uruchamiany i nawiązuje połączenie z zasilaczem UPS wedle ustawień z pliku ups.conf.

[root@filemon1 sbin]# ./upsdrvctl start
Network UPS Tools - UPS driver controller 2.7.2
Network UPS Tools - Generic HID driver 0.38 (2.7.2)
USB communication driver 0.32
Using subdriver: MGE HID 1.33

Powyższe komunikaty świadczą o tym, że sterownik zdefiniowany w pliku ups.conf może zostać prawidłowo uruchamiany i nawiązuje połączenie z urządzeniem UPS.

Usługi pakietu Nut


W celu umożliwienia sterowania stanem usług pakietu Nut, korzystając z narzędzi systemowych service lub systemctl, w zależności od wersji systemu, poniżej przedstawiony skrypt konfiguracyjny należy umieścić w pliku /etc/rc.d/init.d/ups, ustawiając prawidłowe atrybuty uprawnień do zapisanego pliku.

Atrybuty uprawnień:
-rwxr-xr-x 1 root root 2670 Nov 26 22:01 /etc/rc.d/init.d/ups


Skrypt usługi upsd:
#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/ups/bin:/usr/local/ups/sbin
export PATH
. /etc/rc.d/init.d/functions
DRIVERPATH=/usr/local/ups/sbin
if [ -f /usr/local/ups/etc/ ]; then
  . /etc/ups
else
  POWERDOWNFLAG=/etc/killpower
  NUTUSER=ups
fi
UPSDCONF=/usr/local/ups/etc/upsd.conf
UPSCONF=/usr/local/ups/etc/ups.conf
[ -f $UPSDCONF ] && [ -f $UPSCONF ] || exit 0
runcmd() {
   echo -n "$1 "
   shift
   if [ "$BOOTUP" = "color" ]; then
      $* && echo_success || echo_failure
   else
      $*
   fi
   echo
}
case "$1" in
  start)
        # new style drivers uses 'upsdrvctl'
        echo -n "NUT Starting UPS model drivers: "
        # starting ase nut user
        daemon --user $NUTUSER `which /usr/local/ups/sbin/upsdrvctl` start
        echo
        if [ $? -eq 0 ]; then
                echo -n "NUT Starting UPS daemon: "
                # starting ase nut user
                daemon /usr/local/ups/sbin/upsd -u $NUTUSER
                echo
                touch /usr/local/ups/var/run/upsd.pid
        fi
        ;;
  stop)
        # new style upsd stop
        action "NUT Stopping UPS daemon" \
        /usr/local/ups/sbin/upsd -c stop
        # new style drivers uses 'upsdrvctl'
        action "NUT Stopping UPS model drivers" \
        /usr/local/ups/sbin/upsdrvctl stop
        rm -f /usr/local/ups/var/run/upsd.pid
        ;;
  powerdown)
        # new style drivers
        runcmd "NUT powerdown of attached UPS(es)" /usr/local/ups/sbin/upsdrvctl shutdown
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  reload)
        # reloading upsd config files
        action "NUT Reloading config files" \
        /usr/local/ups/sbin/upsd -c reload
        ;;
  status)
        # new style drivers
        action "NUT: checking UPS model drivers" # /usr/local/ups/sbin/upsdrvctl
        status usr/local/ups/sbin/upsd
        ;;
  *)
        echo "Usage: upsd {start|stop|powerdown|restart|reload|status}"
        exit 1
esac

Usługa /usr/local/ups/sbin/upsd powina być automatycznie uruchamiana podczas startu systemu. W tym celu należy dodać usługę upsd do usług uruchamianych podczas startu systemu.

Dla SysV:

[root@filemon1 \]# chkconfig --add ups
[root@filemon1 \]# chkconfig --level 35 ups on

Dla Systemd:
systemctl enable ups

Uruchamianie usług pakietu Nut na systemie master


Na tym etapie należy uruchomić usługi ups.

SysV:
[root@filemon1 /]# service ups start
Starting ups:                                                        [  OK  ]

Systemd:
[root@filemon1 /]# systemctl start ups

Sprawdzanie statusu usług na systemie master

Warto na tym etapie sprawdzić, czy wszystkie usługi Nut na systemie netserver (master) działają prawidłowo:

[root@filemon1 sbin]# ls -al /usr/local/ups/var/run
total 12
drwxrwx--- 2 ups  ups  96 Dec 13 23:20 .
drwxrwx--- 3 ups  ups  16 Nov 26 22:01 ..
-rw-r--r-- 1 ups  ups   6 Dec 13 23:20 upsd.pid
-rw-r--r-- 1 root root  6 Dec 13 23:20 upsmon.pid
srw-rw---- 1 ups  ups   0 Dec 13 23:20 usbhid-ups-Eaton5130
-rw-r--r-- 1 ups  ups   6 Dec 13 23:20 usbhid-ups-Eaton5130.pid

 

Odczyt informacji o zasilaczu UPS z systemu netserver (master)


Po prawidłowym uruchomieniu usług na systemie master można dokonać odczytu informacji o zasilaczu UPS za pomocą narzędzia upsc na systemie naster:

[root@filemon1 ~]# /usr/local/ups/bin/upsc Eaton5130@filemon1
battery.capacity: 9.00
battery.charge: 100
battery.charge.low: 20
battery.charge.restart: 0
battery.energysave: no
battery.protection: yes
battery.runtime: 1900
battery.type: PbAc
device.mfr: EATON
device.model: 5130 RT 3000
device.serial: ND437C4042
device.type: ups
[...]


Systemy netclient (slave) - Pliki konfiguracyjne


Na systemach slave procedura przygotowania plików konfiguracyjnych z szablonów jest analogiczna do tej, która ma zastosowanie na systemie master, natomiast w grę wchodzi mniejsza ilość plików konfiguracyjnych. Na systemach slave należy skonfigurować ustawienia wyłącznie w plikach nut.conf, upsmon.conf oraz upssched.conf. Pozostałe pliki nie są potrzebne.

1. Plik nut.conf


Tryb netclient

MODE = netclient

2. Plik upsmon.conf



MONITOR Eaton5130@192.168.0.42 1 mike cats master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /usr/local/ups/etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5

3. Plik upssched.conf


CMDSCRIPT /usr/local/ups/bin/upssched-cmd
PIPEFN /usr/local/ups/upssched/pipe
LOCKFN /usr/local/ups/upssched/lock


Usługa upsmon - systemy netclient (slave)


Konfiguracja i uruchamianie usług pakietu Nut na systemach netclient (slave) powinny zostać przeprowadzone analogicznie do wcześniej opisanej procedury przeznaczonej dla systemów netserver (master), z tym, że w przypadku systemów netclient (slave) ustawienia pliku nut.conf - mode=netclient - będą ograniczały usługi wyłącznie do upsmon, pomijając uruchamianie zbędnego tutaj demona upsd. Usługa upsmon odpowiedzialna jest za monitorowanie stanu zasilaczy UPS zdefiniowanych w pliku upsmon.conf

Odczyt informacji o zasilaczu UPS z systemu netclient (slave)


Po prawidłowym uruchomieniu usług na systemie master oraz na systemie slave można dokonać odczytu informacji o zasilaczu UPS za pomocą narzędzia upsc na systemie slave:

[root@filemon1 ~]# /usr/local/ups/bin/upsc Eaton5130@192.168.0.42
battery.capacity: 9.00
battery.charge: 100
battery.charge.low: 20
battery.charge.restart: 0
battery.energysave: no
battery.protection: yes
battery.runtime: 1900
battery.type: PbAc
device.mfr: EATON
device.model: 5130 RT 3000
device.serial: ND437C4042
device.type: ups
[...]


Symulacja awarii zasilania


Na tym etapie warto przeprowadzić symulację awarii zasilania, która spowoduje wymuszone zamknięcie systemów na komputerach master / slave. Nie jest w tym celu konieczne wyciąganie wtyczki zasilacza UPS z kontaktu! Wystarczy, na systemie netserver (master) wywołać ponownie usługę upsmon w poniżej przedstawiony sposób:

upsmon -c fsd

Brak komentarzy:

Prześlij komentarz