chore: убрать VLESS-прокси, proxychains и fuck-rkn.sh
Пользователь перешёл на Amnezia VPN — встроенный VLESS-прокси (xray + proxychains4) и отдельный server-installer fuck-rkn.sh (telemt + xray) больше не нужны. Убран весь код в ai-setup.sh/setup.sh, конфиги с VPN-кредами, неактуальный тест и упоминания в документации. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
bash setup.sh
|
bash setup.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
Спросит про VLESS-прокси (по умолчанию `Y`; если не нужен, ответь `n`), затем установит лаунчеры
|
Установит лаунчеры
|
||||||
`ai-claude`, `ai-gpt`, `ai-deepseek`, `ai-kimi`, `ai-glm`, `ai-openrouter`, `ai-opencode`, `ai-gemini`, `ai-cursor`
|
`ai-claude`, `ai-gpt`, `ai-deepseek`, `ai-kimi`, `ai-glm`, `ai-openrouter`, `ai-opencode`, `ai-gemini`, `ai-cursor`
|
||||||
в `~/bin`, если он уже есть в `PATH`, иначе в `~/.local/bin/`, и запишет API-ключи.
|
в `~/bin`, если он уже есть в `PATH`, иначе в `~/.local/bin/`, и запишет API-ключи.
|
||||||
|
|
||||||
|
|||||||
24
README.md
24
README.md
@@ -10,7 +10,6 @@
|
|||||||
setup.sh # мастер-скрипт с меню
|
setup.sh # мастер-скрипт с меню
|
||||||
scripts/
|
scripts/
|
||||||
├── ai-setup.sh # устанавливает AI-инструменты в выбранный BIN_DIR
|
├── ai-setup.sh # устанавливает AI-инструменты в выбранный BIN_DIR
|
||||||
├── fuck-rkn.sh # серверный установщик nginx + telemt + xray
|
|
||||||
├── ru-bypass.sh # .ru трафик напрямую, kill switch для остального
|
├── ru-bypass.sh # .ru трафик напрямую, kill switch для остального
|
||||||
├── ks-off.sh # временно отключить kill switch
|
├── ks-off.sh # временно отключить kill switch
|
||||||
└── ks-on.sh # восстановить kill switch
|
└── ks-on.sh # восстановить kill switch
|
||||||
@@ -20,12 +19,8 @@ home-configs/
|
|||||||
│ ├── hooks/ # хуки аккаунтов Claude Code
|
│ ├── hooks/ # хуки аккаунтов Claude Code
|
||||||
│ ├── skills/ # кастомные скиллы для Claude Code (и Gemini)
|
│ ├── skills/ # кастомные скиллы для Claude Code (и Gemini)
|
||||||
│ └── statusline-command.sh # статусная строка Claude Code
|
│ └── statusline-command.sh # статусная строка Claude Code
|
||||||
├── network/
|
└── network/
|
||||||
│ └── README.md # подробная документация по сетевой настройке
|
└── README.md # подробная документация по сетевой настройке
|
||||||
├── vless/
|
|
||||||
│ └── servers.conf # список VLESS-серверов для прокси
|
|
||||||
└── proxychains/
|
|
||||||
└── proxychains-xray.conf # конфиг proxychains (SOCKS5 через xray)
|
|
||||||
tests/
|
tests/
|
||||||
├── test_fixes.sh # юнит-тесты структуры ai-setup.sh
|
├── test_fixes.sh # юнит-тесты структуры ai-setup.sh
|
||||||
└── test_network.sh # тесты маршрутизации
|
└── test_network.sh # тесты маршрутизации
|
||||||
@@ -210,20 +205,6 @@ android init
|
|||||||
- Android CLI находится в preview, API/команды могут меняться.
|
- Android CLI находится в preview, API/команды могут меняться.
|
||||||
- На Windows в v0.7 отключена команда `android emulator`.
|
- На Windows в v0.7 отключена команда `android emulator`.
|
||||||
- Если уже установлен Android Studio, Android CLI может использовать тот же SDK или создать новый в `~/.android/sdk`. Проверяй активный путь через `android info`.
|
- Если уже установлен Android Studio, Android CLI может использовать тот же SDK или создать новый в `~/.android/sdk`. Проверяй активный путь через `android info`.
|
||||||
- Android CLI - нативный бинарь, который спавнит дочерние процессы (emulator, gradle, adb), поэтому он не оборачивается в `proxychains4`.
|
|
||||||
|
|
||||||
## VLESS / Xray (опционально)
|
|
||||||
|
|
||||||
При запуске `scripts/ai-setup.sh` спрашивает, нужен ли VLESS-прокси для AI API запросов.
|
|
||||||
|
|
||||||
Если выбрать **Y**:
|
|
||||||
- Читает список серверов из `home-configs/vless/servers.conf`
|
|
||||||
- Проверяет каждый сервер реальным curl'ом через SOCKS5
|
|
||||||
- Устанавливает Xray, генерирует конфиг, создаёт systemd сервис
|
|
||||||
- Все лаунчеры оборачиваются в `proxychains4`
|
|
||||||
|
|
||||||
Если выбрать **n** - VLESS отключается, xray останавливается, системный/Firefox прокси
|
|
||||||
сбрасываются в direct. IPv6 включается обратно только если UFW kill switch не активен.
|
|
||||||
|
|
||||||
## Ключи и конфиги
|
## Ключи и конфиги
|
||||||
|
|
||||||
@@ -265,7 +246,6 @@ GPT/claude-code-proxy backend; текущие лаунчеры его напря
|
|||||||
- `bash`, `curl`, `python3`
|
- `bash`, `curl`, `python3`
|
||||||
- Node.js/npm (для ai-gpt через Codex CLI и ai-gemini через agy)
|
- Node.js/npm (для ai-gpt через Codex CLI и ai-gemini через agy)
|
||||||
- `ipset` (устанавливается автоматически при запуске ru-bypass.sh)
|
- `ipset` (устанавливается автоматически при запуске ru-bypass.sh)
|
||||||
- (опционально) `proxychains-ng` - для VLESS-режима
|
|
||||||
- (опционально) `gsettings` - для автонастройки системного прокси GNOME
|
- (опционально) `gsettings` - для автонастройки системного прокси GNOME
|
||||||
|
|
||||||
## Тесты
|
## Тесты
|
||||||
|
|||||||
@@ -80,7 +80,6 @@ android update
|
|||||||
- **Preview-версия**: API и команды могут меняться. Обновляй через `android update`.
|
- **Preview-версия**: API и команды могут меняться. Обновляй через `android update`.
|
||||||
- **Windows**: `android emulator` отключён в v0.7.
|
- **Windows**: `android emulator` отключён в v0.7.
|
||||||
- **Существующий SDK**: если уже установлен Android Studio или `sdkmanager`, Android CLI может использовать тот же SDK или создать новый в `~/.android/sdk`. Проверяй активный путь через `android info`.
|
- **Существующий SDK**: если уже установлен Android Studio или `sdkmanager`, Android CLI может использовать тот же SDK или создать новый в `~/.android/sdk`. Проверяй активный путь через `android info`.
|
||||||
- **Прокси**: Android CLI - нативный бинарь, который спавнит дочерние процессы (emulator, gradle, adb). Не оборачивай его в `proxychains4`, это может сломать child-процессы.
|
|
||||||
|
|
||||||
## Полезные ссылки
|
## Полезные ссылки
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
# ProxyChains-NG config for xray SOCKS5 proxy
|
|
||||||
strict_chain
|
|
||||||
proxy_dns
|
|
||||||
remote_dns_subnet 224
|
|
||||||
tcp_read_time_out 15000
|
|
||||||
tcp_connect_time_out 8000
|
|
||||||
|
|
||||||
[ProxyList]
|
|
||||||
socks5 127.0.0.1 1080
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
# VLESS servers — один URL на строку
|
|
||||||
# Имя после # используется для отображения в меню выбора
|
|
||||||
vless://495ac855-d718-4581-8344-f1e62105a904@92.118.8.29:443?encryption=mlkem768x25519plus.native.0rtt.gNGR8kO_UDWjoeer_TenoRbA09ajfrSfahqkS4q0dTeCFutCHGJjIdhSl8Fv8HyYUyWB_2GqMrSIzLS9l1BiidClOnliyUmZylQwQoUFl6CsLsZxdrrDz3w2isuIhtXPfZw8lANOErk7p7mm4QN0H2ZKCOQQaxkL3XA8EcxqNuGhK4XLqlFBDommPJUQfPuP7LV3V7s8YTcwq1EUr-Nyv0CZRdcF9WCNCWq26TVYXFwHSkeknBBFKYEJiytB8DpIvlmTvREQfEVnTziwOdYKikQXeOYdbcuKSWGb2okDZjFzYckULaWhavOwRWnOquZqdXiatrNPmCWnG2mfcSxA0UdLu8ALiOtuPjBGDUqqaXhZLLuH1zhdsUE4PMqqkNnMvsRwmvAYgWwSKWioz3wTQ1sKVfW1jTh8LyouZaVkuqRTunwWBcVCRDYEFUh4TBB_-WOpu7eh4ROmj9w0mhWBrtRO-uin8ZwqhkeScQhwoFUEvlwCsAl8AevGmAm1qpdOzfXNUgBTtVoXG9OTMUk9ZORiTzO0tutVTlKjaiBb1vOqgiFqiPuG1csvaPt63LQ1e9ywvEek7NkLVnrJopmCnTiu9UhE7GwZbxI8FBFYrBmPpIUszLiWLQZqvySbqBrIFTC5lIw9WymdW5wKONs5DZmYtFZOHUVEFtVFJvcZqwnEJARKI_M-rvkS7FWPPCkKHpEVe_IJsgOgoUzI9yQI5kNlS5XAzUG7ZMGWtzYjOZNZ1FYP5NbBTTy9I8kpLRQv3yp7PYBGdBQapaYX82Qjc4orJdghG5UOTQwsokojPVaAzSWG4qk5hoNugvogx9KHdsitKXCDlhdksQS5Obc8uMg1TxO2c0AnR2nNNVqgb_prVUlaNHcP4wARfCqrMwdgYQSSoLZluah9a2eZxGcC6CMxPBsThCEwNzIJUZiuPIvEQVFyJpiCHeUErGZFLpmaE0MK2cEzD9N7pRVgEExvwIMnO3jIGmCz80FFuAmEjDG5iyMkzQpsEnBHwAaihjkSwgCsZzTL26OtIDUUYMZ1N8ciRRqTvSGzn_K6EUp7JaWygZGw3QCBRocO7SEWpuGvakJc0QV32vpty3c8UeIcJZlgGKgtcNcsVYvLpEkkYviNCbpq6jnECRYUuXGp_oQv1mwqx2WMqGic7LVZNtYCJ3fHAsGi4yh5nfU0dNSCC0cgeyakNXvL3eyqHIB_e8RrEiMywUg7_MGP2oE9ZOqayLRapVTGQ-YATgcnZ_Eg5bKHNcRVqBpo0heElCtMPoEdQYE_HZSOm1cf9nFIYqRJ6_RPJNKGDOBwy1wJWJel54y-CeY3S2vAWRibOFiwVGW01tHNSCEQBaiLEzQ2Xml6IkSAHNm9eifPrdxuBChibzco4dUFpumbxrRkJYAuqmQfWgi36ziojeEDLlUd55ZDeCOVn4MoHMcD4yzAkpdUelyBafeUoQEs6hCDf2p7CvCquWKoEzcwvuccR0GcN5un2sqQAMVKw3Gs3fsRwkgcdsK69oE4KfUKVjrBGkIk9ChYCJMYGZJ-pGkWFp1qLua2QnNmPVJlpPjurRJVoiAiOVE&security=reality&sni=www.amd.com&fp=chrome&pbk=AMoGtXyztJYD6GRP6m8K82Mi-5vthrNrppJkEmconTU&sid=9cd28fd258f8b99c&type=xhttp&path=%2F&mode=auto#RF-VPS1
|
|
||||||
vless://91749001-1f60-4afb-b7b5-25d1480de980@194.87.213.143:443?encryption=mlkem768x25519plus.native.0rtt.D4eIFKFhlMVUsInLgmx5lWuTpBJ8B3lEWnA4gCKdZgw1rjlvHsWd38rC35BAQeKSeBmbZ_sIk6w1gzCCAcYKlJN8rMZyr4TEecnADumEI0e05fRcYCXH70BdHnJxkhklzUIwAKyZHmwlk7euozhYinwq-piRuEBvl0NS-tITgOaje8jLuMyrBTnBKBtzwDR43aMsDqZhzRi-qIaiy0GXjEgHmypFIFB3EOdmCukbvgyJuBAbttTHqdCedQCeJTNfs3tzmzqFKuJXVGRvAvipWGqC_4hzlTWaVXBiuysAmGMC0oqERTyUS9qKqytOr_oyu-jPzjCdIUTPAjdpw4kzXEiuetAuZNuwdbRAHAB_DadVIAsqyVapNIVP0UlN-PJE95pAS6Yfpru2uIBWcJZhV7LE2FKBtAcC31lHeVKy12pG_NlZopYltcmdacVeXBRd1wURrrDFNNTCKaG5wAFm3HFYrzY6qZfNanebgQeYIQm3rbbGGCLBYLyHxcmKeuWVIMTJlISicHdnNyok7KJ2gWKTWtREkfQMXrZKF8BeiSp-9FQX_UCwx0LMd0axB8hqCVtpGspbH8ugKamFr4olFyKrUdQuLhEM1_xzNgZT3dWhvCxDw1VOp3qMd6G4X4YhnABioLOPl2JEyjOLMdAFRlRrdXnNpJdTA0esrJFw5Mte2gNYDAgWEFoq5uupAZlYwniB69BCeEouQiU0GYdWkxwAqwy8xtCEs9Wi4RGPBmdZnhOb5LMUBACwvFm_haF5zgwDrTmUZWdKhXMDXOMOdrcQaDvMf3uk64Q6obe47hkn1LFQS5mKOYYAjblg1RV0y1ovWtFSVBuuCsckyNUPSjETKthQQ6OUgZmpN-pMlBgzGzi3rowqdjNzrMh894ufrptX2GBqEANIM3h5HkR2ObIlJdOv6rQRnmu09EVKp7BHAVLKJcJff9HJYWIqUueArllu5IivueGPG5gPMDIp5SoHVvk_eCMUY2lLtxEE1PCjbgt8ahKTQLcFCXmJf7h945F4jOsDLCxiBSSxaMZdK5AiGGcQm-mcQ4aXBLgiHLCfD3SU7UzIF9key8u35bBm2OVjyTWei-AOssdVV2qFMppuF7Myv4GaEMpQ1JGaLpxT9zSSdVqbO6aJNBkkFxJhcnWqm8CMWVkaGubHkSeDInS65_KFe6I8IrZVm9lBThN1mvdqWkCvZ_ooRiChX7hNKTAXH9cgW-OaOTY1eissDkmW2FEGcPU5iRcDY5kgubZYgTSaHKFAIqg-6NIQX1l3d6lx41EkwyKUCWU-zfjBGsdgszjHXykOrcNQ75o_M3k_-_IBdkOpaESrhSsj2bdNUVcx7fx1S2d6STiLIrW--WeoeBhb6BcytgkbnlRlmvfNDZbOTJYzXQLJtCRZv3xJyfcEB0UqvKFIaCtN4ubHTpyRZ5PHtYHDh9lmIASIItMqeXQlazktz-cajiOFX8RCIkcDFkZ-0KpmYiBToVpi-zSjdLCPPVMf14V5kqAP6EA1IiTJPwFuroWluOJ5j8mx4c0i8fbd1n_mTH_7Ff8Ognu-LFLBU9r9yWcVhBkm_JQ&security=reality&sni=vkvideo.ru&fp=chrome&pbk=BWwAjxuB6QbC2ta23L8_U4QjjkUs17NDi79Mm2RjQHQ&sid=17c863e8490260b6&type=xhttp&path=%2F&mode=packet-up#RF-Bridge-PQ
|
|
||||||
vless://f3f3d573-5440-425c-a13c-203b34a9279f@202.148.54.122:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.samsung.com&fp=chrome&pbk=aTBwueWs3WYoxA0M051KZn3hr2EogEULd3GOdvl7x0Y&sid=5a0048d376dc1c00#AmneziaVPN
|
|
||||||
vless://40ee74ff-9865-498a-b464-12fa6a3772fe@45.43.91.139:853?encryption=mlkem768x25519plus.native.0rtt.TZBtUoTBrKNMXKtza2TElwtqc9W_zgAJEDcxH1fBEwQgbZCAXHgK9edzewlVFSBK3zK2p4IZ6hsESffCSOesy4Mll_CKPiY0kFGCV-yNl6w45eav7RUhDOuiPBrHR3hC-bgH4xoClLajDfG7nHu2ecppcsEedkt7MLSacYI3EsJ-rKa-vbN3vgI5w8ZtunFF-PYVRJuYrbw711RwbcO_AWfPt1J25ZhVcxQ5CWufWXG1XLtaZLdk-2cmKsiVIgcr6tOIYIuh8XULoCVh5rsjwlcH4slu4cYGGgxwNIg7C_wYs8zLyvKWgBUL0UwctTyNbxChWktTuWaGRnS27PJbdbJ6T9gTzMsWh3dbVnlGZbIjbJMe3NAvVOJUhGOQ7NpEP9x9wgVzO-dUJQkOwKAoDfAtvbRIAaRg_5w20ZRy0sutSwUCoKtUfxCxB4CwcSmFgqWRrsvHNTy2U7We6GibAwy90iiC3sGCVSM69XcN1xirfVVGRbAMrfk0DehWNAvQFHFNkThvi0qh-1Q3p4YK6EWhgswTqmMbM2iOTQA_KaxUQKwfPnIfCBMIuTBdFDYOMyyvZayFq4Ul62vEMvUOCQCHL7WtdzhVR5cdquggX3C4Zzutlug_n4q2jLt2ldYvAwEMErPOlSq2DKmIcWFE5YWSjUhYxvg76rOEK_WSSGNrtrO5n6eRFtiIyaxXPxEhjsFdoLMekDSdhZWyhwa3-9Vqf_xDgrs2CMlOkpQbIvqe92QkVdWzhWeulBu4XGsnOVCivvvLrUBfGDs9FrCYGLEtOLtMlHcny1tXjdjEVkejrvOcOTCvxKoidTzJVsVi2Oxn9VGfO6TOURvP4KwsDDVZbgUgAYqfBbkrnpNhaaZFuoYw-7GuZawl8LyOy8SU9NQesDt4YUZ3MrWcHwALrKqCD3OSf0wzq0N-BDY6frAQf8W3KSO8ivKfxMQhN5xPfSuTlRivWuq1lpEjFiqi-vZF-ZkVA9qRWmyXRfaUYcKqqQFoO5Ks0FuainJmxPocseUIxVF3qCINQLsaxVgWITAcWOOZV4m021Yy2LxnwcubRUkDHPGvIocQE8JF7fpAWVqjAxwT7oCHiHRf6WtzEHhCWZx7y9tR-AV4_XgZNEwRj7DM-kdztDl78Wg9E7Ze9lnK3UCXPxQf9THOd_wqQ0aF5bkwf_qqj0klX9WphfBvPzVuI0lmVeWPDKyqVDqCw4An8oFB7bxt_lPDzIOInvB5U8hXUuMjsQS6iEcSSHcfqed8adcKvzTCK6JcjLCTyImVS3hsxMOC9qFMtDpmsxcNdFphlZc9ODjGgZtVLYLIYka-JKQWPgC2R-s8H6EU0ymjIhsmdMe93KyHAcC3anpUKTu9oSk5sthVFhB0l2RCpSKlWOhFG8RkAspKWYlu-DGC3ROvnbJojjpGkpDFEWoVnzWQ8VK5hcxSeFQ17auDWMKBkDuhR1ciVURnCBBVO1FEGvGGVyAbYoUri8moPeZ8jNBvztFZiahBeWQBsxQcA9C78Yus34S2aOwCfHVQ9hN2slx5tPY5abR_EwhyS4NhAZ7how7k0Fds42glbOE&security=reality&sni=www.amd.com&fp=chrome&pbk=3PdVmi-ZFgQpvTD8Tj4ubL1kicezogKf7-qkMLfjxxw&sid=846683ae0dde8bd1&type=xhttp&path=%2F&mode=auto#EURO-Reality-PQ
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
{
|
|
||||||
"inbounds": [
|
|
||||||
{
|
|
||||||
"port": 1080,
|
|
||||||
"listen": "127.0.0.1",
|
|
||||||
"protocol": "socks",
|
|
||||||
"settings": {
|
|
||||||
"udp": true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"port": 2080,
|
|
||||||
"listen": "127.0.0.1",
|
|
||||||
"protocol": "http"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outbounds": [
|
|
||||||
{
|
|
||||||
"protocol": "vless",
|
|
||||||
"settings": {
|
|
||||||
"vnext": [
|
|
||||||
{
|
|
||||||
"address": "92.118.8.29",
|
|
||||||
"port": 443,
|
|
||||||
"users": [
|
|
||||||
{
|
|
||||||
"id": "495ac855-d718-4581-8344-f1e62105a904",
|
|
||||||
"encryption": "mlkem768x25519plus.native.0rtt.gNGR8kO_UDWjoeer_TenoRbA09ajfrSfahqkS4q0dTeCFutCHGJjIdhSl8Fv8HyYUyWB_2GqMrSIzLS9l1BiidClOnliyUmZylQwQoUFl6CsLsZxdrrDz3w2isuIhtXPfZw8lANOErk7p7mm4QN0H2ZKCOQQaxkL3XA8EcxqNuGhK4XLqlFBDommPJUQfPuP7LV3V7s8YTcwq1EUr-Nyv0CZRdcF9WCNCWq26TVYXFwHSkeknBBFKYEJiytB8DpIvlmTvREQfEVnTziwOdYKikQXeOYdbcuKSWGb2okDZjFzYckULaWhavOwRWnOquZqdXiatrNPmCWnG2mfcSxA0UdLu8ALiOtuPjBGDUqqaXhZLLuH1zhdsUE4PMqqkNnMvsRwmvAYgWwSKWioz3wTQ1sKVfW1jTh8LyouZaVkuqRTunwWBcVCRDYEFUh4TBB_-WOpu7eh4ROmj9w0mhWBrtRO-uin8ZwqhkeScQhwoFUEvlwCsAl8AevGmAm1qpdOzfXNUgBTtVoXG9OTMUk9ZORiTzO0tutVTlKjaiBb1vOqgiFqiPuG1csvaPt63LQ1e9ywvEek7NkLVnrJopmCnTiu9UhE7GwZbxI8FBFYrBmPpIUszLiWLQZqvySbqBrIFTC5lIw9WymdW5wKONs5DZmYtFZOHUVEFtVFJvcZqwnEJARKI_M-rvkS7FWPPCkKHpEVe_IJsgOgoUzI9yQI5kNlS5XAzUG7ZMGWtzYjOZNZ1FYP5NbBTTy9I8kpLRQv3yp7PYBGdBQapaYX82Qjc4orJdghG5UOTQwsokojPVaAzSWG4qk5hoNugvogx9KHdsitKXCDlhdksQS5Obc8uMg1TxO2c0AnR2nNNVqgb_prVUlaNHcP4wARfCqrMwdgYQSSoLZluah9a2eZxGcC6CMxPBsThCEwNzIJUZiuPIvEQVFyJpiCHeUErGZFLpmaE0MK2cEzD9N7pRVgEExvwIMnO3jIGmCz80FFuAmEjDG5iyMkzQpsEnBHwAaihjkSwgCsZzTL26OtIDUUYMZ1N8ciRRqTvSGzn_K6EUp7JaWygZGw3QCBRocO7SEWpuGvakJc0QV32vpty3c8UeIcJZlgGKgtcNcsVYvLpEkkYviNCbpq6jnECRYUuXGp_oQv1mwqx2WMqGic7LVZNtYCJ3fHAsGi4yh5nfU0dNSCC0cgeyakNXvL3eyqHIB_e8RrEiMywUg7_MGP2oE9ZOqayLRapVTGQ-YATgcnZ_Eg5bKHNcRVqBpo0heElCtMPoEdQYE_HZSOm1cf9nFIYqRJ6_RPJNKGDOBwy1wJWJel54y-CeY3S2vAWRibOFiwVGW01tHNSCEQBaiLEzQ2Xml6IkSAHNm9eifPrdxuBChibzco4dUFpumbxrRkJYAuqmQfWgi36ziojeEDLlUd55ZDeCOVn4MoHMcD4yzAkpdUelyBafeUoQEs6hCDf2p7CvCquWKoEzcwvuccR0GcN5un2sqQAMVKw3Gs3fsRwkgcdsK69oE4KfUKVjrBGkIk9ChYCJMYGZJ-pGkWFp1qLua2QnNmPVJlpPjurRJVoiAiOVE",
|
|
||||||
"flow": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"streamSettings": {
|
|
||||||
"network": "xhttp",
|
|
||||||
"security": "reality",
|
|
||||||
"realitySettings": {
|
|
||||||
"serverName": "www.amd.com",
|
|
||||||
"fingerprint": "chrome",
|
|
||||||
"publicKey": "AMoGtXyztJYD6GRP6m8K82Mi-5vthrNrppJkEmconTU",
|
|
||||||
"shortId": "9cd28fd258f8b99c"
|
|
||||||
},
|
|
||||||
"xhttpSettings": {
|
|
||||||
"path": "/",
|
|
||||||
"mode": "auto"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
@@ -53,260 +53,6 @@ else
|
|||||||
warn "jq не найден. statusline-command.sh и некоторые функции могут не работать."
|
warn "jq не найден. statusline-command.sh и некоторые функции могут не работать."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── VLESS URL parser ───────────────────────────────────────────
|
|
||||||
# Принимает vless:// URL, устанавливает переменные VL_*
|
|
||||||
parse_vless_url() {
|
|
||||||
local url="$1"
|
|
||||||
eval "$(python3 -c "
|
|
||||||
import urllib.parse, sys
|
|
||||||
|
|
||||||
url = sys.argv[1]
|
|
||||||
rest = url[8:] # strip 'vless://'
|
|
||||||
|
|
||||||
at_pos = rest.index('@')
|
|
||||||
uuid = rest[:at_pos]
|
|
||||||
rest = rest[at_pos+1:]
|
|
||||||
|
|
||||||
colon_pos = rest.index(':')
|
|
||||||
q_pos = rest.index('?')
|
|
||||||
host = rest[:colon_pos]
|
|
||||||
port = rest[colon_pos+1:q_pos]
|
|
||||||
|
|
||||||
rest = rest[q_pos+1:]
|
|
||||||
hash_pos = rest.index('#') if '#' in rest else len(rest)
|
|
||||||
qs = rest[:hash_pos]
|
|
||||||
name = rest[hash_pos+1:] if '#' in rest else ''
|
|
||||||
|
|
||||||
params = urllib.parse.parse_qs(qs)
|
|
||||||
def get(p, default=''):
|
|
||||||
vals = params.get(p, [default])
|
|
||||||
return vals[0] if vals else default
|
|
||||||
|
|
||||||
flow = get('flow')
|
|
||||||
vtype = get('type')
|
|
||||||
if not vtype:
|
|
||||||
vtype = 'xhttp' if not flow else 'tcp'
|
|
||||||
spx_default = '' if vtype == 'tcp' else '/'
|
|
||||||
|
|
||||||
print(f'VL_UUID={uuid}')
|
|
||||||
print(f'VL_ADDRESS={host}')
|
|
||||||
print(f'VL_PORT={port}')
|
|
||||||
print(f'VL_ENCRYPTION={get(\"encryption\")}')
|
|
||||||
print(f'VL_FLOW={flow}')
|
|
||||||
print(f'VL_SECURITY={get(\"security\")}')
|
|
||||||
print(f'VL_SNI={get(\"sni\")}')
|
|
||||||
print(f'VL_FP={get(\"fp\", \"chrome\")}')
|
|
||||||
print(f'VL_PBK={get(\"pbk\")}')
|
|
||||||
print(f'VL_SID={get(\"sid\")}')
|
|
||||||
print(f'VL_TYPE={vtype}')
|
|
||||||
print(f'VL_PATH={urllib.parse.unquote(get(\"path\", \"/\"))}')
|
|
||||||
print(f'VL_MODE={get(\"mode\", \"auto\")}')
|
|
||||||
print(f'VL_SPX={get(\"spx\", spx_default)}')
|
|
||||||
print(f'VL_NAME={name}')
|
|
||||||
" "$url")"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── VLESS connectivity test ────────────────────────────────────
|
|
||||||
# Запускает xray с тестовым конфигом и проверяет curl'ом
|
|
||||||
# Возвращает: "ok" или "fail"
|
|
||||||
test_vless_server() {
|
|
||||||
local url="$1" test_port="$2"
|
|
||||||
|
|
||||||
parse_vless_url "$url"
|
|
||||||
|
|
||||||
# Генерируем временный конфиг
|
|
||||||
_TMP_CONF="/tmp/xray_test_${test_port}.json"
|
|
||||||
_VL_XHTTP=""
|
|
||||||
if [ "$VL_TYPE" = "xhttp" ]; then
|
|
||||||
_VL_XHTTP=$(printf ',\n "xhttpSettings": {\n "path": "%s",\n "mode": "%s"\n }' "$VL_PATH" "$VL_MODE")
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat > "$_TMP_CONF" << XRAYEOF
|
|
||||||
{
|
|
||||||
"log": { "loglevel": "none" },
|
|
||||||
"inbounds": [
|
|
||||||
{
|
|
||||||
"port": $test_port,
|
|
||||||
"listen": "127.0.0.1",
|
|
||||||
"protocol": "socks",
|
|
||||||
"settings": { "udp": true }
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outbounds": [
|
|
||||||
{
|
|
||||||
"protocol": "vless",
|
|
||||||
"settings": {
|
|
||||||
"vnext": [
|
|
||||||
{
|
|
||||||
"address": "$VL_ADDRESS",
|
|
||||||
"port": $VL_PORT,
|
|
||||||
"users": [
|
|
||||||
{
|
|
||||||
"id": "$VL_UUID",
|
|
||||||
"encryption": "$VL_ENCRYPTION",
|
|
||||||
"flow": "$VL_FLOW"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"streamSettings": {
|
|
||||||
"network": "$VL_TYPE",
|
|
||||||
"security": "$VL_SECURITY",
|
|
||||||
"realitySettings": {
|
|
||||||
"serverName": "$VL_SNI",
|
|
||||||
"fingerprint": "$VL_FP",
|
|
||||||
"publicKey": "$VL_PBK",
|
|
||||||
"shortId": "$VL_SID",
|
|
||||||
"spiderX": "$VL_SPX"
|
|
||||||
}$_VL_XHTTP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
XRAYEOF
|
|
||||||
|
|
||||||
# Запускаем xray
|
|
||||||
/usr/local/bin/xray run -c "$_TMP_CONF" >/dev/null 2>&1 &
|
|
||||||
local xpid=$!
|
|
||||||
sleep 2
|
|
||||||
|
|
||||||
# Тест через SOCKS5
|
|
||||||
local result="fail"
|
|
||||||
if curl --socks5 "127.0.0.1:${test_port}" --max-time 5 -s https://ifconfig.co/ >/dev/null 2>&1; then
|
|
||||||
result="ok"
|
|
||||||
fi
|
|
||||||
|
|
||||||
kill $xpid 2>/dev/null; wait $xpid 2>/dev/null
|
|
||||||
rm -f "$_TMP_CONF"
|
|
||||||
echo "$result"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ── 0. Выбор режима работы VLESS (on / off / skip) ─────────────
|
|
||||||
# AI_SETUP_VLESS:
|
|
||||||
# 1 / on — включить VLESS (установка xray + proxychains + обёртки лаунчеров)
|
|
||||||
# 0 / off — отключить VLESS (откат: stop xray, сброс прокси, IPv6 on)
|
|
||||||
# skip — НЕ трогать сеть (умолчание). Лаунчеры синхронизируются
|
|
||||||
# с текущим состоянием (xray активен?).
|
|
||||||
# Устанавливается из меню setup.sh. По умолчанию skip, чтобы прямой запуск
|
|
||||||
# ai-setup.sh и пункты 1/7/8 не меняли сетевые настройки.
|
|
||||||
DO_VLESS_INSTALL=0
|
|
||||||
case "${AI_SETUP_VLESS:-skip}" in
|
|
||||||
1|on)
|
|
||||||
USE_VLESS=1
|
|
||||||
DO_VLESS_INSTALL=1
|
|
||||||
|
|
||||||
# Читаем список серверов
|
|
||||||
_VL_URLS=()
|
|
||||||
_VL_LABELS=()
|
|
||||||
_SERVERS_FILE="$SCRIPT_DIR/home-configs/vless/servers.conf"
|
|
||||||
|
|
||||||
if [ ! -f "$_SERVERS_FILE" ]; then
|
|
||||||
err "Файл servers.conf не найден: $_SERVERS_FILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
while IFS= read -r line || [[ -n "$line" ]]; do
|
|
||||||
[[ "$line" =~ ^[[:space:]]*# ]] && continue
|
|
||||||
[[ -z "$line" ]] && continue
|
|
||||||
_vl_rest="${line#vless://}"
|
|
||||||
_vl_rest="${_vl_rest#*@}"
|
|
||||||
_vl_ip="${_vl_rest%%:*}"
|
|
||||||
_vl_name="${line##*#}"
|
|
||||||
[[ "$_vl_name" == "$line" ]] && _vl_name=""
|
|
||||||
_VL_URLS+=("$line")
|
|
||||||
_VL_LABELS+=("$_vl_ip ($_vl_name)")
|
|
||||||
done < "$_SERVERS_FILE"
|
|
||||||
|
|
||||||
if [ "${#_VL_URLS[@]}" -eq 0 ]; then
|
|
||||||
err "Нет VLESS серверов в $_SERVERS_FILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Реальная проверка VLESS (запускаем xray для каждого сервера)
|
|
||||||
echo ""
|
|
||||||
info "Проверяю VLESS-доступность серверов..."
|
|
||||||
_VL_STATUS=()
|
|
||||||
for i in "${!_VL_URLS[@]}"; do
|
|
||||||
_label="${_VL_LABELS[$i]}"
|
|
||||||
_test_port=$((10980 + i))
|
|
||||||
printf " %-45s" "$((i+1))) $_label"
|
|
||||||
_status=$(test_vless_server "${_VL_URLS[$i]}" "$_test_port")
|
|
||||||
if [ "$_status" = "ok" ]; then
|
|
||||||
echo -e "${GREEN}✓ работает${NC}"
|
|
||||||
_VL_STATUS+=("ok")
|
|
||||||
else
|
|
||||||
echo -e "${RED}✗ не работает${NC}"
|
|
||||||
_VL_STATUS+=("fail")
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
read -r -p "Выбери сервер [1-${#_VL_URLS[@]}]: " _vl_choice
|
|
||||||
_vl_choice="${_vl_choice:-1}"
|
|
||||||
if ! [[ "$_vl_choice" =~ ^[0-9]+$ ]] || [ "$_vl_choice" -lt 1 ] || [ "$_vl_choice" -gt "${#_VL_URLS[@]}" ]; then
|
|
||||||
err "Неверный выбор: $_vl_choice"
|
|
||||||
fi
|
|
||||||
|
|
||||||
_VL_SELECTED="${_VL_URLS[$((_vl_choice-1))]}"
|
|
||||||
parse_vless_url "$_VL_SELECTED"
|
|
||||||
info "Выбран: $VL_ADDRESS ($VL_NAME)"
|
|
||||||
;;
|
|
||||||
0|off)
|
|
||||||
USE_VLESS=0
|
|
||||||
DO_VLESS_INSTALL=0
|
|
||||||
info "Отключение VLESS (откат настроек)"
|
|
||||||
|
|
||||||
# ── Откат всех настроек vless ──────────────────────────────
|
|
||||||
info "Откатываю настройки прокси..."
|
|
||||||
|
|
||||||
# Останавливаем и отключаем xray
|
|
||||||
sudo systemctl stop xray 2>/dev/null || true
|
|
||||||
sudo systemctl disable xray 2>/dev/null || true
|
|
||||||
success "xray остановлен и отключён"
|
|
||||||
|
|
||||||
# Системный прокси → none
|
|
||||||
if command -v gsettings &>/dev/null; then
|
|
||||||
gsettings set org.gnome.system.proxy mode 'none' 2>/dev/null || true
|
|
||||||
success "Системный прокси отключён"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Firefox → direct (type=0)
|
|
||||||
FIREFOX_PROFILE=""
|
|
||||||
if [ -d "$HOME/snap/firefox/common/.mozilla/firefox" ]; then
|
|
||||||
FIREFOX_PROFILE=$(find "$HOME/snap/firefox/common/.mozilla/firefox" -name "*.default*" -type d | head -1)
|
|
||||||
elif [ -d "$HOME/.mozilla/firefox" ]; then
|
|
||||||
FIREFOX_PROFILE=$(find "$HOME/.mozilla/firefox" -name "*.default*" -type d | head -1)
|
|
||||||
fi
|
|
||||||
if [ -n "$FIREFOX_PROFILE" ]; then
|
|
||||||
cat > "$FIREFOX_PROFILE/user.js" << 'FJSEOF'
|
|
||||||
user_pref("network.proxy.type", 0);
|
|
||||||
FJSEOF
|
|
||||||
success "Firefox переключён на прямой доступ"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Включаем IPv6 обратно (только если kill switch не активен)
|
|
||||||
if ufw status | grep -qE "активен|active"; then
|
|
||||||
info "UFW kill switch активен — оставляю IPv6 отключённым"
|
|
||||||
else
|
|
||||||
sudo rm -f /etc/sysctl.d/99-disable-ipv6.conf
|
|
||||||
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0 2>/dev/null || true
|
|
||||||
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0 2>/dev/null || true
|
|
||||||
sudo systemctl restart systemd-resolved 2>/dev/null || true
|
|
||||||
success "IPv6 восстановлен"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# skip — сеть не трогаем; синхронизируем лаунчеры с текущим состоянием xray
|
|
||||||
if systemctl is-active --quiet xray 2>/dev/null; then
|
|
||||||
USE_VLESS=1
|
|
||||||
info "Сеть не трогаю. VLESS активен — лаунчеры будут с proxychains4."
|
|
||||||
else
|
|
||||||
USE_VLESS=0
|
|
||||||
info "Сеть не трогаю. VLESS не активен — прямые лаунчеры."
|
|
||||||
fi
|
|
||||||
info "Управление VLESS: пункт 9 (включить / отключить)."
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# ── 1. npm prefix в домашнюю папку ──────────────────────────
|
# ── 1. npm prefix в домашнюю папку ──────────────────────────
|
||||||
info "Настраиваю npm prefix..."
|
info "Настраиваю npm prefix..."
|
||||||
mkdir -p "$NPM_GLOBAL"
|
mkdir -p "$NPM_GLOBAL"
|
||||||
@@ -334,175 +80,6 @@ else
|
|||||||
warn "Node.js не найден. Некоторые функции могут не работать."
|
warn "Node.js не найден. Некоторые функции могут не работать."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ── 2.5. proxychains-ng + xray (только при включении VLESS) ──
|
|
||||||
if [ "$DO_VLESS_INSTALL" -eq 1 ]; then
|
|
||||||
info "Проверяю proxychains-ng..."
|
|
||||||
if ! command -v proxychains4 &>/dev/null; then
|
|
||||||
info "Устанавливаю proxychains-ng (нужен sudo)..."
|
|
||||||
if command -v apt-get &>/dev/null; then
|
|
||||||
sudo apt-get install -y proxychains-ng
|
|
||||||
elif command -v dnf &>/dev/null; then
|
|
||||||
sudo dnf install -y proxychains-ng
|
|
||||||
else
|
|
||||||
warn "Не удалось установить proxychains-ng автоматически. Установите вручную."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if command -v proxychains4 &>/dev/null; then
|
|
||||||
success "proxychains4 найден"
|
|
||||||
else
|
|
||||||
warn "proxychains4 не найден. Продолжаю без проксирования."
|
|
||||||
fi
|
|
||||||
|
|
||||||
info "Устанавливаю xray..."
|
|
||||||
|
|
||||||
# Останавливаем старый процесс (мог остаться от предыдущей установки)
|
|
||||||
sudo systemctl stop xray 2>/dev/null || true
|
|
||||||
|
|
||||||
XRAY_VERSION="26.3.27"
|
|
||||||
XRAY_ARCH="64"
|
|
||||||
XRAY_URL="https://github.com/XTLS/Xray-core/releases/download/v${XRAY_VERSION}/Xray-linux-${XRAY_ARCH}.zip"
|
|
||||||
|
|
||||||
TMPDIR=$(mktemp -d)
|
|
||||||
curl -fsSL "$XRAY_URL" -o "$TMPDIR/xray.zip"
|
|
||||||
unzip -q "$TMPDIR/xray.zip" -d "$TMPDIR"
|
|
||||||
sudo install -m 755 "$TMPDIR/xray" /usr/local/bin/xray
|
|
||||||
rm -rf "$TMPDIR"
|
|
||||||
|
|
||||||
sudo mkdir -p /etc/xray
|
|
||||||
|
|
||||||
# xhttpSettings — только для xhttp-транспорта
|
|
||||||
_VL_XHTTP=""
|
|
||||||
if [ "$VL_TYPE" = "xhttp" ]; then
|
|
||||||
_VL_XHTTP=$(printf ',\n "xhttpSettings": {\n "path": "%s",\n "mode": "%s"\n }' "$VL_PATH" "$VL_MODE")
|
|
||||||
fi
|
|
||||||
|
|
||||||
sudo tee /etc/xray/config.json > /dev/null << XRAYEOF
|
|
||||||
{
|
|
||||||
"log": { "loglevel": "warning" },
|
|
||||||
"inbounds": [
|
|
||||||
{
|
|
||||||
"port": 1080,
|
|
||||||
"listen": "127.0.0.1",
|
|
||||||
"protocol": "socks",
|
|
||||||
"settings": { "udp": true }
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"port": 2080,
|
|
||||||
"listen": "127.0.0.1",
|
|
||||||
"protocol": "http"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"outbounds": [
|
|
||||||
{
|
|
||||||
"protocol": "vless",
|
|
||||||
"settings": {
|
|
||||||
"vnext": [
|
|
||||||
{
|
|
||||||
"address": "$VL_ADDRESS",
|
|
||||||
"port": $VL_PORT,
|
|
||||||
"users": [
|
|
||||||
{
|
|
||||||
"id": "$VL_UUID",
|
|
||||||
"encryption": "$VL_ENCRYPTION",
|
|
||||||
"flow": "$VL_FLOW"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"streamSettings": {
|
|
||||||
"network": "$VL_TYPE",
|
|
||||||
"security": "$VL_SECURITY",
|
|
||||||
"realitySettings": {
|
|
||||||
"serverName": "$VL_SNI",
|
|
||||||
"fingerprint": "$VL_FP",
|
|
||||||
"publicKey": "$VL_PBK",
|
|
||||||
"shortId": "$VL_SID",
|
|
||||||
"spiderX": "$VL_SPX"
|
|
||||||
}$_VL_XHTTP
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
XRAYEOF
|
|
||||||
sudo chmod 644 /etc/xray/config.json
|
|
||||||
|
|
||||||
sudo tee /etc/systemd/system/xray.service > /dev/null << 'SVCEOF'
|
|
||||||
[Unit]
|
|
||||||
Description=Xray Service
|
|
||||||
After=network.target
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
ExecStart=/usr/local/bin/xray run -c /etc/xray/config.json
|
|
||||||
Restart=on-failure
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=multi-user.target
|
|
||||||
SVCEOF
|
|
||||||
|
|
||||||
# Удаляем чужие drop-in оверрайды (могут переопределять ExecStart на старый конфиг)
|
|
||||||
sudo rm -rf /etc/systemd/system/xray.service.d/
|
|
||||||
# Удаляем старый дефолтный конфиг xray из других путей
|
|
||||||
sudo rm -rf /usr/local/etc/xray/
|
|
||||||
|
|
||||||
sudo systemctl daemon-reload
|
|
||||||
sudo systemctl enable --now xray
|
|
||||||
success "xray установлен и запущен"
|
|
||||||
|
|
||||||
# ── Отключение IPv6 (VLESS не тянет IPv6, браузеры зависают) ──
|
|
||||||
info "Отключаю IPv6 на уровне системы..."
|
|
||||||
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
|
|
||||||
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
|
|
||||||
sudo tee /etc/sysctl.d/99-disable-ipv6.conf > /dev/null << 'SYSCTEOF'
|
|
||||||
# Отключение IPv6 — требуется для стабильной работы VLESS/xray
|
|
||||||
net.ipv6.conf.all.disable_ipv6=1
|
|
||||||
net.ipv6.conf.default.disable_ipv6=1
|
|
||||||
SYSCTEOF
|
|
||||||
sudo systemctl restart systemd-resolved
|
|
||||||
success "IPv6 отключён, DNS-кэш очищен"
|
|
||||||
|
|
||||||
cp "$SCRIPT_DIR/home-configs/proxychains/proxychains-xray.conf" "$HOME/.proxychains-xray.conf"
|
|
||||||
success "Proxychains конфиг обновлён"
|
|
||||||
|
|
||||||
# ── Настройка Firefox на SOCKS5 + remote DNS ────────────────
|
|
||||||
info "Настраиваю Firefox на SOCKS5 прокси..."
|
|
||||||
FIREFOX_PROFILE=""
|
|
||||||
if [ -d "$HOME/snap/firefox/common/.mozilla/firefox" ]; then
|
|
||||||
FIREFOX_PROFILE=$(find "$HOME/snap/firefox/common/.mozilla/firefox" -name "*.default*" -type d | head -1)
|
|
||||||
elif [ -d "$HOME/.mozilla/firefox" ]; then
|
|
||||||
FIREFOX_PROFILE=$(find "$HOME/.mozilla/firefox" -name "*.default*" -type d | head -1)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "$FIREFOX_PROFILE" ]; then
|
|
||||||
cat > "$FIREFOX_PROFILE/user.js" << 'FJSEOF'
|
|
||||||
user_pref("network.proxy.type", 1);
|
|
||||||
user_pref("network.proxy.socks", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.socks_port", 1080);
|
|
||||||
user_pref("network.proxy.socks_remote_dns", true);
|
|
||||||
user_pref("network.proxy.http", "");
|
|
||||||
user_pref("network.proxy.http_port", 0);
|
|
||||||
user_pref("network.proxy.ssl", "");
|
|
||||||
user_pref("network.proxy.ssl_port", 0);
|
|
||||||
FJSEOF
|
|
||||||
success "Firefox настроен на SOCKS5 (профиль: $FIREFOX_PROFILE)"
|
|
||||||
else
|
|
||||||
warn "Firefox не найден, пропускаю настройку прокси"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ── Настройка системного прокси (для Chrome/Chromium) ───────
|
|
||||||
info "Настраиваю системный прокси..."
|
|
||||||
if command -v gsettings &>/dev/null; then
|
|
||||||
gsettings set org.gnome.system.proxy mode 'manual' 2>/dev/null || true
|
|
||||||
gsettings set org.gnome.system.proxy.http host '127.0.0.1' 2>/dev/null || true
|
|
||||||
gsettings set org.gnome.system.proxy.http port 2080 2>/dev/null || true
|
|
||||||
gsettings set org.gnome.system.proxy.socks host '127.0.0.1' 2>/dev/null || true
|
|
||||||
gsettings set org.gnome.system.proxy.socks port 1080 2>/dev/null || true
|
|
||||||
success "Системный прокси настроен (HTTP 2080 + SOCKS 1080)"
|
|
||||||
else
|
|
||||||
warn "gsettings не найден, пропускаю настройку системного прокси"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ── 3. Claude Code ───────────────────────────────────────────
|
# ── 3. Claude Code ───────────────────────────────────────────
|
||||||
info "Проверяю Claude Code..."
|
info "Проверяю Claude Code..."
|
||||||
if ! command -v claude &>/dev/null; then
|
if ! command -v claude &>/dev/null; then
|
||||||
@@ -2320,21 +1897,6 @@ claude --dangerously-skip-permissions --system-prompt-file "$_PROMPT_FILE" "$@"
|
|||||||
OPENCODEEOF
|
OPENCODEEOF
|
||||||
chmod +x "$BIN_DIR/ai-opencode"
|
chmod +x "$BIN_DIR/ai-opencode"
|
||||||
|
|
||||||
# ── 8.5. Proxychains инъекция (только в режиме vless) ────────
|
|
||||||
if [ "$USE_VLESS" -eq 1 ]; then
|
|
||||||
info "Включаю proxychains4 в ai-лаунчеры..."
|
|
||||||
sed -i 's/^exec "\$codex_bin"/exec proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" "\$codex_bin"/' "$BIN_DIR/ai-gpt"
|
|
||||||
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-deepseek"
|
|
||||||
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-kimi"
|
|
||||||
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-glm"
|
|
||||||
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-openrouter"
|
|
||||||
sed -i 's|^\([[:space:]]*\)"\$agy_bin" --dangerously-skip-permissions "\$@"|\1proxychains4 -f "\$HOME/.proxychains-xray.conf" "\$agy_bin" --dangerously-skip-permissions "\$@"|' "$BIN_DIR/ai-gemini"
|
|
||||||
sed -i 's|^\([[:space:]]*\)"\$cursor_bin" --force "\$@"|\1proxychains4 -f "\$HOME/.proxychains-xray.conf" "\$cursor_bin" --force "\$@"|' "$BIN_DIR/ai-cursor"
|
|
||||||
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-claude"
|
|
||||||
sed -i 's/^claude --dangerously-skip-permissions/proxychains4 -f "\$HOME\/\.proxychains-xray\.conf" claude --dangerously-skip-permissions/' "$BIN_DIR/ai-opencode"
|
|
||||||
success "proxychains4 интегрирован"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Подготавливаем изолированные config dir'ы для Claude Code-лаунчеров,
|
# Подготавливаем изолированные config dir'ы для Claude Code-лаунчеров,
|
||||||
# чтобы hooks (/switch-account, /add-account) и settings.json были на месте
|
# чтобы hooks (/switch-account, /add-account) и settings.json были на месте
|
||||||
# ещё до первого запуска пользователем.
|
# ещё до первого запуска пользователем.
|
||||||
|
|||||||
1909
scripts/fuck-rkn.sh
1909
scripts/fuck-rkn.sh
File diff suppressed because it is too large
Load Diff
22
setup.sh
22
setup.sh
@@ -25,7 +25,6 @@ if command -v whiptail >/dev/null 2>&1; then
|
|||||||
"6" "Проверить сеть (маршрутизация, geo)" \
|
"6" "Проверить сеть (маршрутизация, geo)" \
|
||||||
"7" "Обновить (git pull + перегенерация скриптов)" \
|
"7" "Обновить (git pull + перегенерация скриптов)" \
|
||||||
"8" "Android CLI (установить Google Android CLI)" \
|
"8" "Android CLI (установить Google Android CLI)" \
|
||||||
"9" "VLESS: настроить встроенный прокси (включить / отключить)" \
|
|
||||||
3>&1 1>&2 2>&3) || exit 0
|
3>&1 1>&2 2>&3) || exit 0
|
||||||
echo ""
|
echo ""
|
||||||
else
|
else
|
||||||
@@ -64,10 +63,7 @@ else
|
|||||||
echo -e " ${BLD}8) Android CLI${CLR}"
|
echo -e " ${BLD}8) Android CLI${CLR}"
|
||||||
echo -e " ${GRY}Установить Google Android CLI для Android-разработки.${CLR}"
|
echo -e " ${GRY}Установить Google Android CLI для Android-разработки.${CLR}"
|
||||||
echo ""
|
echo ""
|
||||||
echo -e " ${BLD}9) VLESS${CLR}"
|
echo -n "Выбери [1-8] или Enter для выхода: "
|
||||||
echo -e " ${GRY}Включить или отключить встроенный VLESS-прокси для AI API запросов.${CLR}"
|
|
||||||
echo ""
|
|
||||||
echo -n "Выбери [1-9] или Enter для выхода: "
|
|
||||||
read -r choice
|
read -r choice
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
@@ -76,7 +72,7 @@ fi
|
|||||||
|
|
||||||
case "$choice" in
|
case "$choice" in
|
||||||
1)
|
1)
|
||||||
AI_SETUP_VLESS=skip bash scripts/ai-setup.sh
|
bash scripts/ai-setup.sh
|
||||||
;;
|
;;
|
||||||
2)
|
2)
|
||||||
echo -e "${GRY}Нужно указать параметры твоей локальной сети:${CLR}"
|
echo -e "${GRY}Нужно указать параметры твоей локальной сети:${CLR}"
|
||||||
@@ -228,20 +224,10 @@ case "$choice" in
|
|||||||
git -C "$REPO_DIR" pull --ff-only
|
git -C "$REPO_DIR" pull --ff-only
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${BLD}Перегенерация скриптов...${CLR}"
|
echo -e "${BLD}Перегенерация скриптов...${CLR}"
|
||||||
AI_SETUP_VLESS=skip bash "$REPO_DIR/scripts/ai-setup.sh"
|
bash "$REPO_DIR/scripts/ai-setup.sh"
|
||||||
;;
|
;;
|
||||||
8)
|
8)
|
||||||
AI_SETUP_VLESS=skip bash scripts/ai-setup.sh
|
bash scripts/ai-setup.sh
|
||||||
;;
|
|
||||||
9)
|
|
||||||
echo -n "Включить VLESS-прокси? [Y/n] "
|
|
||||||
read -r _vless_choice
|
|
||||||
_vless_choice="${_vless_choice:-Y}"
|
|
||||||
if [[ "$_vless_choice" =~ ^[Yy]$ ]]; then
|
|
||||||
AI_SETUP_VLESS=1 bash scripts/ai-setup.sh
|
|
||||||
else
|
|
||||||
AI_SETUP_VLESS=0 bash scripts/ai-setup.sh
|
|
||||||
fi
|
|
||||||
;;
|
;;
|
||||||
"")
|
"")
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -188,14 +188,6 @@ test_android_symlink_to_bin_dir() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
test_no_proxychains_for_android() {
|
|
||||||
if grep -q 'proxychains4.*android' "$SCRIPT"; then
|
|
||||||
fail "android-cli: should not be wrapped in proxychains4 (breaks child processes)"
|
|
||||||
else
|
|
||||||
ok "android-cli: not wrapped in proxychains4"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
test_android_skill_exists() {
|
test_android_skill_exists() {
|
||||||
skill_file="$(cd "$(dirname "$0")/.." && pwd)/home-configs/claude/skills/android-cli/SKILL.md"
|
skill_file="$(cd "$(dirname "$0")/.." && pwd)/home-configs/claude/skills/android-cli/SKILL.md"
|
||||||
if [ -f "$skill_file" ]; then
|
if [ -f "$skill_file" ]; then
|
||||||
@@ -265,7 +257,6 @@ test_fix7_trap_tmp
|
|||||||
test_android_cli_install_url
|
test_android_cli_install_url
|
||||||
test_android_init_called
|
test_android_init_called
|
||||||
test_android_symlink_to_bin_dir
|
test_android_symlink_to_bin_dir
|
||||||
test_no_proxychains_for_android
|
|
||||||
test_android_skill_exists
|
test_android_skill_exists
|
||||||
test_opencode_claude_launcher
|
test_opencode_claude_launcher
|
||||||
test_opencode_routatic_proxy
|
test_opencode_routatic_proxy
|
||||||
|
|||||||
Reference in New Issue
Block a user