Обновления несут установщик: bj-installer — компонент ядра, refresh-system переписывает службы и скрипты; мастер предлагает обновиться сразу после ввода ключа

Правки установки приезжают обновлением с сервера лицензий, образ ISO пересобирать не нужно.
Прежний установщик обновлений bj-installer не знает — он откладывается и ставится после
перезапуска bj-server (ensureSplitModules).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
zuevav
2026-09-24 17:44:28 +03:00
parent 222699168d
commit fdd70c06dd
6 changed files with 74 additions and 6 deletions
+4
View File
@@ -32,6 +32,10 @@ type Component struct {
var Components = []Component{
{Name: "bj-server", Title: "Ядро bj: переводы M2M, DEPO, QUIK МНП, ЛК ЕСИА", Path: "/opt/bj/bj-server", Unit: "bj-server", Exec: true, Core: true, Feature: "updates"},
{Name: "bj-component-install", Title: "Установщик обновлений", Path: "/usr/local/sbin/bj-component-install", Exec: true, Core: true, Feature: "updates"},
// Установщик несёт системные файлы (службы systemd, служебные скрипты): после его обновления
// они переписываются командой «bj-installer refresh-system» — правки установки приезжают
// обновлением, образ ISO пересобирать не нужно.
{Name: "bj-installer", Title: "Установщик и системные файлы (службы, скрипты)", Path: "/usr/local/sbin/bj-installer", Exec: true, Core: true, Feature: "updates"},
{Name: "crypto-service.jar", Title: "Криптосервис", Path: "/opt/bj/crypto-service.jar", Unit: "bj-crypto", Feature: "updates"},
{Name: "bj-lk", Title: "Личный кабинет клиента", Path: "/opt/bj/bj-lk", Unit: "bj-lk", Exec: true, Feature: "web-cabinet"},
{Name: "bj-npr", Title: "Риск-монитор НПР / УДС", Path: "/opt/bj/bj-npr", Unit: "bj-npr", Exec: true, FromCore: true, Feature: "npr"},
+8
View File
@@ -153,6 +153,14 @@ func InstallStaged(staging string, opt InstallOptions) (res InstallResult) {
return fail("включение служб %s: %v: %s", strings.Join(newUnits, ", "), err, strings.TrimSpace(string(out)))
}
}
for _, j := range jobs {
if j.c.Name == "bj-installer" && opt.Root == "" {
// новые службы и скрипты из обновлённого установщика; перезапуск служб — отдельно ниже
if out, err := exec.Command(j.c.Path, "refresh-system").CombinedOutput(); err != nil {
return fail("обновление системных файлов (bj-installer refresh-system): %v: %s", err, strings.TrimSpace(string(out)))
}
}
}
if err := SaveInstalled(installedPath, installed); err != nil {
return fail("запись установленных версий: %v", err)
}