diff --git a/README.md b/README.md index 83fd5f8..2c92333 100644 --- a/README.md +++ b/README.md @@ -35,17 +35,25 @@ sb-core/ ## 🚀 快速使用 -### 1. 部署与运行 +### 1. 一键脚本命令(推荐) -在 Linux VPS(Ubuntu / Debian / CentOS / Rocky 等)以 `root` 权限执行: +在 Linux VPS(Ubuntu / Debian / CentOS / Rocky / Alpine 等)以 `root` 权限直接执行以下任一命令: +```bash +bash <(curl -Ls https://git.draws.qzz.io/jocay/singbox-script/raw/branch/main/sb.sh) +``` +或者: +```bash +bash <(wget -qO- https://git.draws.qzz.io/jocay/singbox-script/raw/branch/main/sb.sh) +``` + +**或者通过 Git Clone 手动部署:** ```bash git clone https://git.draws.qzz.io/jocay/singbox-script.git cd singbox-script chmod +x sb.sh lib/*.sh ./sb.sh ``` - 首次运行后会自动建立全局快捷指令,之后在系统任意目录输入 `sb` 即可调出菜单。 ### 2. 交互式菜单功能 diff --git a/sb.sh b/sb.sh index 50fe10a..2d96005 100644 --- a/sb.sh +++ b/sb.sh @@ -8,6 +8,64 @@ set -eo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +BOOTSTRAP_DIR="/usr/local/share/singbox-script" +TAR_URL="https://git.draws.qzz.io/jocay/singbox-script/archive/main.tar.gz" +GIT_URL="https://git.draws.qzz.io/jocay/singbox-script.git" + +# 检测是否通过网络管道 (curl | bash 或 wget | bash) 远程单行执行 +if [[ ! -d "${SCRIPT_DIR}/lib" ]]; then + if [[ $EUID -ne 0 ]]; then + echo -e "\033[31m[ERROR]\033[0m 本脚本需要 root 权限,请使用 sudo 或切换至 root 用户执行!" >&2 + exit 1 + fi + + echo -e "\033[36m[INFO]\033[0m 检测到通过网络管道一键运行,正在自动化拉取完整组件至 ${BOOTSTRAP_DIR}..." + + # 确保基础下载与解压依赖 + if ! command -v tar >/dev/null 2>&1 || (! command -v curl >/dev/null 2>&1 && ! command -v wget >/dev/null 2>&1); then + if command -v apt-get >/dev/null 2>&1; then + apt-get update -y >/dev/null 2>&1 && apt-get install -y curl tar ca-certificates >/dev/null 2>&1 + elif command -v dnf >/dev/null 2>&1; then + dnf install -y curl tar ca-certificates >/dev/null 2>&1 + elif command -v yum >/dev/null 2>&1; then + yum install -y curl tar ca-certificates >/dev/null 2>&1 + elif command -v apk >/dev/null 2>&1; then + apk update >/dev/null 2>&1 && apk add --no-cache curl tar ca-certificates >/dev/null 2>&1 + fi + fi + + rm -rf "${BOOTSTRAP_DIR}" + mkdir -p "${BOOTSTRAP_DIR}" + temp_archive="/tmp/singbox-script-$$.tar.gz" + + download_success=false + if command -v curl >/dev/null 2>&1; then + if curl -sSL --fail --connect-timeout 10 -o "$temp_archive" "$TAR_URL"; then + download_success=true + fi + elif command -v wget >/dev/null 2>&1; then + if wget -qO "$temp_archive" "$TAR_URL"; then + download_success=true + fi + fi + + if [[ "$download_success" == "true" ]]; then + tar -xzf "$temp_archive" -C "${BOOTSTRAP_DIR}" --strip-components=1 2>/dev/null || tar -xzf "$temp_archive" -C "${BOOTSTRAP_DIR}" + rm -f "$temp_archive" + elif command -v git >/dev/null 2>&1; then + rm -rf "${BOOTSTRAP_DIR}" + git clone --depth=1 "$GIT_URL" "${BOOTSTRAP_DIR}" >/dev/null 2>&1 + else + echo -e "\033[31m[ERROR]\033[0m 下载失败,请检查网络或确认仓库地址有效: ${TAR_URL}" >&2 + exit 1 + fi + + chmod +x "${BOOTSTRAP_DIR}/sb.sh" "${BOOTSTRAP_DIR}/lib/"*.sh 2>/dev/null || true + ln -sf "${BOOTSTRAP_DIR}/sb.sh" /usr/local/bin/sb + chmod +x /usr/local/bin/sb + + exec bash "${BOOTSTRAP_DIR}/sb.sh" "$@" +fi # 加载各核心子模块 source "${SCRIPT_DIR}/lib/env.sh" @@ -217,6 +275,7 @@ do_uninstall() { # 仅清理程序自身目录,杜绝误伤 rm -rf "${INSTALL_DIR}" + rm -rf "${BOOTSTRAP_DIR}" rm -f "${BIN_PATH}" "${SCRIPT_LINK}" log_success "Sing-box 核心服务已完全且干净地卸载!"