Первичная настройка, часть 3: установка ИШ из bj (скачать с nsd.ru или из файла; без графики: keyring, xvfb, dbus; база, служба) — проверено чистой установкой на Ubuntu 22.04; два контура НРД: каналы TEST3 и боевой в ИШ (адреса и отпечатки УЦ из документа НРД об ИШ 107), свои ключи (мастер ключа — выбор контура, профиль только к каналу контура), переключение bj между контурами с базой DEPO контура и подтверждением для боевого; папка входящих и слежение за связью — по активному контуру; пакеты ИШ в установщике и образе

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-05 16:35:53 +03:00
parent 17df53f25b
commit 4332e3309b
20 changed files with 709 additions and 46 deletions
+8 -2
View File
@@ -38,9 +38,15 @@ type nsdPoll struct {
// nsdLastPolls — итоги опросов НРД из хвоста журнала ИШ: последний опрос и первый неудачный после
// последнего успешного (начало текущего сбоя; nil — сбоя нет).
func nsdLastPolls(tail []byte) (last, firstFail *nsdPoll) {
return nsdLastPollsFor(tail, "")
}
// nsdLastPollsFor — то же для канала одного контура: при двух каналах в ИШ (TEST3 и боевой) опросы чужого
// контура не учитываются. prefix — начало имени канала в журнале («TEST3», «PROD»); пусто — все.
func nsdLastPollsFor(tail []byte, prefix string) (last, firstFail *nsdPoll) {
for _, ln := range strings.Split(string(tail), "\n") {
m := nsdPollRe.FindStringSubmatch(strings.TrimRight(ln, "\r"))
if m == nil {
if m == nil || (prefix != "" && !strings.HasPrefix(strings.ToUpper(strings.TrimSpace(m[2])), prefix)) {
continue
}
at, err := time.ParseInLocation("2006-01-02 15:04:05", m[1], time.Local)
@@ -105,7 +111,7 @@ func nsdLinkTick(rc *RuntimeConfig, now time.Time) {
if err != nil {
return
}
last, firstFail := nsdLastPolls(tail)
last, firstFail := nsdLastPollsFor(tail, contourChannel(contourOf(rc.Snapshot().NSD.Profile)))
if last == nil {
return
}