Go to file
Mikhail Iliasov 8bb44d526a Refactor plugin + scripts; survive pve-manager upgrades
- pve-trunks-plugin.js: убран мёртвый код (origHandler), идемпотентность
  (не добавлять поле дважды), null-safety при смене вёрстки PVE, вынос regex
  в trunksRegex, отдельный addTrunksField(); логика onGetValues/me.network
  сверена с реальной PVE.qemu.NetworkInputPanel (PVE 9.2).
- install.sh: бэкап index.html.tpl, проверка </body>, идемпотентность, и
  переживание apt upgrade: persistent-копия + pve-trunks-reapply.sh + apt-hook
  (рестарт pveproxy только при реальном изменении), cache-busting ?ver.
- uninstall.sh: снимает плагин и всю reapply-машинерию, бэкап шаблона.
- README: разделы про сериализацию и переживание обновлений.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 11:45:51 +03:00
README.md Refactor plugin + scripts; survive pve-manager upgrades 2026-06-04 11:45:51 +03:00
install.sh Refactor plugin + scripts; survive pve-manager upgrades 2026-06-04 11:45:51 +03:00
pve-trunks-plugin.js Refactor plugin + scripts; survive pve-manager upgrades 2026-06-04 11:45:51 +03:00
uninstall.sh Refactor plugin + scripts; survive pve-manager upgrades 2026-06-04 11:45:51 +03:00

README.md

PVE Trunks Plugin

Добавляет поле Trunks в редактор сетевого интерфейса QEMU VM в веб-интерфейсе Proxmox VE.

Proxmox уже умеет парсить и сохранять параметр trunks, но в UI нет поля для него — приходится редактировать конфиг VM вручную. Этот плагин это исправляет.

Установка

# Скопировать на хост Proxmox
scp -r pve-trunks-plugin/ root@<PVE_HOST>:/tmp/

# Установить
ssh root@<PVE_HOST> "bash /tmp/pve-trunks-plugin/install.sh"

После установки перезагрузить веб-интерфейс: Ctrl+Shift+R.

Удаление

ssh root@<PVE_HOST> "bash /tmp/pve-trunks-plugin/uninstall.sh"

Использование

  1. VM → Hardware → Network Device → Edit
  2. Поставить галку Advanced
  3. Заполнить поле Trunks

Формат

Значение Описание
100;200;300 Пропустить VLAN 100, 200, 300 тегированными
100-200 Диапазон VLAN от 100 до 200
100;200-300;400 Комбинация отдельных VLAN и диапазонов

Примеры

VLAN Tag Trunks Результат
100 200;300 Native VLAN 100 (untagged), VLAN 200 и 300 тегированные
(пусто) 100;200;300 Без native VLAN, все три VLAN тегированные
(пусто) (пусто) Access-порт, без тегирования

Пропустить все VLAN (полный транк)

Вариант 1 — указать диапазон:

2-4094

Пропустит все используемые VLAN (1 обычно native/default).

Вариант 2 — оставить оба поля пустыми:

Если VLAN Tag и Trunks пустые, а бридж vlan-aware, VM получает весь трафик без изменений. Тегирование делает гостевая ОС:

# Внутри VM
ip link add link eth0 name eth0.100 type vlan id 100
ip link add link eth0 name eth0.200 type vlan id 200

Важно: На хосте Proxmox у бриджа должен быть bridge-vlan-aware yes в /etc/network/interfaces для работы VLAN/trunk.

Совместимость

Проверено на Proxmox VE 9.1. Должно работать на PVE 8.x+ (любая версия с поддержкой trunks в парсере).

Как работает

Плагин использует ExtJS override на PVE.qemu.NetworkInputPanel и добавляет поле Trunks в секцию Advanced. Сериализацию делает штатный PVE.Parser.printQemuNetwork (он уже умеет trunks=), плагин лишь поддерживает me.network.trunks. Исходные файлы pvemanagerlib не правятся — добавляется только новый JS-файл, подключённый в index template после pvemanagerlib.js.

Переживание обновлений

JS-файл (/usr/share/pve-manager/js/) и index.html.tpl принадлежат пакету pve-manager, поэтому apt upgrade их затирает. Установщик поэтому:

  • кладёт копию плагина в /usr/local/share/pve-trunks-plugin/;
  • ставит идемпотентный /usr/local/sbin/pve-trunks-reapply.sh (восстанавливает JS и тег в шаблоне, перезапускает pveproxy только при реальном изменении);
  • регистрирует apt-hook /etc/apt/apt.conf.d/99-pve-trunks-plugin, дёргающий reapply в конце apt-транзакции.

install.sh и uninstall.sh идемпотентны; перед правкой index.html.tpl делается бэкап index.html.tpl.pve-trunks-bak.

Файлы

  • pve-trunks-plugin.js — ExtJS override плагин
  • install.sh — установщик (+ reapply-hook для апгрейдов)
  • uninstall.sh — удаление (вместе с reapply-машинерией)