Files
Bridge-and-Join-s/docs/release-process.md
T

10 KiB
Raw Blame History

Процесс: сборка, релиз, авто-раскат и обновление образа bj

Рабочая памятка на каждый выпуск — чтобы не вспоминать заново. Меняется процесс или пути — правьте этот файл тем же коммитом.

Пометки: ✅ — проверено на практике (последний раз релиз 2026.10.16.1, 16.10.2026); 📜 — по скриптам/README, в этой памятке ещё не прогонялось, перед первым разом сверить.

0. Где что (топология)

Узел Адрес Роль
astramost 195.239.71.22:22451 (внутр. 10.10.10.28), Astra Linux, fontvielle (sudo без пароля), доступ по SSH ограничен по IP Исходники /opt/bj/src (ветка feature/keywizard-m2m-live), сборка, релизы, здесь же крутится рабочий bj (/opt/bj/bj-server) и база BJ (PostgreSQL). «28 сервер» в разговоре — это он.
lic ВМ 46.173.19.220, Ubuntu Сервер лицензий и обновлений lic.zetit.ru. Раздаёт обновления …/updates/v1/<канал>/manifest.json и установочный образ (канал iso). Публикуем на неё с astramost по ssh root@46.173.19.220 (по ключу).
git ssh://git@git.zetit.ru:32774/zuevav/Bridge-and-Join-s.git (origin) Исходники bj.
lic-репо zuevav/lic_Bridge-and-Join-s, клон ~/lic_Bridge-and-Join-s Код сервера лицензий + скрипты публикации (deploy/publish-release.sh). Клиентам не поставляется.

1. Окружение (один раз за сессию на astramost)

export PATH=$HOME/sdk/go1.26.8/bin:$HOME/go/bin:$PATH

Предпосылки релиза (проверить при сомнениях):

  • Go go1.26.8 и garble (~/go/bin/garble) — нужны для обфускации пакета fsql.
  • Ключ подписи релиза ~/keys/release-signing.priv (закрытый, на lic не попадает).
  • crypto-service.jar — /opt/bj/crypto-service.jar.
  • Одобренный ИШ — ~/ish-upgrade/igate-<версия через дефис>-amd64.zip, sha256 должна совпасть с deploy/release/igate-approved (сейчас 107.0.930).
  • Доступ ssh root@46.173.19.220 (для публикации).

2. Быстрый деплой на рабочий сервер astramost (без релиза) ✅

Когда надо просто обновить bj на стенде и проверить. До клиентов не доходит.

cd /opt/bj/src
go build -o /tmp/bj-server ./cmd/bj-server
sudo systemctl stop bj-server
sudo cp -a /opt/bj/bj-server /opt/bj/bj-server.bak-$(date +%Y%m%d-%H%M%S)   # бэкап
sudo cp /tmp/bj-server /opt/bj/bj-server
sudo chown root:root /opt/bj/bj-server && sudo chmod 755 /opt/bj/bj-server
sudo systemctl start bj-server
systemctl is-active bj-server

Откат — вернуть предыдущий bj-server.bak-* на место и перезапустить.

3. Релиз и авто-раскат на клиентов ✅

Клиентские установки с авто-обновлением тянут из канала на lic. Чтобы раскатать код (в т.ч. наработки Вадима) автоматом:

  1. Закоммитить и запушить изменения:
    git -c user.name="fontvielle" -c user.email="heathsavagehcyz@hotmail.com" commit -m "…"
    git push origin feature/keywizard-m2m-live
    
  2. Версия — ГГГГ.ММ.ДД.N (N — номер выпуска за день). Пример: 2026.10.16.1.
  3. Собрать и опубликовать:
    scripts/build-release.sh 2026.10.16.1 stable publish
    
    • собирает и подписывает манифест; bj-server — с garble-обфускацией fsql (SQL-рецепты DEPO/QUIK не читаются strings);
    • версию поднимает только изменившимся компонентам (по отпечатку исходников); остальные остаются на прежней версии;
    • неизменные файлы (ИШ ~160 МБ, crypto-service.jar) на lic не перезаливает, а копирует там;
    • публикует на lic и делает выпуск текущим для канала.
    • ⚠️ канал stable хранит только текущий выпуск — предыдущий удаляется (отката «назад на версию» на сервере нет; откат = собрать и опубликовать прежнюю версию заново).
  4. Закоммитить бамп версий (скрипт изменил файл состояния):
    git add deploy/release/component-versions.json
    git -c user.name="fontvielle" -c user.email="heathsavagehcyz@hotmail.com" commit -m "Релиз 2026.10.16.1 (stable): версии компонентов"
    git push origin feature/keywizard-m2m-live
    
  5. Проверка:
    ssh root@46.173.19.220 'cat /var/lib/bj-license/releases/stable/current'   # → новая версия
    

