#!/usr/bin/env bash # 在线一键增量升级入口(给已安装的 cpxy 调用) # 用法: sudo cpxy upgrade # sudo cpxy upgrade --ui-only # sudo cpxy upgrade --force-binary # sudo cpxy upgrade --verify set -euo pipefail BASE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # 若作为独立脚本在 /opt/.../scripts/online-upgrade.sh if [[ -f "$BASE/etc/settings.conf" ]]; then : elif [[ -f "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../etc/settings.conf" ]]; then BASE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" fi GITEA_BASE="${GITEA_BASE:-https://gitea.chickliu.fun}" REPO_OWNER="${REPO_OWNER:-Hermes}" REPO_NAME="${REPO_NAME:-cellular-proxy}" BRANCH="${BRANCH:-main}" INSTALL_URL="${CELLULAR_PROXY_INSTALL_URL:-${GITEA_BASE}/${REPO_OWNER}/${REPO_NAME}/raw/branch/${BRANCH}/install.sh}" if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then echo "请用 root: sudo cpxy upgrade $*" >&2 exit 1 fi # 从 settings 读 INSTALL_DIR if [[ -f "${CONFIG_FILE:-$BASE/etc/settings.conf}" ]]; then # shellcheck disable=SC1090 set -a # shellcheck disable=SC1090 source "${CONFIG_FILE:-$BASE/etc/settings.conf}" set +a fi INSTALL_DIR="${INSTALL_DIR:-$BASE}" export INSTALL_DIR args=(--upgrade) # 透传用户参数(已是 upgrade 子参数) while [[ $# -gt 0 ]]; do args+=("$1") shift done echo "[$(date '+%F %T')] INFO 一键升级: $INSTALL_URL ${args[*]}" >&2 tmp="$(mktemp)" trap 'rm -f "$tmp"' EXIT if command -v curl >/dev/null 2>&1; then curl -fsSL --retry 3 --connect-timeout 20 -o "$tmp" "$INSTALL_URL" elif command -v wget >/dev/null 2>&1; then wget -q -O "$tmp" "$INSTALL_URL" else echo "需要 curl 或 wget" >&2 exit 1 fi chmod +x "$tmp" # 把 install-dir 固定到当前实例 bash "$tmp" --install-dir "$INSTALL_DIR" "${args[@]}"