Files
zapret-discord-youtube-linux/install.sh
T
OpenCode Agent 29b9f8caa5 fix: исправления ошибок установки и работы (7 багов)
1. fix(install_nfqws): добавлены libmnl-dev и zlib1g-dev для всех дистрибутивов
   - Ubuntu/Debian: libmnl-dev zlib1g-dev
   - Arch: libmnl zlib
   - Fedora: libmnl-devel zlib-devel
   - Alpine: libmnl-dev zlib-dev
   Исправляет fatal error: libmnl/libmnl.h и zlib.h при сборке nfqws.

2. fix(test_zapret): исправлен вывод результатов теста
   - было: Results: / passed (всегда 1/1)
   - стало: Results: / passed (реальные цифры)

3. fix(autotest): cleanup_firewall перед каждым тестом стратегии
   - Убирает остатки iptables/nftables от предыдущего теста

4. fix(install): корректная обработка exit 2 от sync_from_upstream.sh
   - exit 2 = успешный sync + флаг rebuild, не ошибка
   - Теперь не пишет '[!] Sync failed' при нормальном обновлении

5. fix(service): убран рекурсивный вызов bash $0 remove_services
   - Используется прямой вызов функции service_remove()

6. fix(update): корректная запись версии в .service/version.txt
   - Убран префикс LOCAL_VERSION= из записи
   - Добавлена очистка кавычек через sed/tr

7. fix(service): проверка $DISPLAY перед xdg-open в check_for_updates
   - Предотвращает ошибки 'cannot open display' на headless/SSH
2026-05-10 18:03:40 +04:00

155 lines
4.6 KiB
Bash

#!/bin/bash
# install.sh - One-shot installer: setup + build + autotest + systemd install
# Works in Russia (GitHub blocked): supports HTTPS_PROXY, offline bundle, mirrors
# Usage:
# sudo ./install.sh # normal (with proxy/VPN)
# sudo ./install.sh --offline # use pre-downloaded bundle
# HTTPS_PROXY=socks5://127.0.0.1:1080 sudo ./install.sh
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/lib/functions.sh"
source "$SCRIPT_DIR/lib/download_helper.sh"
if [[ "${EUID:-$(id -u)}" -ne 0 ]]; then
print_red "[!] Run as root (or sudo)"
echo " sudo ./install.sh"
exit 1
fi
# Check for offline flag
OFFLINE_MODE=0
if [[ "${1:-}" == "--offline" ]]; then
OFFLINE_MODE=1
echo ""
echo "[*] OFFLINE MODE: skipping network, using local bundle only"
sleep 1
fi
# Load proxy
load_proxy
# Check if proxy is set
if [[ -n "${HTTPS_PROXY:-}" ]]; then
echo "[OK] Proxy detected: $HTTPS_PROXY"
fi
echo ""
echo "=============================================="
echo " Zapret for Linux - Full Installer"
echo "=============================================="
echo ""
echo " This will:"
echo " 1. Sync upstream lists & strategies"
echo " 2. Install dependencies"
echo " 3. Build nfqws from source"
echo " 4. Auto-test strategies"
echo " 5. Install systemd service"
echo ""
if [[ "$OFFLINE_MODE" -eq 1 ]]; then
echo " Mode: OFFLINE (no internet required)"
else
echo " Mode: ONLINE (needs internet or proxy/VPN)"
if ! curl -sfL --max-time 5 "https://github.com" >/dev/null 2>&1; then
print_yellow "[!] GitHub NOT reachable."
echo " Options:"
echo " a) Set proxy: HTTPS_PROXY=socks5://127.0.0.1:1080 sudo ./install.sh"
echo " b) Use VPN and re-run"
echo " c) Run offline: sudo ./install.sh --offline"
echo " d) Or prepare offline bundle first: proxychains ./prepare_offline_bundle.sh"
echo ""
read -rp "Continue anyway? [y/N]: " ans
[[ "$ans" == [yY]* ]] || exit 1
fi
fi
read -rp "Continue? [Y/n]: " ans
[[ "${ans:-Y}" == [yY]* ]] || { echo "Aborted."; exit 0; }
# Step 0: Sync upstream (lists, hosts, new .bat strategies)
if [[ "$OFFLINE_MODE" -eq 0 ]]; then
echo ""
echo "[*] Step 0: Syncing upstream lists/strategies..."
set +e
bash "$SCRIPT_DIR/sync_from_upstream.sh" 2>&1
SYNC_EXIT=$?
set -e
if [[ "$SYNC_EXIT" -eq 2 ]]; then
print_yellow "[!] Sync flagged: rebuild needed (exit 2). Continuing..."
elif [[ "$SYNC_EXIT" -ne 0 ]]; then
print_yellow "[!] Sync failed (exit $SYNC_EXIT). Continuing with local files..."
fi
else
echo ""
echo "[*] Step 0: OFFLINE — skipping upstream sync"
fi
# Step 1: Setup
echo ""
echo "[*] Step 1/4: Installing dependencies..."
bash "$SCRIPT_DIR/setup.sh" || {
print_red "[!] Setup failed. Check dependencies."
exit 1
}
# Step 2: Build nfqws
echo ""
echo "[*] Step 2/4: Building nfqws..."
check_nfqws || {
bash "$SCRIPT_DIR/install_nfqws.sh" || {
print_red "[!] Build failed."
echo ""
echo "Common causes:"
echo " - GitHub blocked (set HTTPS_PROXY or use --offline)"
echo " - Missing build tools (gcc, make)"
echo " - libnetfilter_queue not installed"
echo ""
echo "Try:"
echo " HTTPS_PROXY=socks5://127.0.0.1:1080 sudo ./install.sh"
echo " OR"
echo " sudo ./install.sh --offline"
exit 1
}
}
# Step 3: Auto-test
echo ""
echo "[*] Step 3/4: Auto-testing strategies..."
bash "$SCRIPT_DIR/autotest.sh" --auto || {
print_yellow "[!] Auto-test: no strategy worked automatically."
echo " Try manually: sudo ./general.sh, sudo ./general_ALT.sh, ..."
}
# Step 4: Done
echo ""
print_green "=============================================="
print_green " Installation Complete!"
print_green "=============================================="
echo ""
if command -v systemctl >/dev/null 2>&1; then
systemctl status zapret --no-pager 2>/dev/null || true
echo ""
echo "Commands:"
echo " sudo systemctl status zapret"
echo " sudo systemctl stop zapret"
echo " sudo systemctl start zapret"
echo " sudo systemctl restart zapret"
echo " sudo journalctl -u zapret -f"
else
echo "[*] systemd not found. To start manually:"
echo " sudo ./general.sh"
fi
echo ""
echo "[*] To update in future:"
if [[ "$OFFLINE_MODE" -eq 1 ]]; then
echo " Re-run with VPN/proxy: sudo ./install.sh"
else
echo " sudo ./update.sh # auto sync + rebuild"
echo " sudo ./update.sh --full-auto # force rebuild"
fi
echo ""