refactor(proxy-client): убрать избыточную защиту из CLI и тестов
- Проверка «тот ли процесс»: /proc/PID/exe для Xray и cmdline для супервизора вместо boot_id, времени старта и разбора argv; нет больше состояния «не удалось подтвердить, удалите файлы вручную». - Установка Xray: SHA-256 и атомарная замена остаются; без ограничений размера, строгого разбора .dgst и блокировки на время установки. - Разбор ссылки: extra — обычный json.loads; allowInsecure/insecure игнорируются с предупреждением. - Ошибки о файлах называют полный путь и готовую команду (chmod 600 для профиля, rm для битого state.json). - Тесты: разбор ссылок — табличные без запуска процессов, по одному запуску на сценарий управляемого Xray; без подмены внутренних функций. Код 1569 → 925 строк, тесты 2479 → 895, прогон 63 → 9 с. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
06ca4ab0c6
commit
a5db265f47
4 files changed
+1064
-3271
No files matched your search
+385
-1029
File diff suppressed because it is too large.
Load diff
+41
-20
@@ -19,13 +19,16 @@ CLI требует Python 3.8+ и использует только станда
|
||||
~/src/proxy-client/install.sh
|
||||
```
|
||||
|
||||
При наличии Stow установщик использует его, иначе создаёт те же три симлинка
|
||||
напрямую: CLI, Bash-модуль и каталог шаблонов. Исходный каталог после установки
|
||||
нельзя перемещать: домашние ссылки зависят от его постоянного пути.
|
||||
Установщик создаёт три ссылки на исходный каталог: CLI, Bash-модуль и каталог
|
||||
шаблонов. Поэтому исходный каталог после установки нельзя перемещать. Если
|
||||
какой-то из путей уже занят чужим файлом или ссылкой, установщик ничего не
|
||||
меняет и перечисляет все такие пути. Повторный запуск безопасен.
|
||||
|
||||
По умолчанию установщик добавляет в `~/.bashrc` помеченный блок для
|
||||
`~/.local/bin` и Bash-модуля. После установки откройте новый Bash или примените
|
||||
блок в текущей сессии:
|
||||
По умолчанию установщик дописывает в `~/.bashrc` блок между строками
|
||||
`# >>> proxy-client >>>` и `# <<< proxy-client <<<`: он добавляет
|
||||
`~/.local/bin` в `PATH` и подключает Bash-модуль. Если блок уже есть, файл не
|
||||
меняется. После установки откройте новый Bash или примените блок в текущей
|
||||
сессии:
|
||||
|
||||
```bash
|
||||
source ~/.bashrc
|
||||
@@ -73,6 +76,12 @@ source ~/.bash_custom
|
||||
Если `~/.local/bin` отсутствует в `PATH` и в новых сессиях, добавьте ту же строку
|
||||
`export` в свой Bash-конфиг: корневой установщик dotfiles его не изменяет.
|
||||
|
||||
Проверить пакет после правок (из корня dotfiles):
|
||||
|
||||
```bash
|
||||
tests/test_proxy_client_full.sh
|
||||
```
|
||||
|
||||
## Как выбирается прокси
|
||||
|
||||
Режим определяется только машинным файлом
|
||||
@@ -253,8 +262,13 @@ proxy-client stop
|
||||
плане. Systemd, фоновый автозапуск и скрытый запуск из `run` не используются.
|
||||
Один loopback-порт принимает HTTP CONNECT и SOCKS5.
|
||||
|
||||
`stop` завершает управляемые процессы и удаляет созданные служебные файлы. Он
|
||||
работает и после изменения машинного типа на `external`.
|
||||
Остановить Xray можно двумя способами: `Ctrl+C` в окне `start` или
|
||||
`proxy-client stop` из любого терминала. Оба гасят Xray и удаляют служебные
|
||||
файлы. Если процесс `start` был убит (например, закрыли окно tmux), Xray может
|
||||
остаться работать: `status` и `env` тогда сообщат об ошибке, а `stop` добьёт его
|
||||
и уберёт файлы. `stop` работает и после изменения машинного типа на `external`.
|
||||
|
||||
Второй `start`, пока первый работает, завершится ошибкой.
|
||||
|
||||
## Диагностика
|
||||
|
||||
@@ -343,7 +357,8 @@ source ~/.config/proxy-client/shell.bash
|
||||
|
||||
Поддерживаются VLESS TCP/RAW с REALITY и VLESS XHTTP с TLS. Неизвестные,
|
||||
повторные и несовместимые query-параметры отклоняются. XHTTP поддерживает ALPN
|
||||
`http/1.1`, `h2` и `h3`; `extra` должен быть JSON-объектом без повторных ключей.
|
||||
`http/1.1`, `h2` и `h3`; `extra` должен быть JSON-объектом, его содержимое
|
||||
проверяет `xray run -test`.
|
||||
|
||||
Кроме `encryption=none`, принимается VLESS-шифрование
|
||||
`encryption=mlkem768x25519plus.…` из новых ссылок Hiddify; остальную часть
|
||||
@@ -351,9 +366,9 @@ source ~/.config/proxy-client/shell.bash
|
||||
`flow=xtls-rprx-vision`. Косая черта перед параметрами (`…:443/?type=…`)
|
||||
допустима, другой путь в ссылке — нет.
|
||||
|
||||
Xray 26.3.27 использует `pcs` и `vcn`, а устаревшие `allowInsecure` и
|
||||
`insecure` не переносит. Истинное legacy-значение даёт предупреждение, но
|
||||
обычная проверка сертификата остаётся включённой.
|
||||
Xray 26.3.27 использует `pcs` и `vcn`. Устаревшие `allowInsecure` и `insecure`
|
||||
принимаются с любым значением, но не переносятся: при значении `1` или `true`
|
||||
выводится предупреждение, а сертификат проверяется обычным способом.
|
||||
|
||||
Последняя версия Xray, где `allowInsecure` ещё применяется, —
|
||||
[25.12.8](https://github.com/XTLS/Xray-core/releases/tag/v25.12.8); опция
|
||||
@@ -366,14 +381,18 @@ Xray 26.3.27 использует `pcs` и `vcn`, а устаревшие `allow
|
||||
`x86_64`/`amd64` используется `Xray-linux-64.zip`, для `aarch64`/`arm64` —
|
||||
`Xray-linux-arm64-v8a.zip`; остальные архитектуры отклоняются.
|
||||
|
||||
CLI скачивает официальный архив и файл `.dgst`, проверяет SHA-256, ограничения
|
||||
размера и фактическую версию бинарника, а затем атомарно заменяет назначение.
|
||||
Корректная уже установленная версия даёт no-op без сети. Другой файл или симлинк
|
||||
не заменяется без `--replace`; каталог не заменяется никогда.
|
||||
CLI скачивает официальный архив и файл `.dgst`, сверяет SHA-256 и фактическую
|
||||
версию бинарника, а затем атомарно заменяет назначение. При любой ошибке старый
|
||||
файл остаётся на месте. Если нужная версия уже установлена, сеть не нужна и
|
||||
ничего не меняется. Другой файл или симлинк не заменяется без `--replace`
|
||||
(симлинк заменяется сам, файл по ссылке не трогается); каталог не заменяется
|
||||
никогда. Если после установки `PATH` находит другой `xray`, `install` сообщает об
|
||||
ошибке и подсказывает команду.
|
||||
|
||||
Устанавливать можно и при работающем Xray: он продолжит работу со старым файлом,
|
||||
а `install` напомнит перезапустить `start`.
|
||||
|
||||
`start` использует первый `xray` из `PATH` и принимает только версию 26.3.27.
|
||||
Если `PATH` выбирает другой бинарник, команда сообщает об ошибке. Во время
|
||||
живого или неподтверждённого управляемого процесса установка запрещена.
|
||||
|
||||
### Файлы и безопасность
|
||||
|
||||
@@ -385,6 +404,8 @@ CLI скачивает официальный архив и файл `.dgst`, п
|
||||
| `$XDG_STATE_HOME/proxy-client/` или `~/.local/state/proxy-client/` | Состояние и сгенерированный JSON |
|
||||
|
||||
Сводка скрывает UUID и ключи, а для XHTTP показывает только длину `path`.
|
||||
Служебный каталог закрыт для других пользователей и очищается после штатной
|
||||
остановки Xray. Сбой определения внешнего IP показывается как предупреждение и
|
||||
Если файл профиля доступен другим пользователям, `start` не запустится и
|
||||
покажет готовую команду `chmod 600` для конечного файла (у симлинка — для файла,
|
||||
на который он указывает). Служебный каталог закрыт для других пользователей
|
||||
(`700`, файлы в нём — `600`) и очищается после остановки Xray. Сбой определения внешнего IP показывается как предупреждение и
|
||||
не останавливает уже готовый процесс.
|
||||
+412
-1159
File diff suppressed because it is too large.
Load diff
+226
-1063
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user