Proxmox
Proxmox - достаточно удобная в употреблении система для организации виртуальных машин на KVM и LXC-контейнеров для своих нужд. Для домашнего использования бесплатна, но обновление пакетов за деньги.
Базируется на debian, может быть установлена поверх него, но так же есть уже готовый настроенный образ для установки на сервер. Так же на официальном сайте имеются образы для организации Backup-сервера proxmox.
Настройка ИБП для Proxmox
В моем случае это ИБП Ippon Back Basic 650 Euro. Подключаем его к серверу по USB. Проверяем его USB id
root@kanonik-server:~# lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial <- Это оно если что Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Проверим корректно ли работает устроиство с Proxmox
root@kanonik-server:~# lsusb -v -s 1:2 Bus 001 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 1.10 bDeviceClass 0 bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x0665 Cypress Semiconductor idProduct 0x5161 USB to Serial bcdDevice 0.02 iManufacturer 1 INNO TECH iProduct 2 USB to Serial iSerial 3 20100826 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 0x0022 bNumInterfaces 1 bConfigurationValue 1 iConfiguration 3 20100826 bmAttributes 0x80 (Bus Powered) MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 bInterfaceProtocol 0 iInterface 4 Sample HID HID Device Descriptor: bLength 9 bDescriptorType 33 bcdHID 1.00 bCountryCode 0 Not supported bNumDescriptors 1 bDescriptorType 34 Report wDescriptorLength 27 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 32 Device Status: 0x0000 (Bus Powered)
Далее ставим пакет nut с репозитория
apt install nut -y
Запустим nut-scanner, проверим находит ли сканер наш ИБП
root@kanonik-server:~# nut-scanner -U Scanning USB bus. [nutdev1] driver = "nutdrv_qx" port = "auto" vendorid = "0665" productid = "5161" product = "USB to Serial" vendor = "INNO TECH" bus = "001"
Отлично, делаем бекапы конфиг-файлов перед редактированием
cp /etc/nut/nut.conf /etc/nut/nut.example.conf cp /etc/nut/ups.conf /etc/nut/ups.example.conf cp /etc/nut/upsd.conf /etc/nut/upsd.example.conf cp /etc/nut/upsd.users /etc/nut/upsd.example.users cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf cp /etc/nut/upssched.conf /etc/nut/upssched.example.conf cp /etc/nut/upssched-cmd /etc/nut/upssched-cmd.example
Теперь приступаем к настройке. Открываем /etc/nut/nut.conf
и редактируем единственную директиву в конце файла:
MODE=netserver
Далее открываем /etc/nut/ups.conf
и удалив все содержимое прописываем:
pollinterval = 15 maxretry = 3 offdelay = 120 ondelay = 240 [ippon] driver = nutdrv_qx port = auto desc = "INNO TECH" vendorid = 0665 productid = 5161 serial = 20100826
Запустим upsdrvctl start
для проверки запуска драйвера:
root@kanonik-server:~# upsdrvctl start Network UPS Tools - UPS driver controller 2.8.0 Network UPS Tools - Generic Q* USB/Serial driver 0.32 (2.8.0) USB communication driver (libusb 1.0) 0.43 Duplicate driver instance detected (PID file /run/nut/nutdrv_qx-ippon.pid exists)! Terminating other driver! Using protocol: Q1 0.07 Can't autodetect number of battery packs [-1/13.60] Battery runtime will not be calculated (runtimecal not set)
Не обращаем внимания на ошибки, потому как ИБП простенький и в нем нет реализации сбора метрик с battery pack.
Открываем /etc/nut/upsd.conf
и удалив все, прописываем:
LISTEN 0.0.0.0 3493 LISTEN :: 3493
Теперь открываем nano /etc/nut/upsd.users
и так же удалив все содержимое вписываем учетки администратора и юзера для службы NUT:
[upsadmin] # Administrative user password = ADMINPASSWORD # Allow changing values of certain variables in the UPS. actions = SET # Allow setting the "Forced Shutdown" flag in the UPS. actions = FSD # Allow all instant commands instcmds = ALL upsmon master [upsuser] # Normal user password = USERPASSWORD upsmon slave
Далее открываем /etc/nut/upsmon.conf
и удалив все содержимое вписываем:
RUN_AS_USER root MONITOR ippon@localhost 1 upsadmin ADMINPASSWORD master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h" NOTIFYCMD /usr/sbin/upssched POLLFREQ 4 POLLFREQALERT 2 HOSTSYNC 15 DEADTIME 24 MAXAGE 24 POWERDOWNFLAG /etc/killpower NOTIFYMSG ONLINE "UPS %s on line power" NOTIFYMSG ONBATT "UPS %s on battery" NOTIFYMSG LOWBATT "UPS %s battary 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 NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC NOTIFYFLAG NOPARENT SYSLOG+WALL RBWARNTIME 43200 NOCOMMWARNTIME 600 FINALDELAY 5
Теперь открываем /etc/nut/upssched.conf
и удалив все содержимое вписываем:
CMDSCRIPT /etc/nut/upssched-cmd PIPEFN /etc/nut/upssched.pipe LOCKFN /etc/nut/upssched.lock AT ONBATT * START-TIMER onbatt 30 AT ONLINE * CANCEL-TIMER onbatt online AT LOWBATT * EXECUTE onbatt AT COMMBAD * START-TIMER commbad 30 AT COMMOK * CANCEL-TIMER commbad commok AT NOCOMM * EXECUTE commbad AT SHUTDOWN * EXECUTE powerdown AT SHUTDOWN * EXECUTE powerdown
Для работы следующего скрипта необходимо наличие папки /etc/nut/upssched/
, если ее нет - создадим
mkdir /etc/nut/upssched/
Редактируем теперь сам скрипт /etc/nut/upssched-cmd
#!/bin/sh case $1 in onbatt) logger -t upssched-cmd "UPS running on battery" ;; shutdowncritical) logger -t upssched-cmd "UPS on battery critical, forced shutdown" /usr/sbin/upsmon -c fsd ;; upsgone) logger -t upssched-cmd "UPS has been gone too long, can't reach" ;; *) logger -t upssched-cmd "Unrecognized command: $1" ;; esac
Чтобы скрипт запускался, дадим ему права на запуск:
chmod +x /etc/nut/upssched-cmd
Далее рестартим систему или перезапускаем сервисы:
systemctl restart nut-server systemctl restart nut-client systemctl restart nut-monitor upsdrvctl stop upsdrvctl start
Проверяем получаем ли информацию с ИБП:
root@kanonik-server:~# upsc ippon@localhost Init SSL without certificate database battery.voltage: 13.60 device.type: ups driver.name: nutdrv_qx driver.parameter.pollfreq: 30 driver.parameter.pollinterval: 15 driver.parameter.port: auto driver.parameter.productid: 5161 driver.parameter.serial: 20100826 driver.parameter.synchronous: auto driver.parameter.vendorid: 0665 driver.version: 2.8.0 driver.version.data: Q1 0.07 driver.version.internal: 0.32 driver.version.usb: libusb-1.0.26 (API: 0x1000109) input.frequency: 50.3 input.voltage: 229.4 input.voltage.fault: 230.0 output.voltage: 230.0 ups.beeper.status: enabled ups.delay.shutdown: 30 ups.delay.start: 180 ups.load: 10 ups.productid: 5161 ups.status: OL ups.temperature: 25.0 ups.type: offline / line interactive ups.vendorid: 0665
Теперь можно изменять параметры переменных командой upsrw
. Например:
upsrw -s battery.charge.low=40 ippon@localhost # Минимальный заряд ИБП будет 40%
LXC-контейнер со страничкой статуса ИБП
По аналогии можно сделать и на виртуалке, но много ресурсов такая штука не займет
Скачиваем темплейт debian для LXC, создаем новый контейнер. Даем ему 8 GB виртуальный жесткий диск, 1 ядро, 128 мб оперативной памяти, назначаем IP адрес. В опциях ставим галочку на автозапуск контейнера при перезапуске сервера. Запускаем контейнер. Ставим пакеты:
apt install apache2 nut-cgi nut-client -y
Так же делаем бекап конфигов:
cp /etc/nut/nut.conf /etc/nut/nut.example.conf cp /etc/nut/hosts.conf /etc/nut/hosts.example.conf cp /etc/nut/upsset.conf /etc/nut/upsset.example.conf cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf
В файле /etc/nut/nut.conf
редактируем директиву:
MODE=netclient
В файле /etc/nut/hosts.conf
удаляем все и прописываем:
MONITOR ippon@тут_пишем_ip_адрес_proxmox "IPPON Euro 650"
В файле /etc/nut/upsset.conf
нужно раскомментировать строчку:
I_HAVE_SECURED_MY_CGI_DIRECTORY
В файле /etc/nut/upsmon.conf
удаляем все и прописываем:
RUN_AS_USER root MONITOR ippon@тут_пишем_ip_адрес_proxmox 1 upsuser USERPASSWORD slave
Теперь добавляем модуль cgi и рестартим сервис apache:
sudo a2enmod cgi sudo systemctl restart apache2
Проверяем работу монитора перейдя по http://ip-or-fqdn-lxc/cgi-bin/nut/upsstats.cgi
Wake-on-Lan на Proxmox
Включаем WOL в BIOS материнской платы. Как это сделать ищите в интернете потому что на разных материнских платах это делается по разному.
Теперь ставим утилиту ethtool
sudo apt install ethtool
Теперь нам нужно узнать мак-адрес физической сетевой карты, для этого пишем ip a
root@kanonik-server:~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000 link/ether d4:fd:11:6a:89:56 brd ff:ff:ff:ff:ff:ff ...
где d4:fd:11:6a:89:56 - наш мак-адрес. Записываем себе в блокнотик Теперь нужно определить поддерживает ли сетевая карта WOL. Для этого пишем:
root@kanonik-server:~# ethtool enp2s0 Settings for enp2s0: Supported ports: [ TP MII ] Supported link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Supported pause frame use: Symmetric Receive-only Supports auto-negotiation: Yes Supported FEC modes: Not reported Advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Full Advertised pause frame use: Symmetric Receive-only Advertised auto-negotiation: Yes Advertised FEC modes: Not reported Link partner advertised link modes: 10baseT/Half 10baseT/Full 100baseT/Half 100baseT/Full 1000baseT/Half 1000baseT/Full Link partner advertised pause frame use: No Link partner advertised auto-negotiation: Yes Link partner advertised FEC modes: Not reported Speed: 1000Mb/s Duplex: Full Auto-negotiation: on master-slave cfg: preferred slave master-slave status: slave Port: Twisted Pair PHYAD: 0 Transceiver: external MDI-X: Unknown Supports Wake-on: pumbg <--------- Поддержка WOL Wake-on: d <--------- Включен или нет Link detected: yes
Если не включен то пишем:
sudo ethtool -s enp2s0 wol g
Теперь добавляем строчку ethernet-wol g
в блок нашей сетевой карты в/etc/network/interfaces
. В нашем случае это получилось в таком виде:
root@kanonik-server:~# cat /etc/network/interfaces auto lo iface lo inet loopback iface enp2s0 inet manual ethernet-wol g iface enp3s0 inet manual
Теперь выключаем сервер и пробуем включить его какой-нибудь утилитой по запуску компьютеров. В моем случае это тул в mikrotik: