Commit 04b05a

2024-12-08 14:44:17 Mayekkuzu: contend added
virtualization/proxmox.md ..
@@ 1,5 1,335 @@
# Proxmox
+ ![](/Virtualization/Proxmox/proxmox.webp)
+
Proxmox - достаточно удобная в употреблении система для организации виртуальных машин на [KVM](Linux/System/KVM) и [LXC](Linux/System/LXC)-контейнеров для своих нужд. Для домашнего использования бесплатна, но обновление пакетов за деньги.
Базируется на debian, может быть установлена поверх него, но так же есть уже готовый настроенный образ для установки на сервер. Так же на официальном сайте имеются образы для организации Backup-сервера proxmox.
+
+ ## Настройка ИБП для Proxmox
+
+ В моем случае это ИБП Ippon Back Basic 650 Euro. Подключаем его к серверу по USB. Проверяем его USB id
+
+ ```bash
+ 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
+
+ ```bash
+ 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 с репозитория
+
+ ```bash
+ apt install nut -y
+ ```
+ Запустим nut-scanner, проверим находит ли сканер наш ИБП
+ ```bash
+ 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"
+ ```
+
+ Отлично, делаем бекапы конфиг-файлов перед редактированием
+ ```bash
+ 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` для проверки запуска драйвера:
+ ```bash
+ 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/`, если ее нет - создадим
+ ```bash
+ 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
+ ```
+ Чтобы скрипт запускался, дадим ему права на запуск:
+ ```bash
+ chmod +x /etc/nut/upssched-cmd
+ ```
+ Далее рестартим систему или перезапускаем сервисы:
+ ```bash
+ systemctl restart nut-server
+ systemctl restart nut-client
+ systemctl restart nut-monitor
+ upsdrvctl stop
+ upsdrvctl start
+ ```
+ Проверяем получаем ли информацию с ИБП:
+ ```bash
+ 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 адрес. В опциях ставим галочку на автозапуск контейнера при перезапуске сервера. Запускаем контейнер. Ставим пакеты:
+ ```bash
+ apt install apache2 nut-cgi nut-client -y
+ ```
+ Так же делаем бекап конфигов:
+ ```bash
+ 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:
+ ```bash
+ sudo a2enmod cgi
+ sudo systemctl restart apache2
+ ```
+ Проверяем работу монитора перейдя по `http://ip-or-fqdn-lxc/cgi-bin/nut/upsstats.cgi`
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9