Обновления несут установщик: 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
+15 -2
View File
@@ -195,7 +195,7 @@ func (u *Updater) ApplyUpdate(ctx context.Context, names []string) (string, erro
if installerOutdated {
kept := selected[:0]
for _, c := range selected {
if c.New {
if c.New || c.Name == "bj-installer" { // bj-installer прежний установщик обновлений не знает
deferred = append(deferred, c.Name)
continue
}
@@ -269,11 +269,24 @@ func (u *Updater) allowed(feature string) bool { return moduleAllowed(u.rc, feat
// этих модулей в bj не работают. Раз за запуск bj-server; ошибки — только в журнал и «Последнюю проверку».
func (u *Updater) ensureSplitModules(ctx context.Context) {
var names []string
for _, c := range release.Plan("", nil, release.LoadInstalled(release.InstalledFile), BuildVersion) {
installed := release.LoadInstalled(release.InstalledFile)
for _, c := range release.Plan("", nil, installed, BuildVersion) {
if c.FromCore && !c.Present && u.allowed(c.Feature) {
names = append(names, c.Name)
}
}
// bj-installer обновлением ещё не ставился (сервер с образа или обновлён прежним установщиком
// обновлений): ставим сразу — с ним приезжают свежие службы и скрипты. Только если на сервере
// обновлений он новее, иначе ApplyUpdate вернёт «обновление не требуется» — это не ошибка.
if _, ok := installed["bj-installer"]; !ok && licenseStatus(u.rc).AllowsUpdates {
if st, err := u.CheckForUpdate(ctx); err == nil {
for _, c := range st.Components {
if c.Name == "bj-installer" && c.Update {
names = append(names, c.Name)
}
}
}
}
if len(names) == 0 {
return
}