Документация по ОС FreeBSD Четверг, 09.05.2024, 00:53
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Работа с железом

Network UPS Tools [2009]
Network UPS Tools представляет собой набор программ, которые обеспечивают общий
интерфейс для мониторинга и администрирование UPS оборудования.

У меня есть APC Smart-UPS 1500VA USB & Serial 230V и к нему подключено 2 сервера один с FreeBSD, второй - c Windows 2003. При выключении питания один штатно выключается (тк к нему подключен дата-кабель от UPS), второй - как получится. Передо мной встала задача - автоматизировать процесс выключения серверов подключенных к одному UPS, при разрядке батареи последнего. Требования к утилите были следующие: умение работать с сетью, наличие интерфейса управления, возможность работы с любыми операционными системами.
 
Установка
 
Подключение
При подключении APC Smart-UPS 1500VA USB & Serial 230V к FreeBSD, UPS определяется так:
(подключения через USB)
ugen0: <American Power Conversion Smart-UPS 1500 
FW:653.12.I USB FW:4.2, class 0/0, rev 1.10/0.06, addr 2> on uhub0

(подключения через COM)
# dmesg -a | grep sio0
sio0: <16550A-compatible COM port> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
sio0: type 16550A
sio0: [FILTER]

Я остановился на подключении через COM порт, так как выдел в нем более светлое будущее для работы с NUT.

Порт

# cd /usr/ports ; make search name='nut-'
Port: nut-2.4.1
Path: /usr/ports/sysutils/nut
Info: Network UPS Tools
Maint: Joerg.Pulz@frm2.tum.de
B-deps: autoconf-2.62 autoconf-wrapper-20071109 expat-2.0.1 gettext-0.17_1
gmake-3.81_3 libiconv-1.11_1 libusb-0.1.12_4 m4-1.4.12,1 neon28-0.28.3
net-snmp-5.4.2.1_3 perl-5.8.9_2 pkg-config-0.23_1
R-deps: expat-2.0.1 gettext-0.17_1 libiconv-1.11_1 libusb-0.1.12_4 
neon28-0.28.3 net-snmp-5.4.2.1_3 perl-5.8.9_2 pkg-config-0.23_1
WWW: http://www.networkupstools.org/]

# cd /usr/ports/sysutils/nut ;make config

Options for nut 2.4.1

[X] SERIAL SERIAL support
[ ] USB USB support
[ ] SNMP SNMP support
[X] NEON NEON XML/HTTP support
[ ] PDU Powerman PDU support
[ ] HAL HAL support
[ ] IPV6 IPV6 support
[ ] DEVEL Install header files
[X] CGI Web CGI interface

Уберите лишнее, например IPV6, и SERIAL\USB (зависит от подключаения UPS), поставьте SNMP (если ваш UPS поддерживает такую возможность) и CGI, если требуется мониторить UPS через веб интерфейс. Приступаем к установке.
# cd /usr/ports/sysutils/nut ;make install clean

Options for libusb 0.1.12_4
[ ] SGML Install developer guide from SGML

~~~~~~~~~~~

 This port has installed the following startup scripts which may cause
 these network services to be started at boot time.
/usr/local/etc/rc.d/nut_upsmon
/usr/local/etc/rc.d/nut_upslog
/usr/local/etc/rc.d/nut

 If there are vulnerabilities in these programs there may be a security
 risk to the system. FreeBSD makes no guarantee about the security of
 ports included in the Ports Collection. Please type 'make deinstall'
 to deinstall the port if this is a concern.

 For more information, and contact details about the security
 status of this software, see the following webpage:
http://www.networkupstools.org/

Готово, теперь переходим к настройке NUT.

Предварительная настройка

