Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX
10 KiB
Процесс: сборка, релиз, авто-раскат и обновление образа 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. Чтобы раскатать код (в т.ч. наработки Вадима) автоматом:
- Закоммитить и запушить изменения:
git -c user.name="fontvielle" -c user.email="heathsavagehcyz@hotmail.com" commit -m "…" git push origin feature/keywizard-m2m-live - Версия —
ГГГГ.ММ.ДД.N(N — номер выпуска за день). Пример:2026.10.16.1. - Собрать и опубликовать:
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хранит только текущий выпуск — предыдущий удаляется (отката «назад на версию» на сервере нет; откат = собрать и опубликовать прежнюю версию заново).
- собирает и подписывает манифест;
- Закоммитить бамп версий (скрипт изменил файл состояния):
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 - Проверка:
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 не тянутся из сети); - (опц.)
IGATEzip — одобренный ИШ (ставится из мастера без интернета).
Сборка (порядок аргументов — см. шапку 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(на рабочем стенде держим выключенной, чтобы обновлялись осознанно).