[[ Настройка Network UPS Tools на Ubuntu Server 22.04 ]]

Ubuntu

Настройка Network UPS Tools на Ubuntu Server 22.04

Ubuntu 22.04.2 LTS
nut 2.7.4
ИБП PowerCom Raptor RPT-1000AP EURO

NUT (Network UPS Tools) - набор программных компонентов, предназначенных для работы с ИБП (UPS) и др. подобными устройствами.

Подключил домашний сервер к ИБП, управление через USB.
Теперь надо выполнить настройку автоматического выключения, когда пропадает питание от сети.



Установка

apt-get install nut



Определяем драйвер

Подключаем USB кабель, если еще не подключен.
Смотрим lsusb

$ lsusb
...
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0d9f:0004 Powercom Co., Ltd HID UPS Battery  <----- ИБП
 
# Подробно
$ lsusb -d 0d9f:0004 -v

Выполняем dmesg

$ dmesg
hid-generic 0003:0D9F:0004.0006: hiddev0,hidraw0: USB HID v1.00 Device [POWERCOM Co.,LTD HID UPS Battery] on usb-0000:16:00.0-3/input0
usb 1-3: USB disconnect, device number 7                          <----------------------------- disconnect
usb 1-3: new low-speed USB device number 8 using xhci_hcd
usb 1-3: New USB device found, idVendor=0d9f, idProduct=0004, bcdDevice= 0.02
usb 1-3: New USB device strings: Mfr=3, Product=1, SerialNumber=2
usb 1-3: Product: HID UPS Battery
usb 1-3: Manufacturer: POWERCOM Co.,LTD
usb 1-3: SerialNumber: 004-0D9F-000
hid-generic 0003:0D9F:0004.0007: hiddev0,hidraw0: USB HID v1.00 Device [POWERCOM Co.,LTD HID UPS Battery] on usb-0000:16:00.0-3/input0
usb 1-3: USB disconnect, device number 8                          <----------------------------- disconnect
usb 1-3: new low-speed USB device number 9 using xhci_hcd
usb 1-3: New USB device found, idVendor=0d9f, idProduct=0004, bcdDevice= 0.02
usb 1-3: New USB device strings: Mfr=3, Product=1, SerialNumber=2
usb 1-3: Product: HID UPS Battery
usb 1-3: Manufacturer: POWERCOM Co.,LTD
usb 1-3: SerialNumber: 004-0D9F-000
hid-generic 0003:0D9F:0004.0008: hiddev0,hidraw0: USB HID v1.00 Device [POWERCOM Co.,LTD HID UPS Battery] on usb-0000:16:00.0-3/input0

Не знаю особенность ли это данной модели, но пока не будет загружен драйвер устройство будет постоянно переподключаться.
Поэтому, если выполнить lsusb в этот момент - устройство не будет отображаться.

Запуск авто-сканирование

$ nut-scanner 
SNMP library not found. SNMP search disabled.
Neon library not found. XML search disabled.
IPMI library not found. IPMI search disabled.
Scanning USB bus.
No start IP, skipping NUT bus (old connect method)
[nutdev1]
        driver = "usbhid-ups"
        port = "auto"
        vendorid = "0D9F"
        productid = "0004"
        product = "HID UPS Battery"
        serial = "004-0D9F-000"
        vendor = "POWERCOM Co.,LTD"
        bus = "001"

Отлично, устройство было найдено и есть нужный драйвер.



Настройка

Установим режим standalone, который подразумевает запуск трех компонентов driver, upsd, upsmon.

  • driver (nut-driver.service) - загружает драйвер, запускается по требованию nut-server.service
  • upsd (nut-server.service) - загружает демон, обеспечивающий сетевой интерфейс для взаимодействие с ИБП.
  • upsmon (nut-monitor.service) - загружает демон мониторинга, который следит за состоянием ИБП, отсылает уведомления и выполняет команды.

/etc/nut/nut.conf

MODE=standalone



DRIVER

Настройка driver

/lib/systemd/system/nut-driver.service

[Unit]
Description=Network UPS Tools - power device driver controller
After=local-fs.target network.target systemd-udev-settle.service
#Wants=systemd-udev-settle.service         <----- Закомментировать строчку
StopWhenUnneeded=yes

[Service]
ExecStart=/sbin/upsdrvctl start
ExecStop=/sbin/upsdrvctl stop
Type=forking

Если этого не сделать, то загрузка ОС будет длиться на 3 минуты дольше.

A start job is running for udev wait for Complete Device Initialization

