147 lines
6.0 KiB
Bash
Executable File
147 lines
6.0 KiB
Bash
Executable File
#!/bin/bash
|
||
# Мастер-скрипт. Запускай от обычного пользователя (sudo попросит сам где нужно).
|
||
cd "$(dirname "$0")"
|
||
|
||
BLD='\033[1m'
|
||
GRN='\033[0;32m'
|
||
YEL='\033[0;33m'
|
||
GRY='\033[0;37m'
|
||
CLR='\033[0m'
|
||
|
||
echo ""
|
||
echo -e "${BLD}=== AI Setup ===${CLR}"
|
||
echo ""
|
||
echo -e "${YEL}Шаги для новой машины (выполнить по порядку):${CLR}"
|
||
echo ""
|
||
echo -e " ${BLD}1) AI-инструменты${CLR}"
|
||
echo -e " ${GRY}Устанавливает ai-claude, ai-gpt, ai-deepseek, ai-gemini и др.${CLR}"
|
||
echo -e " ${GRY}Запрашивает API-ключи. Запускать один раз.${CLR}"
|
||
echo ""
|
||
echo -e " ${BLD}2) Сеть: ru-bypass + kill switch${CLR}"
|
||
echo -e " ${GRY}.ru сайты (ozon, госуслуги) — напрямую с российским IP.${CLR}"
|
||
echo -e " ${GRY}*.loc офисные адреса — тоже напрямую.${CLR}"
|
||
echo -e " ${GRY}Всё остальное — только через Amnezia (kill switch).${CLR}"
|
||
echo -e " ${GRY}Запускать один раз на каждой машине.${CLR}"
|
||
echo ""
|
||
echo -e "${YEL}Дополнительно (по необходимости):${CLR}"
|
||
echo ""
|
||
echo -e " ${BLD}3) Отключить kill switch${CLR}"
|
||
echo -e " ${GRY}Временно — когда нужен прямой доступ без VPN (российский IP).${CLR}"
|
||
echo ""
|
||
echo -e " ${BLD}4) Включить kill switch${CLR}"
|
||
echo -e " ${GRY}Вернуть защиту обратно после отключения.${CLR}"
|
||
echo ""
|
||
echo -e " ${BLD}5) Статус${CLR}"
|
||
echo -e " ${GRY}Amnezia, UFW, сервисы, установленные AI инструменты и ключи.${CLR}"
|
||
echo ""
|
||
echo -e " ${BLD}6) Проверить сеть${CLR}"
|
||
echo -e " ${GRY}Тесты маршрутизации: .ru напрямую, остальное через Amnezia.${CLR}"
|
||
echo ""
|
||
echo -n "Выбери [1-6] или Enter для выхода: "
|
||
read -r choice
|
||
echo ""
|
||
|
||
case "$choice" in
|
||
1)
|
||
bash scripts/ai-setup.sh
|
||
;;
|
||
2)
|
||
echo -e "${GRY}Нужно указать два параметра твоей локальной сети:${CLR}"
|
||
echo -e "${GRY} GATEWAY — IP домашнего/офисного роутера (через него пойдёт .ru трафик напрямую)${CLR}"
|
||
echo -e "${GRY} DEV — сетевой интерфейс (wifi или провод), через который ты подключён к роутеру${CLR}"
|
||
echo ""
|
||
net_conf="$HOME/.config/ai-setup/network_$(hostname).conf"
|
||
auto_gw=$(ip route show default 2>/dev/null | awk '/default/ {print $3; exit}')
|
||
auto_dev=$(ip route show default 2>/dev/null | awk '/default/ {print $5; exit}')
|
||
auto_gw="${auto_gw:-192.168.1.1}"
|
||
auto_dev="${auto_dev:-wlp1s0}"
|
||
if [ -f "$net_conf" ]; then
|
||
saved_gw=$(grep '^GATEWAY=' "$net_conf" | cut -d= -f2)
|
||
saved_dev=$(grep '^DEV=' "$net_conf" | cut -d= -f2)
|
||
auto_gw="${saved_gw:-$auto_gw}"
|
||
auto_dev="${saved_dev:-$auto_dev}"
|
||
echo -e "Загружены сохранённые параметры для ${BLD}$(hostname)${CLR}: GATEWAY=${BLD}${auto_gw}${CLR} DEV=${BLD}${auto_dev}${CLR}"
|
||
else
|
||
echo -e "Определено автоматически: GATEWAY=${BLD}${auto_gw}${CLR} DEV=${BLD}${auto_dev}${CLR}"
|
||
fi
|
||
echo -e "${GRY}(просто Enter чтобы принять, или введи другое значение)${CLR}"
|
||
echo ""
|
||
read -rp "GATEWAY (IP роутера) [${auto_gw}]: " gw
|
||
read -rp "DEV (интерфейс) [${auto_dev}]: " dev
|
||
gw="${gw:-$auto_gw}"
|
||
dev="${dev:-$auto_dev}"
|
||
mkdir -p "$HOME/.config/ai-setup"
|
||
printf 'GATEWAY=%s\nDEV=%s\n' "$gw" "$dev" > "$net_conf"
|
||
echo ""
|
||
sudo GATEWAY="$gw" DEV="$dev" bash scripts/ru-bypass.sh
|
||
;;
|
||
3)
|
||
echo -e "${YEL}Перед этим выйди из Claude Code — сессия сменит IP.${CLR}"
|
||
echo -n "Продолжить? [y/N] "
|
||
read -r confirm
|
||
[ "$confirm" = "y" ] || [ "$confirm" = "Y" ] || exit 0
|
||
sudo bash scripts/ks-off.sh
|
||
;;
|
||
4)
|
||
sudo bash scripts/ks-on.sh
|
||
;;
|
||
5)
|
||
echo -e "${BLD}=== Статус ===${CLR}"
|
||
echo ""
|
||
|
||
echo -e "${BLD}Сеть:${CLR}"
|
||
if ip link show amn0 &>/dev/null; then
|
||
echo -e " ${GRN}✓${CLR} Amnezia (amn0) подключена"
|
||
else
|
||
echo -e " ${YEL}✗${CLR} Amnezia (amn0) не найдена"
|
||
fi
|
||
if sudo ufw status 2>/dev/null | grep -qE "активен|active"; then
|
||
echo -e " ${GRN}✓${CLR} UFW kill switch активен"
|
||
else
|
||
echo -e " ${YEL}✗${CLR} UFW выключен"
|
||
fi
|
||
if systemctl is-active --quiet ru-bypass.service 2>/dev/null || systemctl is-enabled --quiet ru-bypass.service 2>/dev/null; then
|
||
echo -e " ${GRN}✓${CLR} ru-bypass.service установлен"
|
||
else
|
||
echo -e " ${YEL}✗${CLR} ru-bypass.service не установлен (запусти пункт 2)"
|
||
fi
|
||
if systemctl is-enabled --quiet ru-ipset-restore.service 2>/dev/null; then
|
||
echo -e " ${GRN}✓${CLR} ru-ipset-restore.service установлен"
|
||
else
|
||
echo -e " ${YEL}✗${CLR} ru-ipset-restore.service не установлен (запусти пункт 2)"
|
||
fi
|
||
|
||
echo ""
|
||
echo -e "${BLD}AI инструменты:${CLR}"
|
||
for cmd in ai-claude ai-gpt ai-deepseek ai-kimi ai-openrouter ai-gemini; do
|
||
if command -v "$cmd" &>/dev/null; then
|
||
echo -e " ${GRN}✓${CLR} $cmd"
|
||
else
|
||
echo -e " ${YEL}✗${CLR} $cmd"
|
||
fi
|
||
done
|
||
|
||
echo ""
|
||
echo -e "${BLD}API ключи:${CLR}"
|
||
cfg="$HOME/.config/ai-setup"
|
||
for f in deepseek_key kimi_key openrouter_key; do
|
||
name="${f/_key/}"
|
||
if [ -s "$cfg/$f" ]; then
|
||
echo -e " ${GRN}✓${CLR} $name"
|
||
else
|
||
echo -e " ${YEL}✗${CLR} $name (не задан)"
|
||
fi
|
||
done
|
||
;;
|
||
6)
|
||
bash tests/test_network.sh
|
||
;;
|
||
"")
|
||
exit 0
|
||
;;
|
||
*)
|
||
echo "Неверный выбор."
|
||
exit 1
|
||
;;
|
||
esac
|