build: закрепить новые инварианты приёмкой и документацией
verify_versions_contract получил сверку API namespace. Путь machine-auth
записывается в /etc/hysteria/config.yaml и в post-install.env, то есть по нему
Hysteria обращается к админке. Пока строка была продублирована в шаблонах,
smoke, тестах, приёмке и e2e, расхождение обнаруживалось только на живом
сервере. Теперь Go-константы, API_BASE фронтенда и оба шаблона сверяются
против значений, скомпилированных в оркестратор.
Приёмка проверяет, что:
- fatal_pre_apply недостижим после записи install-state;
- каждый ownership-флаг взводится раньше своего шага;
- у read-only фазы нет универсального раннера, через который можно
проскользнуть;
- инвариант публичного endpoint живёт в preflight и не обращается к внешним
сервисам определения IP;
- purge-v0.sh и clean-host описывают одну границу;
- секреты не попадают в персистентный файл экспорта;
- импорт пиров валидируется так же строго, как их создание;
- удалённые exportConfig/importConfig не вернулись.
Захардкоженная схема =2 в приёмке заменена на значение из versions.env: при
переходе на schema 3 пришлось бы помнить ещё и про эту строку.
Документация: контракт раннеров и ownership в 08, инвариант публичного
endpoint в 08/09/12/13 и README, сетевая идентичность панели и удалённые
export/import в 04, сценарии D1 (отказ сразу после PHASE 0) и D2 (устаревший
DNS после смены IPv4) в 11, версии package.json как не-версия продукта в 02.
This commit is contained in:
@@ -129,11 +129,12 @@ sudo ./purge-v0.sh
|
||||
sudo ./purge-v0.sh --apply --yes-i-know
|
||||
```
|
||||
|
||||
Если бинарник Hysteria нужно оставить (например, вы проверяете им что-то ещё):
|
||||
|
||||
```bash
|
||||
sudo ./purge-v0.sh --apply --yes-i-know --keep-hysteria-binary
|
||||
```
|
||||
Возможности «оставить бинарник Hysteria» у скрипта нет намеренно.
|
||||
`/usr/local/bin/hysteria` входит в clean-host контракт установщика: сервер, где
|
||||
он остался, установку HY2XS v1 не пройдёт. Скрипт, который сохранял бы бинарник
|
||||
и при этом сообщал «хост чист», прямо противоречил бы следующему запуску
|
||||
`install.sh`. Свежая установка всё равно кладёт собственную версию Hysteria,
|
||||
проверенную по SHA-256 против upstream `hashes.txt`.
|
||||
|
||||
В конце скрипт сам проверяет, что хост стал чистым по тому же контракту, который
|
||||
применяет установщик. Если что-то осталось, он назовёт конкретные объекты и
|
||||
@@ -147,10 +148,18 @@ sudo ./purge-v0.sh --apply --yes-i-know --keep-hysteria-binary
|
||||
2. снимает таймеры отката firewall `hy2xs-fw-rollback-*` — они переживают
|
||||
неудачную установку и иначе продолжили бы менять ruleset уже после очистки;
|
||||
3. удаляет unit-файлы и выполняет `daemon-reload`;
|
||||
4. удаляет каталоги приложения, конфигурации, данных и логов;
|
||||
5. удаляет фрагмент `/etc/nftables.d/hy2xs.nft` и строку `include` для него из
|
||||
4. удаляет каталоги приложения, конфигурации, данных и логов, включая
|
||||
`/var/lib/hysteria` (там остаётся ACME-состояние и сертификаты Hysteria),
|
||||
`/usr/local/lib/hy2xs` и symlink `/usr/local/bin/hy2xs-orchestrator`;
|
||||
5. удаляет `/usr/local/bin/hysteria`;
|
||||
6. удаляет фрагмент `/etc/nftables.d/hy2xs.nft` и строку `include` для него из
|
||||
`/etc/nftables.conf`, после чего перезагружает ruleset;
|
||||
6. проверяет чистоту хоста.
|
||||
7. проверяет чистоту хоста.
|
||||
|
||||
Список удаляемых путей и список legacy-маркеров clean-host контракта описывают
|
||||
одну и ту же границу: расхождение между ними ловится приёмкой сборки. Иначе
|
||||
возможен сервер, с которого «всё удалено», но который установщик всё равно
|
||||
считает грязным — или, что хуже, наоборот.
|
||||
|
||||
Не делает:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user