ИШ ставится при подготовке; на шаге «Шлюз НРД» — версия и «Установить заново»; ссылка на НРД вместо писем

- «Подготовка модулей»: ИШ нет на сервере — bj ставит его из дистрибутива на
  сервере (образ или обновление bj — версия, проверенная ZETIT), ход — в списке.
- Шаг «Шлюз НРД»: установлен и работает — версия; не стоит или не работает —
  одна кнопка «Установить ИШ» / «Установить ИШ заново» (систему переставлять не
  нужно). «Скачать с сайта НРД» и «Установить из файла» — только в режиме
  разработки: версию ИШ меняем после своей проверки, вместе с обновлением bj.
- Каналы TEST3 и боевого: до установки ИШ — «канал создаётся после установки
  ИШ», после — «Создать канал».
- «Письма в НРД о доступе к контурам» убраны: НРД подключает заявкой на сайте —
  ссылка на «MOEX МОСТ для M2M», раздел «Как подключиться».

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 17:30:58 +03:00
parent bb4bf3313c
commit b4cfa65699
5 changed files with 150 additions and 23 deletions
+31
View File
@@ -329,6 +329,37 @@ func refreshCertStore(rc *RuntimeConfig) {
}
// igateBundledVersion — версия ИШ, лежащего на сервере с образа (/var/lib/bj/igate-dist; "" — нет).
// igateInstallState — ход установки ИШ (файл пишет установщик bj-igate-admin).
type igateInstallState struct {
Stage, Msg string
Busy bool // установка идёт (не done/error и файл обновлялся недавно)
}
// igateInstallStatusPath — файл хода установки; var — для тестов.
var igateInstallStatusPath = "/var/lib/bj/igate-install-status.json"
func igateInstallStatus() igateInstallState {
p := igateInstallStatusPath
var st igateInstallState
b, err := os.ReadFile(p)
if err != nil {
return st
}
var raw struct{ Stage, Msg string }
if json.Unmarshal(b, &raw) != nil {
return st
}
st.Stage, st.Msg = raw.Stage, raw.Msg
if fi, err := os.Stat(p); err == nil && st.Stage != "done" && st.Stage != "error" {
// установщик обновляет файл на каждом этапе; молчит 20 минут — установка прервалась
st.Busy = time.Since(fi.ModTime()) < 20*time.Minute
if !st.Busy {
st.Stage, st.Msg = "error", "установка прервалась ("+st.Msg+")"
}
}
return st
}
func igateBundledVersion() string {
m, _ := filepath.Glob("/var/lib/bj/igate-dist/igate-*-amd64.zip")
best := ""