[HOWTO] UPS pod Solarisem

Skarbnica gotowych rozwiazan

Moderator: Moderatorzy

[HOWTO] UPS pod Solarisem

Postprzez mnowak » So lis 10, 2007 8:36 pm

Ostatnio zostalem szczesliwym posiadaczem zarzadzalnego UPS'a 1200VA firmy Trust. Niestety ku mojemu rozczarowaniu, producent owego upsa nie udostepnia sterownikow na platformy inna niz Windows. Znalazlem jednak opensourcowy monitor upsa zwany Network UPS Tools, w skrocie NUT, ktorego to tworcy chwala sie ze dziala pod unixami. To HOWTO, prowadzi krok po kroku przez proces instalacji i konfiguracji NUT'a w Solarisie 10. Autor tego HOWTO, przyjmuje, ze czytelnik posiada podstawowa wiedze na temat kompilacji programow w systemie Solaris.

Zacznijmy od utworzenia uzytkownika, z ktorego bedziemy odpalali NUT'a. Nazwijmy go 'ups', niech bedzie czlonkiem grupy zwanej takze 'ups', niech uzytkownika katlogiem domowym bedzie '/var/ups', ktory posluzy nam za state directory (o tym pozniej).

Kod: Zaznacz cały
# groupadd -g 999 ups
# useradd -u 999 -g ups -d /var/ups -s /bin/false -m ups
# chown ups:ups /var/ups
# chmod 750 /var/ups


Teraz potrzebujemy zrodla NUT'a, znajdziemy je na http://www.networkupstools.org/source.html. Potrzebujemy je sciagnac, rozpakowac, i skompilowac, wiec pokoleji:

Kod: Zaznacz cały
# /opt/sfw/bin/wget http://www.networkupstools.org/source/2.2/nut-2.2.0.tar.gz
# gunzip -c nut-2.2.0.tar.gz | tar -xf -
# cd nut-2.2.0
# ./configure --prefix=/opt/nut --with-statepath=/var/ups --with-user=ups --with-group=ups


Zatrzyjamajmy sie na sekunde w tym momencie, jako ze naleza sie wyjasnienia co do ostatniej komendy, prefix bedzie katalogiem gdzie NUT zostanie zainstalowany, statedir to wczesniej wspomniany katalog domowy uzytkownika 'ups', dalej uzytkownik i grupa z prawami ktorych demon bedzie uruchamiany. Kontynuujmy...

Kod: Zaznacz cały
# make && make install


Jesli udalo nam sie skompilowac NUTa, czas zabrac sie za konfiguracje. Na poczatek pozbadzmy sie przykladowych plikow konfiguracyjnych, ktore nie beda nam potrzebne.

# cd /opt/nut/etc
# mkdir example; mv *.example example

Teraz musimy utworzyc i wyedytowac w swoim ulubionym edytorze kilka plikow, jednakze, niektore z nich posiadaja opcje ktore musza zostac zmienione, np. haslo, wiec nie kopiujemy bezmysnie bez czytania.

ups.conf

Kod: Zaznacz cały
[trust]
  driver = megatec
  port = /dev/ttya


upsd.conf

Kod: Zaznacz cały
# bind to localhost only
LISTEN 127.0.0.1
# define ACLs
ACL all 0.0.0.0/0   
ACL localhost 127.0.0.1/32
# Accept connections from localhost...
ACCEPT localhost
# ... and reject anything else
REJECT all              


upsd.users

Kod: Zaznacz cały
# define monitor user
[monuser]
password = ZMIEN_NA_SWOJE_HASLO
allowfrom = localhost
upsmon master


upssched.conf

Kod: Zaznacz cały
CMDSCRIPT /opt/nut/bin/upssched-cmd


upsmon.conf

Kod: Zaznacz cały
RUN_AS_USER root # root dlatego ze uzytkownik ups nie moze wykonac shotdown
MONITOR trust@localhost 1 monuser ZMIEN_NA_HASLO_Z_UPSD.USERS master
MINSUPPLIES 1
SHUTDOWNCMD "/usr/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
NOTIFYCMD /opt/nut/bin/notify # utworzymy go w nastepnym kroku
POWERDOWNFLAG /etc/killpower
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT 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 FSD SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5


Gotowe, teraz nadajmy grupie 'ups' prawa do odczytu plikow konfiguracyjnych, i upewnijmy sie ze nikt inny nie moze ich czytac (bo zawieraja haslo).

Kod: Zaznacz cały
# chgrp ups ups.conf upsd.conf upsmon.conf upssched.conf
# chmod 640 ups.conf upsd.conf upsmon.conf upssched.conf


Czas utworzyc wczesniej wspomniany skrypt notify, ktory to bedzie slal nam maila przy kazdej zmianie stanu upsa (czyli jak braknie pradu, albo bateria bedzie slaba).

Kod: Zaznacz cały
# touch /opt/nut/bin/notify
# chmod 755 /opt/nut/bin/notify


