РазделОбновление

Обновление панели

Версия выпускается тегом; всё остальное делает CI. Тег v0.8.18 собирает .deb и .rpm под amd64 и arm64, подписывает список контрольных сумм ключом ed25519 из секрета репозитория и публикует релиз; текст аннотированного тега становится описанием релиза.

make keygen                  # один раз: ключ подписи (приватный — в секрет MONOPANEL_RELEASE_KEY)
make release VERSION=0.8.18  # тег + push, дальше CI собирает и публикует
make packages VERSION=0.8.18 # то же локально, без публикации

На сервере:

mp update settings --repo owner/name     # --token-stdin для приватного репозитория
mp update                                # что установлено и что доступно
mp update apply                          # скачать, проверить подпись, установить, перезапуститься
mp update trust                          # каким ключом проверяется подпись
mp update trust --key <ключ форка>       # свой ключ вместо встроенного; --off выключает проверку

Публичный ключ подписи релизов вшит в панель и в install.sh, так что подпись проверяется по умолчанию — и при первой установке (если есть openssl 1.1.1+), и при каждом обновлении. Ключ можно сверить с тем, что печатает workflow release-key:

eoGfJciXIG9upyFNJQR7rIsXtSs506DkiXT5kiBUyhg=

Проверка обновлений идёт по расписанию (по умолчанию раз в сутки), --auto-apply ставит обновление без участия человека. Устанавливает не сама панель: агент запускает transient-юнит monopanel-update.service, который переживает перезапуск API и агента и возвращает прежний бинарник, если новая версия не отвечает. Неподписанный релиз не установится, пока проверка не выключена явно. Медленный канал не помеха: у загрузки пакета нет общего таймаута, обрывается только застывший поток.

Исходник страницы на GitHub