7c653a2490
bj собирает версии своих компонентов и внешних систем (в фоне, кэш 10 минут, прогрев при старте): ядро и модули bj (components.json или «-version»), экспортёр ARQA (служба bj-quikexport, /version), криптосервис (Health), «Валидата CSP» (zpki1utl), Java, ИШ НРД (deps.json + сайт НРД), МНП QUIK (VersionInfo), DEPO (OD_DATA_VERSION), PostgreSQL, ОС. «Настройка → Обзор» — таблица «Версии систем» с кнопкой «Обновить сведения»; в разделах БД, Fancy, QUIK МНП, Экспорт QUIK, Криптография, НРД, ЛК, НПР и Обновления — строка с версией. В таблице обновлений у компонентов, выложенных вручную, вместо «неизвестна» — версия самого компонента. bj-component-install: -version. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
51 lines
2.6 KiB
Go
51 lines
2.6 KiB
Go
// Command bj-component-install — root-установщик компонентов bj (независимые обновления).
|
|
//
|
|
// bj-server работает без прав root: он скачивает подписанный манифест релиза и выбранные файлы в
|
|
// каталог подготовки и просит root-воркер (bj-keymedia-worker, действие component-install) вызвать
|
|
// этот инструмент. Проверка и установка — release.InstallStaged: подпись манифеста ключом из
|
|
// /etc/bj/update.pub (принадлежит root), sha256 файлов, только известные компоненты, без отката,
|
|
// копия прежнего файла, перезапуск служб (ядро последним), записи в /var/lib/bj/.bj/components.json.
|
|
// Выделенным из ядра модулям, которые ставятся впервые, ставит и включает unit-файл службы из комплекта.
|
|
// Вывод — JSON для bj-server.
|
|
//
|
|
// bj-component-install <каталог подготовки>
|
|
// bj-component-install -root /tmp/песочница -pub test.pub -no-restart <каталог> (проверка на копии)
|
|
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
|
|
"git.zetit.ru/zuevav/Bridge-and-Join-s/deploy"
|
|
"git.zetit.ru/zuevav/Bridge-and-Join-s/internal/release"
|
|
)
|
|
|
|
// version — версия установщика (go build -ldflags "-X main.version=…").
|
|
var version = "0.1.0"
|
|
|
|
func main() {
|
|
fs := flag.NewFlagSet("bj-component-install", flag.ExitOnError)
|
|
root := fs.String("root", "", "корень установки (для проверки в песочнице; по умолчанию /)")
|
|
pubPath := fs.String("pub", "/etc/bj/update.pub", "открытый ключ подписи релизов (base64 Ed25519), файл root")
|
|
noRestart := fs.Bool("no-restart", false, "не перезапускать службы")
|
|
showVersion := fs.Bool("version", false, "показать версию")
|
|
_ = fs.Parse(os.Args[1:])
|
|
if *showVersion {
|
|
fmt.Println("bj-component-install", version)
|
|
return
|
|
}
|
|
var res release.InstallResult
|
|
if pub, err := release.LoadPublicKey(*pubPath); err != nil {
|
|
res.Error = fmt.Sprintf("открытый ключ обновлений (%s): %v", *pubPath, err)
|
|
} else {
|
|
res = release.InstallStaged(fs.Arg(0), release.InstallOptions{Root: *root, PubKey: pub, Restart: !*noRestart, Units: deploy.Files})
|
|
}
|
|
b, _ := json.Marshal(res)
|
|
fmt.Println(string(b))
|
|
if !res.OK {
|
|
os.Exit(1)
|
|
}
|
|
}
|