CI / Tests (Python 3.11) (push) Canceled after 0s
CI / Tests (Python 3.12) (push) Canceled after 0s
CI / Tests (Python 3.13) (push) Canceled after 0s
CI / Tests (Python 3.14) (push) Canceled after 0s
CI / Shell scripts (push) Canceled after 0s
Build ISO image / ISO ${{ fromJSON(github.event_name == 'workflow_dispatch' && (inputs.arch == 'both' && '["amd64","arm64"]' || format('["{0}"]', inputs.arch)) || '["amd64","arm64"]') }} (push) Canceled after 0s
322 строки
33 KiB
JSON
322 строки
33 KiB
JSON
{
|
||
"versions": [
|
||
{
|
||
"version": "0.12.7",
|
||
"date": "2026-09-27",
|
||
"title": "Тип Windows выбирается сам по установочному образу",
|
||
"summary": "Если в форме создания машины выбран установщик Windows, панель узнаёт его по метке образа и имени файла и сама ставит тип Windows. Раньше по умолчанию оставался Linux, диск подключался как virtio, и установщик Windows его не видел.",
|
||
"features": [
|
||
"Установщик Windows 10, 11 и Server узнаётся по установочному образу, тип системы выбирается сам",
|
||
"Выбор можно поменять вручную, панель его больше не перебивает",
|
||
"Версия обновлена до 0.12.7"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.12.6",
|
||
"date": "2026-09-27",
|
||
"title": "Установочные образы больше не пропадают при удалении машины",
|
||
"summary": "При удалении машины вместе с ней удалялся и вставленный в её привод установочный ISO, поэтому загруженные образы исчезали. Теперь удаляются только диски самой машины, а образы остаются для следующих установок, как в Proxmox.",
|
||
"features": [
|
||
"Удаление машины больше не удаляет установочный ISO из её привода",
|
||
"Удаляются только диски машины из папки машин, диски в других местах остаются, панель называет их в сообщении",
|
||
"То же при восстановлении из копии с заменой машины",
|
||
"Версия обновлена до 0.12.6"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.12.5",
|
||
"date": "2026-09-27",
|
||
"title": "Удаление машины в любом состоянии",
|
||
"summary": "Пункт «Удалить машину» теперь есть всегда, а не только у выключенной машины. Работающую или приостановленную машину панель сначала выключит, а подтверждение честно об этом предупреждает. Вместе с машиной удаляются её пробросы портов.",
|
||
"features": [
|
||
"«Удалить машину» доступно в меню машины и в списке машин при любом состоянии",
|
||
"Работающая или приостановленная машина перед удалением выключается",
|
||
"Пока с машиной идёт копия, клон или другая задача, удалить её нельзя: панель просит дождаться завершения",
|
||
"Вместе с машиной удаляются её пробросы портов, чтобы они не вели на адрес, который достанется другой машине",
|
||
"Версия обновлена до 0.12.5"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.12.4",
|
||
"date": "2026-09-27",
|
||
"title": "Машина с установочного образа после установки перезагружается сама",
|
||
"summary": "Раньше машина, созданная с ISO, после установки системы выключалась вместо перезагрузки, а при следующем запуске снова загружалась с установочного образа. Теперь она создаётся сразу в рабочем виде, диск стоит первым в порядке загрузки, и после установки машина перезагружается уже в установленную систему.",
|
||
"features": [
|
||
"После установки с ISO машина перезагружается сама, а не выключается",
|
||
"Для машин с ISO диск стоит первым в порядке загрузки: пока он пустой, машина загружается с образа, а после установки с диска и повторно в установщик не попадает",
|
||
"Версия обновлена до 0.12.4"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.12.3",
|
||
"date": "2026-09-27",
|
||
"title": "Экран машины снова подключается",
|
||
"summary": "На Ubuntu 26.04 экран машины в браузере не подключался: новая версия noVNC обращалась не по тому адресу. Теперь экран работает и с новой, и со старой версией noVNC.",
|
||
"features": [
|
||
"Экран машины в браузере подключается на Ubuntu 26.04 и Debian 13 (noVNC 1.6), как и на Ubuntu 24.04 (noVNC 1.3)",
|
||
"Версия обновлена до 0.12.3"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.12.2",
|
||
"date": "2026-09-27",
|
||
"title": "Понятный итог, если машину создать не удалось",
|
||
"summary": "Если создание машины сорвалось, панель больше не предлагает открыть экран несуществующей машины. Она пишет, что на сервере от неё ничего не осталось, и даёт кнопку «Создать заново» с тем же образом. Недосозданный диск удаляется сам, поэтому то же название можно использовать сразу.",
|
||
"features": [
|
||
"Кнопки «Открыть экран машины» и «Перейти к машине» появляются только после успешного создания",
|
||
"После неудачного создания: кнопка «Создать заново» с тем же установочным или готовым образом",
|
||
"Недосозданный диск удаляется сам, повторное создание под тем же названием больше не упирается в «Диск уже существует»",
|
||
"Версия обновлена до 0.12.2"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.12.1",
|
||
"date": "2026-09-27",
|
||
"title": "Понятное предупреждение, когда диск машины больше свободного места",
|
||
"summary": "Если диск новой машины больше, чем свободно на сервере, панель больше не запускает установку, которая падала с ошибкой на английском. Она объясняет, в чём риск, и создаёт такую машину только после подтверждения: диск занимает место постепенно, по мере заполнения.",
|
||
"features": [
|
||
"В шаге «Мощность» видно, сколько места свободно на сервере",
|
||
"Диск больше свободного места создаётся только с подтверждением, раньше установка падала с ошибкой virt-install",
|
||
"Версия обновлена до 0.12.1"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.12.0",
|
||
"date": "2026-09-27",
|
||
"title": "Резервные копии по расписанию",
|
||
"summary": "Сервер сам копирует машины каждый день или раз в неделю в выбранное время и хранит только последние копии, чтобы они не заняли весь диск. Копии делает отдельная служба сервера, поэтому ночное обновление панели их не прерывает. Исправлена загрузка ISO и образов дисков с компьютера.",
|
||
"features": [
|
||
"Загрузка ISO и образов дисков с компьютера снова работает: браузер отправлял пустой запрос, и сервер отвечал ошибкой 422",
|
||
"Расписание копий: каждый день или в выбранный день недели, время, все машины или только отмеченные",
|
||
"Сервер хранит последние N копий по расписанию для каждой машины и удаляет старые только после удачной новой",
|
||
"Копии, сделанные вручную, расписание не удаляет",
|
||
"Если сервер был выключен в назначенное время, копия делается в течение двух часов после включения, иначе в следующий раз",
|
||
"На странице «Резервные копии» видно следующую копию и итог последнего запуска по каждой машине",
|
||
"Перезапуск панели больше не объявляет прерванными задачи, которые ведёт служба копий",
|
||
"Установочный образ не собирается с именем администратора, которое запрещает установщик Ubuntu (admin, root, kvm)",
|
||
"Версия обновлена до 0.12.0"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.11.1",
|
||
"date": "2026-09-27",
|
||
"title": "Переезд обновлений на git.stackworks.ru",
|
||
"summary": "Проект переехал с GitHub на собственный сервер git.stackworks.ru, и обновления теперь приходят оттуда. Сервер, который до сих пор получал обновления с GitHub, переключится на новый адрес сам при следующей проверке. Заодно исправлена редкая ошибка резервных копий: машина могла снова запуститься, хотя её только что выключили вручную.",
|
||
"features": [
|
||
"Обновления, установка одной командой и установочный ISO берут код с git.stackworks.ru",
|
||
"Сервер со старым адресом GitHub сам переключается на новый при проверке обновлений",
|
||
"Запасное обновление архивом ZIP скачивается с того же адреса, откуда сервер получает обновления",
|
||
"Резервные копии: если машину выключили вручную, пока панель ждала её выключения, панель больше не запускает её снова",
|
||
"Версия обновлена до 0.11.1"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.11.0",
|
||
"date": "2026-09-25",
|
||
"title": "Мастер настройки, снимки, резервные копии и быстрые машины из готовых образов",
|
||
"summary": "Virtuality стала полноценной заменой Proxmox для дома: после установки с ISO панель открывается сразу, а мастер настройки проводит через HTTPS, пароль, сеть машин, хранилище и обновления. Добавлены снимки, резервные копии, клонирование, увеличение диска, спящий режим, скачивание образов по ссылке и из каталога, создание машины из облачного образа с пользователем и паролем, установка Windows 11 с UEFI и TPM. Исправлено больше двадцати ошибок, найденных аудитом.",
|
||
"features": [
|
||
"Мастер первичной настройки: часовой пояс, пароль, HTTPS, сеть NAT или локальная сеть (с автооткатом), отдельный диск под машины, обновления",
|
||
"Первая загрузка образа: панель ставится первой и показывает ход установки в браузере; при ошибке установка продолжается сама",
|
||
"Страница «Настройки»: всё то же, что в мастере, плюс перезагрузка и выключение сервера, архив настроек, отчёт для поддержки",
|
||
"HTTPS для панели с сертификатом сервера и перенаправлением с обычного адреса",
|
||
"Снимки машин: создать, вернуться, удалить — до 8 на машину",
|
||
"Резервные копии машин: создание, восстановление в новую или ту же машину, удаление",
|
||
"Клонирование, увеличение диска, пауза и спящий режим, заметки, живая нагрузка процессора и памяти",
|
||
"Скачивание ISO и образов по ссылке и из каталога: Ubuntu 26.04/24.04, Debian 13, Alpine — с проверкой контрольных сумм",
|
||
"Машина из готового образа за минуту: пользователь, пароль и SSH-ключ через cloud-init, диск нужного размера",
|
||
"Тип системы при установке с ISO: Linux, Windows 11 (UEFI + TPM), Windows 10, другая",
|
||
"Постоянный адрес машины в сети NAT — пробросы портов не ломаются после перезагрузки",
|
||
"Стабильный канал обновлений: только выпущенные версии; ранний доступ — по желанию",
|
||
"Консоль машин доступна только через панель: VNC больше не открыт в сеть",
|
||
"Операции, прерванные перезапуском панели, больше не блокируют машину",
|
||
"Исправлены: формат облачных образов .img, CD-ROM, удаление UEFI-машин, правила firewall удалённых пробросов, русская локаль virsh, чужой IP у остановленных машин",
|
||
"Убраны Cockpit, консольный dashboard, эмуляция ARM64 на x86, загрузка по PXE и устаревшие скрипты",
|
||
"Команда virtuality-ctl: статус, настройки, пароль, часовой пояс, мост, диск, резервная копия настроек, откат, удаление",
|
||
"Версия обновлена до 0.11.0"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.10.0",
|
||
"date": "2026-09-25",
|
||
"title": "Новый интерфейс, установочный образ и подготовка к продакшену",
|
||
"summary": "Панель полностью перерисована: светлая и тёмная темы, понятный русский язык вместо технических терминов, мастер создания машины из трёх шагов, открытие доступа из интернета в пару кликов. Добавлен установочный ISO-образ Virtuality на базе Ubuntu Server 26.04 LTS. Исправлены ошибки создания VM, автозапуска и обновлений, усилена безопасность.",
|
||
"features": [
|
||
"Новый дизайн панели: светлая и тёмная темы, адаптивная вёрстка для телефона",
|
||
"Главная страница: загрузка процессора, памяти и хранилища, карточки машин с быстрыми действиями",
|
||
"Мастер создания машины: готовые конфигурации «Мини», «Стандарт», «Мощная»",
|
||
"Страница машины: вкладки, переключатель автозапуска, порядок загрузки кнопками",
|
||
"Раздел «Сеть и доступ»: открытие SSH, сайта, RDP и других сервисов из списка",
|
||
"Загрузка образов перетаскиванием с прогрессом, скоростью и оставшимся временем",
|
||
"Подтверждения опасных действий и уведомления о результате",
|
||
"Раздел «Помощь» с инструкциями для частых задач",
|
||
"Установочный ISO на базе Ubuntu Server 26.04 LTS: image/build-iso.sh",
|
||
"Установщик ноды работает на Ubuntu 24.04, 26.04 и Debian 13",
|
||
"Исправлено падение создания VM из-за отсутствующего импорта platform",
|
||
"Исправлено: центр обновлений и автообновление предлагали откат на старую версию",
|
||
"Проверка пароля работает на Python 3.13+ без модулей crypt и spwd",
|
||
"Ограничение попыток входа, срок жизни сессии, защита от cross-origin POST",
|
||
"Правила проброса портов восстанавливаются после перезагрузки сервера",
|
||
"Настройки ноды сохраняются в /var/lib/virtuality/config/web.env и не сбрасываются обновлением",
|
||
"Публичный /healthz для мониторинга, автотесты и GitHub Actions",
|
||
"Версия обновлена до 0.10.0"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.61",
|
||
"date": "2026-05-07",
|
||
"title": "Защита загрузки файлов была усилена",
|
||
"summary": "Для ISO и образов дисков сохранена AJAX-загрузка файлов с прогресс-баром, проверкой расширений, отменой загрузки и защитой от случайного перехода во время активной передачи файла. При этом общая AJAX-навигация панели остаётся отключённой для стабильности.",
|
||
"features": [
|
||
"ISO-загрузка сохранила XMLHttpRequest-прогресс без возврата AJAX-навигации страниц",
|
||
"Загрузка образов дисков сохранила XMLHttpRequest-прогресс и polling конвертации",
|
||
"Добавлено предупреждение beforeunload при попытке закрыть или обновить страницу во время загрузки",
|
||
"Добавлена блокировка переходов по меню, ссылкам и другим submit-кнопкам во время активной загрузки",
|
||
"Для ISO добавлен отдельный блок ошибки неправильного файла",
|
||
"Для дисков усилено состояние активной загрузки и конвертации",
|
||
"Версия обновлена до 0.8.61"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.60",
|
||
"date": "2026-05-07",
|
||
"title": "AJAX-навигация панели была отключена",
|
||
"summary": "Панель была переведена в стабильный режим обычной навигации: panel.js больше не перехватывает переходы по ссылкам и POST-формы. AJAX оставлен только для безопасных фоновых функций: раскрытие меню, мобильное меню, обновление фрагментов и live-status.",
|
||
"features": [
|
||
"Убран перехват кликов по ссылкам для AJAX-подмены страниц",
|
||
"Убран перехват POST-форм для AJAX-submit",
|
||
"Удалена логика swapPage/ajaxNavigate из panel.js",
|
||
"Скрипты страниц снова выполняются через нормальную загрузку документа",
|
||
"Снижена нестабильность из-за смешанного full-load/AJAX режима",
|
||
"Оставлены безопасные фоновые функции: nav groups, mobile menu, refreshFragments, live-status и toasts",
|
||
"Версия обновлена до 0.8.60"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.59",
|
||
"date": "2026-05-07",
|
||
"title": "Раскрытие блока Образы было восстановлено",
|
||
"summary": "На странице базы знаний был подключён /static/panel.js, чтобы раскрывающийся блок Образы снова работал по клику. Группа Образы не открыта принудительно, но корректно раскрывается через свою кнопку.",
|
||
"features": [
|
||
"web/static/knowledge.html снова подключает /static/panel.js",
|
||
"Блок Образы раскрывается по клику на свою кнопку",
|
||
"При открытии Базы знаний Образы не раскрываются принудительно",
|
||
"Версия блока базы знаний обновлена до 0.8.59",
|
||
"Версия проекта обновлена до 0.8.59"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.58",
|
||
"date": "2026-05-07",
|
||
"title": "Меню базы знаний было исправлено",
|
||
"summary": "На статической странице базы знаний была убрана принудительная раскрытость группы Образы. Теперь при открытии Базы знаний меню Образы не раскрывается само по себе, а нижний пункт База знаний остаётся активным.",
|
||
"features": [
|
||
"В web/static/knowledge.html удалён класс open у группы Образы",
|
||
"Активным оставлен только пункт База знаний",
|
||
"Версия блока базы знаний обновлена до 0.8.58",
|
||
"Версия проекта обновлена до 0.8.58"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.57",
|
||
"date": "2026-05-07",
|
||
"title": "Меню было централизовано на основных страницах",
|
||
"summary": "Главная страница, создание VM и карточка VM были переведены на общий шаблон меню _sidebar.html. Это устранило ситуацию, когда пункт База знаний был добавлен в общий шаблон, но не появлялся на страницах со старым зашитым aside.",
|
||
"features": [
|
||
"dashboard.html теперь подключает общее меню через _sidebar.html",
|
||
"vm_create.html теперь подключает общее меню через _sidebar.html",
|
||
"vm_detail.html теперь подключает общее меню через _sidebar.html",
|
||
"Пункт База знаний теперь должен появляться на главной, создании VM и карточке VM",
|
||
"Закреплено правило: меню правится только в web/templates/_sidebar.html, без отдельных копий в страницах",
|
||
"Версия обновлена до 0.8.57"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.56",
|
||
"date": "2026-05-07",
|
||
"title": "База знаний была добавлена в панель",
|
||
"summary": "В главное меню Virtuality в самый низ был добавлен пункт База знаний. Раздел был первично наполнен документацией по SSL-ready подходу, Let’s Encrypt, bridge/NAT пробросам, ключевым директориям, обновлению панели и диагностике сети.",
|
||
"features": [
|
||
"В левое меню добавлен пункт База знаний в нижней части навигации",
|
||
"Добавлена статическая страница /static/knowledge.html с первым набором документации",
|
||
"В базу знаний внесён чек-лист SSL-ready by default для Let’s Encrypt",
|
||
"Описаны варианты проброса для bridge VM и NAT VM",
|
||
"Добавлены ключевые директории Virtuality и команды обновления",
|
||
"Добавлены быстрые команды диагностики хоста, VM и сетевого проброса",
|
||
"Добавлены стили для нижнего пункта меню и карточек базы знаний",
|
||
"Версия обновлена до 0.8.56"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.55",
|
||
"date": "2026-05-07",
|
||
"title": "Проброс портов для bridge VM был добавлен",
|
||
"summary": "Сетевой патч был расширен для VM в bridge/static сетях: правила теперь определяют интерфейс до IP VM через ip route get и используют его вместо жёсткой привязки к virbr100. Это позволяет пробрасывать порты на VM, подключённые к br0, например fastpanel с IP 10.0.0.152.",
|
||
"features": [
|
||
"Добавлен патч patch_network_bridge_forwards.py",
|
||
"Установщик теперь применяет bridge/static VM patch после патча диапазонов портов",
|
||
"nftables DNAT теперь добавляет FORWARD/MASQUERADE правила для фактического интерфейса VM",
|
||
"iptables fallback теперь использует интерфейс маршрута к guest_ip вместо постоянного virbr100",
|
||
"Команда диагностики tcpdump теперь подставляет реальный интерфейс до VM",
|
||
"Версия обновлена до 0.8.55"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.54",
|
||
"date": "2026-05-07",
|
||
"title": "Ручной IP VM был добавлен в проброс портов",
|
||
"summary": "На странице Сеть скрытое значение guest_ip=auto было заменено на видимое поле IP VM. Теперь при пустых DHCP leases, статическом IP внутри VM, bridge-сети или отсутствии qemu-guest-agent можно вручную указать внутренний IP и создать проброс без блокировки автоопределением.",
|
||
"features": [
|
||
"В форме добавления проброса портов появилось поле IP VM",
|
||
"Значение auto оставлено по умолчанию для обычного DHCP/qemu-guest-agent сценария",
|
||
"Ручной внутренний IP VM теперь можно указать прямо при создании DNAT-правила",
|
||
"Подсказки DHCP leases были уточнены для bridge/static VM и готовых образов",
|
||
"Версия обновлена до 0.8.54"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.53",
|
||
"date": "2026-05-07",
|
||
"title": "Проброс диапазонов портов был усилен",
|
||
"summary": "Патч сетевых диапазонов был усилен: форма проброса теперь принимает диапазоны как текст, iptables DNAT использует корректный синтаксис диапазона назначения, а применение правил не падает сразу при сбое nftables, если iptables fallback смог поставить правила.",
|
||
"features": [
|
||
"Обработчик /network/forward/add был исправлен для приёма диапазонов портов как строки",
|
||
"iptables DNAT для диапазонов теперь формирует назначение вида IP:10000-20000 вместо ошибочного IP:10000:20000",
|
||
"apply_port_forwards теперь пробует UFW и iptables fallback даже если nftables не применился",
|
||
"Ошибки применения правил теперь собираются в более понятное сообщение",
|
||
"Версия обновлена до 0.8.53"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.52",
|
||
"date": "2026-05-07",
|
||
"title": "Страница сети была переведена на единое меню",
|
||
"summary": "Раздел Сеть был переведён со старого shell-каркаса на общий v-layout/v-main с подключением _sidebar.html, чтобы после F5 левое меню не пропадало.",
|
||
"features": [
|
||
"Страница network.html была переведена на общий v-layout/v-main каркас",
|
||
"Раздел Сеть теперь подключает единое меню через _sidebar.html",
|
||
"panel.js подключён на странице Сеть",
|
||
"После F5 левое меню больше не должно пропадать в разделе Сеть",
|
||
"Версия обновлена до 0.8.52"
|
||
]
|
||
},
|
||
{
|
||
"version": "0.8.51",
|
||
"date": "2026-05-07",
|
||
"title": "Левое меню было пересобрано централизованно",
|
||
"summary": "Левое меню было вынесено в единый шаблон _sidebar.html и подключено к страницам ISO, Диски, Операции и Хост. Установщик теперь финально восстанавливает основные канонические шаблоны панели после патчеров.",
|
||
"features": [
|
||
"Общее меню _sidebar.html было пересобрано",
|
||
"Страница ISO была переведена на общий v-layout/v-main каркас",
|
||
"Страница Диски была переведена на общий v-layout/v-main каркас",
|
||
"Страница Операции была переведена на общий v-layout/v-main каркас",
|
||
"Страница Хост была переведена на общий v-layout/v-main каркас",
|
||
"Прогресс-бар был убран из таблицы операций",
|
||
"install_web_panel.sh теперь восстанавливает основные канонические шаблоны панели после патчеров",
|
||
"После F5 левое меню больше не должно пропадать на ISO, Диски, Операции и Хост",
|
||
"Версия обновлена до 0.8.51"
|
||
]
|
||
}
|
||
]
|
||
}
|