Skrypt powninien zawierac nastepujaca tresc:

Kod: Zaznacz cały
#!/bin/bash
echo "$*" | mail -s "UPS state changed" TWOJ@ADRES.EMAIL


Teraz dodamy wszystko do SMF, zeby startowalo przy starcie systemu. Do tego celu bedziemy potrzebowali metody i manifestu.

Kod: Zaznacz cały
# mkdir -p /opt/nut/lib/svc/method
# touch nut


I ladujemy w niego nastepujacy skrypt metody:
(Gotowiec do sciagniecia dostepny tutaj)

Kod: Zaznacz cały
#!/usr/bin/sh

. /lib/svc/share/smf_include.sh

NUT_DIR=/opt/nut
STATE_DIR=/var/ups
PID_UPS=${STATE_DIR}/upsd.pid
PID_MON=/var/run/upsmon.pid

ups_stop () {
   if [ -f ${PID_MON} ]; then
      /usr/bin/kill `cat ${PID_MON}` > /dev/null
      /usr/bin/rm -f ${PID_MON}
   fi
   if [ -f ${PID_UPS} ]; then
       /usr/bin/kill `cat ${PID_UPS}` > /dev/null
      /usr/bin/rm -f ${PID_UPS}
   fi
   ${NUT_DIR}/bin/upsdrvctl stop > /dev/null 2>&1
}

ups_start () {
   $NUT_DIR/bin/upsdrvctl start >/dev/null 2>&1
   $NUT_DIR/sbin/upsd >/dev/null 2>&1
   $NUT_DIR/sbin/upsmon >/dev/null 2>&1
}

##
# Start of script
#
case "$1" in
       start)
           ups_start
           ;;
       stop)
           ups_stop
           ;;
       restart)
           ups_stop
           while pgrep upsd > /dev/null
           do
               sleep 1
           done
           ups_start
           ;;
       *)
           echo ""
           echo "Usage: `basename $0` { start | stop | restart }"
           echo ""
           exit 64
           ;;
esac


Teraz potrzebujemy przygorowac manifest

Kod: Zaznacz cały
# touch /var/svc/manifest/network/nut.xml


I teraz nut.xml powinien zawierac:
(Gotowiec do sciagniecia tutaj)
Kod: Zaznacz cały
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">

<service_bundle type='manifest' name='nut'>
<service name='application/nut' type='service' version='1'>
   
   <instance name='default' enabled='false'>

        <dependency name='network'
           grouping='require_all'
           restart_on='error'
           type='service'>
           <service_fmri value='svc:/milestone/network:default'/>
        </dependency>

        <dependency name='filesystem-local'
           grouping='require_all'
           restart_on='none'
           type='service'>
           <service_fmri
         value='svc:/system/filesystem/local:default'/>
        </dependency>

       <exec_method
           type='method'
           name='start'
           exec='/opt/nut/lib/svc/method/nut start'
           timeout_seconds='60'>
         <method_context />
      </exec_method>

      <exec_method
           type='method'
           name='stop'
           exec='/opt/nut/lib/svc/method/nut stop'
           timeout_seconds='60'>
           <method_context />
      </exec_method>

       <exec_method
           type='method'
           name='refresh'
           exec='/opt/nut/lib/svc/method/nut restart'
           timeout_seconds='60'>
           <method_context />
      </exec_method>

    </instance>

    <stability value='Evolving' />
    <template>
        <common_name>
            <loctext xml:lang='C'>
                Network UPS Tools
            </loctext>
        </common_name>
    </template>

</service>
</service_bundle>


Czas uruchomic i sprawdzic czy dziala

Kod: Zaznacz cały
# svccfg import nut.xml
# svcadm enable svc:/application/nut:default
# /opt/nut/bin/upsc trust@localhost
battery.charge: 95.0
battery.voltage: 13.50
battery.voltage.nominal: 12.0
driver.name: megatec
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/ttya
driver.version:
driver.version.internal: 1.5.4
input.frequency: 49.9
input.voltage: 247.0
input.voltage.fault: 247.0
input.voltage.maximum: 252.3
input.voltage.minimum: 243.0
output.voltage: 247.0
output.voltage.nominal: 230.0
ups.beeper.status: enabled
ups.delay.shutdown: 0
ups.delay.start: 2
ups.load: 11.0
ups.mfr: unknown
ups.model: unknown
ups.serial: unknown
ups.status: OL
ups.temperature: 25.0


Jesli upc zwroci wynik podobny do powyzszego, swietnie gratuluje, wszystko dziala! Jesli natomiast upsc pokazuje blad zamiast powyzszego wyniku znaczy ze cos spapralismy.
mnowak
Administrator
 
Posty: 43
Dołączył(a): Pn sie 13, 2007 1:28 am
Kwalifikacje: SCSA9, SCNA9, SCSA10, SCNA10, SCSECA10

Powrót do HOWTO

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość

cron