Использование apcupsd в гетерогенных сетях.

На один из обьектов, в серверную, был приобретен UPS APC Smart-UPS 1000 RM. Куплен он был для обслуживания двух серверов, один из которых на базе Windows 2003, второй - на базе FreeBSD 5.3. Оба сервера требовалось подключить к данному UPS, обеспечив корректное завершение работы системы в случае окончания срока работы батарей. Также требовалось оповещение пользователей домена AD о проблемах с питанием в серверной.

[Алексей Саморуков]

Keywords: ups hardware freebsd windows From: Alex Samorukov Newsgroups: email Date: Mon, 25 May 2005 14:31:37 +0000 (UTC) Subject: Использование apcupsd в гетерогенных сетях.

Предистория

На 1 из обьектов, в серверную, был приобретен UPS APC Smart-UPS 1000 RM. Куплен он был для обслуживания 2ух серверов, один из которых на базе Windows 2003 (ip 10.0.0.2), второй - на базе FreeBSD 5.3. (ip 10.0.0.1).

Оба сервера требовалось подключить к данному UPS, обеспечив корректное завершение работы системы в случае окончания срока работы батарей. Также требовалось оповещение пользователей домена AD о проблемах с питанием в серверной.

UPS имеет интерфейс USB и COM, но в комплекте прилогался только USB шнур. Сначала я попытался использовать родное ПО данного UPS. И вскоре убедился, что оно совершенно не предназначено для нормальной работы.

Основные проблемы встроенного ПО:

  • Не позволяет назначать действия (например, запуск внешних программ) на возникащие события.

  • Монстроидально. Данный шедевр разработчики APC написали на Java+Win32 API. Причем ПО разбито на Агента (сбор данных) + Сервер (работа с агентами) + Консоль (управление сервером). Кроме того при этом я получил не отключаемый web server и 40 Mb отожранной памяти (сервер+агент).

  • Отсутствие поддержки BSD. Из поддержки OSS систем есть только поддержка Linux (причем ТОЛЬКО агент и тоже на Java+JNI!), работа по стандартным протоколам (snmp) отсутствует.

Apcupsd

Убедившись в невозможности встроенного ПО решить поставленную задачу я решил воспользоваться программой Apcupsd (http://www.apcupsd.com/). Начиная с версии 3.10.17 в ней реализована работа с USB UPS в BSD системах. Также доступна win32 версия программы (на базе cygwin). Apcupsd позволяет работать в режиме клиент/сервер, что и требуется для данной задачи.

Установка APCUPSD на FreeBSD

Так как в APCUPSD/WIN32 не реализована работа с USB, подключаем UPS к FreeBSD серверу. Устанавливаем apcupsd из портов:
	   #cd /usr/ports/sysutils/apcupsd/;make install clean
В диалоге опций выбираем работу с USB. После этого:
	   # cd /usr/local/etc/rc.d;cp apcupsd.sh.sample apcupsd.sh
Теперь правим конфигурацию apcupsd (/usr/local/etc/apcupsd/apcupsd.conf).

Пример конфигурации apcupsd на FreeBSD:

	UPSCABLE usb
	UPSTYPE usb
	DEVICE
	LOCKFILE /var/spool/lock
	BATTERYLEVEL 5
	MINUTES 3
	TIMEOUT 0
	ANNOY 300
	ANNOYDELAY 60
	NOLOGON disable
	KILLDELAY 0
	NETSERVER on
	NISIP 10.0.0.1
	NISPORT 3551
	EVENTSFILE /var/log/apcupsd.events
	EVENTSFILEMAX 10
	UPSCLASS netmaster
	UPSMODE net
	NETPORT 6666
	#ip адрес windows машины
	slave 10.0.0.2
	STATTIME 0
	STATFILE /var/log/apcupsd.status
	LOGSTATS off
	DATATIME 0
Для корректной работы usb ups с apcupsd необходимо закомментировать в файле конфигурации ядра устройство uhid и пересобрать ядро. После установки ядра перезагружаем машину. UPS должен быть виден в системе как устройство /dev/ugen0.

Для проверки работоспособности набираем apcaccess - это должно выдать нам статистику UPS. Если всё работает - самое время перейти к настройке windows.

Установка APCUPSD на Windows 2003

Скачав на сайте скомпиленный win32 бинарник, я распаковал архив в папку c:\apcupsd. После чего запустил c:\apcupsd\bin\setup.bat для создания win32 сервиса. Конфигурация apcupsd/win32 находится в файле \apcupsd\etc\apcupsd\apcupsd.conf.

Пример конфигурации apcupsd на Windows:

	UPSCABLE ether
	UPSTYPE apcsmart
	DEVICE
	LOCKFILE /apcupsd/etc/apcupsd
	ONBATTERYDELAY 6
	BATTERYLEVEL 5
	MINUTES 3
	TIMEOUT 0
	ANNOY 300
	ANNOYDELAY 60
	NOLOGON disable
	KILLDELAY 0
	NETSERVER on
	NISIP 10.0.0.2
	NISPORT 3551
	EVENTSFILE /apcupsd/etc/apcupsd/apcupsd.events
	EVENTSFILEMAX 10
	UPSCLASS netslave
	UPSMODE net
	NETPORT 6666
	# IP BSD сервера
	MASTER 10.0.0.1
	STATTIME 0
	STATFILE /apcupsd/etc/apcupsd/apcupsd.status
	LOGSTATS off
	DATATIME 0
Запускаем apcupsd командой net start apcupsd. Проверяем работу запуском apcaccess. Через некотое время сервис должен присоединиться к серверу (у меня почему-то этот процесс проходит больше минуты). В файле \apcupsd\etc\apcupsd\apccontrol расположены команды, выполняемые при срабатывании событий. В секцию onbattery я добавил строку
       /windows/system32/net.exe send /DOMAIN "WARNING: Server running on UPS battaries"
для оповещения пользователей домена о проблемах. По непонятной мне причине, будучи запущенным от пользвателя system, сервис не выполнял оповещение. После изменения пользователя сервиса оповещения стали рассылаться.

Итог

Все работает так как и требовалось изначально. При желании к apcupsd можно прикрутить web интерфейс, mrtg и прочие рюшечки и свистелки.

Статья взята сайта OpenNet.

[ опубликовано 23/06/2005 ]

Алексей Саморуков - Использование apcupsd в гетерогенных сетях.   Версия для печати