fix29: удалён legacy, введён Debian 13-only и обновлён rollback

This commit is contained in:
2026-05-12 17:26:41 +05:00
parent 69c737bcf4
commit 44a62cf634
23 changed files with 211 additions and 1316 deletions
+109
View File
@@ -0,0 +1,109 @@
Изучил архив. Мой вывод: старый `Amnezia limits (old bash)/` можно убирать из проекта, но вместе с ним нужно зачистить документацию и закрыть один процессный пробел: rollback больше не должен ссылаться на `amnezia-tc.service`.
По текущему дереву Rust-код уже не зависит от старой bash-папки. `traffic_core` сам делает discovery контейнера/interface/peers, строит egress + IFB ingress `tc` topology, проверяет drift, восстанавливает state, ведёт status. Отдельно есть nftables host firewall, anti-torrent guard, swap reconciler и reboot scheduler. Старая папка сейчас является только историческим reference.
Главные места, которые конфликтуют с твоей новой моделью:
`tools/build.sh` сейчас принимает `debian|ubuntu`. Это надо заменить на строгий `Debian 13 amd64`. Иначе у тебя документация будет говорить “только Debian 13”, а build-helper фактически разрешит Ubuntu.
`tools/README.md` пишет “Debian/Ubuntu с apt”. Нужно заменить на “Debian 13 amd64”.
Корневой `README.md` содержит `Amnezia limits (old bash)` в дереве репозитория и отдельный абзац про historical reference. Это надо удалить. Там же строка про upstream Amnezia с Debian 12/13 и Ubuntu 22.04/24.04 лучше убрать полностью или переписать так, чтобы было ясно: AWG2 Harness поддерживает только Debian 13 amd64, независимо от того, что поддерживает Amnezia upstream.
`docs/OLD_BASH_BEHAVIOR.md` и `docs/MIGRATION.md` логично удалить. Сейчас они попадут в `.deb`, потому что `tools/build.sh` пакует все `docs/*.md`.
`docs/README.md` надо очистить от ссылок на `OLD_BASH_BEHAVIOR.md` и `MIGRATION.md`.
`docs/ACCEPTANCE_CHECKLIST.md` содержит rollback через старые bash-файлы и `amnezia-tc.service` / `amnezia-tc-watcher.service`. Это больше нельзя оставлять. Нужен Rust-native rollback: остановить сервисы, отключить host firewall / anti-torrent, удалить AWG2-owned `tc` topology и при необходимости удалить пакет.
В `docs/IMPLEMENTATION_SPEC.md`, `docs/CONFIGURATION.md`, `docs/ANTI_TORRENT.md` нужно не удалять смысл, а переименовать происхождение. Например “bash parity” заменить на “class-id stability contract”. Лексикографическую сортировку peer IP я бы оставил: код уже сортирует IP как строки, и это полезно как стабильный ABI для class id. Просто больше не надо объяснять это через старый bash.
Минимальный список удаления:
```text
Amnezia limits (old bash)/
docs/OLD_BASH_BEHAVIOR.md
docs/MIGRATION.md
```
Что я бы добавил до удаления старого rollback:
```text
awg2-harness cleanup-limits
```
или хотя бы документированную процедуру:
```bash
systemctl disable --now awg2-harness.service
systemctl disable --now awg2-reboot-scheduler.service
C="$(docker ps --format '{{.Names}}' | grep -E '^(amnezia-awg2|amnezia-awg)$' | head -n1)"
PID="$(docker inspect -f '{{.State.Pid}}' "$C")"
nsenter -t "$PID" -n -- tc qdisc del dev awg0 root 2>/dev/null || true
nsenter -t "$PID" -n -- tc qdisc del dev awg0 ingress 2>/dev/null || true
nsenter -t "$PID" -n -- ip link del ifb0 2>/dev/null || true
```
Для Debian 13-only модели я бы сделал три уровня защиты.
Первый — `tools/build.sh`: запретить всё кроме Debian 13 amd64.
```bash
ensure_supported_host() {
if [[ ! -f /etc/os-release ]]; then
echo "Unsupported OS: missing /etc/os-release. Only Debian 13 amd64 is supported."
exit 1
fi
# shellcheck disable=SC1091
source /etc/os-release
if [[ "${ID:-}" != "debian" || "${VERSION_ID:-}" != "13" ]]; then
echo "Unsupported OS: ${PRETTY_NAME:-unknown}. Only Debian 13 amd64 is supported."
exit 1
fi
local arch
arch="$(dpkg --print-architecture 2>/dev/null || uname -m)"
if [[ "$arch" != "amd64" && "$arch" != "x86_64" ]]; then
echo "Unsupported arch: $arch. Only amd64 is supported."
exit 1
fi
}
```
Второй — `.deb preinst`, чтобы пакет не ставился на Ubuntu/Debian 12/Debian 14 случайно.
```sh
#!/bin/sh
set -e
if [ ! -r /etc/os-release ]; then
echo "awg2-harness supports only Debian 13 amd64" >&2
exit 1
fi
. /etc/os-release
if [ "${ID:-}" != "debian" ] || [ "${VERSION_ID:-}" != "13" ]; then
echo "awg2-harness supports only Debian 13 amd64; got ${PRETTY_NAME:-unknown}" >&2
exit 1
fi
if command -v dpkg >/dev/null 2>&1; then
arch="$(dpkg --print-architecture)"
if [ "$arch" != "amd64" ]; then
echo "awg2-harness supports only amd64; got $arch" >&2
exit 1
fi
fi
exit 0
```
Третий — `validate-runtime` в Rust: проверять `/etc/os-release` и arch, чтобы ручной запуск бинаря вне `.deb` тоже явно падал.
Ещё один важный несостык: документация использует версию `0.1.6`, а `traffic_core/Cargo.toml` сейчас `0.1.4`. Если релиз реально `0.1.6`, лучше поднять crate version, а не жить на постоянном `--version` override.
Версия реально 0.1.6