Transport Packaging Scripts
Эти скрипты реализуют MVP для manual + pinned доставки transport-бинарей
в режиме runtime_mode=exec.
Файлы
manifest.example.json— шаблон pinned-манифеста (заполнить реальными версиями/URL/checksum).manifest.production.json— pinned production-манифест с зафиксированными версиями и checksum.source_policy.example.json— шаблон trusted-source/signature policy.source_policy.production.json— production policy с trusted URL-prefix и режимами подписи.update.sh— ручной update (скачивание, checksum verify, атомарный switch symlink, history).auto_update.sh— opt-in обёртка надupdate.sh(interval gate + lock + jitter).rollback.sh— откат на предыдущую версию из history.systemd/transport-packaging-auto-update.{service,timer}— шаблоны для systemd расписания.
Быстрый старт
- Выберите манифест:
- production:
scripts/transport-packaging/manifest.production.json; - кастомный: скопируйте
manifest.example.jsonи заполните значения.
- Для кастомного манифеста заполните:
enabled=trueдля нужных компонентов;version,url,sha256для каждой target-платформы.
- Выполните update:
./scripts/transport-packaging/update.sh \
--manifest /path/to/manifest.json \
--source-policy ./scripts/transport-packaging/source_policy.production.json \
--component singbox,dnstt \
--target linux-amd64
- При проблеме откатите:
./scripts/transport-packaging/rollback.sh \
--bin-root /opt/selective-vpn/bin \
--component singbox,dnstt
Поведение update.sh
- Поддерживает
packaging_profile=system|bundledв API-контракте. - Для
bundledактивный бинарь переключается symlink вbin_root. - История обновлений:
BIN_ROOT/.packaging/<component>.history. - Fail-fast валидация checksum (
sha256sum) обязательна. - Trusted source policy:
--source-policyограничивает допустимые URL (https, host/prefix allowlist).- для
manifest.production.jsonpolicy подхватывается автоматически изsource_policy.production.json.
- Signature policy:
- настраивается через
policy.signature.default_modeиcomponents.<name>.signature_mode(off|optional|required); - поддержан
signature.type=openssl-sha256(detached signature); - для
requiredнужны поляsignature.url+signature.public_key_path(и опциональноsignature.sha256).
- настраивается через
- Staged rollout / canary:
target.rollout.stage:stable|canary(defaultstable);target.rollout.percent:0..100(default100);- runtime-флаги:
--rollout-stage,--cohort-id,--force-rollout,--canary.
Auto-update opt-in
- По умолчанию выключен (
--enabled false). - Скрипт
auto_update.sh:- запускает
update.shтолько приenabled=true; - защищён lock'ом (
flock) от параллельных запусков; - поддерживает интервал запуска (
--min-interval-sec) и jitter (--jitter-sec); - хранит state в
.../.packaging/auto-update(last_run_epoch,last_success_epoch,last_error).
- запускает
Пример ручного запуска:
./scripts/transport-packaging/auto_update.sh \
--enabled true \
--manifest ./scripts/transport-packaging/manifest.production.json \
--source-policy ./scripts/transport-packaging/source_policy.production.json \
--component singbox,phoenix \
--min-interval-sec 21600 \
--jitter-sec 300
Шаблон systemd:
- Скопировать
systemd/transport-packaging-auto-update.serviceи.timerв/etc/systemd/system/. - Скопировать
systemd/transport-packaging-auto-update.env.exampleв/etc/selective-vpn/transport-packaging-auto-update.env. - Включить timer:
sudo systemctl daemon-reload
sudo systemctl enable --now transport-packaging-auto-update.timer
Примеры rollout
# Установить только stable targets
./scripts/transport-packaging/update.sh \
--manifest ./scripts/transport-packaging/manifest.production.json \
--rollout-stage stable
# Установить только canary targets для конкретного cohort
./scripts/transport-packaging/update.sh \
--manifest /path/to/manifest-with-canary.json \
--rollout-stage canary \
--cohort-id 5
Ограничения MVP
- Обновление запускается вручную (без авто-таймера).
- Нет фонового scheduler/каналов обновления.
- В
manifest.production.jsonкомпонентdnsttвыключен по умолчанию (enabled=false), т.к. текущий источник prebuilt-бинарей не является официальным release upstream.