====== NUT - Network UPS Tools ====== 2015-03-01 Установил UPC Powercom KIN-2200AP-RM. Распиновку кабеля взял с сайта производителя http://www.pcm.ru/data/docs/cables.zip, подключил его COM-портом к серверу. Для мониторинга и управления выбрал NUT - Network UPS Tools. Устанавка. # cd /usr/ports/sysutils/nut # make install clean # rehash Набор опций для установки: Options for nut-2.7.2_7 [X] SERIAL SERIAL support [ ] USB USB support [X] SNMP SNMP support [X] NEON NEON XML/HTTP support [ ] PDU Powerman PDU support [ ] HAL HAL support [ ] IPV6 IPV6 support [X] CGI Web CGI interface **Настройка**\\ Необходимо создать каталоги для драйверов и сервера, выставить права: # mkdir -p /var/state/ups # chmod 0770 /var/state/ups # chown uucp:wheel /var/state/ups Определение драйвера для данного UPS: # cat /usr/local/etc/nut/driver.list | grep Powercom # cat /usr/local/etc/nut/driver.list | grep Powercom "Powercom" "ups" "4" "SMK" "" "blazer_ser" "Powercom" "ups" "4" "SXL" "" "blazer_ser" "Powercom" "ups" "4" "ULT" "" "blazer_ser" "Powercom" "ups" "4" "Trust 425/625" "" "powercom" "Powercom" "ups" "4" "Advice Partner/King Pr750" "" "powercom" "Powercom" "ups" "4" "Black Knight PRO" "" "powercom" "Powercom" "ups" "5" "Black Knight PRO" "USB (2009 models, product id: 00a6)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "Smart KING Pro (all Smart series)" "" "powercom" "Powercom" "ups" "5" "Smart KING Pro (all Smart series)" "USB (2009 models, product id: 00a3)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "Imperial" "" "powercom" "Powercom" "ups" "5" "Imperial" "USB (2009 models, product id: 00a2)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "Vanguard" "" "blazer_ser" "Powercom" "ups" "5" "Vanguard" "USB (2009 models, product id: 0004 or 00a5)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "WOW" "USB (<= 2009 models, product id: 0002)" "powercom (requires 'usbserial' kernel module)" "Powercom" "ups" "5" "WOW" "USB (2009 models, product id: 00a4)" "usbhid-ups (experimental)" "Powercom" "ups" "4" "(various)" "USB (<= 2009 models, product id: 0002)" "powercom (requires 'usbserial' kernel module)" "Powercom" "ups" "5" "(various)" "USB (2009 models, product id: 00a?)" "usbhid-ups (experimental)" "Powercom" "ups" "5" "BNT-xxxAP" "USB (product id: 0004)" "usbhid-ups (experimental)" Нужно использовать драйвер "powercom", поскольку KIN относится к серии King PRO. Все конфигурационные файлы NUT находятся в директории "**/usr/local/etc/nut**". Назначение: * **ups.conf** - настройки UPS драйвера для сбора данных * **upsd.conf** - настройка основного демона upsd для Network UPS Tools * **upsd.users** - контроль доступа к UPS демону (профили пользователей) * **upsmon.conf** - настройки монитора UPS демона **ups.conf** Необходимо добавить в конфигурационный файл UPS и его настроки подключения.\\ Скопирую дефолтный конфигурационный файл. # cd /usr/local/etc/nut && cp ups.conf.sample ups.conf В результате получим следующий результат: # cat /usr/local/etc/nut/ups.conf [klotik_ups] driver = powercom port = /dev/cuau1 desc = "PowerCom KIN-2200AP RM" type = KIN Опции: * **[ups_name]** - имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя. * **driver** - драйвер, используемый для работы с UPS. * **port** - порт, на котором висит UPS * **desc** - описание устройства (так, на всякий случай, чтобы не забыть). * **sdorder** - необязательный элемент. При наличии нескольких UPS подключенных к серверу можно выключать в определенном порядке. используя upsdrvctl можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте -1. * **nolock** - необязательный элемент, его не рекомендуется использовать в его этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой. * **maxstartdelay** - необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам. * **cable** - Если драйвер UPS требует дополнительных параметров, можно указать их здесь. Индекс кабеля можно посмотреть тут "**/usr/local/share/doc/nut/cables**". Можено не указывать это значение, если подключение к UPS стандартно. Допускается использование дополнительных опций, исходя из специфики оборудования (необходимо смотреть маны по конкретно используемому драйверу). В моем случае не совпадал тип с тем, который используется по умолчанию, соответственно пришлось конкретизировать. Значения по умолчанию для драйвера Powercom: * **linevoltage** = 230 * **manufacturer** = PowerCom * **modelname** = Unknown * **serialnumber** = Unknown * **type** = Trust **upsd.conf** **upsd** отвечает за передачу данных от драйвера клиентским программам в сети. upsd должен находится под управлением и по возможности, как единственный источник состояния и мониторинга клиентов, таких как upsmon. upsd использует этот файл для контроля доступа к серверу и для установки других значений различных конфигурации. Этот файл содержит подробные сведения об управлении доступом, таким образом, обеспечивается безопасность. Создание файла: # cp upsd.conf.sample upsd.conf Редактируем до следующего состояния: # cat upsd.conf LISTEN 127.0.0.1 3493 LISTEN 195.3.159.250 3493 **Доступные опции:**\\ **MAXAGE** - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать только в том случае, если есть трудности с обновлением данных.\\ **LISTEN**
[] - здесь указывается адрес и порт 3493 (по умолчанию) для прослушивания подключений.\\ **MAXCONN** - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнятся количество подключений, он больше не будет принимать новых входящих клиентских подключений. **upsd.users** Контроль доступа к UPS-демону (профили пользователей). Именно в этом файле указывается, кто и в какой мере будет контролировать и работать с утилитой.\\ Создадие файла: # cp upsd.users.sample upsd.users Правим конфиг до следующего состояния: # cat upsd.users [admin] password = adminpass actions = SET instcmds = ALL upsmon master **Доступные опции.** Значения:\\ password - пароль пользователя\\ allowfrom - откуда разрешено подключатся Каждый UPS монитор может определяться как один из трех возможных типов:\\ **upsmon master** - полные полномочия управлением питания подключенных к системе UPS под управлением upsmon, эта система отвечает за выключение разряженного аккумулятора. Выключение происходит после безопасного выключения всех Slave систем. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon системы следует определить этот UPS как Master.\\ **upsmon slave** - эта система, под управлением upsmon и она не выключается непосредственно. Операционная система будет выключена перед отключением питания Master. Используйте этот режим при запуске монитора на других компьютерах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS, коим будет является Master. Все остальные сервера будут Slave.\\ **upsmon monitor-only** - при этом режиме будут создаваться уведомления о состоянии или изменении работы батареи, переключении на линию и т.д., но не завершать работу системы.\\ **actions** - Действия пользователя с применением upsd.\\ * **SET** - изменить значения определенных переменных в UPS\\ * **FSD** - установка флага "принудительного выключения" для UPS\\ **instcmds** - разрешения пользователю на инициирование конкретных команд. "ALL" - разрешает использовать все команды. Существует множество команд, 'upscmd -l' показывает, что поддерживает оборудование. Пример несколько команд.\\ * test.panel.start - старт теста передней панели * test.battery.start - старт теста батареи * test.battery.stop - остановка теста батареи * calibrate.start - запуск калибровки батареи * calibrate.stop - остановка калибровки батареи **upsmon.conf** **upsmon** предоставляет основные функции, которые собирается найти в программе мониторинга UPS, например это безопасное завершений работы при сбое питания. В многоуровневой схеме утилиты NUT это клиент.\\ Создание файла конфигурации: # cp upsmon.conf.sample upsmon.conf Редактируем конфиг до следующего состояния: # cat upsmon.conf MONITOR Powercom@localhost 1 monmaster masterpass master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -p now" POLLFREQ 5 POLLFREQALERT 5 HOSTSYNC 15 DEADTIME 15 POWERDOWNFLAG /etc/killpower # Выполнять команду после события NOTIFYFLAG с флагом EXEC. Указывает выполнения запуск событий для таймера. NOTIFYCMD /usr/local/sbin/upssched # NOTIFYFLAG – Изменение поведение при случившихся событиях. # По умолчанию посылает сообщением всем пользователям и записывает их в системный журнал. # Пример флагов: # SYSLOG – писать сообщение в syslog # WALL - писать сообщение всем пользователям системы # EXEC - выполнить команду NOTIFYCMD # IGNORE – нечего не делать NOTIFYFLAG ONLINE SYSLOG+EXEC NOTIFYFLAG ONBATT SYSLOG+EXEC NOTIFYFLAG LOWBATT SYSLOG+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL RBWARNTIME 43200 NOCOMMWARNTIME 300 FINALDELAY 5 Итак, мы добавили monitir, формат записи которого следующий:MONITOR system powervalue username password type Значение опций:\\ **MINSUPPLIES** - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но мощные сервера, например HP NetServer LH4, могут работать с 2 из 4 БП и ему нужно ставить 2.\\ **SHUTDOWNCMD** - upsmon выполняет эту команду, когда системе необходимо выключить.\\ **NOTIFYCMD** - upsmon отправляет сообщение при происшествиях.\\ **POLLFREQ** - опрос мониторами с частотой (измеряется в секундах) для обычной деятельности. Вы можете отрегулировать это частоту опроса, чтобы upsmon не “зашумлял” вашу сеть, но не вносите слишком большие значения тк. оно может пропустить отключение питания.\\ **POLLFREQALERT** - опрос UPS с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи.\\ **HOSTSYNC** - как долго upsmon будет ждать перед переходом к следующему upsmon. master upsmon использует это число при ожидании slaves чтобы отключиться после того как он установил флаг принудительное завершение работы (FSD). И если slaves не отключаться после этого тайм аута, то выключение продолжится без них.\\ **DEADTIME** - интервал ожидания перед объявлением статуса UPS как «мертвый». upsmon требует, чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT). Если статус загрузки, UPS помечен fails. И если оно остается fails более чем DEADTIME секунд, то UPS помечается «мертвый».\\ **POWERDOWNFLAG** - флаг файла для форсирования завершения работы UPS в master системе.\\ **NOTIFYMSG** - изменение сообщения, отправленные upsmon при возникновении определенных событий.\\ **NOTIFYFLAG** - изменение поведения upsmon при возникновении событий NOTIFY.\\ **RBWARNTIME** - предупреждение замены аккумулятора в секундах.\\ **NOCOMMWARNTIME** - предупреждение по времени при не общении к UPS в секундах.\\ **FINALDELAY** - процент батареи, при котором происходит завершение работы системы. **upssched.conf**\\ В файл /usr/local/etc/nut/upssched.conf можно настроить различные таймеры на события. Я настроил, так что бы после 30 секунд работы от аккумулятора мне на телефон приходила sms вида "//ups - on batt//", а после восстановления питания через 60 секунд приходила sms - "//ups - on line//". # Скрипт с таймерами, должен быть раньше строчек AT CMDSCRIPT /usr/local/bin/upssched-cmd # PIPEFN это файл pire который будет передавать таймер между процессами, LOCKFN предотвращает события когда два события отправлены почти одновременно. Рекомендуется создать отдельный каталог upssched с правами от пользователя который запускает и может иметь доступ записывать в файлы которые мы указали ниже. PIPEFN /var/db/nut/upssched/upssched.pipe LOCKFN /var/db/nut/upssched/upssched.lock # При событии ONBATT запускаем таймер которые выполнит команду "onbatt" через 30 секунд. Команду "onbatt" мы создадим позже в файле /usr/local/bin/upssched-cmd , который был указан в переменной CMDSCRIPT. Если в течение 30 секунд произойдет событие ONLINE, то таймер будет отменен и команда "onbatt" не будет выполнена. AT ONBATT * START-TIMER onbatt 30 AT ONLINE * CANCEL-TIMER onbatt AT ONLINE * START-TIMER online 60 AT ONBATT * CANCEL-TIMER online Файл /usr/local/bin/upssched-cmd это скрипт который выполняется по таймеру. case $1 in # Имя нашего таймера, указанного в upssched.conf onbatt) sendsms 8ххххххххх "ups - on batt" ;; *) # Если поступила команда который нет в скрипте, запишем в лог об этом logger -t upssched-cmd "Unrecognized command: $1" ;; esac case $1 in online) sendsms 8ххххххххх "ups - on line" ;; *) esac В результате теперь когда пропадает электричество в сети и если оно в течение 30 секунд не появилось, то мне приходит sms, что ups работает от аккумуляторов. Соответственно при появлении напряжения на входе ups, через 60 секунд приходит sms, что ups on line. **Права на файлы и каталоги.**\\ Владельцем /var/db/nut должен быть пользователь uucp, права на выставлены на 0750: # ls -ld /var/db/nut/ drwxr-x--- 2 uucp uucp 512 24 апр 04:50 /var/db/nut/ Права на конфигурационные файлы.\\ Условия - пользователь uucp должен иметь доступ на чтение: # chown uucp:uucp upsd.conf upsd.users upsmon.conf # chmod 0640 upsd.conf upsd.users upsmon.conf **Запуск сервиса**\\ Добавляю NUT в /etc/rc.conf и запускаю для сервисы: # echo '### Network UPS Tools' >> /etc/rc.conf # echo 'nut_enable="YES"' >> /etc/rc.conf # echo 'nut_upsmon_enable="YES"' >> /etc/rc.conf # echo 'nut_upslog_enable="YES"' >> /etc/rc.conf # /usr/local/etc/rc.d/nut start Network UPS Tools - UPS driver controller 2.4.1 Network UPS Tools - PowerCom protocol UPS driver 0.12 (2.4.1) Starting nut. Network UPS Tools upsd 2.4.1 listening on 195.3.159.250 port 3493 listening on 127.0.0.1 port 3493 Connected to UPS [Powercom]: powercom-Powercom # sh /usr/local/etc/rc.d/nut_upsmon start Starting nut_upsmon. Network UPS Tools upsmon 2.4.1 UPS: Powercom@localhost (master) (power value 1) Using power down flag file /etc/killpower # sh /usr/local/etc/rc.d/nut_upslog start Starting nut_upslog. Network UPS Tools upslog 2.4.1 logging status of myups@localhost to /var/log/ups.log (300s intervals) **Проверка:**\\ # ps -ax | grep nut 85110 ?? Ss 0:01,53 /usr/local/libexec/nut/powercom -a Powercom # ps -ax | grep ups 90340 ?? Ss 0:00,02 /usr/local/sbin/upsd 90534 ?? Is 0:00,00 /usr/local/sbin/upsmon localhost 90535 ?? S 0:00,00 /usr/local/sbin/upsmon localhost 90551 ?? Is 0:00,00 /usr/local/bin/upslog -s myups@localhost -l /var/log/ups.log -i 300 Сервисы запущены, работают и ведутся логи.\\ Подключение к UPS для проверки его статуса: # upsc Powercom@localhost battery.charge: 100.0 driver.name: powercom driver.parameter.pollinterval: 2 driver.parameter.port: /dev/cuad0 driver.parameter.type: KIN driver.version: 2.4.1 driver.version.internal: 0.12 input.frequency: 50.07 input.voltage: 234.0 input.voltage.nominal: 220 output.frequency: 50.07 output.voltage: 234.0 ups.load: 22.0 ups.mfr: PowerCom ups.model: KIN-2200AP ups.model.type: KIN ups.serial: Unknown ups.status: OL Для проверки только режима работы UPS можно воспользоваться следующей командой (по аналогии можно запрашивать и другие параметры): # upsc Powercom@localhost ups.status OL Переменная может принимать следующие значения: * **OL** - система работает на линии (on line power) * **OL TRIM** - система работает на линии в режиме стабилизации напряжения * **OB** - система работает от батареи (on battery) * **LB** - система работает от севшей батареи (low battery) Теперь посмотрим монитором: # upsmon Network UPS Tools upsmon 2.4.1 UPS: Powercom@localhost (master) (power value 1) Using power down flag file /etc/killpower Когда upsmon необходимо быстро выключить локальную систему, она устанавливает флаг "FSD" (forced shutdown - принудительное отключение) для любых UPS, на котором она выполняется в master режиме. Данная возможность используется и для синхронизации slaves компьютеров в том случае,если master UPS передает событие и всем рассылается сообщение о немедленном прекращении работы.Можно вручную вызвать этот режим на master upsmon, запустив другой экземпляр с флагом '-c fsd '. Это полезно, когда вы хотите инициировать shutdown перед критическим этапом. Эмулируем падение мощности:# upsmon -c fsd Система должна корректно завершить работу. **upsstats** web-интерфейс проверки статуса UPS - upsstats. Скопировал необходимые для работы файлы из предложеных примеров: # cp upsset.conf.sample upsset.conf # cp upsstats.html.sample upsstats.html # cp upsstats-single.html.sample upsstats-single.html # cp hosts.conf.sample hosts.conf В конфигурационный файл apache добавил еще один alias. Alias /nut "/usr/local/www/nut/" Order deny,allow Allow from all Скопировал папку nut из /usr/local/www/cgi-bin/ в /usr/local/www/apache22/cgi-bin\\ Перезапустил apache, чтобы изменения вступили в силу: # apachectl graceful В файле upsset.conf расскоментировал строку I_HAVE_SECURED_MY_CGI_DIRECTORY: # cat upsset.conf | grep HAVE I_HAVE_SECURED_MY_CGI_DIRECTORY Добавил UPS в список хостов: # echo 'MONITOR powercom@localhost "Powercom KIN-2200AP-RM"' >> hosts.conf При переходе на адрес //адрессервера///nut, должна отобразится страница Network UPS Tools с вкладками Statistics и Settings.\\ **Settings** – настройки UPS (пользователь согласно содержимому upsd.users)\\ **Statistics** – просмотр статуса UPS, а так же текущее состояние в графическом виде. Ссылки:\\ http://muff.kiev.ua/content/nut-network-ups-tools\\ http://www.ignix.ru/book/freebsd/daemon/network_ups_tools\\ http://ozabo.narod.ru/nut-ippon.html\\ http://notanony.ru/post/12/