Ключевые слова:ups, backup, nut, linux, (найти похожие документы)
From: Алексей Лесовский
Newsgroups: email
Date: Mon, 23 May 2008 17:02:14 +0000 (UTC)
Subject: Подключение источника бесперебойного питания к Linux с помощью NUT-2.2.1
В статье я опишу как подключить к Linux UPS через USB и настроить
процедуру выключения при разряженной батарее
Статья основывается на следующих данных так что большое спасибо авторам и
самим разработчикам:
- http://www.opennet.dev/base/sys/smart_ups_nut.txt.html - сам автор
признается что его статья неполная, и при ее прочтении у меня возникала
масса вопросов, поэтому дальше
- http://eu1.networkupstools.org/doc - официальная документация по NUT,
правда на англ. языке
Заранее извиняюсь за возможные грамматические и орфографические ошибки.
итак начало
Имеем ups, в моем случае подключенный через usb, и операционная система
linux, в моем случае fedora, что в принципе мало имеет значение т.к.
установка происходила из исходных кодов. Для работе с ups была
использована программа NUT - Network UPS Tools. Итак поехали.
Для начала скачиваем исходные коды программы и устанавливаем ее в
систему, ничего необычного на этом шаге нет, поэтому выполняются обычные
процедуры
wget http://eu1.networkupstools.org/source/2.2/nut-2.2.1.tar.gz
tar -xvzf ./nut-2.2.1.tar.gz
cd ./nut-2.2.1.tar.gz
./configure
make
make install
в ходе установки у меня создался каталог программы в /usr/local/ под
названием ups, в зависимости от дистрибутива и от метода установки (rpm,
yum, emerge) путь может отличаться но внутренняя структура каталогов
будет одинаковая. После установки появляются следующие каталоги:
bin - каталог с драйверами под определенные модели UPS'ов
etc - файлы конфигурации демонов, настройки подключения к ups
sbin - системные демон, демон мониторинга, и еще
html cgi-bin include lib share - нам в них ничего править не придется,
так что их описывать не обязательно
Для начала, кто делает это впервые, нужно определиться с UPS, подключен
ли он, видит ли его ядро. воспользуемся утилитой из пакета usbutils
lsusb
вывод покажет, какие usb-устройства есть в системе, если вы не видите
ups, также рекомендую воспользоваться dmesg, если dmesg и там его нет,
значит в ядре попросту не хватает каких то опции. В моем случае все
определилось без проблем у я увидел модель American Power Conversion
Back-UPS Pro 500 т.е. APC
далее в каталоге с исходными кодами, есть подкаталог data, в нем есть
список поддерживаемого оборудования - driver.list там можно найти
поддерживается ли ваш UPS и каком подходит для него драйвер.
Теперь когда определились с моделью ups и драйвером, можно приступать к
настройке конфигов.
пути к файлам будут указываться относительно /usr/local/
редактируем ups/etc/ups.conf
user = nobody
[usbhid]
driver = usbhid-ups
port = /dev/hiddev0
в общем строка user, показывает от кого будет запускаться драйвер, он
запускается с правами nobody и поэтому в начале не может получить
доступа к некоторым ресурсам (в каталоге /dev/, не может создать .pid и
проч.)
[usbhid] - это имя нашего UPS, рекомендую запомнить потому что еще пригодится
driver - это драйвер для нашего UPS, располагается в каталоге ups/bin
port - это место где демон будет взаимодействовать с ups (в некоторых дистрибутивах,
путь может иметь вид /dev/usb/hiddev0)
Примечание: вообще в каталоге ups/bin есть отдельный драйвер для UPS'ов
фирмы АРС, используется usbhid-ups, потому как UPS подключен через USB
перед запуском рекомендую открыть в отдельном окне tail -f
/var/log/messages, дабы просматривать системные сообщения, выводимые демонами
далее запускаем upsdrvctl для соединения с ups
ups/bin/upsdrvctl start usbhid
вот тут как раз и указываем имя нашего UPS - usbhid - так, мы явно
указываем что нужно использовать секцию [usbhid]
вообще у upsdrvctl есть 2 полезных параметра, -t - тестовый режим,
upsdrvctl выводит на экран то что бы он делал, во время нормального
запуска; и -D - отладочный запуск (debug)
смотрим в messages все ли нормально, если нет, то разбираемся в причинах
(рекомендую оф.сайт - там неплохой FAQ), если да идем дальше
правим ups/etc/upsd.conf и ups/etc/upsd.users
в файле upsd.conf настраиваются права доступа к upsd.
ACL all 0.0.0.0/0
ACL localhost 127.0.0.1/32
ACCEPT localhost
REJECT all
LISTEN 127.0.0.1 3493
в файле upsd.users настраиваются пользователи имеющие доступ к upsd.
[upsmon]
password = usbhidpassword
allowfrom = localhost
upsmon master
далее с правами доступа на файлы и директории, у меня часто вылазили
сообщения что не хватает прав доступа к каким то файлам поэтому пришлось
немного их поменять, хотя с точки зрения безопасности это не хорошо.
chmod 666 /dev/hiddev0
# указание user = root в ups.conf, не помогло избежать проблемы доступа, к hiddev0
chmod 777 /var/state/ups
# там upsd не мог создать .pid файл
chmod 640 ups/etc/upsd.conf
теперь запускаем upsd и в случае успешного запуска проверяем соединение с UPS
ups/sbin/upsd
ups/bin/upsc usbhid@localhost
успешный вывод должен быть примерно следующий...
battery.charge: 100
battery.charge.low: 10
battery.charge.warning: 50
battery.date: 2001/09/25
battery.mfr.date: 2007/06/12
battery.runtime: 7177
battery.runtime.low: 120
battery.type: PbAc
...
ups.status: OL
ups.test.result: No test initiated
ups.vendorid: 051d
это говорит что все хорошо.
Теперь настраиваем upsmon для того чтобы следить за тем когда разрядится
батарея, и выключить нашу машинку. редактируем ups/etc/upsmon.conf.
Пример полностью взят из статьи с opennet, что немного облегчило мне
жизнь. Но не забываем поменять имя UPS'а и пароль на свои (самая первая
строка).
редактируем ups/etc/upsmon.conf
MONITOR usbhid@localhost 1 upsmon usbhidpassword master
NOTIFYCMD /usr/local/sbin/callwall
NOTIFYFLAG ONLINE SYSLOG+EXEC
NOTIFYFLAG ONBATT SYSLOG+EXEC
NOTIFYFLAG LOWBATT SYSLOG+EXEC
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 2
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5
все теперь запускаем upsmon и и если запуск прошел успешно можно
протестировать нашу работу))) выдергиванием шнура питания из сети
Примечание: запустились ли процессы можно проверить через ps, следующим
образом ps ax |grep ups
ups/sbin/upsmon
Также проверить как останавливается система можно сказав upsd что UPS
получил сигнал выключения питания
upsmon -c fsd
Теперь все это (upsdrvctl, upsd, upsmon) можно положить в автозагрузку.
На этом функционал программы не исчерпывается, кому хочется большего
следуют на http://eu1.networkupstools.org/doc
Также есть неплохой пакет заточенный конкретно под бесперебойники фирмы
APC - apcupsd на http://www.apcupsd.com/
Поверьте мне, значение параметра port игнорируется, NUT уже довольно давно не пользуется услугами ядерного драйвера HID. port нужно задавать только при подключении к COM. Кстати, что навело вас на мысль, что там должно быть /dev/hiddev0? Если это документация, то мы ее поправим :)
Кстати, для настройки прав доступа гораздо лучше использовать набор правил udev, ищите в scripts/udev/ в исходниках.
>Поверьте мне, значение параметра port игнорируется, NUT уже довольно давно не пользуется
>услугами ядерного драйвера HID. port нужно задавать только при подключении к
>COM. Кстати, что навело вас на мысль, что там должно быть
>/dev/hiddev0? Если это документация, то мы ее поправим :)
>Кстати, для настройки прав доступа гораздо лучше использовать набор правил udev, ищите
>в scripts/udev/ в исходниках.
в старой статье вроде было написано про hiddev0, насчет документации непомню:)