Tuesday, February 10, 2009

nut apc smartups sc1000 com-usb и Zenwalk 5.2

Фух, задолбался его настраивать. По горячим следам пишу этот пост. Воткнул упсу, читал, гуглил.. И так далее. Краткая выжимка:

Втыкаем упсу, делаем lsusb, читаем вывод:
$ lsusb
Bus 007 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub


Если повезёт, то /dev/ttyUSB0 (или не 0, смотря что уже втыкали) появится в вашей системе. Мне повезло меньше, зато поплясал с бубном. Во-первых, эта сука почему-то хоть и писала в dmesg про /dev/ttyUSB0 цеплялась на /dev/tts/USB0, чем обильно попарила мне мозг старым добрым "Not a typewriter", ныне "inapropriate ioctl for device". Когда же успешный порт был найден (почти чудом, кстати), мой конфиг ups.conf выглядел так:
[apc]
driver = apcsmart
port = /dev/tts/USB0
cable = "940-0272"
desc = "APC Back-UPS 1000SC"


940-0272 это кабель com-usb, который я и подключал к девайсу.

upsd больше не поддерживает Access Control List и вместо этого надо правильно указывать директиву LISTEN в файле upsd.conf:
LISTEN 127.0.0.1 3493


Другие параметры можно не трогать, разве что я MAXCONN выставил в 24 (просто убрав 10 из числа 1024)
важная строка в upsmon.conf:
MONITOR apc@localhost 1 monuser password master


Кстати, убедитесь, что в /usr/local/ups/etc/* у вас нет world readable документов, на всякий случай. И world writable тем более, ибо SHUTDOWNCMD в upsmon.conf может кто-то заменить на что-то неприятное и тогда всё, плакал сервак.

Далее, мне понадобилось накатать примерно такой /etc/rc.d/rc.nut (я почему-то не нашёл ничего подобного в тех краях, куда встал nut).

#!/bin/sh
# Start/stop/restart the ups nut daemon:

# made by cra on 10 feb 2009

nut_start() {
# start driver
/usr/local/ups/bin/drvctl start

# now start daemon
/usr/local/sbin/upsd
}

nut_stop() {
kill `cat /var/state/ups/upsd.pid`
/usr/local/ups/bin/drvctl stop
}

nut_restart() {
if [ -r /var/state/ups/upsd.pid ]; then
echo "Stopping daemon and driver, this might take a while"
nut_stop
else
echo "There does not appear to be a parent instance of upsd running."
exit 1
fi
sleep 2
nut_start
}

case "$1" in
'start')
nut_start
;;
'stop')
nut_stop
;;
'restart')
nut_restart
;;
*)
echo "usage $0 start|stop|restart"
esac

Всё, можно делать service start ups и смотреть вывод /usr/local/ups/bin/upsc apc@localhost

После этого можно настроить ремотную тулзу для мониторинга состояния упски, или можно настроить нагиос. Проверяем работоспособность плагина: $ /usr/local/nagios/libexec/check_ups -H localhost -u apc
UPS OK - Status=Online Utility=218.0V Batt=100.0% Load=11.7% |voltage=218000mV;;;0 battery=100%;;;0;100 load=11%;;;0;100


Чтобы это было в нагиосе, надо добавить в /usr/local/nagios/etc/objects/commands.cfg следующий кусочек:
define command{
command_name check_ups
command_line $USER1$/check_ups $ARG1$
}


в конфиге нагиоса на нужном сервере тогда будет что-то в духе check_ups!-H localhost -u apc -w 80 -c 10
Либо, если использовать один ups, то можно все параметры прописать сразу в комманде (или хотя бы стандартный нагиосовский -H $HOSTNAMEADDRESS$) и в конфиге писать просто check_ups. Теперь, как сказал коллега "если придёт письмо о варнинге, бежим за ключом от серверной".

UPD: Оппа.. Проверка показала, что это не работает - хотя локально /usr/local/nagios/libexec/check_ups -H localhost -u apc даёт варнинг, когда шнурок отключён, нагиос считает, что всё хорошо :( Это я неправильно настроил кусок нагиоса.

No comments: