Files
sing-warp-socks5/quick-install.sh
T

183 lines
6.2 KiB
Bash

#!/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 <<EOF
net.ipv4.conf.all.src_valid_mark=1
net.ipv6.conf.all.disable_ipv6=0
net.ipv4.ip_forward=1
EOF
sysctl -p /etc/sysctl.d/99-sing-box-warp.conf
mkdir -p /opt/sing-box-warp/rules
wget -O /opt/sing-box-warp/rules/antifilter_allyouneed.srs https://ghettoloader.duckdns.org/hesoyam/ruwake-panel-lists/raw/branch/main/antifilter_allyouneed.srs
wget -O /opt/sing-box-warp/rules/antizapret.srs https://ghettoloader.duckdns.org/hesoyam/ruwake-panel-lists/raw/branch/main/antizapret.srs
wget -O /opt/sing-box-warp/rules/github_ip_you-oops-dev.srs https://ghettoloader.duckdns.org/hesoyam/ruwake-panel-lists/raw/branch/main/github_ip_you-oops-dev.srs
wget -O /opt/sing-box-warp/rules/github_karingx.srs https://ghettoloader.duckdns.org/hesoyam/ruwake-panel-lists/raw/branch/main/github_karingx.srs
wget -O /opt/sing-box-warp/rules/cloudfront_ip_MetaCubeX.srs https://ghettoloader.duckdns.org/hesoyam/ruwake-panel-lists/raw/branch/main/cloudfront_ip_MetaCubeX.srs
wget -O /opt/sing-box-warp/rules/telegram_MetaCubeX.srs https://ghettoloader.duckdns.org/hesoyam/ruwake-panel-lists/raw/branch/main/telegram_MetaCubeX.srs
wget -O /opt/sing-box-warp/rules/refilter_ipsum.srs https://ghettoloader.duckdns.org/hesoyam/ruwake-panel-lists/raw/branch/main/refilter_ipsum.srs
chmod -R 775 /opt/sing-box-warp/rules
echo "Reloading systemd..."
systemctl daemon-reload
echo ""
echo "=== Installation Complete ==="
echo ""
echo "Service commands:"
echo " Enable: sudo systemctl enable sing-box-warp"
echo " Start: sudo systemctl start sing-box-warp"
echo " Status: sudo systemctl status sing-box-warp"
echo " Logs: sudo journalctl -u sing-box-warp -f"
echo ""
echo "SOCKS5 proxy: localhost:2080"
echo ""
read -p "Start service now? (y/n) " -n 1 -r < /dev/tty
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
systemctl enable sing-box-warp
systemctl start sing-box-warp
echo ""
echo "Service started! Checking status..."
sleep 2
systemctl status sing-box-warp --no-pager
fi
echo ""
echo "Done!"