Ключ: два пути — «Подключить флешку с ключом» или «Сформировать ключ на новой флешке»; обновление одним заходом

- Шаг «Ключ подписи» начинается с вопроса «Где ваш ключ?»: подключить
  подготовленную флешку (bj находит на ней ключ и подключает как есть) или
  сформировать ключ на новой флешке (архив НРД и пароль → распаковка → bj ждёт
  чистую флешку; без флешки записи нет — «вставьте и обновите страницу»). Этапы
  показываются, когда путь выбран, — свои у каждого пути.
- Обновление больше не делится на два захода, когда вместе с bj обновляется и
  установщик обновлений: откладывание bj-installer нужно только установщикам
  старше 25.09.2026, которые его не знают.

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-10-06 18:35:14 +03:00
parent 8071c3f9af
commit e7d81ea2a9
4 changed files with 71 additions and 32 deletions
+8 -3
View File
@@ -42,6 +42,9 @@ const updateStagingDir = "/var/lib/bj/update-staging"
// DefaultUpdateURL — сервер обновлений по умолчанию (встроен в сервер лицензий).
const DefaultUpdateURL = "https://lic.zetit.ru/updates"
// installerKnowsAll — с этой версии root-установщик обновлений знает bj-installer и ставит выделенные модули.
const installerKnowsAll = "2026.09.25"
type Updater struct{ rc *RuntimeConfig }
func NewUpdater(rc *RuntimeConfig) *Updater { return &Updater{rc: rc} }
@@ -287,11 +290,13 @@ func (u *Updater) applyUpdate(ctx context.Context, names []string) (string, erro
}
return "", fmt.Errorf("нечего обновлять: все установленные компоненты актуальны (релиз %s)", m.Version)
}
// Прежний root-установщик не умеет впервые ставить выделенные из ядра модули: пока он сам не
// обновлён, такие модули откладываются — их поставит ensureSplitModules после перезапуска.
// Очень старый root-установщик (до 25.09.2026) не знает bj-installer и не ставит впервые выделенные
// из ядра модули: пока он сам не обновлён, такие компоненты откладываются (второй заход). Установщик
// новее этого умеет всё — обновление одним заходом, даже если вместе с ним обновляется и он сам
// (раньше любое его обновление делило установку на два раза: «скачал 24 МБ — снова „Обновить“ — ещё 6»).
installerOutdated := false
for _, c := range plan {
if c.Name == "bj-component-install" && c.Update {
if c.Name == "bj-component-install" && c.Update && (c.Installed == "" || release.IsNewer(installerKnowsAll, c.Installed)) {
installerOutdated = true
}
}