Обновления несут установщик: 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
+23
View File
@@ -81,6 +81,8 @@ func main() {
switch os.Args[1] {
case "install":
cmdInstall(os.Args[2:])
case "refresh-system":
os.Exit(refreshSystem())
case "first-run-code":
cmdFirstRunCode(os.Args[2:])
case "version":
@@ -93,6 +95,7 @@ func main() {
func usage() {
fmt.Fprintln(os.Stderr, "bj-installer install --code BJ-XXXX-XXXX-XXXX [--server https://lic.zetit.ru] [--channel stable] [--dry-run]")
fmt.Fprintln(os.Stderr, "bj-installer first-run-code")
fmt.Fprintln(os.Stderr, "bj-installer refresh-system (переписать службы и скрипты из этой версии установщика)")
fmt.Fprintln(os.Stderr, "bj-installer version")
os.Exit(2)
}
@@ -742,6 +745,26 @@ func (in *installer) stepServices() (string, error) {
return strings.Join(files, ", ") + "; криптосервис включается после настройки ключей в bj", nil
}
// refreshSystem — «bj-installer refresh-system»: переписать службы systemd и служебные скрипты
// из этой версии установщика (вызывается root-установщиком обновлений после обновления самого
// bj-installer). Работающие службы не перезапускаются: ядро перезапустит обновление, а служба
// root-операций bj-keymedia — через минуту, когда обновление, которое она выполняет, закончится.
func refreshSystem() int {
if os.Geteuid() != 0 {
fmt.Fprintln(os.Stderr, "refresh-system: нужны права root")
return 1
}
in := &installer{}
msg, err := in.stepServices()
if err != nil {
fmt.Fprintln(os.Stderr, "refresh-system:", err)
return 1
}
_, _ = run("systemd-run", "--on-active=60", "--unit=bj-keymedia-refresh", "systemctl", "try-restart", "bj-keymedia.service")
fmt.Println("системные файлы обновлены:", msg)
return 0
}
func (in *installer) stepFirstRun() (string, error) {
code, err := in.newFirstRunCode()
if err != nil {