- 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> |
||
|---|---|---|
| README.md | ||
| install.sh | ||
| pve-trunks-plugin.js | ||
| uninstall.sh | ||
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"
Использование
- VM → Hardware → Network Device → Edit
- Поставить галку Advanced
- Заполнить поле 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-машинерией)