null

Подключение UPS Powerman2000 к FreeBSD 9.0

Есть один довольно привлекательный для сетей класса 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

 

korg

 

Коротко о себе

Работаю в компании Tune-IT, администрирую инфраструктуру компании и вычислительную сеть кафедры Вычислительной ТехникиСПбНИУ ИТМО.

Интересы: администрирование UNIX и UNIX-like систем и активного сетевого оборудования, написание shell- и perl-скриптов, изучение технологий глобальных сетей.
Люблю собирать GNU/Linux и FreeBSD, использовать тайлинговые оконные менеджеры и писать системный софт.

Ничего не найдено. n is 0