Код настройки печатает установщик, появилось удаление панели
Менеджер кладёт код первичной настройки в 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:
+41
-9
@@ -7,6 +7,15 @@
|
||||
#
|
||||
# curl -fsSL .../get.sh | sudo PZ_LISTEN=10.10.1.142:8080 bash
|
||||
#
|
||||
# Удаление (аргументы уходят установщику как есть):
|
||||
#
|
||||
# curl -fsSL .../get.sh | sudo bash -s -- --uninstall
|
||||
# curl -fsSL .../get.sh | sudo bash -s -- --uninstall --purge
|
||||
#
|
||||
# Если панель уже установлена, то же самое умеет её локальная копия:
|
||||
#
|
||||
# sudo /opt/pzmanager/install.sh --uninstall --purge
|
||||
#
|
||||
# Переменные окружения:
|
||||
# PZ_VERSION какой тег ставить (по умолчанию последний релиз)
|
||||
# PZ_HOME куда ставить (по умолчанию /opt/pzmanager)
|
||||
@@ -29,6 +38,19 @@ die() { echo "Ошибка: $*" >&2; exit 1; }
|
||||
|
||||
[[ $EUID -eq 0 ]] || die "запустите с правами root (sudo)"
|
||||
|
||||
# Аргументы уходят установщику. Для удаления бинарник качать незачем — это
|
||||
# лишние восемь мегабайт ради скрипта, который его же и сотрёт.
|
||||
ARGS=("$@")
|
||||
NEED_BINARY=1
|
||||
# Идиома ${ARGS[@]+...} нужна из-за set -u: обычная "${ARGS[@]:-}" на пустом
|
||||
# массиве разворачивается в один пустой аргумент, и установщик спотыкается о
|
||||
# него при обычной установке.
|
||||
for arg in ${ARGS[@]+"${ARGS[@]}"}; do
|
||||
case "$arg" in
|
||||
--uninstall | --remove | --purge) NEED_BINARY=0 ;;
|
||||
esac
|
||||
done
|
||||
|
||||
for tool in curl sha256sum; do
|
||||
command -v "$tool" >/dev/null 2>&1 || die "не найдена утилита $tool"
|
||||
done
|
||||
@@ -68,10 +90,13 @@ asset_url() {
|
||||
}
|
||||
|
||||
BIN_NAME="pzmanager-linux-${ARCH}"
|
||||
BIN_URL="$(asset_url "$BIN_NAME")"
|
||||
[[ -n "$BIN_URL" ]] || die "в релизе ${TAG} нет файла ${BIN_NAME}"
|
||||
|
||||
echo "==> Ставлю ${TAG} (${ARCH})"
|
||||
if [[ "$NEED_BINARY" == "1" ]]; then
|
||||
BIN_URL="$(asset_url "$BIN_NAME")"
|
||||
[[ -n "$BIN_URL" ]] || die "в релизе ${TAG} нет файла ${BIN_NAME}"
|
||||
echo "==> Ставлю ${TAG} (${ARCH})"
|
||||
else
|
||||
echo "==> Беру установщик из ${TAG} для удаления"
|
||||
fi
|
||||
|
||||
TMP="$(mktemp -d)"
|
||||
trap 'rm -rf "$TMP"' EXIT
|
||||
@@ -91,13 +116,17 @@ download() {
|
||||
curl -fsSL -o "$name" "$url" || die "не удалось скачать ${name}"
|
||||
}
|
||||
|
||||
download "$BIN_NAME"
|
||||
download install.sh
|
||||
download pzmanager.service
|
||||
FILES=(install.sh pzmanager.service)
|
||||
|
||||
if [[ "$NEED_BINARY" == "1" ]]; then
|
||||
download "$BIN_NAME"
|
||||
FILES+=("$BIN_NAME")
|
||||
fi
|
||||
|
||||
# Скрипт привилегированных действий появился не сразу: со старым релизом
|
||||
# ставим без него, панель просто не покажет кнопку обновления.
|
||||
FILES=("$BIN_NAME" install.sh pzmanager.service)
|
||||
if download pzmanager-admin.sh optional; then
|
||||
FILES+=(pzmanager-admin.sh)
|
||||
fi
|
||||
@@ -120,8 +149,11 @@ mv install.sh pzmanager.service deploy/
|
||||
if [[ -f pzmanager-admin.sh ]]; then
|
||||
mv pzmanager-admin.sh deploy/
|
||||
fi
|
||||
mv "$BIN_NAME" pzmanager
|
||||
chmod +x pzmanager deploy/install.sh
|
||||
chmod +x deploy/install.sh
|
||||
if [[ "$NEED_BINARY" == "1" ]]; then
|
||||
mv "$BIN_NAME" pzmanager
|
||||
chmod +x pzmanager
|
||||
fi
|
||||
|
||||
echo "==> Запускаю установщик"
|
||||
BINARY="$TMP/pzmanager" bash deploy/install.sh
|
||||
BINARY="$TMP/pzmanager" bash deploy/install.sh ${ARGS[@]+"${ARGS[@]}"}
|
||||
|
||||
Reference in New Issue
Block a user