Jak zprovoznit UPS na Linuxu

Z HKfree wiki
Skočit na navigaci Skočit na vyhledávání

Linux vs. UPS

Pokud máme u routeru UPS, můžeme ji lehce spojit se systémem a využívat výhod. Asi nejprioritnější je možnost ukončení (zahaltování) systému v případě, že UPS už končí baterie a vypnutí je neodvratné. Linux vypnutí bez řádného ukončení rád moc nemá, tak je nanejvýš vhodné mu to umožnit.

Uvedený příklad jsem použil na Debianu a Smart-UPS 750 XL, propojeno přes USB.

Já jsem použil program APCUPSD. V Debianu se dá lehce nainstalovat z repozitáře, současně s ním nainstalujeme i ještě jeden jeho prográmek pro grafické zobrazování stavu a nakonec program pro emailovou notifikaci.

Bližší popis programu a nastavení je např. tady:

http://www.linux.cz/noviny/2001-08/clanek07.html

Začneme instalací,

apt-get install apcupsd apcupsd-cgi sendemail apache2

po instalaci editujeme /etc/apcupsd/apcupsd.conf a upravíme následující na hodnoty,

UPSCABLE usb
UPSTYPE usb
#DEVICE /dev/ttyS0

uložíme, dále editujeme soubor /etc/default/apcupsd a změníme,

ISCONFIGURED=yes

teď provedeme restart služby,

service apcupsd restart

tím nám běží komunikace s ups, můžeme zkontrolovat napsáním příkazu,

apcaccess

jeho výpis by měl vypadat následovně:

APC      : 001,043,1059
DATE     : 2013-01-29 22:03:50 +0100
HOSTNAME : zvonicka
VERSION  : 3.14.10 (13 September 2011) debian
UPSNAME  : zvonicka
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2013-01-27 22:44:37 +0100
MODEL    : Smart-UPS 750 XL
STATUS   : ONLINE
LINEV    : 240.4 Volts
LOADPCT  :  24.7 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT :  84.0 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 0 Seconds
OUTPUTV  : 240.4 Volts
SENSE    : High
DWAKE    : -01 Seconds
DSHUTD   : 180 Seconds
LOTRANS  : 208.0 Volts
HITRANS  : 253.0 Volts
RETPCT   : 000.0 Percent
ITEMP    : 25.6 C Internal
ALARMDEL : 30 seconds
BATTV    : 27.7 Volts
LINEFREQ : 50.0 Hz
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STESTI   : 14 days
STATFLAG : 0x07000008 Status Flag
MANDATE  : 2008-02-15
SERIALNO : AS0807211830
BATTDATE : 2012-02-03
NOMOUTV  : 230 Volts
NOMBATTV :  24.0 Volts
FIRMWARE : 680.18.I USB FW:7.3
END APC  : 2013-01-29 22:04:03 +0100

Grafické zobrazení hodnot a stavu

Multimon.gif

Status.png

To nám zajistí druhý nainstalovaný prográmek apcupsd-cgi skrz svoje cgi skripty. Předpokládám, že apache už nainstalovaný je. Aby to správně chodilo je třeba přidat do /etc/apache/apache2.conf nakonec toto:

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

restartovat apache,

service apache2 restart

Pokud Vám po přidání script aliasu bude prohlížeč stále zobrazovat chybu Forbidden 403 jako mě, je nutné ještě v apache povolit modul cgi, a to provedeme příkazem:

sudo a2enmod cgi

Po povolení modulu je nutné restartovat apache:

service apache2 restart

Je možné že po povolení tohoto modulu bude nutné restartovat webový prohlížeč, poté už by se měla zobrazit CGI stránka

a můžeme se podívat jak to krásně vypadá,

http://localhost/cgi-bin/apcupsd/multimon.cgi

místo localhost si dejte ip adresu stroje ke kterému je ups připojena.

Takhle to vypadá u mě:

