Код настройки печатает установщик, появилось удаление панели
CI / test (push) Successful in 21s
Release / release (push) Successful in 29s

Менеджер кладёт код первичной настройки в data/setup-token, установщик
дожидается файла и печатает код последним сообщением — за ним больше не
нужно идти в journalctl. Файл удаляется, как только создан администратор,
и не появляется на уже настроенной панели.

Установщик научился снимать панель с машины: --uninstall убирает службу,
бинарники и правило sudo, --purge вдобавок сносит каталог с мирами,
бэкапами и учётками. Данные удаляются только по явному подтверждению, а
каталог сносится, лишь если похож на установку панели: опечатка в PZ_HOME
не должна стоить чужих файлов. Копия установщика теперь лежит в
/opt/pzmanager, так что удалять можно без похода в репозиторий.

get.sh пробрасывает аргументы установщику и в режиме удаления не качает
бинарник. Заодно исправлена подстановка пустого массива аргументов:
"${ARGS[@]:-}" разворачивается в один пустой аргумент, из-за чего обычная
установка спотыкалась бы о него.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 20:03:13 +03:00
co-authored by Claude Opus 5
parent a8d86e0c48
commit e25294db16
6 changed files with 250 additions and 52 deletions
+20 -13
View File
@@ -40,8 +40,11 @@ type Server struct {
// secureCookies включает флаг Secure у cookie сессии (панель за HTTPS).
secureCookies bool
// setupToken защищает первичное создание администратора: менеджер печатает
// его в журнал при старте, когда учёток ещё нет.
// его при старте, когда учёток ещё нет.
setupToken string
// setupTokenFile — копия кода на диске, которую показывает установщик.
// После создания администратора файл больше не нужен.
setupTokenFile string
}
// Options — то, что нужно собрать серверу API.
@@ -57,6 +60,9 @@ type Options struct {
Static fs.FS
SecureCookies bool
SetupToken string
// SetupTokenFile — файл с кодом первичной настройки, удаляется после
// создания администратора.
SetupTokenFile string
// Repo — репозиторий, из которого панель берёт обновления.
Repo string
}
@@ -64,18 +70,19 @@ type Options struct {
// New собирает HTTP-обработчик панели.
func New(o Options) *Server {
return &Server{
version: o.Version,
cfg: o.Config,
users: o.Users,
sup: o.Supervisor,
jobs: o.Jobs,
backups: o.Backups,
steam: o.Steam,
workshop: pzconfig.NewWorkshopClient(),
updater: updater.New(o.Repo, o.Version),
static: o.Static,
secureCookies: o.SecureCookies,
setupToken: o.SetupToken,
version: o.Version,
cfg: o.Config,
users: o.Users,
sup: o.Supervisor,
jobs: o.Jobs,
backups: o.Backups,
steam: o.Steam,
workshop: pzconfig.NewWorkshopClient(),
updater: updater.New(o.Repo, o.Version),
static: o.Static,
secureCookies: o.SecureCookies,
setupToken: o.SetupToken,
setupTokenFile: o.SetupTokenFile,
}
}