feat: полная поддержка macOS (Darwin arm64/x86_64)
- ai-setup.sh: brew shellenv + brew-ветки для jq/Node; npm-prefix теперь после установки Node - ai-setup.sh: install_proxy использует OS_TAG/ARCH_TAG (качает darwin-arm64/amd64) - ai-setup.sh: afplay в 5 звуковых блоках, портабельный sed -i (BSD), touch ~/.zshrc - setup.sh: скрытие сетевых пунктов (2/3/4/6) на macOS + адаптация Статуса Устраняет на маке: npm not found, «не удалось определить пакетный менеджер», «неизвестная архитектура: arm64». Сетевые скрипты (ru-bypass/ks-*) оставлены Linux-only. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
79
setup.sh
79
setup.sh
@@ -3,6 +3,11 @@
|
||||
# Мастер-скрипт. Запускай от обычного пользователя (sudo попросит сам где нужно).
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
# Платформа: на macOS сетевые функции (ru-bypass/kill switch) неприменимы
|
||||
# (они построены на Linux ipset/ufw/systemd; Amnezia на маке — клиент с utun).
|
||||
IS_MAC=0
|
||||
[ "$(uname -s)" = "Darwin" ] && IS_MAC=1
|
||||
|
||||
BLD='\033[1m'
|
||||
GRN='\033[0;32m'
|
||||
YEL='\033[0;33m'
|
||||
@@ -14,18 +19,25 @@ LOG="$HOME/.config/ai-setup/setup.log"
|
||||
_log() { printf '%s [%s] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$1" "$2" >> "$LOG"; }
|
||||
|
||||
if command -v whiptail >/dev/null 2>&1; then
|
||||
MENU_ARGS=()
|
||||
MENU_ARGS+=("1" "AI-инструменты (установить лаунчеры + ключи)")
|
||||
if [ "$IS_MAC" -eq 0 ]; then
|
||||
MENU_ARGS+=("2" "Сеть: ru-bypass + kill switch")
|
||||
fi
|
||||
MENU_ARGS+=("" "─── Дополнительно ───────────────────────────")
|
||||
if [ "$IS_MAC" -eq 0 ]; then
|
||||
MENU_ARGS+=("3" "Отключить kill switch (прямой доступ без VPN)")
|
||||
MENU_ARGS+=("4" "Включить kill switch (восстановить защиту)")
|
||||
fi
|
||||
MENU_ARGS+=("5" "Статус (Amnezia, UFW, AI инструменты, ключи)")
|
||||
if [ "$IS_MAC" -eq 0 ]; then
|
||||
MENU_ARGS+=("6" "Проверить сеть (маршрутизация, geo)")
|
||||
fi
|
||||
MENU_ARGS+=("7" "Обновить (git pull + перегенерация скриптов)")
|
||||
MENU_ARGS+=("8" "Android CLI (установить Google Android CLI)")
|
||||
choice=$(whiptail --title "AI Setup" \
|
||||
--menu "Выбери действие (стрелки + Enter):" 24 70 10 \
|
||||
"1" "AI-инструменты (установить лаунчеры + ключи)" \
|
||||
"2" "Сеть: ru-bypass + kill switch" \
|
||||
"" "─── Дополнительно ───────────────────────────" \
|
||||
"3" "Отключить kill switch (прямой доступ без VPN)" \
|
||||
"4" "Включить kill switch (восстановить защиту)" \
|
||||
"5" "Статус (Amnezia, UFW, AI инструменты, ключи)" \
|
||||
"6" "Проверить сеть (маршрутизация, geo)" \
|
||||
"7" "Обновить (git pull + перегенерация скриптов)" \
|
||||
"8" "Android CLI (установить Google Android CLI)" \
|
||||
3>&1 1>&2 2>&3) || exit 0
|
||||
"${MENU_ARGS[@]}" 3>&1 1>&2 2>&3) || exit 0
|
||||
echo ""
|
||||
else
|
||||
echo ""
|
||||
@@ -37,26 +49,32 @@ else
|
||||
echo -e " ${GRY}Устанавливает ai-claude, ai-gpt, ai-deepseek, ai-kimi, ai-glm, 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 ""
|
||||
if [ "$IS_MAC" -eq 0 ]; then
|
||||
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 ""
|
||||
fi
|
||||
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 ""
|
||||
if [ "$IS_MAC" -eq 0 ]; then
|
||||
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 ""
|
||||
fi
|
||||
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 ""
|
||||
if [ "$IS_MAC" -eq 0 ]; then
|
||||
echo -e " ${BLD}6) Проверить сеть${CLR}"
|
||||
echo -e " ${GRY}Тесты маршрутизации: .ru напрямую, остальное через Amnezia.${CLR}"
|
||||
echo ""
|
||||
fi
|
||||
echo -e " ${BLD}7) Обновить${CLR}"
|
||||
echo -e " ${GRY}git pull + перегенерация всех скриптов в ~/bin (или ~/.local/bin).${CLR}"
|
||||
echo ""
|
||||
@@ -75,6 +93,7 @@ case "$choice" in
|
||||
bash scripts/ai-setup.sh
|
||||
;;
|
||||
2)
|
||||
if [ "$IS_MAC" -eq 1 ]; then echo "Неприменимо на macOS"; exit 0; fi
|
||||
echo -e "${GRY}Нужно указать параметры твоей локальной сети:${CLR}"
|
||||
echo -e "${GRY} GATEWAY — IP домашнего/офисного роутера (через него пойдёт .ru трафик напрямую)${CLR}"
|
||||
echo -e "${GRY} DEV — сетевой интерфейс (wifi или провод), через который ты подключён к роутеру${CLR}"
|
||||
@@ -131,6 +150,7 @@ case "$choice" in
|
||||
sudo GATEWAY="$gw" DEV="$dev" LOCAL_DNS="$local_dns" AMNEZIA_SERVER="$amn_srv" KILL_SWITCH_EXCEPTIONS="$ks_exc" USER_HOME="$HOME" bash scripts/ru-bypass.sh
|
||||
;;
|
||||
3)
|
||||
if [ "$IS_MAC" -eq 1 ]; then echo "Неприменимо на macOS"; exit 0; fi
|
||||
echo -e "${YEL}Перед этим выйди из Claude Code — сессия сменит IP.${CLR}"
|
||||
echo -n "Продолжить? [y/N] "
|
||||
read -r confirm
|
||||
@@ -138,12 +158,14 @@ case "$choice" in
|
||||
sudo USER_HOME="$HOME" bash scripts/ks-off.sh
|
||||
;;
|
||||
4)
|
||||
if [ "$IS_MAC" -eq 1 ]; then echo "Неприменимо на macOS"; exit 0; fi
|
||||
sudo USER_HOME="$HOME" bash scripts/ks-on.sh
|
||||
;;
|
||||
5)
|
||||
echo -e "${BLD}=== Статус ===${CLR}"
|
||||
echo ""
|
||||
|
||||
if [ "$IS_MAC" -eq 0 ]; then
|
||||
echo -e "${BLD}Сеть:${CLR}"
|
||||
if ip link show amn0 &>/dev/null; then
|
||||
echo -e " ${GRN}✓${CLR} Amnezia (amn0) подключена"
|
||||
@@ -173,6 +195,12 @@ case "$choice" in
|
||||
fi
|
||||
|
||||
echo ""
|
||||
else
|
||||
echo -e "${BLD}Сеть:${CLR}"
|
||||
echo -e " ${GRY}(ru-bypass/kill switch неприменимы на macOS)${CLR}"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
echo -e "${BLD}AI инструменты:${CLR}"
|
||||
for cmd in ai-claude ai-gpt ai-deepseek ai-kimi ai-glm ai-openrouter ai-opencode ai-gemini android; do
|
||||
if command -v "$cmd" &>/dev/null; then
|
||||
@@ -216,6 +244,7 @@ case "$choice" in
|
||||
fi
|
||||
;;
|
||||
6)
|
||||
if [ "$IS_MAC" -eq 1 ]; then echo "Неприменимо на macOS"; exit 0; fi
|
||||
bash tests/test_network.sh
|
||||
;;
|
||||
7)
|
||||
|
||||
Reference in New Issue
Block a user