Директория
Создадим необходимые директории для драйверов и сервера, куда будут сохраняться данные UPS, и выставим корректные права на директорию.
# mkdir -p /var/state/ups ;chmod 0770 /var/state/ups; chown uucp:wheel /var/state/ups


  • Драйвер
    Найдем свой драйвер UPS в списке поддерживаемого оборудования.
    # cd /usr/local/etc/nut

    Посмотрим, поддерживает ли NUT мое оборудование APC Smart-UPS 1500VA.
    # cat driver.list | grep Smart-UPS
    ## <manufacturer> <model name> <model extra> <driver> ##
    "APC" "Smart-UPS" "" "apcsmart"
    "APC" "Smart-UPS USB" "USB" "usbhid-ups"

    Поддержка имеется, поэтому я могу использовать два драйвера для USB и для COM порта. На данный момент буду использовать драйвер "apcsmart".

    Настройка

  • Конфигурационные файлы
    Все конфигурационные файлы находятся в директории /usr/local/etc/nut

    ups.conf - настройки UPS драйвера для сбора данных
    upsd.conf - настройка основного демона upsd для Network UPS Tools
    upsd.users - контроль доступа к UPS демону (профили пользователей)
    upsmon.conf - настройки монитора UPS демона
  • ups.conf
    В этом файле вы указываете свои UPS.
    # cd /usr/local/etc/nut
    # cp ups.conf.sample ups.conf

    Добавим UPS и настроим подключение к нему.
    [APC]
    driver = apcsmart
    port = /dev/cuad0
    cable = 940-0024C
    desc = "APC Smart-UPS 1500VA"

    Опишим некоторые параметры для использования:

  • [ups_name] - имя используется как адрес вашего UPS. Вы можете его изменить на любое произвольное имя.
  • driver - драйвер, используемый для работы с UPS.
  • port - порт, на котором висит UPS (для подключения через USB, UPS вставляет это значение в auto).
    - Для snmp-ups: имя хоста SNMP агента
    - Для newhidups: значение "auto" для автоматического соединения с USB UPS.
  • desc - описание устройства для себя, чтобы не забыть.
  • sdorder - необязательный элемент. При наличии нескольких UPS подключенных к серверу можно выключать в определенном порядке. используя upsdrvctl можно выключить все 0s или 1s, 2s и тд. Для исключения последовательной остановки используйте -1.
  • nolock - необязательный элемент, его не рекомендуется использовать в его этом конфиге. Он служит для отключения блокировки порта при пользовании утилитой.
  • maxstartdelay - необязательный элемент. Может быть, заданна как глобальная переменная выше вашего первого UPS. Это значение определяет, сколько upsdrvctl будет ожидать окончания запуска драйвера. Данная возможность предоставляет стабильность в работе. Значение по умолчанию равно 45 секундам.
  • cable - Если драйвер UPS требует дополнительных параметров, вы можете указать их здесь. Например, для флага "cable" я ставлю значение 940-0024C. Это индекс вашего кабеля и вы можете посмотреть его тут /usr/local/share/doc/nut/cables. Вы можете не указывать это значение, если ваше подключение к UPS стандартно.
  • upsd.conf
    upsd отвечает за передачу данных от драйвера клиентским программам в сети. upsd должен находится под управлением и по возможности, как единственный источник состояния и мониторинга клиентов, таких как upsmon. upsd использует этот файл для контроля доступа к серверу и для установки других значений различных конфигурации. Этот файл содержит подробные сведения об управление доступом и таким образом обеспечивается безопасность.  В идеальном случае только процесс upsd должны иметь возможность прочитать этот файл.

    Создадим конфигурационный файл.
    # cp upsd.conf.sample upsd.conf

    Добавим следующие значения:
    LISTEN 127.0.0.1
    LISTEN 192.168.0.2

    Про ACL
    Comment By: Arnaud Quette (aquette) Date: 26/01/2008 20:53
    Message: the ACL mechanism has been removed from NUT 2.3.0 development tree.
    Заменено на TCP wrappers.

    Опишем параметры использования:

  • MAXAGE <seconds> - по умолчанию 15 секунд. Это частота обновления данных клиентов после остановки драйвера UPS. Следует использовать только если у вас трудности с обновлением данных. См syslog.
  • LISTEN <address> [<port>] - здесь указывается адрес и порт 3493 (по умолчанию) для прослушивания подключений.
  • MAXCONN <connections> - по умолчанию используется 1024 подключений. Каждый UPS, каждого LISTEN адреса и каждого клиента считается как одно подключение. Если на сервере заполнятся кол-во подключений, он больше не будет принимать новых входящих клиентских подключений.
  • upsd.users
    Контроль доступа для UPS демона (профили пользователей)
    Именно здесь вы указываете, кто и в какой мере будет контролировать, и работать с утилитой.
    # cp upsd.users.sample upsd.users
    # cat upsd.users
    [admin]
    password = admin
    actions = SET
    instcmds = ALL
    
    [monmaster]
    password = bsd
    upsmon master
    
    [monslave]
    password = win2k3
    upsmon slave

    Значения:

  • password - пароль пользователя
  • allowfrom - откуда разрешено подключатся

    Каждый UPS монитор может определяться как один из трех возможных типов:
  • upsmon master - полные полномочия управлением питания подключенных к системе UPS под управлением upsmon, эта система отвечает за выключение разряженного аккумулятора.  Выключение происходит после безопасного выключения всех Slave систем. Если ваш UPS подключен непосредственно к системе через последовательный порт, то для upsmon системы следует определить этот UPS как Master.
  • upsmon slave - эта система, под управлением upsmon и она не выключается непосредственно. Операционная система будет выключена перед отключением питания Master. Используйте этот режим при запуске монитора на других компьютерах работающих на том же UPS. И очевидно, что только один сервер может быть подключен к последовательному порту на UPS будет, является Master. А все остальные сервера будут Slave.
  • upsmon monitor-only - при этом режиме будут создаваться уведомления о состоянии или изменения (работы батареи, переключении на линию и т.д.) но не завершать работу системы.
  • actions - Действия пользователя с применением upsd.
    - SET - изменить значения определенных переменных в UPS
    - FSD - установка флага "принудительного выключения" для UPS
  • instcmds - разрешения пользователю на инициирование конкретных команд. Применяя "ALL" вы разрешаете использовать все команды, Существует множество команд выполните 'upscmd -l' чтобы увидеть, что ваше оборудование поддерживает. Вот, к примеру, несколько команд.
    - test.panel.start      - старт теста передней панели
    - test.battery.start    - старт теста батареи
    - test.battery.stop     - остановка теста батареи
    - calibrate.start       - запуск калибровки батареи
    - calibrate.stop        - остановка калибровки батареи
  • upsmon.conf
    upsmon предоставляет основные функции, которая собирается найти в программе мониторинга UPS, например это безопасное завершений работы при сбое питания. В многоуровневой схеме утилиты NUT это клиент.
    # cp upsmon.conf.sample upsmon.conf
    # cat upsmon.conf
    MONITOR APC@localhost 1 monmaster bsd master
    MONITOR APC@localhost 1 monslave win2k3 slave
    MINSUPPLIES 1
    SHUTDOWNCMD "/sbin/shutdown -h +0"
    POLLFREQ 5
    POLLFREQALERT 5
    HOSTSYNC 15
    DEADTIME 15
    POWERDOWNFLAG /etc/killpower
    NOTIFYFLAG ONLINE SYSLOG+WALL
    NOTIFYFLAG ONBATT SYSLOG+WALL
    NOTIFYFLAG LOWBATT SYSLOG+WALL
    NOTIFYFLAG SHUTDOWN SYSLOG+WALL
    RBWARNTIME 43200
    NOCOMMWARNTIME 300
    FINALDELAY 5

    Мы добавили MONITOR в котором указали наши значения. Формат таков:
    MONITOR system powervalue username password type

     

  • MINSUPPLIES - указываем количество блоков питания которые должны получать мощность сохраняя систему запущенной. Большинство систем имеют один БП. Но дорогие сервера, например HP NetServer LH4 могут работать с 2 из 4 БП и ему нужно ставить 2.
  • SHUTDOWNCMD - upsmon выполняет эту команду, когда системе необходимо выключить.
  • NOTIFYCMD - upsmon отправляет сообщение при происшествиях.
  • POLLFREQ - опрос мониторами с частотой (измеряется в секундах) для обычной деятельности. Вы можете отрегулировать это частоту опроса, чтобы upsmon не “зашумлял”вашу сеть, но не вносите слишком большие значения тк. оно может пропустить отключение питания.
  • POLLFREQALERT - опрос UPS с частотой в секундах. Можно сделать значение поменьше, чем POLLFREQ для лучшей чувствительности работы батареи.
  • HOSTSYNC - как долго upsmon будет ждать перед переходом к следующему upsmon.
    master upsmon  использует это число при ожидании slaves чтобы отключиться после того как он установил флаг принудительное завершение работы (FSD).  И если slaves не отключаться после этого тайм аута, то выключение продолжится без них.
  • DEADTIME - интервал ожидания перед объявлением статуса UPS как «мертвый»
    upsmon требует, чтобы UPS предоставлял свою статус информацию, каждые несколько секунд (см. POLLFREQ и POLLFREQALERT).  Если статус загрузки, UPS помечен fails.  И если оно остается fails более чем DEADTIME секунд, то UPS помечается «мертвый».
  • POWERDOWNFLAG - флаг файла для форсирования завершения работы UPS в master системе.
  • NOTIFYMSG - изменение сообщения, отправленные upsmon при возникновении определенных событий.
  • NOTIFYFLAG - изменение поведения upsmon при возникновении событий NOTIFY.
  • RBWARNTIME - предупреждение замены аккумулятора в секундах.
  • NOCOMMWARNTIME - предупреждение по времени при не общении к UPS в секундах.
  • FINALDELAY - процент батареи, при котором происходит завершение работы системы.
    Разрешения
    Проверьте разрешения на директорию /var/db/nut текущий пользователь должен быть uucp (или другой NUT_USER) и права 0750:
    # ls -ld /var/db/nut/
    drwxr-x--- 2 uucp wheel 512 Apr 28 16:16 /var/db/nut/

    Измените разрешения на конфигурационные файлы: они должны читаться пользователем uucp (или другим пользователем NUT_USER):
    # chown uucp:wheel upsd.conf upsd.users upsmon.conf
    # chmod 0640 upsd.conf upsd.users upsmon.conf


    Запуск сервиса

    Он сказал поехали... =)
    # /usr/local/etc/rc.d/nut start
    Network UPS Tools - UPS driver controller 2.4.1
    Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1)
    APC command table version 2.0

    Broadcast Message from root@bsd.ampul.local
    (no tty) at 12:51 MSD...

    Communications with UPS APC@localhost lost

    Detected Smart-UPS 1500 [AS0537130911] on /dev/cuad0
    Starting nut.
    Network UPS Tools upsd 2.4.1
    listening on 192.168.0.2 port 3493
    listening on 127.0.0.1 port 3493
    Connected to UPS [APC]: apcsmart-APC

    Broadcast Message from root@bsd.ampul.local
    (no tty) at 12:51 MSD...

    Communications with UPS APC@localhost established

    Смотрим, что все запустилось нормально и UPS подхватился, все правила подключились и порт слушается. =)

    Тест
    Теперь потыкаем демон. И посмотрим, запустился ли демон.
  • # ps -ax |grep nut
    752 ?? Ss 0:00.32 /usr/local/libexec/nut/apcsmart -a APC
    # ps -ax | grep ups
    754 ?? Ss 0:00.03 /usr/local/sbin/upsd
    761 ?? Ss 0:00.00 /usr/local/bin/upslog -s myups@localhost -l
    /var/log/ups.log -i 300
    768 ?? Is 0:00.00 /usr/local/sbin/upsmon localhost
    771 ?? S 0:00.01 /usr/local/sbin/upsmon localhost

    Все замечательно и слушает и логи ведет и нормально висит.

    Теперь проверим свой UPS
    # upsc APC@localhost
    battery.alarm.threshold: 0
    battery.charge: 100.0
    battery.charge.restart: 00
    battery.date: 09/07/05
    battery.packs: 000
    battery.runtime: 1800
    battery.runtime.low: 120
    battery.voltage: 27.54
    battery.voltage.nominal: 024
    driver.name: apcsmart
    driver.parameter.cable: 940-0024C
    driver.parameter.pollinterval: 2
    driver.parameter.port: /dev/cuad0
    driver.version: 2.4.1
    driver.version.internal: 2.00
    input.frequency: 50.00
    input.quality: FF
    input.sensitivity: H
    input.transfer.high: 253
    input.transfer.low: 208
    input.transfer.reason: T
    input.voltage: 220.3
    input.voltage.maximum: 221.7
    input.voltage.minimum: 218.8
    output.voltage: 220.3
    output.voltage.nominal: 230
    ups.delay.shutdown: 090
    ups.delay.start: 000
    ups.firmware: 653.12.I
    ups.id: UPS_IDEN
    ups.load: 026.6
    ups.mfr: APC
    ups.mfr.date: 09/07/05
    ups.model: Smart-UPS 1500
    ups.serial: AS0537130911
    ups.status: OL
    ups.temperature: 027.0
    ups.test.interval: 1209600
    ups.test.result: NO

    Полная картина ясна и все в порядке, но кому нужно поменьше букв, то выполните следующую команду.
    # upsc APC@localhost ups.status
    OL


  • OL - система работает на линии (on line power)
  • OB - система работает от батареи (on battery)
  • LB - система работает от севшей батареи (low battery)

    Можно посмотреть монитором
    # upsmon
    Network UPS Tools upsmon 2.4.1
    UPS: APC@localhost (master) (power value 1)
    Using power down flag file /etc/killpower

    Когда upsmon необходимо быстро выключить локальную систему, она устанавливает флаг "FSD" (forced shutdown - принудительное отключение) для любых UPSов, на котором она выполняется в master режиме. Это используется и для синхронизации slaves компьютеров в том случае, если master UPS передает событие и всем рассылается сообщение о немедленном прекращении работы.
    Можно вручную вызвать этот режим на master upsmon, запустив другой экземпляр с флагом '-c fsd '.  Это полезно, когда вы хотите инициировать shutdown перед критическом этапе.
    Эмулируем падение мощности:
    # upsmon -c fsd

    Если система корректно выключилась, то все в порядке.
    rc.conf
    Для запуска NUT при старте  FreeBSD добавляем в /etc/rc.conf следующее:
  • nut_enable="YES"
    nut_upslog_enable="YES"
    nut_upsmon_enable="YES"

    Перезагрузим FreeBSD и увидим при загрузке следующее.
    NNetwork UPS Tools - UPS driver controller 2.4.1
    Network UPS Tools - APC Smart protocol driver 2.00 (2.4.1)
    APC command table version 2.0
    Detected Smart-UPS 1500 [AS0537130911] on /dev/cuad0
    Starting nut.
    Network UPS Tools upsd 2.4.1
    listening on 192.168.0.2 port 3493
    listening on 127.0.0.1 port 3493
    Connected to UPS [APC]: apcsmart-APC
    Starting nut_upslog.
    Network UPS Tools upslog 2.4.1
    logging status of myups@localhost to /var/log/ups.log (300s intervals)
    Starting nut_upsmon.
    Network UPS Tools upsmon 2.4.1
    UPS: APC@localhost (master) (power value 1)
    Warning: ignoring duplicate UPS [APC@localhost]
    Using power down flag file /etc/killpower


    Сетевой сервер

    Клиенты
    Подключим второй сервер Windows 2003 St в качестве клиента. Для этого необходимо найти необходимое ПО клиента установить и настроить его. Список клиентских модулей смотрите тут Client projects. Мне был необходим Windows NUT client Необходимо скачать и установить модуль, а так же настроить его под свои параметры и добавить в автозагрузку системы.

    Проведем практические испытания, выключим электричество на вход к UPS и посмотрим, как отреагирует сервер и клиент.

    Как и было задумано сначала  штатно выключился Windows 2003 slave (при зарядке батареи 10%), а потом FreeBSD master (при зарядке батареи 5%)
    May 5 14:04:03 bsd upsmon[770]: UPS APC@localhost on battery
    May 5 14:41:43 bsd upsmon[770]: UPS APC@localhost battery is low
    May 5 14:41:43 bsd upsmon[770]: Executing automatic power-fail shutdown

    Broadcast Message from root@bsd.ampul.local
    (no tty) at 14:41 MSD...

    UPS APC@localhost battery is low

    Broadcast Message from root@bsd.ampul.local
    (no tty) at 14:41 MSD...

    Executing automatic power-fail shutdown

    May 5 14:41:43 bsd upsmon[770]: Auto logout and shutdown proceeding

    Broadcast Message from root@bsd.ampul.local
    (no tty) at 14:41 MSD...

    Auto logout and shutdown proceeding

    *** FINAL System shutdown message from root@bsd.ampul.local ***
    System going down IMMEDIATELY

    May 5 14:41:48 bsd shutdown: halt by root:
    May 5 14:42:20 bsd rc.shutdown: 30 second watchdog timeout expired. Shutdown terminated.

     

    Дополнительно

    SNMP
    Доступно для снятия данных со специализированных UPS. К сожалению, у меня нет APC AP9606 APC Web/SNMP management card и тп чтобы я смог бы попробовать данную опцию.
    # man snmp-ups


  • Web
    Web-интерфейс проверки статуса UPS. Установим и посмотрим, что upsstats может нам предложить.
    # man 8 upsstats.cgi

    upsset.conf - Конфигурация Network UPS Tools для upsset.cgi
    # cp upsset.conf.sample upsset.conf
    # cp upsstats.html.sample upsstats.html
    # cp upsstats-single.html.sample upsstats-single.html

    Раскоментируем строчку.
    # cat upsset.conf
    I_HAVE_SECURED_MY_CGI_DIRECTORY

    В конфигурационный файл Apache добавим следующее:
    <VirtualHost *:80>
    ServerName ups.mydomain
    ServerAlias ups
    ServerAdmin admin@localhost
    Options Indexes FollowSymlinks MultiViews +ExecCGI
    AddHandler cgi-script .cgi
    DocumentRoot /usr/local/www/nut/
    AccessFileName .htaccess
    </VirtualHost>

    И при переходе на ваш адрес у вас должна отобразится страница Network UPS Tools с вкладками Statistics и Settings.
    - Settings – тут вы можете, настроит UPS (пользователя берете согласно upsd.users)
    - Statistics – здесь можете просмотреть статус вашего UPS, а так же посмотреть текущее состояние в графическом виде.

    Заключение

    Система поработала в тестовом режиме полторы недели и уже один раз спасла (как раз на праздниках выключали электричество). И после получение питания с UPS(включили электричество) эти два сервера включились самостоятельно (настройка BIOSа) как и положено. =) 



  • Источник: http://www.lissyara.su/?id=1932
    Категория: Работа с железом | Добавил: oleg (19.05.2009) | Автор: Raven2000
    Просмотров: 1462 | Рейтинг: 0.0/0 |
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Форма входа

    Beastie

    Друзья сайта

    Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    links

    Copyright MyCorp © 2024