52 lines
2.9 KiB
Markdown
52 lines
2.9 KiB
Markdown
# Packaging
|
||
|
||
Каталог содержит package-managed systemd-конфигурацию проекта. Установка
|
||
файлов в Debian-пакет описана в `debian/install`.
|
||
|
||
## Состав
|
||
|
||
- `systemd/vpn-egress-guard.service` — до запуска sing-box атомарно устанавливает
|
||
отдельную nftables-таблицу, блокирующую прямой forwarding `eth1 -> eth0`;
|
||
- `systemd/vpn-egress-sync.service` — выполняет однократный reconcile текущих
|
||
Hysteria2 URI и policy;
|
||
- `systemd/vpn-egress-sync.path` — запускает sync при изменении защищённого URI;
|
||
- `systemd/sing-box.service.d/10-vpn-egress-guard.conf` — добавляет к штатному
|
||
`sing-box.service` requirement и ordering dependency от guard.
|
||
|
||
## Зависимости запуска
|
||
|
||
```text
|
||
vpn-egress-guard.service
|
||
│
|
||
├── required before ──> sing-box.service
|
||
│
|
||
└── required before ──> vpn-egress-sync.service
|
||
▲
|
||
│
|
||
vpn-egress-sync.path
|
||
```
|
||
|
||
`Before=`/`After=` задают порядок, а `Requires=` — обязательность успешной
|
||
активации dependency. Drop-in нужен потому, что один `Before=sing-box.service`
|
||
в guard unit не заставляет sing-box запускать guard и не блокирует sing-box при
|
||
ошибке guard.
|
||
|
||
Guard является `Type=oneshot` с `RemainAfterExit=yes`. Эти зависимости защищают
|
||
совместный запуск units, но не являются watchdog для ручного удаления таблицы
|
||
`inet vpn_egress_guard`. Текущее runtime-состояние проверяет
|
||
`vpn-egressctl doctor`.
|
||
|
||
Units устанавливаются без автоматического enable/start. Их включение выполняется
|
||
явно по инструкции `docs/migration.md`, после проверки локальных значений policy.
|
||
|
||
## Граница релиза 0.2.0
|
||
|
||
`debian/preinst` отклоняет установку 0.2.0 поверх другого релиза. `postinst`
|
||
устанавливает новый policy только при отсутствии файла и запускает строгую
|
||
проверку: legacy policy/state и unmanaged sing-box config не мигрируют.
|
||
|
||
Переход выполняется только по clean-install runbook с runtime mask для
|
||
`sing-box.service`; anti-leak guard сохраняется до завершения acceptance.
|
||
Повторная установка ровно версии 0.2.0 разрешена только при согласованных state
|
||
и generated config; `preinst` отклоняет все cross-release переходы.
|