From eac33b3cf60c11a517f143a9e998b84771c42768 Mon Sep 17 00:00:00 2001 From: andrey271192 <76248502+andrey271192@users.noreply.github.com> Date: Thu, 11 Jun 2026 19:27:33 +0300 Subject: [PATCH] fix: ship stable lib-core helper --- CHANGELOG.md | 2 ++ install.sh | 1 + overlay/lib-core.sh | 63 +++++++++++++++++++++++++++++++++++++++++++++ update.sh | 1 + 4 files changed, 67 insertions(+) create mode 100644 overlay/lib-core.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 3283f24..b4e42a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ phobos-update beta # или: phobos-update dev ## stable ### v1.2.8 +- **fix:** fresh stable install теперь кладёт обязательный `lib-core.sh` рядом с `phobos-client.sh`, поэтому `/clients` не сыпется на `check_root/load_env/die/log_*: command not found`. - **fix:** шаг `[6/9] PCA patches` больше не падает с `curl: (23) Failure writing output to destination`, если папки `repo/server/scripts` или `repo/client/templates` не были созданы upstream sparse clone. - **fix:** установка `wg-obfuscator` на x86_64 больше не падает с `ERROR: obfuscator binary for x86_64 missing`. Если бинарника нет в Ground-Zerro, installer и secondary installer берут `linux-x64` из ClusterM releases. @@ -53,6 +54,7 @@ phobos-update beta # или: phobos-update dev |--------|----------|---------| | 1.2.7 / 1.3.x | PhobosWG: «невозможно импортировать туннель» | `phobos://` дополняется `= none` для всех обязательных полей (`PresharedKey`) по спеке формата | | 1.2.8 / 1.3.x | Stable не показывал кнопку скачивания APK без локального файла | кнопка **PhobosWG (APK)** всегда доступна на Android-странице; `/download/apk` ведет на public stable release | +| 1.2.8 / 1.3.x | Stable `/clients`: `lib-core.sh: No such file or directory`, `check_root/load_env: command not found` | `lib-core.sh` добавлен в public repo, installer и updater | | 1.2.8 / 1.3.x | Install `[6/9] PCA patches`: `curl: (23) Failure writing output to destination` | `fetch()` создаёт папку назначения перед `curl -o` | | 1.2.8 / 1.3.x | VPS x86_64: `ERROR: obfuscator binary for x86_64 missing` | авто-загрузка `linux-x64` из ClusterM releases + нормализация `amd64 -> x86_64` | | 1.2.6 / 1.3.x | Роутер aarch64: «бинарник не найден в архиве» | авто-загрузка aarch64/mipsel/armv7 из ClusterM releases | diff --git a/install.sh b/install.sh index b80b27e..2b21dc8 100755 --- a/install.sh +++ b/install.sh @@ -203,6 +203,7 @@ fetch() { fi echo " WARN: fetch $1 failed"; return 1 } +fetch overlay/lib-core.sh "$PHOBOS_DIR/repo/server/scripts/lib-core.sh" && chmod +x "$PHOBOS_DIR/repo/server/scripts/lib-core.sh" fetch overlay/phobos-client.sh "$PHOBOS_DIR/repo/server/scripts/phobos-client.sh" && chmod +x "$PHOBOS_DIR/repo/server/scripts/phobos-client.sh" fetch overlay/install-router.sh.template "$PHOBOS_DIR/repo/client/templates/install-router.sh.template" fetch overlay/router-configure-wireguard.sh "$PHOBOS_DIR/repo/client/templates/router-configure-wireguard.sh" && chmod +x "$PHOBOS_DIR/repo/client/templates/router-configure-wireguard.sh" diff --git a/overlay/lib-core.sh b/overlay/lib-core.sh new file mode 100644 index 0000000..08c79f3 --- /dev/null +++ b/overlay/lib-core.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +set -euo pipefail + +PHOBOS_DIR="${PHOBOS_DIR:-/opt/Phobos}" +SERVER_ENV="${SERVER_ENV:-$PHOBOS_DIR/server/server.env}" +CLIENTS_DIR="${CLIENTS_DIR:-$PHOBOS_DIR/clients}" +PACKAGES_DIR="${PACKAGES_DIR:-$PHOBOS_DIR/packages}" +WWW_DIR="${WWW_DIR:-$PHOBOS_DIR/www}" +TOKENS_DIR="${TOKENS_DIR:-$PHOBOS_DIR/tokens}" +TOKENS_FILE="${TOKENS_FILE:-$TOKENS_DIR/tokens.json}" +REPO_DIR="${REPO_DIR:-$PHOBOS_DIR/repo}" +WG_CONFIG="${WG_CONFIG:-/etc/wireguard/wg0.conf}" +TOKEN_TTL="${TOKEN_TTL:-86400}" +CLIENT_WG_PORT="${CLIENT_WG_PORT:-13255}" + +log_info() { echo "[INFO] $*"; } +log_warn() { echo "[WARN] $*" >&2; } +log_success() { echo "[OK] $*"; } +die() { echo "[ERROR] $*" >&2; exit 1; } + +check_root() { + [ "$(id -u)" = "0" ] || die "run as root" +} + +load_env() { + if [ -f "$SERVER_ENV" ]; then + while IFS='=' read -r k v; do + case "$k" in + ''|\#*) continue ;; + esac + export "$k=$v" + done < "$SERVER_ENV" + fi + + if [ -z "${SERVER_PUBLIC_IP_V4:-}" ]; then + SERVER_PUBLIC_IP_V4="$(curl -4 -fsS --max-time 6 https://api.ipify.org 2>/dev/null || hostname -I | awk '{print $1}')" + export SERVER_PUBLIC_IP_V4 + fi + + if [ -z "${SERVER_WG_PUBLIC_KEY:-}" ]; then + SERVER_WG_PUBLIC_KEY="$(wg show wg0 public-key 2>/dev/null || true)" + export SERVER_WG_PUBLIC_KEY + fi + + if [ -n "${OBFUSCATOR_PORTS:-}" ]; then + OBFUSCATOR_PORT="$(echo "$OBFUSCATOR_PORTS" | cut -d',' -f1 | tr -d ' ')" + export OBFUSCATOR_PORT + fi +} + +ensure_dirs() { + mkdir -p \ + "$CLIENTS_DIR" \ + "$PACKAGES_DIR" \ + "$WWW_DIR/init" \ + "$WWW_DIR/packages" \ + "$TOKENS_DIR" \ + "$REPO_DIR/server/scripts" \ + "$REPO_DIR/client/templates" + + [ -f "$TOKENS_FILE" ] || echo "[]" > "$TOKENS_FILE" +} diff --git a/update.sh b/update.sh index eefe609..b847ecb 100755 --- a/update.sh +++ b/update.sh @@ -47,6 +47,7 @@ gh_curl() { # $1=ref, rest=curl args managed_files() { cat <