Files
Bridge-and-Join-s/deploy/artifactory
zuevav 9737c787f9 feat: живой цикл M2M с НРД + мастер установки ключа на флешку
Инфраструктура M2M (живой обмен с НРД через ИШ):
- обработка M2MTransferResponse: ERROR(M2Mxx) → заявка Отклонена, сохранение
  ответа; INFO → ждём Decision; идемпотентность поллера
- fallback-корреляция ответов с нулевым GUID (M2M14/M2M17) по FIFO
- сырой XML ответа НРД в карточке заявки (для пересылки в ТП)
- тестовый пакет роботу приведён к эталону m2m_robot_samples (CostInfo=Yes,
  4 бумаги, IsolationStatus, DocumentSeries=сценарий); override паспорта
- редирект из теста сразу в карточку заявки

Мастер установки ключа Валидаты на флешку (admin/setup/keywizard):
- пошаговый: загрузка .7z+пароль → выбор флешки → запись → справочник
  сертификатов (CRL) → перезапуск+проверка ИШ → готово
- привилегированный воркер (bj-keymedia) в host-namespace через файл-обмен,
  bj-server остаётся в песочнице
- сохранение структуры профиля архива (spr<N>), перечисление съёмных USB

Прочее:
- пакет-доказательство для ТП НРД + форма регистрации участника M2M
- эталонные образцы робота (DOC/m2m_robot_samples)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 00:03:21 +03:00
..

Артефактория Bridge-and-Join-s

Сервис раздачи релизов и обновлений (#18). Клиенты (bj-server auto-update, install.sh) скачивают подписанный манифест канала, проверяют подпись зашитым публичным ключом и обновляют компоненты.

Компоненты

  • internal/release — формат манифеста + подпись Ed25519 (sign/verify, хеши).
  • cmd/bj-release — инструмент издателя: генерация ключей, сборка и подпись манифеста.
  • cmd/bj-artifactory — HTTP-сервер раздачи манифеста и артефактов.
  • deploy/artifactory/ — nginx (TLS) + systemd unit.

Модель доверия

Один корневой Ed25519-ключ. Приватный (signing.priv) держит издатель в секрете (НЕ в git). Публичный (signing.pub) зашивается в bj-server и в install.sh. Манифест подписывается целиком — клиент проверяет подпись ДО доверия версиям и хешам артефактов, затем сверяет sha256 каждого скачанного файла с манифестом.

Релизный цикл (издатель)

# 1. Однократно — сгенерировать ключи подписи (приватный хранить в секрете!)
bj-release keygen -out ./keys/signing
#   → keys/signing.priv (секрет), keys/signing.pub
#   Публичный base64 из вывода — зашить в bj-server (auto-update, #20)

# 2. Собрать артефакты релиза в каталог
mkdir -p dist/stable
cp bj-server crypto-service.jar dist/stable/
cp deploy/linux/install-validata.sh deploy/ish/configure-ish.sql dist/stable/

# 3. Собрать + подписать манифест
bj-release build -dir dist/stable -version 1.0.0 -channel stable \
    -key keys/signing.priv -keyid main -out dist/stable/manifest.json \
    -notes "Первый релиз"

# 4. Выложить каталог в хранилище артефактории
rsync -a dist/stable/ server:/var/lib/bj-artifactory/releases/stable/

Сервер

bj-artifactory --addr 127.0.0.1:8090 --root /var/lib/bj-artifactory/releases

Раскладка хранилища:

releases/
  stable/
    manifest.json          ← подписанный SignedManifest
    bj-server
    crypto-service.jar
    install-validata.sh
    configure-ish.sql
  beta/
    manifest.json
    ...

HTTP API

Метод Путь Ответ
GET /v1/<channel>/manifest.json подписанный манифест канала
GET /v1/<channel>/files/<name> артефакт по имени
GET /healthz ok

За TLS-reverse-proxy (nginx.conf). Прод: updates.example.com → 127.0.0.1:8090.

Дальше

  • #19 License-сервер — манифест/обновления гейтятся годовым ключом.
  • #20 Auto-update в bj-server — горутина: качает манифест канала, проверяет подпись, сравнивает версии, atomic-replace бинарей, systemctl restart.