ИШ 110.0.997 в обновлении + полный бэкап и откат ИШ
- Одобрен дистрибутив ИШ 110.0.997 (deploy/release/igate-approved): клиенты получают его компонентом igate-dist, bj-server обновляет ИШ сам (igateAutoUpgrade) после применения обновления. Проверено на 28: установка 107.0.930 → 110.0.997 штатным bj-igate-admin, каналы сохранены, круг #M2MHR → #M2MTH с НРД TEST3 и приём ответа поллером bj — работают. - Бэкап перед установкой/обновлением ИШ стал полным: кроме /opt/nsd/igate и дампа базы — данные /var/lib/igate (без флешки с ключом и кэша), юнит, обёртка запуска, версия. Раньше откатиться было нечем: igate-dist.zip перезаписывается новой версией. - bj-igate-admin rollback / rollback-now: возврат программы, данных и базы ИШ из последнего бэкапа (pg_restore от postgres — с мандатными метками Astra). После отката пришедшая версия не ставится автоматически (/var/lib/bj/igate-autoupgrade-skip), следующая — снова да. Проверено на 28: 110.0.997 → 107.0.930 за 40 с, обмен с НРД работает. - «Шлюз НРД»: кнопка «Откатить ИШ к <версия>», когда есть полная резервная копия. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -215,6 +215,16 @@ func registerIgateAdmin(mux *http.ServeMux, rc *RuntimeConfig) {
|
||||
defer cancel()
|
||||
jsonOut(w, opResult(runKeymediaOp(ctx, "igate-install", map[string]string{"extra": string(extra)})))
|
||||
})
|
||||
// откат ИШ к версии из последней резервной копии (её делает каждая установка/обновление)
|
||||
mux.HandleFunc("/admin/setup/igate/rollback", func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.Method != http.MethodPost {
|
||||
http.Error(w, "method", http.StatusMethodNotAllowed)
|
||||
return
|
||||
}
|
||||
ctx, cancel := context.WithTimeout(r.Context(), time.Minute)
|
||||
defer cancel()
|
||||
jsonOut(w, opResult(runKeymediaOp(ctx, "igate-rollback", nil)))
|
||||
})
|
||||
// ход установки: этап, сообщение, журнал и сколько секунд идёт текущий этап (по времени записи файла)
|
||||
mux.HandleFunc("/admin/setup/igate/install-status", func(w http.ResponseWriter, r *http.Request) {
|
||||
raw, err := os.ReadFile(igateInstallStatusPath)
|
||||
@@ -461,12 +471,19 @@ func igateInstallDist(ctx context.Context) error {
|
||||
// igateAutoUpgrade — ИШ на сервере старее дистрибутива, пришедшего с обновлением bj: обновить (настройки,
|
||||
// каналы и база ИШ сохраняются; прежняя версия копируется в /var/backups). Вызывается после обновления bj
|
||||
// и при запуске bj-server (обновление ядра перезапускает его до того, как успел бы сработать первый вызов).
|
||||
// igateAutoUpgradeSkipPath — версия дистрибутива, с которой ИШ откатили (её автоматически не ставим).
|
||||
var igateAutoUpgradeSkipPath = "/var/lib/bj/igate-autoupgrade-skip"
|
||||
|
||||
func igateAutoUpgrade(ctx context.Context, rc *RuntimeConfig) {
|
||||
cur := ishInstalledVersion()
|
||||
_, dist := igateDistFile()
|
||||
if !igateInstalled() || cur == "" || dist == "" || !release.IsNewer(dist, cur) || igateInstallStatus().Busy {
|
||||
return
|
||||
}
|
||||
// ИШ откатили с этой версии вручную — сам не ставим, пока не придёт следующая
|
||||
if b, err := os.ReadFile(igateAutoUpgradeSkipPath); err == nil && strings.TrimSpace(string(b)) == dist {
|
||||
return
|
||||
}
|
||||
log.Printf("lk-gateway: ИШ %s старее проверенного дистрибутива %s — обновляю", cur, dist)
|
||||
if err := igateInstallDist(ctx); err != nil {
|
||||
raiseSystemAlert(rc, "ИШ не обновлён до "+dist, "Пришёл дистрибутив ИШ "+dist+", но обновление не запустилось: "+err.Error()+". Повторить — мастер, шаг «Шлюз НРД».")
|
||||
|
||||
Reference in New Issue
Block a user