6.1 KiB
Форк 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
Установка и обновление из этого репозитория
# установка на чистый сервер (вместо команды автора с GitHub)
bash <(curl -fsSL https://git.rukavishnikoff.ru/hacker07/3X-UI_KIT/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-update.timer, 03:00) перезаписывает/usr/local/bin/kitподписанным релизом из настроенного репозитория. Поэтому канал обновления и швы — один шаг: сервер должен смотреть в этот репозиторий, иначе наши правки исчезнут ночью. - Переводы строк. Релиз подписывается по контрольным суммам файлов в рабочей копии, а сервер
сверяет их с файлами из Gitea. При
core.autocrlf=trueсуммы не сойдутся (CRLF против LF): в этом клоне должно бытьgit config core.autocrlf false. - Наш файл обязан быть в списке релиза (
tools/release.sh,FILES=(…)) и в списке загрузкиfetch_release()— иначе при обновленииkit.shприедет новый, аkit-local.shостанется старым. - Панель 3X-UI ставится с GitHub по закреплённой версии и SHA256 — это шаг автора, форк его не трогает. Для установки с нуля серверу нужен доступ к GitHub.