62 lines
1.8 KiB
Bash
Executable File
62 lines
1.8 KiB
Bash
Executable File
#!/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[@]}"
|