Commit Graph

15 Commits

Author SHA1 Message Date
57d171a592 scripts/fuck-rkn.sh 2026-06-09 23:59:57 +07:00
Виталий Никитенко
aed7468068 fix: ru-bypass больше не раздувает /etc/hosts дублями
- sed удаляет всё от маркера до конца файла, а не только строку с маркером
- заодно чистит старые дубли без маркера (eltex.loc, eltex-co.ru)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:36:26 +03:00
Виталий Никитенко
4ae5ca149a feat: автоопределение BIN_DIR — ~/bin если есть в PATH, иначе ~/.local/bin
- BIN_DIR теперь определяется по наличию ~/bin в PATH (для Mint, где нет .bashrc)
- source путей в генерируемых скриптах заменены на self-referential (через BASH_SOURCE)
- agy_bin подменяется post-generation sed при нестандартном BIN_DIR
- add_path_to_rc() формирует PATH динамически с учётом BIN_DIR
- при миграции на ~/bin старые скрипты из ~/.local/bin удаляются

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 13:39:29 +03:00
Виталий Никитенко
cb8c3c9544 fix: автоотключение IPv6 при настройке kill switch
IPv6-трафик обходит UFW (который работает только с IPv4) — kill switch
не защищает от утечек по IPv6.

Изменения:
- ru-bypass.sh: молча отключает IPv6 (sysctl + /etc/sysctl.d) при
  каждом запуске, если есть глобальные IPv6-адреса
- ks-on.sh: тоже отключает IPv6, но без интерактивного вопроса
  (раньше спрашивал «Отключить IPv6? [Y/n]»)
- ai-setup.sh (direct mode): не восстанавливает IPv6, если
  UFW kill switch активен (раньше безусловно включал обратно,
  из-за чего после каждого запуска setup.sh IPv6 снова утекал)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 12:48:32 +03:00
Виталий Никитенко
d2bbcc7e33 fix: kill switch — UFW before.rules с актуальным DEV, прямые iptables, /etc/hosts для *.eltex.loc и elph
Три корневые проблемы и их исправления:

1. MANAGE_BUILTINS=no в /etc/default/ufw — цепочка ufw-before-output
   не вызывалась из OUTPUT, правила before.rules не применялись.
   → автофикс no→yes + прямые правила iptables (не зависят от UFW).

2. UFW-правила создавались однократно по маркеру — при смене DEV
   (wlp1s0→enp4s0) продолжали ссылаться на старый интерфейс.
   → теперь при каждом запуске удаляются и пересоздаются с актуальным DEV.

3. DNS через VPN для локальных доменов возвращал внешние IP вместо
   внутренних (RFC1918) — трафик уходил в VPN и не достигал серверов.
   → /etc/hosts с фиксированными IP для *.eltex.loc, mattermost, elph.
   → замена dig +short на getent hosts (уважает /etc/hosts).

Добавлены built-in KILL_SWITCH_EXCEPTIONS:
  mattermost.eltex-co.ru elph.eltex-co.ru 10.80.0.15

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 12:44:20 +03:00
Виталий Никитенко
e955c928d3 fix: сохранение конфига в /etc/ru-bypass.conf для systemd/NM dispatcher
ru-bypass.sh теперь сохраняет параметры (GATEWAY, DEV, LOCAL_DNS, AMNEZIA_SERVER,
KILL_SWITCH_EXCEPTIONS) в /etc/ru-bypass.conf при каждом запуске, и читает их
оттуда при старте из systemd/NM dispatcher (без env). ENV-переменные имеют приоритет.

setup.sh: read -e -i для KS_EXCEPTIONS - редактирование значения инлайн вместо
показа текущего значения в скобках.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 12:14:47 +03:00
Виталий Никитенко
2079768318 fix: system-prompt через файл, кеш rate_limits при старте, SessionStart хук
- Все лаунчеры (ai-claude, ai-deepseek, ai-kimi, ai-openrouter): промпт
  пишется во временный файл через --system-prompt-file вместо аргумента
  командной строки. Решает E2BIG при промптах > 128KB (MAX_ARG_STRLEN)
  из проектов с большими .md файлами.

- statusline: кешируем rate_limits по model_id (раздельные файлы для
  claude/kimi/openrouter). При старте сессии показываем данные из кеша
  + ctx:0%. Убирает пустую статусную строку до первого запроса.

