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)