Настройка 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
https://networkupstools.org/docs/man/ups.conf.html
https://networkupstools.org/docs/man/upsmon.conf.html
https://wiki.ipfire.org/addons/nut/detailed
http://vladimir-stupin.blogspot.com/2014/11/nut-eaton-powerware-5110.html
https://open-networks.ru/d/52-network-ups-tools-nasroika-servera-i-klientov-dlya-raboty-s-ibp
https://forum.altlinux.org/index.php?topic=36725.0
Обсуждение