84 lines
5.3 KiB
Markdown
84 lines
5.3 KiB
Markdown
# VPnBot Xray patches
|
||
|
||
Этот репозиторий хранит только наши изменения для Xray-core. Полной копии
|
||
чужого проекта здесь нет: `scripts/prepare-source.sh` получает точный тег из
|
||
официального [`XTLS/Xray-core`](https://github.com/XTLS/Xray-core), проверяет
|
||
его commit и последовательно накладывает три файла из `patches/`.
|
||
|
||
Патчи добавляют capability-маркер `vpnbot-active-revoke-v3`. Он означает, что
|
||
после удаления пользователя через Xray API закрываются уже установленные
|
||
VLESS, Trojan, VMess и Shadowsocks-сессии этого пользователя. Обычный
|
||
официальный Xray запрещает только новые подключения; поэтому до принятия этого
|
||
механизма upstream-проектом VPnBot не может безопасно устанавливать чистый
|
||
официальный бинарник на платные узлы.
|
||
|
||
## Граница источников
|
||
|
||
- чужой исходный код загружается только из официального GitHub XTLS;
|
||
- Forgejo хранит наши патчи, проверки, сборочные сценарии и готовые релизы;
|
||
- тег и commit upstream закреплены в `upstream.env` для ручной сборки, а
|
||
автоматический выпуск создаёт отдельный build-env с теми же строгими
|
||
проверками;
|
||
- SHA-256 каждого патча закреплён в `patches/series`;
|
||
- Actions заново применяет патчи к официальному исходнику, запускает профильные
|
||
тесты и собирает три Linux-архива, которые используются VPnBot.
|
||
|
||
## Автоматические dev-релизы
|
||
|
||
Workflow `Follow official Xray dev releases` каждые шесть часов проверяет
|
||
официальные GitHub Releases `XTLS/Xray-core`. Официальный prerelease/dev-тег
|
||
для него является нормальным входом, но не становится стабильным релизом
|
||
VPnBot сразу.
|
||
|
||
Цепочка разделена на два состояния:
|
||
|
||
1. Actions разрешает тег в точный официальный commit, применяет патчи, запускает
|
||
unit- и real-process-тесты, собирает архивы и публикует Forgejo prerelease с
|
||
суффиксом `-candidate.1`.
|
||
2. Root-only таймер на production-хосте устанавливает точный кандидат на
|
||
выделенный canary-узел, проверяет живую конфигурацию и запускает изолированный
|
||
VLESS-сценарий с двумя непрерывными потоками. После удаления пользователя A
|
||
поток A должен закрыться не позднее 10 секунд, а поток B — продолжить
|
||
работу.
|
||
3. Только после этого создаётся обычный `proven`-релиз. Его файлы копируются из
|
||
candidate без пересборки и поэтому имеют ровно те же SHA-256.
|
||
|
||
Стабильные Xray-updater-таймеры на узлах используют канал `stable`: они
|
||
игнорируют `prerelease=true` и видят только proven-релизы. При конфликте патча,
|
||
падении теста, недоступном canary или неуспешном отзыве новый stable-релиз не
|
||
создаётся.
|
||
|
||
Каждый candidate содержит `vpnbot-xray-release-manifest.json` с официальным
|
||
тегом/commit, SHA-256 патчей и архивов. Proven дополнительно содержит
|
||
`vpnbot-xray-pilot-proof.json`, то есть машинно проверяемый отчёт живого пилота.
|
||
Полная модель состояний, гонок и rollback описана в
|
||
[`docs/2026-08-07-automatic-dev-release-plan.md`](docs/2026-08-07-automatic-dev-release-plan.md).
|
||
|
||
Production-компонент устанавливается от root:
|
||
|
||
```bash
|
||
scripts/install_promoter.sh
|
||
```
|
||
|
||
Перед включением таймера нужен runtime-файл
|
||
`/etc/vpnbot-xray-release-promoter.env` по примеру из `systemd/` и root-only
|
||
Forgejo-токен с областью `write:repository`. Токен, SSH-ключ и состояние пилота
|
||
не хранятся в Git.
|
||
|
||
## Локальная проверка
|
||
|
||
```bash
|
||
scripts/test-patches.sh
|
||
scripts/build-release.sh ./release-assets
|
||
```
|
||
|
||
Для подготовки исходного дерева без сборки:
|
||
|
||
```bash
|
||
scripts/prepare-source.sh ./xray-with-vpnbot-patches
|
||
```
|
||
|
||
Каталоги назначения должны отсутствовать или быть пустыми.
|
||
|
||
Исходный Xray-core и изменённые файлы распространяются по Mozilla Public
|
||
License 2.0. Полный текст лицензии находится в `LICENSE`.
|