Blame
3cc512 | Mayekkuzu | 2024-12-08 13:39:47 | 1 | # Proxmox |
2 | ||||
04b05a | Mayekkuzu | 2024-12-08 14:44:17 | 3 | ![](/Virtualization/Proxmox/proxmox.webp) |
4 | ||||
3cc512 | Mayekkuzu | 2024-12-08 13:39:47 | 5 | Proxmox - достаточно удобная в употреблении система для организации виртуальных машин на [KVM](Linux/System/KVM) и [LXC](Linux/System/LXC)-контейнеров для своих нужд. Для домашнего использования бесплатна, но обновление пакетов за деньги. |
6 | ||||
7 | Базируется на debian, может быть установлена поверх него, но так же есть уже готовый настроенный образ для установки на сервер. Так же на официальном сайте имеются образы для организации Backup-сервера proxmox. | |||
04b05a | Mayekkuzu | 2024-12-08 14:44:17 | 8 | |
9 | ## Настройка ИБП для Proxmox | |||
10 | ||||
11 | В моем случае это ИБП Ippon Back Basic 650 Euro. Подключаем его к серверу по USB. Проверяем его USB id | |||
12 | ||||
13 | ```bash | |||
14 | root@kanonik-server:~# lsusb | |||
15 | Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub | |||
16 | Bus 001 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial <- Это оно если что | |||
17 | Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub | |||
18 | ``` | |||
19 | ||||
20 | Проверим корректно ли работает устроиство с Proxmox | |||
21 | ||||
22 | ```bash | |||
23 | root@kanonik-server:~# lsusb -v -s 1:2 | |||
24 | ||||
25 | Bus 001 Device 002: ID 0665:5161 Cypress Semiconductor USB to Serial | |||
26 | Device Descriptor: | |||
27 | bLength 18 | |||
28 | bDescriptorType 1 | |||
29 | bcdUSB 1.10 | |||
30 | bDeviceClass 0 | |||
31 | bDeviceSubClass 0 | |||
32 | bDeviceProtocol 0 | |||
33 | bMaxPacketSize0 8 | |||
34 | idVendor 0x0665 Cypress Semiconductor | |||
35 | idProduct 0x5161 USB to Serial | |||
36 | bcdDevice 0.02 | |||
37 | iManufacturer 1 INNO TECH | |||
38 | iProduct 2 USB to Serial | |||
39 | iSerial 3 20100826 | |||
40 | bNumConfigurations 1 | |||
41 | Configuration Descriptor: | |||
42 | bLength 9 | |||
43 | bDescriptorType 2 | |||
44 | wTotalLength 0x0022 | |||
45 | bNumInterfaces 1 | |||
46 | bConfigurationValue 1 | |||
47 | iConfiguration 3 20100826 | |||
48 | bmAttributes 0x80 | |||
49 | (Bus Powered) | |||
50 | MaxPower 100mA | |||
51 | Interface Descriptor: | |||
52 | bLength 9 | |||
53 | bDescriptorType 4 | |||
54 | bInterfaceNumber 0 | |||
55 | bAlternateSetting 0 | |||
56 | bNumEndpoints 1 | |||
57 | bInterfaceClass 3 Human Interface Device | |||
58 | bInterfaceSubClass 0 | |||
59 | bInterfaceProtocol 0 | |||
60 | iInterface 4 Sample HID | |||
61 | HID Device Descriptor: | |||
62 | bLength 9 | |||
63 | bDescriptorType 33 | |||
64 | bcdHID 1.00 | |||
65 | bCountryCode 0 Not supported | |||
66 | bNumDescriptors 1 | |||
67 | bDescriptorType 34 Report | |||
68 | wDescriptorLength 27 | |||
69 | Report Descriptors: | |||
70 | ** UNAVAILABLE ** | |||
71 | Endpoint Descriptor: | |||
72 | bLength 7 | |||
73 | bDescriptorType 5 | |||
74 | bEndpointAddress 0x81 EP 1 IN | |||
75 | bmAttributes 3 | |||
76 | Transfer Type Interrupt | |||
77 | Synch Type None | |||
78 | Usage Type Data | |||
79 | wMaxPacketSize 0x0008 1x 8 bytes | |||
80 | bInterval 32 | |||
81 | Device Status: 0x0000 | |||
82 | (Bus Powered) | |||
83 | ``` | |||
84 | ||||
85 | Далее ставим пакет nut с репозитория | |||
86 | ||||
87 | ```bash | |||
88 | apt install nut -y | |||
89 | ``` | |||
90 | Запустим nut-scanner, проверим находит ли сканер наш ИБП | |||
91 | ```bash | |||
92 | root@kanonik-server:~# nut-scanner -U | |||
93 | Scanning USB bus. | |||
94 | [nutdev1] | |||
95 | driver = "nutdrv_qx" | |||
96 | port = "auto" | |||
97 | vendorid = "0665" | |||
98 | productid = "5161" | |||
99 | product = "USB to Serial" | |||
100 | vendor = "INNO TECH" | |||
101 | bus = "001" | |||
102 | ``` | |||
103 | ||||
104 | Отлично, делаем бекапы конфиг-файлов перед редактированием | |||
105 | ```bash | |||
106 | cp /etc/nut/nut.conf /etc/nut/nut.example.conf | |||
107 | cp /etc/nut/ups.conf /etc/nut/ups.example.conf | |||
108 | cp /etc/nut/upsd.conf /etc/nut/upsd.example.conf | |||
109 | cp /etc/nut/upsd.users /etc/nut/upsd.example.users | |||
110 | cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf | |||
111 | cp /etc/nut/upssched.conf /etc/nut/upssched.example.conf | |||
112 | cp /etc/nut/upssched-cmd /etc/nut/upssched-cmd.example | |||
113 | ``` | |||
114 | Теперь приступаем к настройке. Открываем `/etc/nut/nut.conf` и редактируем единственную директиву в конце файла: | |||
115 | ``` | |||
116 | MODE=netserver | |||
117 | ``` | |||
118 | Далее открываем `/etc/nut/ups.conf` и удалив все содержимое прописываем: | |||
119 | ``` | |||
120 | pollinterval = 15 | |||
121 | maxretry = 3 | |||
122 | ||||
123 | offdelay = 120 | |||
124 | ondelay = 240 | |||
125 | ||||
126 | [ippon] | |||
127 | driver = nutdrv_qx | |||
128 | port = auto | |||
129 | desc = "INNO TECH" | |||
130 | vendorid = 0665 | |||
131 | productid = 5161 | |||
132 | serial = 20100826 | |||
133 | ``` | |||
134 | Запустим `upsdrvctl start` для проверки запуска драйвера: | |||
135 | ```bash | |||
136 | root@kanonik-server:~# upsdrvctl start | |||
137 | Network UPS Tools - UPS driver controller 2.8.0 | |||
138 | Network UPS Tools - Generic Q* USB/Serial driver 0.32 (2.8.0) | |||
139 | USB communication driver (libusb 1.0) 0.43 | |||
140 | Duplicate driver instance detected (PID file /run/nut/nutdrv_qx-ippon.pid exists)! Terminating other driver! | |||
141 | Using protocol: Q1 0.07 | |||
142 | Can't autodetect number of battery packs [-1/13.60] | |||
143 | Battery runtime will not be calculated (runtimecal not set) | |||
144 | ``` | |||
145 | Не обращаем внимания на ошибки, потому как ИБП простенький и в нем нет реализации сбора метрик с battery pack. | |||
146 | ||||
147 | Открываем `/etc/nut/upsd.conf` и удалив все, прописываем: | |||
148 | ``` | |||
149 | LISTEN 0.0.0.0 3493 | |||
150 | LISTEN :: 3493 | |||
151 | ``` | |||
152 | Теперь открываем nano `/etc/nut/upsd.users` и так же удалив все содержимое вписываем учетки администратора и юзера для службы NUT: | |||
153 | ``` | |||
154 | [upsadmin] | |||
155 | # Administrative user | |||
156 | password = ADMINPASSWORD | |||
157 | # Allow changing values of certain variables in the UPS. | |||
158 | actions = SET | |||
159 | # Allow setting the "Forced Shutdown" flag in the UPS. | |||
160 | actions = FSD | |||
161 | # Allow all instant commands | |||
162 | instcmds = ALL | |||
163 | upsmon master | |||
164 | ||||
165 | [upsuser] | |||
166 | # Normal user | |||
167 | password = USERPASSWORD | |||
168 | upsmon slave | |||
169 | ``` | |||
170 | Далее открываем `/etc/nut/upsmon.conf` и удалив все содержимое вписываем: | |||
171 | ``` | |||
172 | RUN_AS_USER root | |||
173 | MONITOR ippon@localhost 1 upsadmin ADMINPASSWORD master | |||
174 | ||||
175 | MINSUPPLIES 1 | |||
176 | SHUTDOWNCMD "/sbin/shutdown -h" | |||
177 | NOTIFYCMD /usr/sbin/upssched | |||
178 | POLLFREQ 4 | |||
179 | POLLFREQALERT 2 | |||
180 | HOSTSYNC 15 | |||
181 | DEADTIME 24 | |||
182 | MAXAGE 24 | |||
183 | POWERDOWNFLAG /etc/killpower | |||
184 | ||||
185 | NOTIFYMSG ONLINE "UPS %s on line power" | |||
186 | NOTIFYMSG ONBATT "UPS %s on battery" | |||
187 | NOTIFYMSG LOWBATT "UPS %s battary is low" | |||
188 | NOTIFYMSG FSD "UPS %s: forced shutdown in progress" | |||
189 | NOTIFYMSG COMMOK "Communications with UPS %s established" | |||
190 | NOTIFYMSG COMMBAD "Communications with UPS %s lost" | |||
191 | NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding" | |||
192 | NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced" | |||
193 | NOTIFYMSG NOCOMM "UPS %s is unavailable" | |||
194 | NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible" | |||
195 | ||||
196 | NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC | |||
197 | NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC | |||
198 | NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC | |||
199 | NOTIFYFLAG FSD SYSLOG+WALL+EXEC | |||
200 | NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC | |||
201 | NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC | |||
202 | NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC | |||
203 | NOTIFYFLAG REPLBATT SYSLOG+WALL | |||
204 | NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC | |||
205 | NOTIFYFLAG NOPARENT SYSLOG+WALL | |||
206 | ||||
207 | RBWARNTIME 43200 | |||
208 | NOCOMMWARNTIME 600 | |||
209 | ||||
210 | FINALDELAY 5 | |||
211 | ``` | |||
212 | Теперь открываем `/etc/nut/upssched.conf` и удалив все содержимое вписываем: | |||
213 | ``` | |||
214 | CMDSCRIPT /etc/nut/upssched-cmd | |||
215 | PIPEFN /etc/nut/upssched.pipe | |||
216 | LOCKFN /etc/nut/upssched.lock | |||
217 | ||||
218 | AT ONBATT * START-TIMER onbatt 30 | |||
219 | AT ONLINE * CANCEL-TIMER onbatt online | |||
220 | AT LOWBATT * EXECUTE onbatt | |||
221 | AT COMMBAD * START-TIMER commbad 30 | |||
222 | AT COMMOK * CANCEL-TIMER commbad commok | |||
223 | AT NOCOMM * EXECUTE commbad | |||
224 | AT SHUTDOWN * EXECUTE powerdown | |||
225 | AT SHUTDOWN * EXECUTE powerdown | |||
226 | ``` | |||
227 | Для работы следующего скрипта необходимо наличие папки `/etc/nut/upssched/`, если ее нет - создадим | |||
228 | ```bash | |||
229 | mkdir /etc/nut/upssched/ | |||
230 | ``` | |||
231 | Редактируем теперь сам скрипт `/etc/nut/upssched-cmd` | |||
232 | ``` | |||
233 | #!/bin/sh | |||
234 | case $1 in | |||
235 | onbatt) | |||
236 | logger -t upssched-cmd "UPS running on battery" | |||
237 | ;; | |||
238 | shutdowncritical) | |||
239 | logger -t upssched-cmd "UPS on battery critical, forced shutdown" | |||
240 | /usr/sbin/upsmon -c fsd | |||
241 | ;; | |||
242 | upsgone) | |||
243 | logger -t upssched-cmd "UPS has been gone too long, can't reach" | |||
244 | ;; | |||
245 | *) | |||
246 | logger -t upssched-cmd "Unrecognized command: $1" | |||
247 | ;; | |||
248 | esac | |||
249 | ``` | |||
250 | Чтобы скрипт запускался, дадим ему права на запуск: | |||
251 | ```bash | |||
252 | chmod +x /etc/nut/upssched-cmd | |||
253 | ``` | |||
254 | Далее рестартим систему или перезапускаем сервисы: | |||
255 | ```bash | |||
256 | systemctl restart nut-server | |||
257 | systemctl restart nut-client | |||
258 | systemctl restart nut-monitor | |||
259 | upsdrvctl stop | |||
260 | upsdrvctl start | |||
261 | ``` | |||
262 | Проверяем получаем ли информацию с ИБП: | |||
263 | ```bash | |||
264 | root@kanonik-server:~# upsc ippon@localhost | |||
265 | Init SSL without certificate database | |||
266 | battery.voltage: 13.60 | |||
267 | device.type: ups | |||
268 | driver.name: nutdrv_qx | |||
269 | driver.parameter.pollfreq: 30 | |||
270 | driver.parameter.pollinterval: 15 | |||
271 | driver.parameter.port: auto | |||
272 | driver.parameter.productid: 5161 | |||
273 | driver.parameter.serial: 20100826 | |||
274 | driver.parameter.synchronous: auto | |||
275 | driver.parameter.vendorid: 0665 | |||
276 | driver.version: 2.8.0 | |||
277 | driver.version.data: Q1 0.07 | |||
278 | driver.version.internal: 0.32 | |||
279 | driver.version.usb: libusb-1.0.26 (API: 0x1000109) | |||
280 | input.frequency: 50.3 | |||
281 | input.voltage: 229.4 | |||
282 | input.voltage.fault: 230.0 | |||
283 | output.voltage: 230.0 | |||
284 | ups.beeper.status: enabled | |||
285 | ups.delay.shutdown: 30 | |||
286 | ups.delay.start: 180 | |||
287 | ups.load: 10 | |||
288 | ups.productid: 5161 | |||
289 | ups.status: OL | |||
290 | ups.temperature: 25.0 | |||
291 | ups.type: offline / line interactive | |||
292 | ups.vendorid: 0665 | |||
293 | ``` | |||
294 | ||||
295 | Теперь можно изменять параметры переменных командой `upsrw`. Например: | |||
296 | ``` | |||
297 | upsrw -s battery.charge.low=40 ippon@localhost # Минимальный заряд ИБП будет 40% | |||
298 | ``` | |||
299 | ## LXC-контейнер со страничкой статуса ИБП | |||
300 | По аналогии можно сделать и на виртуалке, но много ресурсов такая штука не займет | |||
301 | ||||
302 | Скачиваем темплейт debian для LXC, создаем новый контейнер. Даем ему 8 GB виртуальный жесткий диск, 1 ядро, 128 мб оперативной памяти, назначаем IP адрес. В опциях ставим галочку на автозапуск контейнера при перезапуске сервера. Запускаем контейнер. Ставим пакеты: | |||
303 | ```bash | |||
304 | apt install apache2 nut-cgi nut-client -y | |||
305 | ``` | |||
306 | Так же делаем бекап конфигов: | |||
307 | ```bash | |||
308 | cp /etc/nut/nut.conf /etc/nut/nut.example.conf | |||
309 | cp /etc/nut/hosts.conf /etc/nut/hosts.example.conf | |||
310 | cp /etc/nut/upsset.conf /etc/nut/upsset.example.conf | |||
311 | cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf | |||
312 | ``` | |||
313 | В файле `/etc/nut/nut.conf` редактируем директиву: | |||
314 | ``` | |||
315 | MODE=netclient | |||
316 | ``` | |||
317 | В файле `/etc/nut/hosts.conf` удаляем все и прописываем: | |||
318 | ``` | |||
319 | MONITOR ippon@тут_пишем_ip_адрес_proxmox "IPPON Euro 650" | |||
320 | ``` | |||
321 | В файле `/etc/nut/upsset.conf` нужно раскомментировать строчку: | |||
322 | ``` | |||
323 | I_HAVE_SECURED_MY_CGI_DIRECTORY | |||
324 | ``` | |||
325 | В файле `/etc/nut/upsmon.conf` удаляем все и прописываем: | |||
326 | ``` | |||
327 | RUN_AS_USER root | |||
328 | MONITOR ippon@тут_пишем_ip_адрес_proxmox 1 upsuser USERPASSWORD slave | |||
329 | ``` | |||
330 | Теперь добавляем модуль cgi и рестартим сервис apache: | |||
331 | ```bash | |||
332 | sudo a2enmod cgi | |||
333 | sudo systemctl restart apache2 | |||
334 | ``` | |||
335 | Проверяем работу монитора перейдя по `http://ip-or-fqdn-lxc/cgi-bin/nut/upsstats.cgi` | |||
84c8c0 | Mayekkuzu | 2024-12-08 15:12:19 | 336 | ![](/Virtualization/Proxmox/nut-client-apache.png) |
337 | ||||
338 | ## Wake-on-Lan на Proxmox | |||
339 | Включаем WOL в BIOS материнской платы. Как это сделать ищите в интернете потому что на разных материнских платах это делается по разному. | |||
340 | Теперь ставим утилиту `ethtool` | |||
341 | ```bash | |||
342 | sudo apt install ethtool | |||
343 | ``` | |||
344 | Теперь нам нужно узнать мак-адрес физической сетевой карты, для этого пишем `ip a` | |||
345 | ```bash | |||
346 | root@kanonik-server:~# ip a | |||
347 | 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 | |||
348 | link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 | |||
349 | inet 127.0.0.1/8 scope host lo | |||
350 | valid_lft forever preferred_lft forever | |||
351 | inet6 ::1/128 scope host noprefixroute | |||
352 | valid_lft forever preferred_lft forever | |||
353 | 2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master vmbr0 state UP group default qlen 1000 | |||
354 | link/ether d4:fd:11:6a:89:56 brd ff:ff:ff:ff:ff:ff | |||
355 | ... | |||
356 | ``` | |||
357 | где d4:fd:11:6a:89:56 - наш мак-адрес. Записываем себе в блокнотик | |||
358 | Теперь нужно определить поддерживает ли сетевая карта WOL. Для этого пишем: | |||
359 | ```bash | |||
360 | root@kanonik-server:~# ethtool enp2s0 | |||
361 | Settings for enp2s0: | |||
362 | Supported ports: [ TP MII ] | |||
363 | Supported link modes: 10baseT/Half 10baseT/Full | |||
364 | 100baseT/Half 100baseT/Full | |||
365 | 1000baseT/Full | |||
366 | Supported pause frame use: Symmetric Receive-only | |||
367 | Supports auto-negotiation: Yes | |||
368 | Supported FEC modes: Not reported | |||
369 | Advertised link modes: 10baseT/Half 10baseT/Full | |||
370 | 100baseT/Half 100baseT/Full | |||
371 | 1000baseT/Full | |||
372 | Advertised pause frame use: Symmetric Receive-only | |||
373 | Advertised auto-negotiation: Yes | |||
374 | Advertised FEC modes: Not reported | |||
375 | Link partner advertised link modes: 10baseT/Half 10baseT/Full | |||
376 | 100baseT/Half 100baseT/Full | |||
377 | 1000baseT/Half 1000baseT/Full | |||
378 | Link partner advertised pause frame use: No | |||
379 | Link partner advertised auto-negotiation: Yes | |||
380 | Link partner advertised FEC modes: Not reported | |||
381 | Speed: 1000Mb/s | |||
382 | Duplex: Full | |||
383 | Auto-negotiation: on | |||
384 | master-slave cfg: preferred slave | |||
385 | master-slave status: slave | |||
386 | Port: Twisted Pair | |||
387 | PHYAD: 0 | |||
388 | Transceiver: external | |||
389 | MDI-X: Unknown | |||
390 | Supports Wake-on: pumbg <--------- Поддержка WOL | |||
391 | Wake-on: d <--------- Включен или нет | |||
392 | Link detected: yes | |||
393 | ``` | |||
394 | Если не включен то пишем: | |||
395 | ```bash | |||
396 | sudo ethtool -s enp2s0 wol g | |||
397 | ``` | |||
398 | Теперь добавляем строчку `ethernet-wol g` в блок нашей сетевой карты в`/etc/network/interfaces`. В нашем случае это получилось в таком виде: | |||
399 | ``` | |||
400 | root@kanonik-server:~# cat /etc/network/interfaces | |||
401 | auto lo | |||
402 | iface lo inet loopback | |||
403 | ||||
404 | iface enp2s0 inet manual | |||
405 | ethernet-wol g | |||
406 | ||||
407 | iface enp3s0 inet manual | |||
408 | ``` | |||
409 | Теперь выключаем сервер и пробуем включить его какой-нибудь утилитой по запуску компьютеров. В моем случае это тул в mikrotik: | |||
7ea87a | Mayekkuzu | 2024-12-08 15:13:01 | 410 | ![](/Virtualization/Proxmox/winbox-wol.png) |