Т.к. systemd-udev-settle.service устарел, а что бы на него не ссылались, сделали такую подставу - тупо ждать 3 мин.

$ systemctl status  systemd-udev-settle.service 
● systemd-udev-settle.service - Wait for udev To Complete Device Initialization
     Loaded: loaded (/lib/systemd/system/systemd-udev-settle.service; static)
     Active: active (exited) since Mon 2023-04-24 16:13:36 MSK; 5min ago
       Docs: man:systemd-udev-settle.service(8)
    Process: 467 ExecStart=udevadm settle (code=exited, status=0/SUCCESS)
   Main PID: 467 (code=exited, status=0/SUCCESS)
        CPU: 2.375s
Apr 24 16:12:35 myserver systemd[1]: Starting Wait for udev To Complete Device Initialization...
Apr 24 16:12:35 myserver udevadm[467]: systemd-udev-settle.service is deprecated. Please fix nut-driver.service not to pull it in.
Apr 24 16:13:36 myserver systemd[1]: Finished Wait for udev To Complete Device Initialization.

И директивы After и Wants не переопределить через

systemctl edit nut-driver.service



UPSD

Настройка upsd

/etc/nut/upsd.conf

LISTEN 127.0.0.1 3493    <----- По умолчанию слушает localhost
                                На всякий случай явно укажу 127.0.0.1

Настройка драйвера.
Выкинул некоторые поля из предложенного nut-scanner, например привязку к физическому разъему bus.

/etc/nut/ups.conf

# Set maxretry to 3 by default, this should mitigate race with slow devices:
maxretry = 3

[RPT1000AP]                                    <----- Имя ИБП (может быть произвольное)
driver = usbhid-ups
port = auto
desc = "UPS PowerCom Raptor RPT-1000AP EURO"   <----- Описание (может быть произвольное)
ignorelb                                       <----- Разрешить переопределять некоторый параметры
override.battery.charge.low = 55               <----- Переопределяем значение низкого уровня заряда
                                                      Значение заряда падает не равномерно, с 100% сразу до 68%
                                                      и может долго висеть на этом значении. Это такой ИБП или драйвер непонятно.
                                                      Поэтому выбранное значение получено опытным путем.

Необходимо создать пользователя для upsmon

/etc/nut/upsd.users

[upsmon]              <----- Имя пользователя (может быть произвольное)
password = pass123    <----- Пароль пользователя
upsmon master         <----- Тип пользователя. Как я понял:
                             master ставиться в том случае, когда сервер подключен к управлению ИБП (по USB).
                             В случае, когда несколько серверов подключены к одному и тому же ИБП - остальные slave.
                             Это влияет на политику выключения питания. Сперва выключаются slave.
                             master ждет время HOSTSYNC, что бы успеть раздать остальным машинам информацию по ИБП.

Странно, upsc может без авторизации получать данные, а для upsmon обязательно требуется.

Перезапускаем upsd

systemctl restart nut-server.service
systemctl status nut-server.service

Посмотрим, какие данные можно получить

# Получить список ИБП
$ upsc -L
Init SSL without certificate database
RPT1000AP: UPS PowerCom Raptor RPT-1000AP EURO
 
# Получить данные
$ upsc RPT1000AP
Init SSL without certificate database
battery.charge: 100
battery.charge.low: 55
battery.charge.warning: 30
battery.date: 2014/01/15
battery.runtime: 800
battery.type: PbAc
device.mfr: POWERCOM Co.,LTD
device.model: HID UPS Battery
device.serial: 004-0D9F-000
device.type: ups
driver.name: usbhid-ups
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.synchronous: no
driver.version: 2.7.4
driver.version.data: PowerCOM HID 0.5
driver.version.internal: 0.41
input.frequency: 50.0
input.voltage: 238.0
input.voltage.nominal: 220
output.frequency: 50.0
output.voltage: 238.0
output.voltage.nominal: 220
ups.date: 2014/01/15
ups.delay.shutdown: 20
ups.delay.start: 60
ups.load: 0
ups.mfr: POWERCOM Co.,LTD
ups.model: HID UPS Battery
ups.productid: 0004
ups.serial: 004-0D9F-000
ups.status: OL
ups.test.result: Done and passed
ups.timer.shutdown: 0
ups.timer.start: 740220
ups.vendorid: 0d9f

Статус ИБП ups.status может содержать один или несколько флагов, например:

