Домашний сервер на Ubuntu

Настройка UPS

UPS или ИБП (англ. Uninterruptible Power Supply) — источник бесперебойного питания.


Алгоритм работы сервера по описанным ниже настройкам: пропало питание - ждем две минуты - останавливаем операционную систему - выключается сервер - выключается ИБП - питание возобновляется - ждем - включаем ИБП - загружаем сервер.
Настройки описаны на примере ИБП Ippon Back Power PRO 600 с интерфейсом USB.

1. Установка набора демонов управления и мониторинга ИБП: sudo apt-get install nut .

2. Настройка менеджера устройств для ядра Ubuntu (udev):
2.1. До подключения ИБП выполняем команду lsusb .
2.2. После подключения ИБП повторно выполняем команду lsusb . Должна появиться новая строка следующего вида: Bus 004 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial . Первые четыре цифры после ID - идентификатор производителя (VendorID), второй - идентификатор устройства (ProductID).
2.3. В файл /lib/udev/rules.d/52-nut-usbips.rules вносим следующий текст:
# Ippon Back Power Pro 800
ATTR{idVendor}=="Ваш_VendorID", ATTR{idProduct}=="Ваш_ProductID", MODE="664", GROUP="nut"
2.4. Перетыкаем кабель USB сервер-ИБП.

3. Установка драйвера
3.1. В файле /etc/nut/nut.conf указываем, что система работает с единственным локальным ИБП: MODE=standalone .
3.2. В файле /usr/share/nut/driver.list выбираем нужный драйвер, ориентируясь на наименование ИБП и VendorID (п. 2.2).
3.3. В файле /etc/nut/ups.conf укажем параметры подключения к ИБП:
[ippon_600] {произвольное наименование ИБП для дальнейшего обращения к нему}
driver = blazer_usb {драйвер ИБП, см. п. 3.2}
port = auto {порт обращения к ИБП}
desc = "Ippon Back Power Pro 600" {описание ИБП}
default.battery.voltage.high = 13.60 {напряжение питания на полностью заряженной батарее, необязательный параметр}
default.battery.voltage.low = 10.60 {напряжение питания на полностью разряженной батарее, необязательный параметр}
offdelay = 12 {время в секундах до автоматического отключения ИБП}
ondelay = 1 {время в МИНУТАХ до автоматического включения после команды отключения}

3.4. Запуск драйвера ИБП: upsdrvctl start .

4. Настройка прав доступа NUT:
4.1. В файле /etc/nut/upsd.conf прописываем контроль доступа к управлению ИБП (по сетям):
LISTEN 127.0.0.1 3493
ACL all 0.0.0.0/0
ACL localnet 192.168.1.0/24
ACL localhost 127.0.0.1/32
ACCEPT localhost localnet
REJECT all
4.2. В файле /etc/upsd.users создаем пользователя, который может контролировать ИБП:
[имя_пользователя]
password = пароль_пользователя
allowfrom = localnet {параметр, определяющий источник подключения}
upsmon master {параметр, дающий права на управление ИБП}
actions = SET
instcmds = ALL {разрешенные команды}

5. Настройка монитора состояния ИБП
5.1. В файле /etc/nut/upsmon.conf настраиваем службу мониторинга ИБП:
RUN_AS_USER nut
MONITOR имя_ибп@localhost 1 имя_пользователя пароль_пользователя master
MINSUPPLIES 1
NOTIFYCMD /sbin/upssched
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower
NOTIFYMSG ONLINE     "UPS %s on line power"
NOTIFYMSG ONBATT     "UPS %s on battery"
NOTIFYMSG LOWBATT    "UPS %s battery is low"
NOTIFYMSG FSD        "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK     "Communications with UPS %s established"
NOTIFYMSG COMMBAD    "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN   "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT   "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM     "UPS %s is unavailable"
NOTIFYMSG NOPARENT   "upsmon parent process died - shutdown impossible"
NOTIFYFLAG ONLINE    SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT    SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT   SYSLOG+WALL+EXEC
NOTIFYFLAG FSD       SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK    SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD   SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN  SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT  SYSLOG+WALL+EXEC
NOTIFYFLAG NOCOMM    SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT  SYSLOG+WALL+EXEC
RBWARNTIME 43200
NOCOMMWARNTIME 300
FINALDELAY 5


6. Проверка обратной связи с ИБП
6.1. Вывод информации о состоянии ИБП upsc имя_ибп {см. п. 3.3}
6.2. Вывод списка доступных команд ИБП: upscmd -l имя_ибп {см. п. 3.3}

7. Настройка планировщика
7.1. В файл /etc/nut/upssched.conf пишем:
CMDSCRIPT /etc/nut/cmd.sh
PIPEFN /tmp/upspipe
LOCKFN /tmp/upslock
AT COMMBAD * EXECUTE commbad
AT COMMOK * EXECUTE commok
AT NOCOMM * EXECUTE nocomm
AT ONBATT * EXECUTE powerout
AT ONBATT * START-TIMER shutdownnow 120 {при работе от батареи ждем 120 секунд и выполняем скрипт cmd.sh с аргументом shutdownnow}
AT LOWBATT * EXECUTE shutdowncritical
AT ONLINE * CANCEL-TIMER shutdownnow
AT ONLINE * EXECUTE powerup
7.2. Создание файла скрипта: #touch /etc/nut/cmd.sh .
7.3. Установление прав на файл скрипта: #chmod 666 /etc/nut/cmd.sh
7.4. В файл /etc/nut/cmd.sh пишем:
#!/bin/bash
case $1 in
      commbad)
      logger  "UPS communications failure"
      ;;
      commok)
      logger  "UPS communications restored"
      ;;
      nocomm)
      logger  "UPS communications cannot be established"
      ;;
      powerout)
      logger "UPS on battery. Shutdown in 120 seconds...."
      upscmd -u upsmon -p password mustek@localhost shutdown.return {подставляем правильное имя ибп и пароль, см. п. 4.2}
      ;;
      shutdownnow)
      logger "UPS has been on battery for 120 seconds. Starting orderly shutdown"
      upsmon -c fsd
      ;;
      shutdowncritical)
      logger "UPS battery level CRITICAL. Shutting down NOW!!!!"
      upsmon -c fsd
      ;;
      powerup)
      logger "UPS on line. Shutdown aborted."
      upscmd -u upsmon -p password mustek@localhost shutdown.stop {подставляем правильное имя ибп и пароль, см. п. 4.2}
      ;;
      *)
      logger "Unrecognized command: $1"
      ;;
esac
7.5. Делаем файл /etc/nut/cmd.sh исполняемым: chmod +x /etc/nut/cmd.sh .

8. Настройка сервера на втоматическое включение после подачи напряжения.
В BIOS находим опцию ` “Power on after power fail” и выставляем ` “Power on”. Названия могут быть разными, смысл в том, что после пропадания и появления питания система должна включаться.