feat: support direct pipe execution via curl/wget and auto-bootstrap
This commit is contained in:
@@ -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 核心服务已完全且干净地卸载!"
|
||||
|
||||
Reference in New Issue
Block a user