Кнопка обновления обновляет всё, а не только бинарник
pzmanager-admin update больше не повторяет логику установки: он забирает из релиза get.sh (сверив sha256) и отдаёт работу ему. Поэтому обновление из панели теперь приводит в порядок и скрипты установки, и systemd-юнит — раньше они застывали на версии первой установки, а вместе с ними терялась, например, локальная копия установщика для удаления. Работа уходит в разовый юнит через systemd-run. Иначе она не пережила бы сама себя: панель вызывает скрипт через sudo, тот живёт в cgroup её юнита, и остановка службы установщиком убила бы его на середине. Команда restart по той же причине получила --no-block. Установщик стал понятнее в двух местах, о которые легко споткнуться: - повторная установка той же сборки больше не роняет игровой сервер — если sha256 бинарника совпал, служба не останавливается вовсе; - после обновления он явно пишет, что запускает службу, и проверяет, что она поднялась. Раньше systemctl start отрабатывал молча, и по выводу нельзя было понять, работает панель или нет. Службу, остановленную не установщиком, он по-прежнему не поднимает самовольно. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -85,8 +85,9 @@ curl -fsSL https://gitea.hsrv.site/mrleo1nid/pzmanager/raw/branch/main/deploy/ge
|
||||
```
|
||||
|
||||
**Обновление** — та же команда или кнопка в панели (вкладка «Настройки» →
|
||||
«Версия панели»). Конфиг, миры и учётные записи не трогаются, меняется только
|
||||
бинарник.
|
||||
«Версия панели»). Конфиг, миры и учётные записи не трогаются. Повторный запуск
|
||||
с той же версией службу не трогает вовсе: если бинарник не изменился,
|
||||
установщик не станет ради него ронять игровой сервер.
|
||||
|
||||
Дальше:
|
||||
|
||||
@@ -235,9 +236,19 @@ Mod ID, который нужен серверу, лежит внутри сам
|
||||
pzserver ALL=(root) NOPASSWD: /usr/local/bin/pzmanager-admin
|
||||
```
|
||||
|
||||
Скрипт качает бинарник нужной архитектуры, сверяет sha256 с `checksums.txt`
|
||||
релиза, подменяет файл и перезапускает службу. Панель к этим файлам доступа не
|
||||
имеет — она может только попросить выполнить `update` или `restart`.
|
||||
Скрипт не повторяет логику установки, а забирает из релиза `get.sh` (сверив
|
||||
его sha256) и отдаёт работу ему — поэтому кнопка обновляет всё сразу: бинарник,
|
||||
скрипты установки и systemd-юнит. Панель к этим файлам доступа не имеет, она
|
||||
может только попросить выполнить `update` или `restart`.
|
||||
|
||||
Работа уходит в отдельный разовый юнит (`systemd-run --unit=pzmanager-update`).
|
||||
Иначе обновление не пережило бы само себя: панель вызывает скрипт через sudo,
|
||||
тот живёт в cgroup её юнита, и остановка службы убила бы его на середине.
|
||||
Побочный эффект — вывод идёт не в консоль панели, а в свой журнал:
|
||||
|
||||
```bash
|
||||
journalctl -u pzmanager-update -f
|
||||
```
|
||||
|
||||
Если правило sudo не установлено (панель поставлена вручную или в системе нет
|
||||
`sudo`), кнопка не появится, а рядом будет показана команда для терминала:
|
||||
|
||||
Reference in New Issue
Block a user