#!/bin/bash set -e INSTALL_DIR="/opt/sing-box-warp" CONFIG_DIR="/etc/sing-box-warp" CACHE_DIR="/var/cache/sing-box-warp" SING_BOX_VERSION="1.13.2-extended-1.6.2" SING_BOX_URL="https://ghettoloader.duckdns.org/hesoyam/sing-box-extended-mirror/releases/download/v${SING_BOX_VERSION}/sing-box-${SING_BOX_VERSION}-linux-amd64.tar.gz" echo "=== Sing-Box WARP Quick Installer ===" echo "" if [ "$EUID" -ne 0 ]; then echo "Please run as root (use sudo)" exit 1 fi echo "Creating directories..." mkdir -p "$INSTALL_DIR" mkdir -p "$CONFIG_DIR" mkdir -p "$CACHE_DIR" echo "" echo "=== WARP Configuration ===" echo "goto ->> https://warp-generator.github.io/ generater for AWG 3.0" echo "Paste your WARP config (wg://... or [Interface]/[Peer] INI)." echo "Finish input with Ctrl-D." WARP_INPUT=$(cat < /dev/tty) if [ -z "$WARP_INPUT" ]; then echo "Error: warp.conf input is empty!" exit 1 fi printf "%s\n" "$WARP_INPUT" > "$CONFIG_DIR/warp.conf" echo "" echo "Configuration saved to $CONFIG_DIR/warp.conf" echo "" echo "=== TUN mode ===" echo "TUN routes system traffic through sing-box (needs CAP_NET_ADMIN)." echo "Without TUN, only SOCKS5 proxy on port 2080 is available." read -p "Enable TUN mode? (y/n) " -n 1 -r < /dev/tty echo if [[ $REPLY =~ ^[Yy]$ ]]; then echo "1" > "$CONFIG_DIR/enable-tun" echo "TUN mode enabled." else echo "0" > "$CONFIG_DIR/enable-tun" echo "TUN mode disabled (SOCKS5 only)." fi echo "" echo "Downloading sing-box..." NEED_DOWNLOAD=1 if command -v sing-box >/dev/null 2>&1; then INSTALLED_VERSION=$(sing-box version 2>/dev/null | head -n 1 || true) if echo "$INSTALLED_VERSION" | grep -q "$SING_BOX_VERSION"; then NEED_DOWNLOAD=0 echo "sing-box already installed ($INSTALLED_VERSION), skipping download." else echo "sing-box is installed ($INSTALLED_VERSION) but version mismatch, downloading $SING_BOX_VERSION..." fi fi if [ "$NEED_DOWNLOAD" -eq 1 ]; then cd /tmp TARBALL="sing-box-${SING_BOX_VERSION}-linux-amd64.tar.gz" rm -f "$TARBALL" echo "Downloading $TARBALL ..." if ! wget -q --show-progress --timeout=20 --tries=3 --waitretry=5 --retry-connrefused --continue -O "$TARBALL" "$SING_BOX_URL"; then echo "wget failed, trying curl..." curl -fL --connect-timeout 20 --retry 3 --retry-delay 5 -o "$TARBALL" "$SING_BOX_URL" fi tar -xzf "$TARBALL" mv "sing-box-${SING_BOX_VERSION}-linux-amd64/sing-box" /usr/local/bin/sing-box chmod +x /usr/local/bin/sing-box rm -rf "$TARBALL" "sing-box-${SING_BOX_VERSION}-linux-amd64" fi GENERATE_CONFIG_URL="https://ghettoloader.duckdns.org/hesoyam/sing-warp-socks5/raw/branch/main/generate-config.sh" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo "Installing generate-config.sh..." if [ -f "$SCRIPT_DIR/generate-config.sh" ]; then cp "$SCRIPT_DIR/generate-config.sh" "$INSTALL_DIR/generate-config.sh" echo "Copied generate-config.sh from installer directory." elif wget -q --timeout=20 -O "$INSTALL_DIR/generate-config.sh" "$GENERATE_CONFIG_URL"; then echo "Downloaded generate-config.sh." elif curl -fsSL --connect-timeout 20 -o "$INSTALL_DIR/generate-config.sh" "$GENERATE_CONFIG_URL"; then echo "Downloaded generate-config.sh (curl)." else echo "Error: failed to install generate-config.sh" exit 1 fi chmod +x "$INSTALL_DIR/generate-config.sh" echo "Creating systemd service..." cat > /etc/systemd/system/sing-box-warp.service <<"'SERVICE_EOF'" [Unit] Description=Sing-Box WARP SOCKS5 Proxy After=network-online.target Wants=network-online.target [Service] Type=simple User=root WorkingDirectory=/opt/sing-box-warp Environment="HOME=/var/cache/sing-box-warp" Environment="WARP_CONF=/etc/sing-box-warp/warp.conf" Environment="OUTPUT_CONFIG=/opt/sing-box-warp/config.json" ExecStartPre=/opt/sing-box-warp/generate-config.sh ExecStart=/usr/local/bin/sing-box run -c /opt/sing-box-warp/config.json Restart=on-failure RestartSec=5s StandardOutput=journal StandardError=journal NoNewPrivileges=false PrivateTmp=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/opt/sing-box-warp /var/cache/sing-box-warp AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE [Install] WantedBy=multi-user.target 'SERVICE_EOF' echo "Configuring sysctl parameters..." cat > /etc/sysctl.d/99-sing-box-warp.conf <