http://10.107.90.65/cgi-bin/apcupsd/multimon.cgi

Emailová notifikace

Tak UPS již komunikuje a systém o ní ví. Bylo by dobré, aby v případě výpadku napájení poslal dotyčný počítač varovný email. Z emailu už pak jednoduše dostanete sms na mobil a víte, že se něco děje. Na to nám poslouží třetí program sendemail.

Pokud si otevřete /etc/apcupsd je tam několik skripů, zkráceně si je popíšeme

changneme – aktivován při expiraci baterie, baterie potřebuje vyměnit commfailure a commok – ztráta a obnovení komunikace s ups off a on battery – je jasné :)

ukážeme si to na skriptu onbattery, ten se aktivuje jakmile vypadne napájení

tady je můj obsah onoho skriptu i s posíláním varovného emailu

SYSADMIN=technici@hkfree.org
APCUPSD_MAIL="/usr/bin/sendemail"

HOSTNAME=`hostname`
MSG="$HOSTNAME Vypadek napajeni UPS ZAPNUTA!"
#
(
   echo "Subject: $MSG"
   echo " "
   echo "$MSG"
   echo " "
   /sbin/apcaccess status

) | $APCUPSD_MAIL -t $SYSADMIN -u "$MSG" -f $SYSADMIN -s smtp.hkfree.org:25
touch /etc/apcupsd/powerfail
exit 0

pokud takto upravíte i ostatní skripty dostanete celkem solidní info o tom co se právě s UPS děje. Do emailu se přikládá i výpis z apcaccess, takže víte kolik zbejvá času než nastane shutdown :)

článek bude průběžně doplňován novými zkušenostmi

Pajavlk

Sledování více UPS z jednoho místa

Když máme více chytrých UPS a chceme je mít sledované hezky z jednoho místa můžeme provést konfiguraci tak, že si script multimon stáhne informace z každého serveru ke kterému je připojená UPS a běží tam správně nakonfigurovaný apcupsd. Jak na to:

Úprava konfigurace na vzdálených serverch

Na všech serverech, ze kterých chceme stahovat data musíme upravit v konfiguračním souboru /etc/apcupsd/apcupsd.conf řádek NISIP, kde zadáme na jaké adrese má NIS server naslouchat pro příchozí spojení, default hodnota je pouze localhost 127.0.0.1, IP si nastavíme podle uvážení, případně můžeme nastavit 0.0.0.0, což znamená naslouchej na všech IP, které má server nastavené.

příklad:

root@hrubinova:~# cat /etc/apcupsd/apcupsd.conf |grep NISIP
# NISIP <dotted notation ip address>
NISIP 10.107.237.1
root@hrubinova:~#

Pro provedení změn je třeba apsupsd restartovat, viz. výše.

Úprava konfigurace na lokálním serveru

Lokálním serverem myslíme ten, který bude schromažďovat data od serverů vzdálechých, zde je démonu apcupds potřeba říct co má sledovat a na jaké IP to má najít, provedeme to úpravou konfiguračního souboru /etc/apcupsd/hosts.conf. Zde si vytvoříme pro každou UPS jeden řádek ve formátu: MONITOR <ip serveru> "<název>".

Příklad:

root@andre:~# cat /etc/apcupsd/hosts.conf
MONITOR 127.0.0.1 "Andre"
MONITOR 10.107.137.9 "Andre2"
MONITOR 10.107.136.1 "Purkyne"
MONITOR 10.107.237.1 "Hrubinova"
root@andre:~#

Pozn.: v souboru nesmí být žádné prázdné řádky.

Pozn2.: Pozor co nastavíme na lokal serveru, stahování dat je vždy přes síť, pokud na lokal serveru nastavíme NISIP na něco jiného než localhost, musíme to samé pro local UPS nastavit i v hosts.conf.

Pro provedení změn musí opět následovat restart apcupsd.

by Lucutus