feat(xray-proxy): добавлена проверяемая установка Xray командой install

- Зачем:
  - пользователь без root должен получать проверенный бинарник Xray 26.3.27
    одной явной командой, без риска для живого managed-экземпляра.
- Что:
  - команда install [--replace]: пин 26.3.27, маппинг x86_64/aarch64,
    скачивание urllib + проверка SHA2-256 из официального четырёхзаписного
    .dgst, staging внутри ~/.local/bin и один атомарный os.replace;
  - границы размеров (64 MiB архив/бинарник, 4 KiB .dgst, счёт limit+1,
    сверка Content-Length) и guard managed-режима через start-lock;
  - типизированная StartLockBusyError, offline-тесты реального загрузчика
    через подмену urlopen, снапшоты дерева ФС в отказных путях;
  - README/спека обновлены, включая справку о последней версии с
    allowInsecure (25.12.8, удалена в 26.2.6); тикет 04 закрыт, леджер
    дополнен итогами эксперимента.
- Проверка:
  - PYTHONDONTWRITEBYTECODE=1 python3 -m unittest discover -s tests — 79 OK.
  - bash tests/test_proxy_launchers.sh — 8 PASS.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
ddadminandClaude Fable 5 committed 2026-07-20 13:46:33 -04:00
1 parent 90cc8456cd
commit 0432c4ae8a
7 files changed
+1266 -43

No files matched your search

+30 -6
View File
@@ -89,6 +89,7 @@ chmod 600 ~/.config/xray-proxy/default.url
## Команды
```bash
xray-proxy install [--replace]
xray-proxy status
xray-proxy start [-f PROFILE]
xray-proxy stop
@@ -101,12 +102,32 @@ pcodex [ARG...]
myip
```
`install` без root устанавливает единственную поддержанную версию Xray
`26.3.27` в `~/.local/bin/xray`. Для `x86_64`/`amd64` используется официальный
`Xray-linux-64.zip`, для `aarch64`/`arm64` — `Xray-linux-arm64-v8a.zip`.
Остальные архитектуры отклоняются. CLI скачивает рядом файл `.dgst`, проверяет
единственную запись `SHA2-256= <64 lowercase hex>` в официальном
четырёхстрочном формате, извлекает `xray` в закрытый временный каталог внутри
`~/.local/bin`, проверяет `xray version` и только затем атомарно меняет
назначение. Дубликаты, uppercase, пропущенные и лишние записи отклоняются.
Архив и извлечённый бинарник ограничены 64 MiB, `.dgst` — 4 KiB; объявленный
`Content-Length` должен точно совпадать с фактически прочитанным размером.
Существующая корректная версия `26.3.27` даёт успешный no-op без сети. Другой,
битый, неисполняемый файл или симлинк не заменяется без `--replace`; каталог не
заменяется никогда. Если после установки `PATH` выбирает не этот файл, команда
завершается с ошибкой и предлагает поставить `~/.local/bin` в начало `PATH`,
но проверенная установка сохраняется. Родительский симлинк принимается, только
если разрешённый каталог остаётся внутри `HOME`. Во время живого или
неподтверждённого managed-экземпляра установка запрещена: сначала выполните
`xray-proxy stop`.
Для `external` команды `status`, `env` и `run` проверяют настроенный адрес и
порт. Для `xray` они дополнительно требуют закрытое состояние именно того
супервизора и дочернего Xray, который запустил CLI. Один открытый порт или чужой
PID не принимается. `run` никогда не запускает Xray скрыто.
`start` поддерживает Xray `25.12.8` и `26.3.27`, сначала выполняет
`start` поддерживает только Xray `26.3.27`, сначала выполняет
`xray version` и `xray run -test`, затем остаётся на переднем плане. Используйте
отдельную панель tmux. После готовности один loopback-порт принимает HTTP и
SOCKS. `stop` ограниченно ждёт завершения супервизора и Xray, очищает служебные
@@ -134,11 +155,14 @@ export PROXY_PREFLIGHT_TIMEOUT=2
Xray 26.3.27 использует `pcs` и `vcn`, а устаревшие `allowInsecure` и
`insecure` не переносит. Истинное legacy-значение даёт предупреждение, но
обычная проверка сертификата остаётся включённой. Xray 25.12.8 предназначен
только для явной старой совместимости: согласованное `true` переносится как
`allowInsecure=true` с предупреждением об отключённой проверке сертификата;
`pcs` и `vcn` для этой версии запрещены. Автоматического перехода между
версиями или типами прокси нет.
обычная проверка сертификата остаётся включённой. Автоматического перехода
между версиями или типами прокси нет.
Для справки при ручном конфигурировании: последняя версия Xray, где
`allowInsecure` ещё применяется, —
[25.12.8](https://github.com/XTLS/Xray-core/releases/tag/v25.12.8); опция
удалена в [26.2.6](https://github.com/XTLS/Xray-core/releases/tag/v26.2.6).
CLI такие версии не поддерживает и не устанавливает.
Сводка скрывает UUID и ключи. Содержимое XHTTP `path` не показывается — только
его длина. Сгенерированный JSON и состояние лежат в закрытом каталоге