ups.status: OB DISCHRG
ups.status: OB DISCHRG LB
ups.status: OL CHRG LB
ups.status: OL CHRG

  • OL - ИБП работает от сети
  • OB - ИБП работает от батареи
  • LB - батарея разряжена
  • RB - необходима замена батареи
  • CHRG - батарея заряжается
  • DISCHRG - батарея разряжается
  • BYPASS - ИБП работает в режиме питания от сети в обход батареи
  • OVER - ИБП перегружен
  • TRIM - ИБП отрезает повышенное напряжение сети
  • BOOST - ИБП усиливает пониженное напряжение сети
  • ALARM - предупреждение, должен появиться параметр ups.alarm с ошибкой



UDEV

Настройка udev

/etc/udev/rules.d/90-nut-ups.rules

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0d9f", ATTR{idProduct}=="0004", TAG+="systemd", RUN+="/usr/bin/systemctl restart nut-server"

Перезапускаем udev

systemctl restart udev.service

Правило udev поможет в ситуации если подключать (переподключать) USB уже после старта nut-server.service.
Сервис перезагрузиться и перезапустит инициализацию драйвера nut-driver.service.



UPSMON

Настройка upsmon

/etc/nut/upsmon.conf

# Список ИБП для мониторинга.
# MONITOR <system> <powervalue> <username> <password> <master|slave>
#   system - указывается ИБП в формате <upsname>[@<hostname>[:<port>]
#   powervalue - количество блоков питания сервера, подключенных к ИБП
#   username - имя пользователя
#   password - пароль пользователя
#   type - master или slave
MONITOR RPT1000AP@127.0.0.1 1 upsmon pass123 master

# Минимальное количество блоков питания компьютера, необходимых для его работы.
# Например, если компьютер обладает 4 блоками питания, но для работы достаточно 2.
# Количество блоков питания, запитанных от определённого ИБП указывается в настройке MONITOR.
MINSUPPLIES 1

# Команда на выключение.
# Будет исполнена когда значение battery.charge будет ниже battery.charge.low
SHUTDOWNCMD "/sbin/shutdown -h +0"

# Интервал в секундах, пауза перед выключением питания.
# Т.е. сперва отправляется уведомление NOTIFY_SHUTDOWN, затем ждет FINALDELAY и запускается SHUTDOWNCMD.
FINALDELAY 5

# Частота опроса ИБП в секундах, при питании от сети.
POLLFREQ 5

# Частота опроса ИБП в секундах, при питании от батареи.
POLLFREQALERT 5

# Как долго будет ждать master, пока будут выключатся slave.
HOSTSYNC 15

# Если upsmon теряет связь с upsd и перед потерей связи ИБП работал от батареи,
# то тогда он переходит в статус "dead" и заряд его батареи будет считаться низким,
# что запустит процедуру выключения питания.
# Рекомендуется установить значение в 3 раза больше чем наибольшее из POLLFREQ и POLLFREQALERT.
DEADTIME 15

# Файл-флаг, если появляется, то будет принудительное выключение ИБП на master;
# Но это не точно, т.к. touch /etc/killpower не сработал.
POWERDOWNFLAG /etc/killpower

# Частота сообщений в секундах, о необходимости замены батареи, если батарея будет отмечена, как нуждающаяся в замене.
# ups.alarm: Replace battery!
# ups.status: ALARM OL RB
# ups.test.result: Done and warning
RBWARNTIME 43200

# Частота сообщений в секундах, о потере связи с ИБП.
# Например вытащили USB или был погашен драйвер.
NOCOMMWARNTIME 300

Перезапускаем upsmon

systemctl restart nut-monitor.service
systemctl status nut-monitor.service



Проверка

Проверяем - заходим по ssh на сервер, отключаем ИБП от сети и наблюдаем

Broadcast message from nut@myserver (somewhere) (Wed Apr 26 14:02:29 2023):
 
UPS RPT1000AP@127.0.0.1 on battery
 
 
 
Broadcast message from nut@myserver (somewhere) (Wed Apr 26 14:08:39 2023):
 
UPS RPT1000AP@127.0.0.1 battery is low
 
 
 
Broadcast message from nut@myserver (somewhere) (Wed Apr 26 14:08:39 2023):
 
Executing automatic power-fail shutdown
 
 
 
Broadcast message from nut@myserver (somewhere) (Wed Apr 26 14:08:39 2023):
 
Auto logout and shutdown proceeding











Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
203 +5 = 
 
howto/ubuntu/ubuntu22.04_nut_standalone.txt · Последнее изменение: 2023/04/26 15:00 — lexa
Gentoo Linux Gentoo Linux Driven by DokuWiki