Files
3X-UI_autoVPS/FORK.md
T

7.6 KiB
Raw Blame History

Форк 3X-UI KIT (hacker07)

Это личный форк 3X-UI KIT: наш код живёт рядом с кодом автора и не ломается, когда автор обновляет свой. Здесь описано, как это устроено и что делать после каждого обновления автора.

Что где лежит

Что Где Правит
Наши доработки (команды, хуки) scripts/kit-local.sh только мы
Описание «швов» в коде автора tools/fork_apply.py только мы
Синхронизация с автором и проверки tools/fork-sync.sh только мы
Файлы автора (scripts/kit.sh, scripts/3x-ui.sh, …) как есть только автор

Ключевая идея: в файлах автора мы правим только «швы» — несколько констант и одну строку подключения. Всё, что мы дописываем по существу, лежит в нашем файле, которого автор не знает. Швы описаны в одном месте (tools/fork_apply.py) и накатываются только на чистое дерево автора; если автор изменил нужную строку — инструмент останавливается и говорит об этом, а не делает полу-патч.

Ветки

  • upstream — точная копия ветки автора (main), только вперёд.
  • dev — наша сборка: upstream + швы + наш файл. Из неё делаются релизы.
  • релизы — теги v<номера>; номер = <версия автора>.<наш уровень> (например, автор 1.2 → наш первый релиз 1.2.1, следующий наш — 1.2.2, после релиза автора 1.3 — 1.3.1).

Номер обязан строго расти: на серверах kit update не принимает откат назад.

Обновление автора (по шагам)

cd H:/My_Proj/Fork_3X-UI_KIT
bash tools/fork-sync.sh            # подтянуть автора, перенести наши правки, прогнать проверки
#  при конфликте — разобрать его вручную, инструмент сам ничего не публикует

bash tools/release.sh ~/.ssh/3x-ui-kit-fork/release_key   # SHA256SUMS + подпись нашим ключом
git add -A && git commit -m "Релиз v$(cat VERSION): швы форка + подпись"
git tag v$(cat VERSION)
git push origin dev v$(cat VERSION) upstream

Установка и обновление из этого репозитория

# установка одной командой (рекомендую): наш релиз, подпись проверяется до запуска установщика,
# в конце — закрытие ping, автообновления безопасности, kit fix и kit check
bash <(curl -fsSL https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v1.2.3/scripts/3x-ui-local.sh) --domain vpn.example.com

# то же, но без защиты (--no-harden) и с добавлением второго порта SSH
bash <(curl -fsSL …/scripts/3x-ui-local.sh) --sni dl.google.com --no-harden --ssh-port 2222

# только установщик автора, без наших дополнений
bash <(curl -fsSL https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/branch/main/scripts/3x-ui.sh)

# обновление уже стоящего сервера (тянет наш релиз и проверяет нашу подпись)
kit update --force && kit check

Внутри kit источником файлов служит KIT_RAW/kit_ref_raw() — они указывают на этот репозиторий, а подпись релиза проверяется ключом из KIT_SIGNERS (только ключ форка).

Подпись релизов

  • Открытая часть ключа — tools/fork-signer.pub и в KIT_SIGNERS (в scripts/kit.sh).
  • Закрытая часть — только на рабочей станции владельца (~/.ssh/3x-ui-kit-fork/release_key), с паролем; в репозиторий, CI и на серверы не попадает. Кто получит ключ — получит root на всех серверах, которые обновляются из этого репозитория.
  • Смена ключа: подпиши новый релиз старым ключом, иначе серверы его не примут.

Наши команды

kit local help      # справка по дополнениям форка
kit local version   # версия, источник обновлений, дата сборки нашего файла
kit local channel   # откуда берутся обновления и чем проверяется подпись
kit local seams     # какие швы форка сейчас в установленном /usr/local/bin/kit
kit local masking   # состояние маскировки
kit local hardening # сводка по защите сервера

# защита сервера (поведение из StressOzz/vps-setup, сделано безопаснее)
kit local ssh 2222          # добавить порт SSH (прежние продолжают работать)
kit local ssh --close-old 2222   # закрыть прежние порты после проверки
kit local ping off          # не отвечать на ping (правилом ufw)
kit local upgrades on       # автообновления безопасности
kit local passwd --generate # сменить пароль root и показать его один раз

У любой правки можно добавить --dry-run — покажет план и ничего не изменит.

Грабли, о которых стоит помнить

  1. Ночное автообновление (kit-update.timer, 03:00) перезаписывает /usr/local/bin/kit подписанным релизом из настроенного репозитория. Поэтому канал обновления и швы — один шаг: сервер должен смотреть в этот репозиторий, иначе наши правки исчезнут ночью.
  2. Переводы строк. Релиз подписывается по контрольным суммам файлов в рабочей копии, а сервер сверяет их с файлами из Gitea. При core.autocrlf=true суммы не сойдутся (CRLF против LF): в этом клоне должно быть git config core.autocrlf false.
  3. Наш файл обязан быть в списке релиза (tools/release.sh, FILES=(…)) и в списке загрузки fetch_release() — иначе при обновлении kit.sh приедет новый, а kit-local.sh останется старым.
  4. Панель 3X-UI ставится с GitHub по закреплённой версии и SHA256 — это шаг автора, форк его не трогает. Для установки с нуля серверу нужен доступ к GitHub.