diff --git a/services/shadowsocks/client/deploy.sh b/services/shadowsocks/client/deploy.sh index aab663b..002ec83 100755 --- a/services/shadowsocks/client/deploy.sh +++ b/services/shadowsocks/client/deploy.sh @@ -12,24 +12,42 @@ source "$ENV_FILE" require_env SS_SERVER SS_PORT SS_PASSWORD SS_METHOD -log_info "Downloading shadowsocks-rust client..." -VERSION=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest \ - | python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'])") -ARCHIVE="shadowsocks-${VERSION}.x86_64-unknown-linux-gnu.tar.xz" -wget -q "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${VERSION}/${ARCHIVE}" -tar -xf "$ARCHIVE" -cp sslocal /usr/local/bin/sslocal -chmod +x /usr/local/bin/sslocal -rm -f "$ARCHIVE" ssserver sslocal ssurl ssmanager redir tunnel +SSLOCAL_BIN="/usr/local/bin/sslocal" + +# Install sslocal — skip download if already present, symlink if installed elsewhere +if [[ -x "$SSLOCAL_BIN" ]]; then + log_info "sslocal already at $SSLOCAL_BIN ($($SSLOCAL_BIN --version 2>&1 | head -1)), skipping download" +elif command -v sslocal &>/dev/null; then + existing="$(command -v sslocal)" + log_info "sslocal found at $existing, symlinking to $SSLOCAL_BIN" + ln -sf "$existing" "$SSLOCAL_BIN" +else + log_info "Downloading shadowsocks-rust client..." + VERSION=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest \ + | python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'])") + ARCHIVE="shadowsocks-${VERSION}.x86_64-unknown-linux-gnu.tar.xz" + wget -q "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${VERSION}/${ARCHIVE}" + tar -xf "$ARCHIVE" + cp sslocal "$SSLOCAL_BIN" + chmod +x "$SSLOCAL_BIN" + rm -f "$ARCHIVE" ssserver sslocal ssurl ssmanager redir tunnel +fi log_info "Installing privoxy..." -apt-get install -y privoxy +if command -v pacman &>/dev/null; then + pacman -S --noconfirm --needed privoxy +else + apt-get install -y privoxy +fi log_info "Deploying configs..." mkdir -p /etc/shadowsocks-rust envsubst < "${INFRA_DIR}/config.json.example" > /etc/shadowsocks-rust/client.json cp "${INFRA_DIR}/privoxy.conf.example" /etc/privoxy/config +log_info "Stopping any existing shadowsocks service on port 1080..." +systemctl stop shadowsocks 2>/dev/null || true + log_info "Installing service..." cp "${INFRA_DIR}/shadowsocks-client.service" /etc/systemd/system/ systemctl daemon-reload diff --git a/services/shadowsocks/server/deploy.sh b/services/shadowsocks/server/deploy.sh index 88cf951..455a25b 100755 --- a/services/shadowsocks/server/deploy.sh +++ b/services/shadowsocks/server/deploy.sh @@ -12,15 +12,25 @@ source "$ENV_FILE" require_env SS_PORT SS_PASSWORD SS_METHOD -log_info "Downloading shadowsocks-rust..." -VERSION=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest \ - | python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'])") -ARCHIVE="shadowsocks-${VERSION}.x86_64-unknown-linux-gnu.tar.xz" -wget -q "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${VERSION}/${ARCHIVE}" -tar -xf "$ARCHIVE" -cp ssserver /usr/local/bin/ssserver-rust -chmod +x /usr/local/bin/ssserver-rust -rm -f "$ARCHIVE" ssserver sslocal ssurl ssmanager redir tunnel +SSSERVER_BIN="/usr/local/bin/ssserver-rust" + +if [[ -x "$SSSERVER_BIN" ]]; then + log_info "ssserver-rust already at $SSSERVER_BIN ($($SSSERVER_BIN --version 2>&1 | head -1)), skipping download" +elif command -v ssserver &>/dev/null; then + existing="$(command -v ssserver)" + log_info "ssserver found at $existing, symlinking to $SSSERVER_BIN" + ln -sf "$existing" "$SSSERVER_BIN" +else + log_info "Downloading shadowsocks-rust..." + VERSION=$(curl -s https://api.github.com/repos/shadowsocks/shadowsocks-rust/releases/latest \ + | python3 -c "import sys,json; print(json.load(sys.stdin)['tag_name'])") + ARCHIVE="shadowsocks-${VERSION}.x86_64-unknown-linux-gnu.tar.xz" + wget -q "https://github.com/shadowsocks/shadowsocks-rust/releases/download/${VERSION}/${ARCHIVE}" + tar -xf "$ARCHIVE" + cp ssserver "$SSSERVER_BIN" + chmod +x "$SSSERVER_BIN" + rm -f "$ARCHIVE" ssserver sslocal ssurl ssmanager redir tunnel +fi log_info "Deploying config..." mkdir -p /etc/shadowsocks-rust