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

163 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Процесс: сборка, релиз, авто-раскат и обновление образа 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)
```sh
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 на стенде и проверить. **До клиентов не доходит.**
```sh
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. **Закоммитить и запушить** изменения:
```sh
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. **Собрать и опубликовать**:
```sh
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. **Закоммитить бамп версий** (скрипт изменил файл состояния):
```sh
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. **Проверка**:
```sh
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`):
```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`).
Рабочая команда:
```sh
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`:
```sh
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` (на рабочем стенде держим выключенной, чтобы обновлялись осознанно).