Есть один довольно привлекательный для сетей класса SOHO девайс и имя ему Powerman 2000 online (ссылка на офф. сайт: http://powerman.ru/good/show/383/387/).
Как видно из названия, это онлайновый (с двойным преобразованием) UPS и номинальной выходной мощностью аж 2 кВа.
Данная железка комлектуется тремя выходными розетками типа CEE 7/4 Schuko (а не привычные нам IEC C13, что в общем-то ИМХО больше подходит для SOHO), интерфейсом rs232, а также встроенным сетевым фильтрам для защиты ЛВС от импульсов высокого напряжения.
Существует несколько модификаций -- с/без SNMP и с/без USB.
В моей модификации отсутсвовали и SNMP и USB, поэтому для взаимодействия с компьютером я использовал rs232.
Ожидаемо, производитель вместе с упсом поставил диск с ПО, работающим по протоколу MegaTec и обеспечивающим удобный интерфейс для управления и мониторинга железки.
Только вот последняя версия ПО на диске ориентирована под FreeBSD 3.2 и рядом лежат пропатченные библиотеки для того, чтобы завести ПО на FreeBSD 4.0
К слову, вот информация о моей системе:
srv:~> uname -srp
FreeBSD 9.0-RELEASE amd64
Причем, насколько я понял, на диске ещё и не самая последняя версия ПО, т.к. вариант с диска работать у меня не захотел. Следовательно,
srv:~> cd /tmp && fetch http://powerman.ru/images/Soft/UPSILON%20ONL.zip
srv:/tmp> unzip /tmp/UPSILON%20ONL.zip
На момент написания данной статьи, версия всех элементов ПО upsilon: 2.1
Ну а дальше, я приступил к попыткам завести скачанную новейшую версию ПО под девятой фряхой:
srv:/tmp> cd /tmp/UPSILON\ ONL/Unix
srv:/tmp/UPSILON ONL/Unix> tar -xf BSD-3.Z
srv:/tmp/UPSILON ONL/Unix> cd upsilon
srv:/tmp/UPSILON ONL/Unix/upsilon> ldd upsilon
Смотрим и убеждаемся, что у нас отсутствуют необходимые библиотеки. К слову, по идее, эти библиотеки должны быть в порте compat3x, но мэйнтейнеры портов посчитали нелогичным держать такие древние версии пакетов и избавились от них, оставив минимально-доступную версию -- compat4x.
Тем не менее, в порте compat4x отсутсвуют libtermcap и libcurses, поэтому используем находящийся в дистрибутиве "patch":
srv:/tmp/UPSILON ONL/Unix/upsilon> cd ../patch/FreeBSD-4.x/compat3x/
srv:/tmp/UPSILON ONL/Unix/patch/FreeBSD-4.x/compat3x> cat compat3x.?? |
tar -xf -
srv:/tmp/UPSILON ONL/Unix/patch/FreeBSD-4.x/compat3x> cd usr/lib/compat
Для удобства, положим две недостающие библиотеки в /tmp/.
srv:/tmp/UPSILON ONL/Unix/patch/FreeBSD-4.x/compat3x/usr/lib/compat> cp \
libtermcap.so.2 libcurses.so.2 /tmp/
Далее, приступим к сборке порта compat4x:
srv:/tmp/UPSILON ONL/Unix/patch/FreeBSD-4.x/compat3x/usr/lib/compat> cd \
/usr/ports/misc/compat4x
srv:/usr/ports/misc/compat4x> make install clean
и, после завершения установки, отмапим необходимую нам либу libc.so.3 в libc.so.4:
srv:/usr/ports/misc/compat4x> echo 'libc.so.3 libc.so.4' >> /etc/libmap.conf
srv:/usr/ports/misc/compat4x> echo 'libc.so.3 libc.so.4' >> /etc/libmap32.conf
И скопируем библиотеки из "patch" от производителя в соответствующие каталоги:
srv:/usr/ports/misc/compat4x> cp /tmp/libtermcap.so.2 /tmp/libcurses.so.2 \
/usr/local/lib/compat/
srv:/usr/ports/misc/compat4x> cp /tmp/libtermcap.so.2 /tmp/libcurses.so.2 \
/usr/local/lib32/compat/
Дальше по плану у нас инсталляция ПО upsilon. Честно говоря, я уж не знаю, какую траву курили разработчики, когда писали скрипт инсталляции, но мне инсталлятор показался немного кривоватым. Поэтому, сделаем это руками (конечно, можно было бы собрать пакет, но для наглядности обойдемся без этого):
srv:/usr/ports/misc/compat4x> cd /tmp/UPSILON\ ONL/Unix/upsilon
srv:/tmp/UPSILON ONL/Unix/upsilon> mkdir /usr/local/etc/upsilon
srv:/tmp/UPSILON ONL/Unix/upsilon> install -m 544 rupsd /usr/local/etc/upsilon/
srv:/tmp/UPSILON ONL/Unix/upsilon> install -m 555 upsilon email pager \
/usr/local/etc/upsilon/
srv:/tmp/UPSILON ONL/Unix/upsilon> install -m 644 shutdown.ini preshut.bat \
upsilon.eml upsilon.pgr /usr/local/etc/upsilon/
srv:/usr/local/etc/upsilon> mkdir /var/adm 2> /dev/null
В числе прочих достоинств софтины я обнаружил, что в бинарнике захардкожен путь к рабочей директории (/etc/upsilon), тем не менее, согласно политике современных версий FreeBSD, мы поставили ПО в /usr/local/, поэтому следующий шаг:
srv:/usr/local/etc/upsilon> ln -s /usr/local/etc/upsilon/ /etc/upsilon
Осталось дело за малым -- сконфигурировать скрипты, которые будут выполняться при потере питания: shutdown.ini и preshut.bat. Насколько я понимаю, скрипты выполняются последовательно и разработчики не удалили один из них только для совместимости с Microsoft Windows.
srv:/usr/local/etc/upsilon> vi shutdown.ini preshut.bat
Далее, выполним конфигурацию ПО:
srv:/usr/local/etc/upsilon> ./upsilon config
Псевдо-гуй интуитивно понятен, вот основные команды:
c -- выбрать порт (в моём случае это /dev/cuau0)
s -- сохранить конфигурацию
q -- выйти из настроек
Backspace (как указано, но не работает) или Shift+Backspace (как было угадано мной) -- удалить символ перед курсором.
Примечание: если у вас по какой-то причине не показывается интерфейс, попробуйте изменить значение переменной TERM.
У меня при TERM=xterm интерфейс не отображается, но вполне корректно работает при TERM=screen.
Установка и конфигурирование ПО завершены!
Проверим полученные результаты:
srv:/usr/local/etc/upsilon> ./upsilon start
srv:/usr/local/etc/upsilon> ./upsilon status
Управление осуществляется аналогично -- клавишным вводом команд.
Осталось лишь написать rc-скрипт, управляющий утилитой. Этот очевидный шаг я решил не описывать в статье.
Кстати, я пообщался с производителем и выяснил, что в 2013 году планируется выпуск новой версии ПО upsilon, которая будет совместима с FreeBSD 8.1.
Такие дела.
Приложение 1. Версии ПО и размеры библиотек.
Версии ПО upsilon, рассмотренные в этой статье:
(UPSilon) UPS Configuration Utility, Ver. 2.1
(UPSilon) UPS Status Screen, Ver. 2.1
(UPSilon) UPS COMMAND CENTER, Ver. 2.1
srv:/usr/local/etc/upsilon> ldd upsilon
upsilon:
libcurses.so.2 => /usr/local/lib32/compat/libcurses.so.2 (0x280b6000)
libtermcap.so.2 => /usr/local/lib32/compat/libtermcap.so.2 (0x280c2000)
libc.so.3 => /usr/local/lib32/compat/libc.so.4 (0x280c7000)
srv:/usr/local/etc/upsilon> ls -l /usr/local/lib32/compat/libcurses.so.2
-r--r--r-- 1 root wheel 45940 01 янв 00:01 /usr/local/lib32/compat/ \
libcurses.so.2
srv:/usr/local/etc/upsilon> ls -l /usr/local/lib32/compat/libtermcap.so.2
-r--r--r-- 1 root wheel 15084 01 янв 00:01 /usr/local/lib32/compat/ \
libtermcap.so.2
srv:/usr/local/etc/upsilon> ls -l /usr/local/lib32/compat/libc.so.4
-r--r--r-- 1 root wheel 580636 01 янв 00:01 /usr/local/lib32/compat/ \
libc.so.4