Код настройки печатает установщик, появилось удаление панели
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
+5
View File
@@ -4,6 +4,7 @@ import (
"crypto/subtle"
"errors"
"net/http"
"os"
"time"
"github.com/mrleo1nid/pzmanager/internal/auth"
@@ -55,6 +56,10 @@ func (s *Server) handleSetup(w http.ResponseWriter, r *http.Request) {
writeError(w, http.StatusInternalServerError, err.Error())
return
}
// Администратор создан — код больше не нужен и не должен лежать на диске.
if s.setupTokenFile != "" {
os.Remove(s.setupTokenFile)
}
s.setSessionCookie(w, id, sessionTTL)
writeJSON(w, http.StatusOK, map[string]any{"authenticated": true, "login": creds.Login})
}