Изначально со включенным модулем mod_cgi (в разделе server.modules файла конфигурации lighttpd) и настройками раздела CGI module такими
и такимиCode:cgi.assign = ( ".cgi" => "/opt/bin/perl" )
ничего не работало. После яростного поиска откопал где-то такую рекомендациюCode:cgi.assign = ( ".cgi" => "/bin/sh" )
- и все заработало.Code:cgi.assign = ( ".cgi" => "" )
И, конечно, в рабочей директории lighttpd (она у меня отлична от дефолтовой) сделан симлинк на директорию /opt/share/www/cgi-bin, куда кладет установщик cgi-скрипты apcupsd.
Ламерский вопрос: а как узнать, к какому порту (ttyS0 S1 ...) подключен UPS для конфигурации NUT?
Спасибо!
Last edited by Asgard; 14-05-2012 at 11:05.
Господа, пытаюсь прикрутить к rt-n16 мониторинг и управление aps smart-ups 1500 через USB.
Хочу чтобы роутер мониторил UPS и выключал железный NAS (включен всегда, когда питание падает ему больно) и
стационарный компьютер (если он включен конечно) по сети штатным функционалом apcupsd, который есть в entware.
Всё питается от одного UPS конечно.
К сожалению, модуль usbhid, по всей видимости, собран без поддержки /dev/hiddev raw HID device support.
Собственно вопросы.
1. Не могли бы вы собирать модули к прошивке с этой опцией (/dev/hiddev raw HID device support.)?
2. Не может ли кто с установленным toolchain собрать usbhid c этой опцией мне на предмет потестить?
3. http://code.google.com/p/wl500g/wiki...CustomFirmware актуально?
Достаточно ли этого, чтобы самостоятельно пересобрать модули (особенно если система amd64)?
PS. Имею madskillz в линукс но никогда не занимался кроссплатформенной разработкой, так же
катастрофически не имею времени глубоко проникать, но постараюсь справиться сам конечно.
UPD: Сам разобрался.
Last edited by Omega; 14-05-2013 at 23:18. Reason: ну так расскажите всем :) нам тоже интересно ;)
Ок, по просьбе Omega рассказываю.
Модуль usbhid собран правильно, не определялся smartups потому что в вебморде роутера было включено usb 2.0 only. После включения комбинированного режима бесперебойник определился и файл устройства в /dev создался автоматически как только ручками вставил модуль.
Делал следующее: установил через opkg apcupsd и msmtp (это чтобы события слать на гмыл, бизибоксовый sendmail слать на гмыл заставить не смог, настройку расписывать не буду, тривиально через гугль нашёл).
В /tmp/local/sbin/postmount вонзил modprobe usbhid
В /tmp/local/sbin/pre-shutdown добавил
Отрабатывает нормально, поскольку в pre-shutdown ранее флешка перемонтируется в ro. Весь скрипт выглядит так:Code:if [ -f /tmp/powerfail ]; then /opt/sbin/apcupsd --killpower fi
apcupsd.confCode:#!/bin/sh /opt/etc/init.d/rc.unslung stop sleep 10s for i in `cat /proc/mounts | awk '/ext3/{print($1)}'` ; do mount -o remount,ro $i done swapoff -a sleep 1s if [ -f /tmp/powerfail ]; then /opt/etc/apcupsd/apccontrol killpower fi
Далее поправил пути в /opt/etc/apcupsd/apccontrol на предмет соответствия расположения powerfail (я его запихал в /tmp как видно из конфига и скрипта pre-shutdown) и APCPID, подпилил прочие находящиеся там скриптики и apcupsd_mail.conf для работы с msmtp (расписывать не буду, тривиально).Code:UPSNAME sapc1500 UPSCABLE usb UPSTYPE usb DEVICE LOCKFILE /var/lock SCRIPTDIR /opt/etc/apcupsd PWRFAILDIR /tmp NOLOGINDIR /etc ONBATTERYDELAY 6 MINUTES 5 TIMEOUT 0 ANNOY 0 NOLOGON disable KILLDELAY 0 NETSERVER on NISIP 192.168.66.1 NISPORT 3551 EVENTSFILE /tmp/apcupsd.events EVENTSFILEMAX 10 UPSCLASS standalone UPSMODE disable STATTIME 0 LOGSTATS off DATATIME 0
Демон заводится и отрабатывает как надо, apcupsd обрубает нагрузку UPS при разгрузке роутера.
Имею двух клиентов - железный NAS WD My Book Live (он круглосуточно качает и раздаёт торренты, ему может быть очень больно когда пропадает питание) и стационарный комп. Подключены они к этому же бесперебойнику, на них установлены apcupsd в режиме клиента. Настройки почти одинаковые на обоих с учётом разницы в путях и отсутствия нужды в nologin для NAS.
Естественно никаких power cutoff бесперебойнику клиентам делать не надо, его делает роутер, так что с разгрузочными скриптами можно не мучиться.Code:UPSNAME sapc1500 UPSCABLE ether UPSTYPE net DEVICE rtn16:3551 POLLTIME 5 LOCKFILE /var/lock SCRIPTDIR /etc/apcupsd PWRFAILDIR /etc/apcupsd NOLOGINDIR /etc MINUTES 4 TIMEOUT 0 ANNOY 0 NOLOGON disable KILLDELAY 0 NETSERVER off UPSCLASS standalone UPSMODE disable STATTIME 0 LOGSTATS off DATATIME 0
Собственно как то так оно и работает.
В планах:
1. Узнать как _в точности_ работает параметр KILLDELAY в конфиге и работает ли (в man apcupcd сказано что он для тупых бесперебойников). По умолчанию сам бесперебойник даёт задержку перед выключением нагрузки в 60 сек, к сожалению конфигурируется это только через com кабель. Возможно ли увеличить это время с помощью KILLDELAY? (Доку зачитал до дыр, ничего не понял, что то про FreeBSD, какой вообще может быть regain control после shutdown, удивительно невнятно написано, видимо придётся в исходники залезть). Разобраться в разнице apcupsd --killpower и --kill-on-powerfail
2. Прикрутить cgi
PS. Вообще сама идея того, что клиент должен опрашивать сервер о столь важных событиях, как переход на батарею и исчерпание её заряда например, невыносимо отвратительна. Должно быть наоборот. Сервер должен заталкивать это клиентам. В процессе тестирования несколько раз было так, что клиент из за большого интервала опроса про...пускал событие "заряд исчерпан, выключаемся" и разгружаться не стал, а роутер шустро разгрузился и отрубил нагрузку на ИБП. В доке сказано, что после получения события "на батареях" интервал опроса клиентом становится равным 1 сек, вне зависимости от того что в POLLTIME сказано, но видимо это работает криво и не всегда. Видимо придётся лечить скриптами, ибо текущая логика работы меня не устраивает. Совершенно неграмотно, в продакшене я бы за такое убивал.
Last edited by Optimus22Prime; 15-05-2013 at 06:54.