- settings.json: добавляем SessionStart хук при setup, триггерит
  вызов statusLine при открытии сессии.

- ai-claude: --model sonnet зафиксирован, убрали exec для корректной
  работы trap (cleanup временного файла).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 09:24:03 +03:00
Виталий Никитенко
beca4de9cd refactor: разделил AMNEZIA_SERVER и KILL_SWITCH_EXCEPTIONS
- AMNEZIA_SERVER — только IP/домены серверов Amnezia (для поднятия VPN)
- KILL_SWITCH_EXCEPTIONS — дополнительные исключения (git, etc.)
- Обе переменные поддерживают IP и домены (DNS-резолвинг)
- setup.sh: раздельные промпты в меню

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 07:01:51 +03:00
Виталий Никитенко
398e57c648 fix: kill switch не блокировал не-.ru трафик + Amnezia не могла подключиться
- ru-bypass.sh: добавлен ufw default deny outgoing (раньше нигде не выполнялся)
- ru-bypass.sh: добавлен ufw allow out on amn0 (разрешён трафик через VPN)
- ru-bypass.sh: поддержка AMNEZIA_SERVER — IP добавляется в ipset и маршруты
- ks-on.sh: default deny + allow amn0 при восстановлении kill switch
- setup.sh: меню запрашивает/сохраняет/передаёт AMNEZIA_SERVER
- test_network.sh: DEV читается из конфига вместо жёсткого wl[pi]

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 06:51:48 +03:00
2c8ff61968 feat: issue #9 — лог установки в ~/.config/ai-setup/setup.log
- setup.sh: функция _log(), вызов при каждом пункте меню
- scripts/ru-bypass.sh, ks-on.sh, ks-off.sh: пишут события в лог через USER_HOME
- setup.sh item 5: показывает tail -10 лога в «Последние события»
- USER_HOME передаётся через sudo env в ks-on/ks-off/ru-bypass

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 20:19:43 +03:00
7b0756bf96 fix: issue #5 — 5xx от API не блокирует запуск лаунчеров
_handle_api_response и _handle_openai_api_response теперь имеют явный case
для 5xx: предупреждают что сервер временно недоступен и продолжают (_API_RET=0).
Раньше 5xx попадал в wildcard → _API_RET=$code (non-zero) → exit 1.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 20:16:15 +03:00
3b591766e1 feat: issue #3 — проверка IPv6 leak при включении kill switch
- scripts/ks-on.sh: перед включением UFW проверяет глобальные IPv6 адреса,
  предлагает отключить IPv6 через sysctl если они есть
- setup.sh item 5: показывает статус IPv6 (отключён / активен с предупреждением)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 20:14:23 +03:00
6f623a5b3e feat: issue #2 — systemd timer для ежесуточного обновления RIPE-списка
ru-bypass.sh теперь при первом запуске устанавливает ru-bypass.timer
(OnCalendar=daily, Persistent=true). Timer запускает ru-bypass.service
раз в сутки и обновляет ipset + маршруты без ручного вмешательства.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 20:13:47 +03:00
7429802612 feat: issue #1 — DNS для *.loc через LOCAL_DNS + resolvectl
- setup.sh item 2: добавлен вопрос LOCAL_DNS (офисный DNS-сервер для *.loc)
  сохраняется в network_<hostname>.conf, передаётся в ru-bypass.sh через env
- scripts/ru-bypass.sh: добавлена переменная LOCAL_DNS, после RFC1918 маршрутов
  настраивает resolvectl dns/domain ~loc на интерфейсе DEV

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 20:13:18 +03:00
805951d920 feat: мастер-скрипт setup.sh + перенос скриптов в scripts/
- все скрипты перенесены в scripts/ (ai-setup.sh, ru-bypass.sh, ks-off.sh, ks-on.sh)
- setup.sh — новый мастер-скрипт с меню: шаги 1-2 отделены от опций 3-4
- пояснения к GATEWAY и DEV при выборе пункта 2
- ai-setup.sh: SCRIPT_DIR поднят на уровень выше (/../) чтобы находить home-configs/
- tests/test_fixes.sh, test_isolated.sh: пути обновлены на scripts/ai-setup.sh
- QUICK_START.md, README.md, home-configs/network/README.md: пути обновлены

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:47:26 +03:00