feat: 一条 curl 自动装/升(未装安装、已装升级)

This commit is contained in:
Hermes
2026-07-21 14:23:31 +00:00
commit b2a7332f86
20 changed files with 3459 additions and 0 deletions
+142
View File
@@ -0,0 +1,142 @@
#!/usr/bin/env bash
# 设置/清除代理账号密码,写 settings → 重生 config → 重启服务
# 用法:
# apply-proxy-auth.sh --user U --pass P
# apply-proxy-auth.sh --clear
# apply-proxy-auth.sh --show
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
# shellcheck source=lib.sh
source "$ROOT_DIR/scripts/lib.sh"
ACTION=set
USER_V=""
PASS_V=""
usage() {
cat <<'H'
apply-proxy-auth.sh — 配置 7890 代理鉴权
--user NAME 代理用户名
--pass PASS 代理密码
--clear 清除鉴权(无密码)
--show 仅显示当前状态(密码脱敏)
-h|--help
H
}
while [[ $# -gt 0 ]]; do
case "$1" in
--user) USER_V="${2:-}"; shift 2 ;;
--pass) PASS_V="${2:-}"; shift 2 ;;
--clear) ACTION=clear; shift ;;
--show) ACTION=show; shift ;;
-h|--help) usage; exit 0 ;;
*) die "未知参数: $1" ;;
esac
done
# 优先已安装配置
if [[ -f "${INSTALL_DIR:-/opt/cellular-proxy}/etc/settings.conf" ]]; then
CONFIG_FILE="${INSTALL_DIR:-/opt/cellular-proxy}/etc/settings.conf"
SETTINGS_DIR="$(dirname "$CONFIG_FILE")"
elif [[ -f "$ROOT_DIR/config/settings.conf" ]]; then
CONFIG_FILE="$ROOT_DIR/config/settings.conf"
SETTINGS_DIR="$(dirname "$CONFIG_FILE")"
else
die "找不到 settings.conf(请先安装)"
fi
set_kv() {
local file="$1" key="$2" val="$3"
local tmp
tmp="$(mktemp)"
awk -v k="$key" -v v="$val" '
BEGIN { done=0 }
index($0, k "=")==1 { print k "=" v; done=1; next }
{ print }
END { if (!done) print k "=" v }
' "$file" > "$tmp"
mv "$tmp" "$file"
}
load_config
INSTALL_DIR="${INSTALL_DIR:-/opt/cellular-proxy}"
mask() {
local s="$1" n=${#1}
if [[ $n -le 2 ]]; then echo "***"; else echo "${s:0:1}***${s: -1}"; fi
}
if [[ "$ACTION" == "show" ]]; then
echo "settings: $CONFIG_FILE"
echo "PROXY_USER=${PROXY_USER:-<empty>}"
if [[ -n "${PROXY_PASS:-}" ]]; then
echo "PROXY_PASS=$(mask "$PROXY_PASS") (已设置)"
else
echo "PROXY_PASS=<empty> (无鉴权)"
fi
exit 0
fi
need_root
if [[ "$ACTION" == "clear" ]]; then
set_kv "$CONFIG_FILE" PROXY_USER ""
set_kv "$CONFIG_FILE" PROXY_PASS ""
info "已清除代理账号密码"
else
[[ -n "$USER_V" ]] || die "请指定 --user(或用 --clear"
[[ -n "$PASS_V" ]] || die "请指定 --pass"
set_kv "$CONFIG_FILE" PROXY_USER "$USER_V"
set_kv "$CONFIG_FILE" PROXY_PASS "$PASS_V"
info "已写入 PROXY_USER=$USER_V"
fi
# 同步到安装树副本
if [[ -f "$INSTALL_DIR/etc/settings.conf" && "$CONFIG_FILE" != "$INSTALL_DIR/etc/settings.conf" ]]; then
install -m 0644 "$CONFIG_FILE" "$INSTALL_DIR/etc/settings.conf"
fi
# 若改的是安装目录,也尽量同步源树
if [[ -d "$ROOT_DIR/config" && "$CONFIG_FILE" == "$INSTALL_DIR/etc/settings.conf" ]]; then
install -m 0644 "$CONFIG_FILE" "$ROOT_DIR/config/settings.conf" 2>/dev/null || true
fi
export CONFIG_FILE
# generate 需要能 load 到最新 settings
if [[ -x "$INSTALL_DIR/scripts/generate.sh" ]]; then
GEN="$INSTALL_DIR/scripts/generate.sh"
OUT="$INSTALL_DIR/generated"
elif [[ -x "$ROOT_DIR/scripts/generate.sh" ]]; then
GEN="$ROOT_DIR/scripts/generate.sh"
OUT="${INSTALL_DIR}/generated"
mkdir -p "$OUT"
else
die "找不到 generate.sh"
fi
info "重新生成 sing-box 配置…"
"$GEN" "$OUT"
install -m 0644 "$OUT/config.json" "$INSTALL_DIR/etc/config.json"
install -m 0644 "$OUT/runtime.env" "$INSTALL_DIR/etc/runtime.env" 2>/dev/null || true
install -m 0644 "$CONFIG_FILE" "$INSTALL_DIR/etc/settings.conf"
if systemctl is-enabled cellular-proxy.service >/dev/null 2>&1 || systemctl list-unit-files | grep -q cellular-proxy; then
systemctl restart cellular-proxy.service
sleep 1
if systemctl is-active --quiet cellular-proxy.service; then
info "服务已重启 active"
else
warn "服务未 active,请检查: systemctl status cellular-proxy"
fi
else
warn "未找到 systemd 服务,配置已写好,请手动重启 sing-box"
fi
if [[ "$ACTION" == "clear" ]]; then
echo "当前: 无代理鉴权"
else
echo "当前: 用户 $USER_V / 密码已设置"
echo "HTTP: curl -x http://${USER_V}:****@127.0.0.1:${PROXY_MIXED_PORT:-7890} https://ifconfig.me"
echo "SOCKS: curl --socks5-hostname ${USER_V}:****@127.0.0.1:${PROXY_MIXED_PORT:-7890} https://ifconfig.me"
fi