#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" # shellcheck source=lib.sh source "$ROOT_DIR/scripts/lib.sh" if [[ ! -f "$ROOT_DIR/config/settings.conf" ]]; then cp "$ROOT_DIR/config/settings.conf.example" "$ROOT_DIR/config/settings.conf" warn "已创建 config/settings.conf,请至少修改:" warn " CELLULAR_IFACE / PANEL_SECRET /(建议)PROXY_USER+PROXY_PASS" warn "然后重新执行: sudo $ROOT_DIR/scripts/install.sh" warn "可先: $ROOT_DIR/scripts/detect.sh" exit 1 fi load_config need_root info "1/5 探测数据网卡" "$ROOT_DIR/scripts/detect.sh" || true info "2/5 下载/安装 sing-box + UI" "$ROOT_DIR/scripts/fetch-binaries.sh" info "3/5 生成配置(代理出口 = 数据网卡)" "$ROOT_DIR/scripts/generate.sh" "$ROOT_DIR/generated" ensure_dirs mkdir -p /var/lib/cellular-proxy install -m 0644 "$ROOT_DIR/generated/config.json" "$INSTALL_DIR/etc/config.json" install -m 0644 "$ROOT_DIR/generated/runtime.env" "$INSTALL_DIR/etc/runtime.env" install -m 0644 "$ROOT_DIR/config/settings.conf" "$INSTALL_DIR/etc/settings.conf" cp -a "$ROOT_DIR/scripts" "$INSTALL_DIR/" cp -a "$ROOT_DIR/ui" "$INSTALL_DIR/" 2>/dev/null || true if ! "$INSTALL_DIR/bin/sing-box" check -c "$INSTALL_DIR/etc/config.json"; then die "sing-box 配置校验失败" fi install -m 0755 /dev/stdin "$INSTALL_DIR/bin/cpxy" <<'EOF' #!/usr/bin/env bash set -euo pipefail BASE="$(cd "$(dirname "$0")/.." && pwd)" export CONFIG_FILE="${CONFIG_FILE:-$BASE/etc/settings.conf}" cmd="${1:-help}" shift || true case "$cmd" in detect) exec "$BASE/scripts/detect.sh" "$@" ;; generate) "$BASE/scripts/generate.sh" "$BASE/generated" install -m 0644 "$BASE/generated/config.json" "$BASE/etc/config.json" install -m 0644 "$BASE/generated/runtime.env" "$BASE/etc/runtime.env" install -m 0644 "$CONFIG_FILE" "$BASE/etc/settings.conf" 2>/dev/null || true "$BASE/bin/sing-box" check -c "$BASE/etc/config.json" systemctl restart cellular-proxy 2>/dev/null || true ;; start) systemctl start cellular-proxy ;; stop) systemctl stop cellular-proxy ;; restart) systemctl restart cellular-proxy ;; status) systemctl status cellular-proxy --no-pager || true ;; verify) exec "$BASE/scripts/verify.sh" "$@" ;; logs) journalctl -u cellular-proxy -n "${1:-80}" -f ;; help|*) cat <:${PANEL_PORT}/ 密钥: PANEL_SECRET" echo " 验证: cpxy verify"