Собрал на досуге NUT. Если коротко то он спользуется для:
- Мониторинга работы источника бесперебойного питания (ИБП)
- Корректного выключения компьютера/роутера при низком заряде батареи
прочитать про настройку можно тут
http://web.asplinuxclub.org/moin.cgi.../Configuration
и тут
http://web.asplinuxclub.org/moin.cgi...rdware/UPS/USB
список поддерживаемого железа тут
http://www.networkupstools.org/compat/stable.html
вощем собрал пакет в ручную если кому нужен качайте.
How-to
Пишу для себя, и не только
Внимание: в хау-ту описан процесс настройки UPS от фирмы APC
помещаем в
/tmp/local/sbin/post-boot
строки:
mknod /dev/usb/hiddev0 c 180 96
chmod 660 /dev/usb/hiddev0
insmod /tmp/local/lib/modules/hid.o
mkdir /var/state/ups
копируем в
/tmp/local/lib/modules
файл hid.o для 17 превью он прекреплен здесь
далее
Code:
flashfs save && flashfs commit && flashfs enable && reboot
после перезагрузки
редактируем файл
/opt/etc/ups.conf
у меня там
[ups]
desc = "APC BACK UPS CS-350 (USB)"
driver = usbhid-ups
port = /dev/usb/hiddev0
создаем
upsd.conf
со строками:
ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACCEPT localhost
REJECT all
создаем
upsd.users
с таким содержимым:
[monuser]
password = secret
allowfrom = localhost
upsmon master
в файле
upsmon.conf
пишем:
MONITOR ups@localhost 1 monuser secret master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/halt"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /tmp/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
запускаем и проверяем как все завелось
Code:
# usbhid-ups -a ups -u admin -D
если получили что то вроде этого
Code:
Network UPS Tools: 0.29 USB communication driver - core 0.32 (2.2.1)
...
Using subdriver: APC HID 0.92
Path: UPS.PowerSummary.iProduct, Type: Feature, ReportID: 0x01, Offset: 0, Size: 8, Value: 1.000000
Path: UPS.PowerSummary.iSerialNumber, Type: Feature, ReportID: 0x02, Offset: 0, Size: 8, Value: 2.000000
Path: UPS.PowerSummary.iDeviceChemistry, Type: Feature, ReportID: 0x03, Offset: 0, Size: 8, Value: 4.000000
...
Detected a UPS: American Power Conversion/Back-UPS 350 FW: 5.5.I USB FW: c1
значит все нормально. нажимаем ctrl+c
теперь следующая проверка
Code:
# usbhid-ups -a ups -u admin
# upsd -u admin
# upsc ups
должно получиться что то вроде этого:
Code:
battery.charge: 95
battery.charge.low: 10
battery.charge.warning: 50
battery.mfr.date: 2002/11/06
battery.runtime: 2580
battery.type: PbAc
battery.voltage: 13.5
battery.voltage.nominal: 12.0
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: /dev/usb/hiddev0
driver.version: 2.2.1
driver.version.data: APC HID 0.92
driver.version.internal: 0.32
ups.firmware: 5.5.I
ups.firmware.aux: c1
ups.mfr: American Power Conversion
ups.mfr.date: 2002/11/06
ups.model: Back-UPS 350
ups.productid: 0002
ups.serial: JB0245002834
ups.status: OL CHRG
ups.vendorid: 051d
Дальше создаем скрипт автозапуска
у меня он такой:
Code:
#!/bin/sh
prefix="/opt"
PATH=${prefix}/bin:${prefix}/sbin:/sbin:/bin:/usr/sbin:/usr/bin
NAME_H=usbhid-ups
NAME_D=upsd
DAEMON_H=${prefix}/bin/${NAME_H}
DAEMON_H_OPTS="-a ups -u admin"
DAEMON_D=${prefix}/sbin/${NAME_D}
DAEMON_D_OPTS="-u admin"
echo $DAEMON_H
echo $DAEMON_D
test -x $DAEMON_H || exit 0
test -x $DAEMON_D || exit 0
if [ -z "$1" ] ; then
case `echo "$0" | sed 's:^.*/\(.*\):\1:g'` in
S*) rc="start" ;;
*) rc="usage" ;;
esac
else
rc="$1"
fi
case "$rc" in
start)
if [ -n "`pidof $NAME_H`" ]; then
echo "$NAME_H allready started.... id: `pidof $NAME_H`"
echo "use 'restart' option for restart"
else
echo "Starting $NAME_H: ..."
$DAEMON_H $DAEMON_H_OPTS
fi
if [ -n "`pidof $NAME_D`" ]; then
echo "$NAME_D allready started.... id: `pidof $NAME_D`"
echo "use 'restart' option for restart"
else
echo "Starting $NAME_D: ..."
$DAEMON_D $DAEMON_D_OPTS
fi
;;
stop)
if [ -n "`pidof $NAME_D`" ]; then
echo "Stopping $NAME_D: ..."
killall $NAME_D 2> /dev/null
fi
if [ -n "`pidof $NAME_H`" ]; then
echo "Stopping $NAME_H: ..."
killall $NAME_H 2> /dev/null
fi
;;
info)
if [ -n "`pidof $NAME_D`" ]; then
echo "$NAME_H is active.... pid: `pidof $NAME_H`"
else
echo "$NAME_H is not running"
fi
if [ -n "`pidof $NAME_D`" ]; then
echo "$NAME_D is active.... pid: `pidof $NAME_D`"
else
echo "$NAME_D is not running"
fi
;;
restart)
"$0" stop
sleep 1
"$0" start
;;
*)
echo "Usage: $0 (start|stop|restart|usage|info)"
;;
esac
exit 0
PS: если вдруг у кого то есть желание написть make файл, добавте скрипт автозапуска в пакет.
UPD: мдя с пакетом как то не получится сегодня, перенастроил машину на которой собираю пакеты. завтра выложу вечером.