304 lines
36 KiB
Markdown
304 lines
36 KiB
Markdown
## v1.2.24: сертификат идёт вслед за выбором «домен или IP»
|
||
|
||
* Выбрали в меню маскировки **свой домен** — панель и подписка тоже переезжают на домен:
|
||
`https://ваш.домен/...` и открываются тем же сертификатом Let's Encrypt, без предупреждений браузера.
|
||
Раньше сертификат выписывался только для маскировки, а панель оставалась по IP с самоподписанным —
|
||
отсюда ругань и в панели, и в подписке.
|
||
* Если выбрали соседа или общедоступный сайт (своего домена нет) — панель остаётся по IP, и в итоговом
|
||
блоке прямо сказано: сертификат самоподписанный, браузер предупредит; перейти на домен потом —
|
||
`kit net panel domain`.
|
||
* Домен, который не указывает на этот сервер, используется только как маска (и об этом сообщается),
|
||
панель в этом случае остаётся по IP.
|
||
|
||
## v1.2.23: чистый вывод — без дублей доступов, без авторской заглушки, без лишних ссылок
|
||
|
||
* **Убран дублирующий блок автора.** Он печатал «Готово! Сервер работает» с адресом панели, логином,
|
||
паролем, подпиской, QR-кодом и ссылками — а потом то же самое выводил наш финальный блок.
|
||
Теперь авторский блок заканчивается строкой «Установка завершена» и списком предупреждений;
|
||
доступы и подписка печатаются один раз, в самом конце.
|
||
* **Авторская заглушка больше не ставится.** Наш сайт кладётся до установщика, а его страница из
|
||
релиза убирается — иначе она перезаписывала нашу на шаге сборки сайта. Заодно пропадает лишний
|
||
шаг «поставить поверх» и его бэкап.
|
||
* **Ссылки по протоколам — только если протоколов больше одного.** При одном REALITY печатается
|
||
подписка и QR-код, без списка «отдельные ссылки на каждый протокол».
|
||
* Самопроверка в конце установки больше не перечисляет чужие протоколы («REALITY, XHTTP и
|
||
Hysteria2») — пишет те, что реально созданы. Предупреждение про XHTTP/MTProto показывается только
|
||
если эти протоколы выбраны.
|
||
|
||
## v1.2.22: 80 в ufw открывается прямо перед выпуском сертификата
|
||
|
||
* Настоящая причина сбоя сертификата (проверено на живом сервере): установщик открывает список
|
||
портов в ufw **позже**, чем пробует выпустить сертификат. На свежем сервере ufw в этот момент
|
||
разрешает только 22, поэтому проверка Let's Encrypt доходила до сервера и «проглатывалась» —
|
||
в логе acme `Timeout during connect (likely firewall problem)`. Провайдер тут ни при чём:
|
||
с настоящим слушателем 80 и 443 отвечают снаружи нормально (проверено в том числе с другого сервера).
|
||
* Теперь 80/tcp открывается в ufw непосредственно перед `issue_domain_cert`, а формулировка ошибки
|
||
в установщике исправлена: сначала проверяем ufw, потом хостера.
|
||
|
||
## v1.2.21: порты до выпуска сертификата и понятный блок про SSH-порт
|
||
|
||
* **Порты до сертификата.** Установщик теперь сам открывает 80 и 443 в ufw перед работой и прямо
|
||
предупреждает, что такие же правила нужны в файрволе хостинга: частая причина срыва — порт 80
|
||
закрыт именно у провайдера, а не в сервере. Если сертификат всё же не выпустился, в выводе
|
||
разбирается причина: при `Timeout during connect (likely firewall problem)` пишется, что делать
|
||
(открыть 80 в панели хостинга) и предлагается вариант без своего домена (тогда сертификат домена
|
||
не нужен, панель остаётся на самоподписанном). После установки 80 и 443 в ufw проверяются ещё раз.
|
||
* **Смена порта SSH — с понятным завершением.** Прежние порты запоминаются до смены, и в конце
|
||
печатается блок: новый порт, какие прежние ещё открыты, команда проверки входа во втором окне и
|
||
готовая команда `kit local ssh --close-old <новый>` для закрытия прежних. Строка про SSH-порт
|
||
добавлена и в итоговый блок с доступом к панели и подпиской.
|
||
|
||
## v1.2.20: после сноса меню не показывается, и нет ошибок про latest-version
|
||
|
||
* Удаление из меню (`kit`, пункт 9) теперь завершается сразу: печатается «Готово: сервер в состоянии
|
||
до установки» — и выход. Раньше меню перерисовывалось на уже удалённом сервере и сыпало
|
||
`touch: cannot touch '/etc/kit/latest-version'`.
|
||
* `update_hint` больше не пытается что-либо писать, если каталога `/etc/kit` уже нет.
|
||
* Входит исправление 1.2.19: `extra` объявлена пустой (иначе `set -u` валил установку на шаге
|
||
«[6/6] Проверка» сообщением `extra: unbound variable`).
|
||
|
||
## v1.2.19: исправлено «extra: unbound variable» при установке
|
||
|
||
* На середине установки (после проверки протоколов) скрипт падал: `extra: unbound variable`.
|
||
Причина — моя правка v1.2.13: присваивание ссылок legacy-подписок завёрнуто в `if`, а переменная
|
||
объявлялась как `local extra` без значения. Авторский скрипт работает с `set -u`, поэтому при
|
||
невыполненном условии (AWG и MTProto не выбраны) чтение `$extra` валило установку. Объявлена пустой.
|
||
* Правило записано в FORK.md: оборачивая авторское присваивание в `if`, объявляй переменную пустой —
|
||
`local extra=""`, иначе `set -u` обрывает установку на середине.
|
||
|
||
## v1.2.18: выбранный «свой домен» больше не подменяется соседом
|
||
|
||
* Что было: после выбора «ввести свой домен» установщик всё равно брал запасной сайт из подсети.
|
||
Две причины, обе в моём коде: (1) выбор перезаписывался сырым значением меню (`own:домен`)
|
||
вместо самого домена; (2) домен проверялся на «TLS 1.3 + HTTP/2» — а до установки на нём ещё нет
|
||
сертификата, поэтому проверка честно не проходила и срабатывал откат на соседа. Теперь для своего
|
||
домена проверка TLS не делается (он указывает на этот сервер — установщик сам выпустит
|
||
сертификат Let's Encrypt), а автоподбор и запасной сайт включаются только если вы НЕ выбрали
|
||
ничего (автовыбор).
|
||
|
||
## v1.2.17: меню маскировки идёт ПЕРВЫМ (меню автора больше не перебивает)
|
||
|
||
* Причина, по которой меню не было видно: **меню спрашивал сам установщик** («Свой домен / Сосед /
|
||
Свой сайт») — и до нашего скана подсети дело не доходило. Теперь, когда включено наше меню,
|
||
меню автора не показывается вообще: сразу скан, список найденных доменов и выбор — из найденных,
|
||
автовыбор, общедоступный или свой домен. Отключить и вернуть поведение автора: `--auto-sni`.
|
||
* Ответ меню помечается: если вы ввели домен, который указывает на этот сервер, маскировка идёт
|
||
«под свой домен» (сертификат Let's Encrypt выпустит установщик); если не указывает — маскируюсь
|
||
под него как под чужой сайт и прямо об этом сообщаю.
|
||
* Входит исправление 1.2.16: возвращён `ask_yes` (в 1.2.13–1.2.15 при установке печаталось
|
||
`ask_yes: command not found`, и значения брались по умолчанию) + гейт «определение раньше вызова».
|
||
|
||
## v1.2.16: возвращён ask_yes (вылезало «command not found» при установке)
|
||
|
||
* При переносе вопросов наверх (v1.2.13) потерялось определение функции `ask_yes` — установщик
|
||
писал `ask_yes: command not found` на двух строках и молча брал значения по умолчанию:
|
||
ping оставался открытым, автообновления выключались. Скрипт при этом не падал, поэтому
|
||
ошибку было видно, но установку она не срывала.
|
||
* Почему не поймали: гейт в релизе прогонял только `--dry-run`, а он выходит ДО вопросов.
|
||
Добавлена статическая проверка: каждая наша функция должна быть определена раньше первого
|
||
вызова (`ask_yes`, `ask_ssh_port`, `ask_protocols`, `interactive`, `clean_previous` и др.).
|
||
|
||
## v1.2.15: меню выбора сайта в вашем виде, быстрый скан, снос с добивкой
|
||
|
||
* Меню маскировки выглядит так, как и просили. Если соседи нашлись — их список по номерам,
|
||
затем `автовыбор из списка`, `выбрать общедоступный` (отдельным списком) и `ввести свой домен`.
|
||
Если в подсети ничего не нашлось — сразу «общедоступный» или «свой домен» (ничего лишнего).
|
||
Enter — автовыбор. Общедоступные сайты предлагаются и для REALITY, и для XHTTP/MTProto.
|
||
* **Скан подсети стал быстрым.** Было: адреса проверялись по 8 сразу, а найденные имена —
|
||
по очереди (до 40 имён × три проверки с сетевыми запросами ≈ минуты). Стало: 32 адреса сразу
|
||
и имена проверяются параллельно по 8; таймаут проверки адреса 3 с вместо 4.
|
||
* В выводе видно, сколько соседей нашлось (раньше было не понять, работает ли скан).
|
||
* После нашего меню автор больше не спрашивает «продолжить с запасным сайтом?» — выбор уже сделан.
|
||
* В меню `kit`: **9 — «Удалить всё установленное», 10 — «Выход»** (меню панели `x-ui` переехало
|
||
в пункт 11).
|
||
* **`kit local uninstall` доводит дело до конца:** после явного списка идёт добивка по шаблонам
|
||
(`/etc/kit*`, `/usr/local/lib/kit*`, юниты `kit-*`/`x-ui*`, `/var/www/kit`, сертификаты), повторная
|
||
проверка и внятный итог. Появился флаг `--yes` — снести без вопроса.
|
||
|
||
## v1.2.14: выбор сайта маскировки по результатам скана + снос, который не обрывается
|
||
|
||
* **Появилось меню маскировки.** Сначала один скан подсети (~250 обращений к 443 соседних адресов),
|
||
потом выбор: номер из найденного, `0` — ввести адрес вручную, Enter — автоподбор. Отдельно для
|
||
**REALITY** (найденное или свой) и отдельно для **XHTTP/MTProto** (найденное, свой или известный
|
||
сайт — список известных расширен Microsoft, AMD, Intel, NVIDIA). Если XHTTP/MTProto не выбраны,
|
||
второго меню не будет. Отключить меню: `--auto-sni`.
|
||
* **Исправлено: `kit local uninstall` обрывался на середине.** `kit` запускает наши команды
|
||
с `set -e`, и подсчёт чужих сайтов nginx (`find | grep | wc -l`, где grep не находит ничего и
|
||
возвращает 1) убивал скрипт сразу после остановки служб — файлы и `/usr/local/bin/kit` оставались,
|
||
поэтому `kit help` продолжал работать. Теперь снос выполняется с отключённым `set -e` и все
|
||
подобные конвейеры защищены; проверка после сноса это подтверждает списком, если что-то осталось.
|
||
## v1.2.13: вопросов после показа доступов нет, и никакой работы для невыбранных протоколов
|
||
|
||
* **Все вопросы — до установщика.** Раньше после установки (когда на экране уже были данные входа
|
||
в панель) скрипт спрашивал про ping, автообновления, порт SSH и пароль root — доступы терялись
|
||
в потоке вопросов. Теперь спрашиваем всё заранее, а действия выполняем после установки; последнее,
|
||
что видит человек, — доступ к панели, подписка и QR-код.
|
||
* Автор тянет подписки «-awg» и «-tg» (наследие установок kit < 1.1) всегда — теперь только если
|
||
AmneziaWG или MTProto выбраны.
|
||
* Наши команды помнят выбор: установщик пишет список протоколов в `/etc/kit/kl-protos`, и
|
||
`kit local site` не синхронизирует ответ Hysteria2, если Hysteria2 не ставился (раньше он это делал
|
||
и выдавал предупреждение про отсутствующий Hysteria2).
|
||
## v1.2.12: не сканируем соседей, когда они не нужны
|
||
|
||
* Автор подбирал сайты-соседи для XHTTP и MTProto **всегда**, когда маскировка доверенная («панель по IP»)
|
||
и всё висит на 443 — независимо от того, выбраны ли эти протоколы. При установке одного REALITY это
|
||
давало ~250 обращений к чужим адресам впустую. Теперь скан идёт только если XHTTP или MTProto выбраны;
|
||
иначе имена SNI2/SNI3 берутся из общего списка сайтов автора (как и раньше при неудаче скана).
|
||
|
||
# Что нового в сборке форка
|
||
|
||
Здесь записи о наших версиях. Файл автора (`CHANGELOG.md`) мы не трогаем — так обновления
|
||
автора не конфликтуют с нашими записями.
|
||
## v1.2.11: снос знает про kit-limit и находит свои службы сам
|
||
|
||
* В списке сноса не было `kit-limit.service` и `kit-limit.timer` (юнит «общий лимит трафика» из kit) —
|
||
его создаёт установка, а `kit local uninstall` его не убирал. Из-за этого после сноса оставался
|
||
работающий таймер, который раз в 5 минут дёргал уже удалённый `kit` и падал.
|
||
* Теперь снос берёт список служб **и из явного перечня, и по шаблонам `x-ui*`/`kit*`** из systemd —
|
||
новая служба, добавленная автором позже, не останется незамеченной. Проверка после сноса ищет
|
||
по тем же шаблонам и показывает всё найденное.
|
||
* Флаг `--clean` у установщика использует тот же список.
|
||
## v1.2.10: убран мусор в выводе установщика
|
||
|
||
* В шапке `scripts/3x-ui-local.sh` один из флагов потерял `#` и **при каждом запуске печаталось
|
||
`--dry-run: command not found`** (до `set -e` — потому и не роняло установку, но выглядело как ошибка).
|
||
Исправлено, заодно выровнены строки справки.
|
||
* В релизный гейт добавлена проверка, которая такое ловит: холостой прогон установщика, чей вывод в stderr
|
||
содержит «command not found / syntax error / bad substitution», релиз не собирается.
|
||
## v1.2.9: снос действительно убирает всё, повторная установка после сноса
|
||
|
||
* Список удаляемого в `kit local uninstall` собран заново **по коду установщика** и дополнен тем, чего
|
||
не хватало: `/usr/local/lib/kit-sub`, `/root/kit-backup-*` и `/root/x-ui-before-*` (копии kit),
|
||
`/var/log/kit-install-check.log`, `/usr/bin/x-ui.new`, строка `include kit-stream.conf` в `nginx.conf`,
|
||
симлинки в `sites-enabled`/`streams-enabled`, файл автообновлений безопасности, пользователь `kit-sub`.
|
||
Из-за пропущенных файлов установщик после сноса отказывался ставить заново («3X-UI уже установлена»).
|
||
* После сноса печатается проверка **теми же условиями, что у установщика**, и список того, что осталось
|
||
на диске — вместо бодрого «удалено» вслепую.
|
||
* Флаг `--reset-ssh`: снести и наш ssh-дроп-ин (порт возвращается к системному). По умолчанию SSH не трогаем.
|
||
* У установщика появился флаг **`--clean`**: убрать прошлую установку и поставить заново. Если установщик
|
||
всё-таки упал на «уже установлена», в подсказке прямо сказано запустить с `--clean`.
|
||
## v1.2.8: доступ к панели в конце установки и снос сервера из меню
|
||
|
||
* В конце установки (перед подпиской) печатается **доступ к панели 3X-UI**: адрес, логин и пароль из
|
||
файла `/root/3x-ui.txt` — раньше это было видно только в общем потоке вывода установщика.
|
||
* **`kit local uninstall`** — снос установки целиком: панель и служба `x-ui`, ядро Xray, службы и файлы
|
||
kit (`kit-sub`, автообновление, cron), конфиги nginx и сайт-заглушка, сертификаты (acme.sh),
|
||
наши правки системы (правило ICMP, обновления безопасности), наши бэкапы и файл с данными панели.
|
||
Правила ufw для 80/443 снимаются, ответ на ping возвращается. Спрашивает подтверждение словом
|
||
«удалить», есть `--dry-run`.
|
||
**SSH не трогается** — ни порт, ни конфиги, ни правила для него: иначе легко потерять доступ к серверу.
|
||
В главном меню `kit` появился пункт **10. Удалить всё установленное**.
|
||
## v1.2.7: имя 3X-UI_autoVPS, справка kit help, подписка с QR, живые кнопки на заглушках
|
||
|
||
* **Сборка называется `3X-UI_autoVPS`** (было `3X-UI KIT`): баннер сервера — `Hacker 07` в том же
|
||
стиле, новое имя в справке, версии, описаниях служб и в имени профиля в клиенте. В файлах автора
|
||
это сделано швами (`tools/fork_apply.py`), поэтому обновление автора правки не затирает.
|
||
* **Совместимость шапки релиза.** В подписанном `SHA256SUMS` этого релиза шапка пишется **двумя
|
||
строками** (старая и новая), а проверка на сервере принимает обе. Иначе уже установленные серверы
|
||
отказались бы ставить обновление: они сверяют точный вид строки. Со следующего релиза останется
|
||
только новое имя.
|
||
* Убрано дублирование подсказки «Дальше обязательно» при смене порта SSH: она печаталась и
|
||
установщиком, и командой `kit local ssh`.
|
||
* **`kit help` — полный справочник по категориям**: пользователи, подключения и порты, маскировка и
|
||
сайт, проверка и починка, обслуживание и обновление, защита сервера (наш слой). Раньше `kit help`
|
||
показывал короткий список автора и не упоминал наши команды. Чтобы справка не отставала молча,
|
||
добавлена проверка `tools/check-help.sh`: она сверяет справку с диспетчером команд и встроена в
|
||
сборку релиза (`tools/release.sh`).
|
||
* У сайтов-заглушек все ссылки и кнопки **живые**: нажатие открывает окно «раздел в разработке,
|
||
приносим извинения» (закрыть — кнопкой, кликом мимо окна или Esc). Никаких внешних запросов:
|
||
скрипт и стили внутри страницы.
|
||
* В самом конце установки (после всех проверок) печатается то, что нужно сохранить: **подписка
|
||
с QR-кодом** и ссылки по протоколам — авторской командой `kit user link <имя> --all`, поэтому
|
||
вывод совпадает с тем, что показывает `kit` потом. Отключается флагом `--no-sub`.
|
||
|
||
* Набор по умолчанию — **REALITY + AmneziaWG-3.1** (самый совместимый минимум); ответ «все»
|
||
ставит полный набор автора. Умолчание задаётся в одном месте (`DEFAULT_PROTOS`).
|
||
* **Сайт-заглушка переделан на ИТ-тематику:** десять правдоподобных сайтов (дата-аналитика, DevOps,
|
||
мониторинг, разработка, аудит, ИТ-поддержка, колокейшн, заметки про Linux, бэкапы, документация)
|
||
вместо авторских «кофеен и пекарен». Ставится случайный, конкретный — `kit local site 7`,
|
||
список — `kit local site --list`. Команда обновляет и файл для nginx, и копию страницы внутри
|
||
подключения Hysteria2 (`kit net masq on`): если менять файл вручную, 443/tcp и UDP-порт начнут
|
||
отвечать разными страницами — это заметно снаружи.
|
||
* Обёртка спрашивает, **какие протоколы ставить** (нумерованный список, `1,3,11` или «все»,
|
||
Enter — набор автора): невыбранные протоколы не создаются вообще — ни подключения в панели,
|
||
ни записей в nginx, ни ссылок в подписке. Список и умолчание взяты из самого установщика
|
||
(`ALL_PROTOS`/`DEFAULT_PROTOS`), передаётся его же флагом `--protocols`, так что поведение
|
||
не расходится с авторским. Свой `--protocols` можно задать флагом — тогда вопроса не будет.
|
||
* Обёртка `scripts/3x-ui-local.sh` теперь спрашивает, а не решает за вас: закрывать ли ответ на ping,
|
||
включать ли автообновления безопасности, **менять ли порт SSH** (Enter — оставить текущий,
|
||
число — перевести на него; мусор и занятый порт переспрашивает), менять ли пароль root.
|
||
Маскировку и домен, как и раньше, спрашивает установщик автора.
|
||
* Смена порта SSH никогда не закрывает прежний порт сама: сначала добавляется новый, затем скрипт
|
||
печатает две команды — проверить вход во втором окне и закрыть прежние (`kit local ssh --close-old`).
|
||
* Запуск без флагов = «одна команда, дальше вопросы». Флаг `--yes` — наоборот, ничего не спрашивать
|
||
(для автоматизации): ping закрывается, автообновления включаются, порт SSH и пароль не трогаются.
|
||
* Флаг `--harden` теперь действительно существует (раньше он уходил установщику автора неизвестным
|
||
параметром и ронял установку): закрыть ping и включить автообновления без вопросов.
|
||
* `--dry-run` показывает, что именно будет спрошено или сделано по умолчанию.
|
||
## v1.2.6: вопросы при установке
|
||
|
||
* **README.md переписан целиком:** убрано авторское описание с его командой установки, добавлены
|
||
актуальная команда, флаги, таблица протоколов, список сайтов-заглушек, команды `kit` и `kit local`,
|
||
канал обновлений и оговорки. Две картинки — наши (`manuals/assets/fork-banner.svg` и
|
||
`manuals/assets/script-3x-ui-local.svg`, терминал собран из настоящего вывода скрипта).
|
||
* Шов в README больше не нужен (`tools/fork_apply.py`): файл наш целиком, как `kit-local.sh`.
|
||
## v1.2.5: суммы релиза в формате, который понимает kit
|
||
|
||
* Исправлена ошибка нашего релизного конвейера: на Windows `sha256sum` пишет суммы как
|
||
`hash *файл`, а `kit` на сервере сверяет имя строго (`$2 == "файл"`) — то есть `kit update`
|
||
отклонил бы релизы v1.2.1–v1.2.4 как «в подписанном списке нет такого файла». Теперь
|
||
`tools/release.sh` приводит список к POSIX-виду (`hash файл`) **до** подписи.
|
||
* `scripts/3x-ui-local.sh` принимает оба формата, чтобы не спотыкаться о суммы, собранные на
|
||
другой машине.
|
||
* Проверка теперь повторяет логику самого `kit`: подпись `SHA256SUMS` + строгая сверка имени
|
||
каждого файла из подписанного списка (а не только `sha256sum -c`, который звёздочку прощает).
|
||
## v1.2.4: проверка релиза отдельной командой
|
||
|
||
* Флаг `--verify-only`: скачать релиз, проверить подпись `SHA256SUMS` и SHA256 установщика и выйти —
|
||
можно проверить канал на сервере, ничего не устанавливая.
|
||
* Порядок шагов изменён: проверка подписи теперь идёт до предполётных проверок и до любых
|
||
изменений на сервере, чтобы чужой код не запускался раньше проверки.
|
||
## v1.2.3: установка одной командой (`scripts/3x-ui-local.sh`)
|
||
|
||
* Один скрипт на чистом VPS: проверка сервера → скачивание нашего релиза → проверка подписи
|
||
`SHA256SUMS` и SHA256 самого установщика → установщик автора (панель 3X-UI, протоколы,
|
||
сайт-заглушка, маскировка, сертификат, подписка, ufw) → наши дополнения → проверка.
|
||
* По умолчанию досыпает: закрыть ответ на ping (правилом ufw), включить обновления безопасности,
|
||
`kit fix` (время и безопасные починки), в конце `kit check` и сводку `kit local hardening`.
|
||
Отключается флагами `--no-harden`, `--no-time`, `--no-check`.
|
||
* Второй порт SSH — только по явному флагу `--ssh-port N`: прежний порт продолжает работать,
|
||
закрытие — отдельным шагом `kit local ssh --close-old N`. Автоматически доступ не запираем.
|
||
* Все флаги установщика автора (`--domain`, `--sni`, `--panel-on`, `--host`, `--restore` …)
|
||
передаются как есть; есть `--dry-run` (план без изменений) и `--help`.
|
||
* Публичный ключ форка вшит в обёртку — подпись проверяется до запуска чужого кода; при смене
|
||
ключа обновляется и здесь, и в `kit`.
|
||
## v1.2.2: команды защиты сервера (поведение из StressOzz/vps-setup)
|
||
|
||
* Новые команды `kit local`: `ssh <порт>` (добавить порт SSH), `ssh --close-old` (закрыть прежние
|
||
порты), `ping off|on` (не отвечать на ICMP echo), `passwd [--generate]` (сменить пароль),
|
||
`upgrades on|off|status` (автообновления безопасности), `hardening` (сводка по защите сервера).
|
||
* Сделано безопаснее, чем в источнике: конфиг sshd проверяется через `sshd -t` **до** перезапуска,
|
||
новый порт сначала открывается в ufw, прежний порт продолжает работать до отдельного шага
|
||
`--close-old`, у правок есть `--dry-run`, а копии изменённых файлов остаются в
|
||
`/root/kit-local-backup-<дата>/` (не в `/tmp`).
|
||
* `apt full-upgrade` из источника не выполняется: вместо него включаются обновления безопасности
|
||
(только security, без самовольной перезагрузки) — это не затрагивает закреплённые версии панели
|
||
и ядра, которые ставятся не из apt.
|
||
* Учтён Ubuntu 24.04: если SSH слушает systemd (`ssh.socket`), порт добавляется socket-drop-in'ом,
|
||
а закрытие старых портов не делается автоматически — там ошибка запирает доступ к серверу.
|
||
* Ping отключается правилом ufw (`before.rules`), а не общесистемным `icmp_echo_ignore_all`:
|
||
видно в `ufw status`, отменяется одной командой и не глушит ICMP для внутренних интерфейсов.
|
||
## v1.2.1: сборка форка поверх 3X-UI_autoVPS 1.2
|
||
|
||
* Источник файлов и обновлений — свой репозиторий Gitea: установка и `kit update` берут релиз
|
||
оттуда, а подпись релиза проверяется ключом форка. Авторский ночной апдейт приходит в наш
|
||
канал, поэтому наши доработки не стираются ночью.
|
||
* Дополнения форка живут отдельным файлом `/usr/local/lib/kit/kit-local.sh` и подключаются одной
|
||
строкой: `kit local help | version | channel | seams | masking`.
|
||
* Наш файл едет в том же подписанном релизе, что и код автора: он входит в `SHA256SUMS`,
|
||
проверяется по подписи и обновляется вместе с `kit`.
|
||
* Швы в коде автора описаны в `tools/fork_apply.py` (источник правды), синхронизация с автором и
|
||
проверки — `tools/fork-sync.sh`.
|
||
|
||
Основа — 3X-UI_autoVPS 1.2 (панель 3X-UI v3.9.0, ядро Xray v26.6.27). Что нового у автора — в `CHANGELOG.md`.
|