Опции:

  • Каналы: stable (все боевые установки), beta (обкатка — затрагивает только тех, кто на beta).
  • Собрать без публикации: тот же вызов без publish — бандл ляжет в dist/release-<версия>/.
  • Принудительная версия компонента: переменные BJ_SERVER_VERSION, INSTALLER_VERSION, COMPONENT_INSTALL_VERSION, NPR_VERSION, QUIKEXPORT_VERSION, LK_VERSION, CRYPTO_VERSION.

4. Обновление установочного образа (ISO) 📜

Образ — Ubuntu 22.04 Server с автоустановкой, собирается на astramost (deploy/iso/build-iso-ubuntu.sh), публикуется в канал iso на lic. Обновить = пересобрать с новым релиз-бандлом (п.3) и переопубликовать. Загрузку образа на самой astramost не проверить — нет вложенной виртуализации; проверка только на отдельной ВМ по docs/iso-proverka.md.

Входы (держим на astramost временно, после сборки build-iso-ubuntu.sh их рабочая копия в mktemp чистится — исходники надо иметь под рукой):

  • исходный ubuntu-22.04.x-live-server-amd64.iso;
  • каталог релиза dist/release-<версия> из п.3;
  • каталог Валидаты — ~/validata-kit (уже содержит zpki_*, zsdk_*, libldap-2.4-2_* amd64.deb — готовый каталог);
  • (опц.) слой офлайн-обновлений LAYER — deploy/iso/build-ubuntu-updates-layer.sh (система ставится уже с обновлениями, PostgreSQL/Java не тянутся из сети);
  • (опц.) IGATE zip — одобренный ИШ (ставится из мастера без интернета).

Сборка (порядок аргументов — см. шапку build-iso-ubuntu.sh):

deploy/iso/build-iso-ubuntu.sh \
  <ubuntu-22.04.x-live-server-amd64.iso> \
  dist/release-<версия>/bj-installer \
  <версия> \
  dist/release-<версия> \
  <каталог-Валидаты> \
  stable \
  bj-ubuntu22-<версия>.iso
# LAYER=<каталог> и IGATE=<zip> — переменными окружения, если нужны.

Проверено 16.10.2026 (сборка bj-ubuntu22-2026.10.16.1.iso) ✅

Исходный ISO: ~/iso-src/ubuntu-22.04.5-live-server-amd64.iso (с зеркала https://mirror.yandex.ru/ubuntu-releases/22.04/, SHA256 сверен с …/SHA256SUMS).

Рабочая команда:

IGATE=$HOME/ish-upgrade/igate-107-0-930-amd64.zip \
deploy/iso/build-iso-ubuntu.sh \
  $HOME/iso-src/ubuntu-22.04.5-live-server-amd64.iso \
  dist/release-2026.10.16.1/bj-installer \
  2026.10.16.1 \
  dist/release-2026.10.16.1 \
  $HOME/validata-kit \
  stable \
  $HOME/iso-src/bj-ubuntu22-2026.10.16.1.iso

Статическая проверка (xorriso): образ гибридный (MBR + El Torito BIOS и UEFI), set default=0, первый пункт меню «Установить Bridge&Join <версия>» с autoinstall ds=nocloud, на образе /nocloud/user-data, /bj/bundle/manifest.json (версия релиза), Валидата 3 пакета, ИШ.

Публикация в канал iso на lic — подписать и выложить как релиз в канал iso:

D=$HOME/iso-src/iso-pub && mkdir -p $D && cp $HOME/iso-src/bj-ubuntu22-<версия>.iso $D/
go run ./cmd/bj-release build -dir $D -version <версия> -channel iso -key ~/keys/release-signing.priv -keyid release -out $D/manifest.json
~/lic_Bridge-and-Join-s/deploy/publish-release.sh $D iso

⚠️ перед публикацией — проверить загрузку на отдельной ВМ (на astramost нельзя): UEFI и BIOS, по docs/iso-proverka.md.

5. Атрибуция коммитов

Каждый коммит завершать:

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX

Коммитить от git -c user.name="fontvielle" -c user.email="heathsavagehcyz@hotmail.com".

6. Полезное

  • Логи рабочего bj: /var/log/bj/bj-server.err (grep -a).
  • Конфиг: /var/lib/bj/.bj/setup.json (root/bj, 0600).
  • Канал обновления установки задаётся в её настройках (update.channel, пусто = stable); авто-проверка — update.auto_check (на рабочем стенде держим выключенной, чтобы обновлялись осознанно).