Blame
3cc512 | Mayekkuzu | 2024-12-08 13:39:47 | 1 | # Proxmox |
2 | ||||
04b05a | Mayekkuzu | 2024-12-08 14:44:17 | 3 |  |
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 |  |
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 |  |