Files
AWG2_harness/fix29.txt
T

109 lines
6.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Изучил архив. Мой вывод: старый `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