Skip to content

Обновления хаба и база уязвимостей ​

О системе

Раздел «О системе» хаба — версия самого хаба, обновление, общая база уязвимостей, кэш пакетов, база ClamAV, разбор моделью и приватный режим. Версии хостов — на странице «Хосты».

Проверка версий ​

Хаб раз в NKT_HUB_UPDATE_CHECK_INTERVAL (6 ч) спрашивает GitHub Releases (NKT_HUB_RELEASE_REPO), нет ли версии новее, и показывает бейдж в меню — только для сведения: само ничего не ставится. «Проверить снова» — разовая проверка сразу.

Ниже — описание релиза на языке интерфейса (из WHATSNEW.md и WHATSNEW.en.md). Пока обновления нет, там заметки установленной версии — полезно прочесть после обновления, что приехало.

Обновить хаб ​

«Обновить до vX.Y.Z» — заданием хаба с окном журнала (закрытое окно его не прерывает):

  1. скачивает бинарник под архитектуру этой машины и deploy/netknownsthat-hub.service того же тега, сверяет SHA256SUMS;
  2. кладёт бинарник в /usr/local/bin/nkt, юнит — в /etc/systemd/system/, затем daemon-reload и restart — через systemd-run в отдельном юните, потому что ProtectSystem=strict самого хаба писать туда не даёт;
  3. хаб на несколько секунд недоступен; открытая страница ждёт, пока он ответит уже новой версией, и перезагружается сама. Если за 3 минуты новой версии нет — страница так и говорит и подсказывает, где смотреть журнал установки.

В журнале задания — четыре шага строками: файл сумм, скачивание бинарника (с процентами; уже скачанный прошлой попыткой берётся из кэша, если сумма сходится), юнит systemd, установка и перезапуск. Если от GitHub 60 секунд не приходит ни байта, скачивание повторяется ещё раз, а потом задание заканчивается ошибкой «скачивание остановилось на N%» — а не висит; всё обновление ограничено 30 минутами.

Другие вкладки, открытые до обновления, работают на прежнем коде интерфейса, пока их не перезагрузить. Такая вкладка сама замечает новую сборку на сервере (раз в две минуты и при возврате на неё) и показывает плашку «Интерфейс nkt обновился… — обновите страницу». То же — после обновления nkt на хосте.

В подтверждении — галочка «После обновления хаба — обновить nkt на всех хостах», по умолчанию включённая. Тогда после перезагрузки сразу открываются «Хосты», и обновление nkt на хостах запускается само, без второго подтверждения: галочка и есть согласие. Обновляются все отставшие хосты, кроме тех, где обновление уже идёт, и упавших в прошлый раз (их — вручную, галочкой «повторить неудачные»). Признак «недоступен» сразу после перезапуска хаба ненадёжен, поэтому подключение проверяет само задание — у каждого хоста перед установкой; без подключения хост пропускается. Сразу открывается журнал задания; если обновлять некого — так и сказано. Запуск происходит, только если версия хаба действительно сменилась; не сменилась за полчаса — намерение снимается (запоминается в этом браузере).

Есть откат на предыдущую версию, если что-то пошло не так.

hub.env обновление не трогает — в отличие от nkt.env хостов, который хаб перегенерирует при каждой установке, он целиком на совести оператора.

Кнопка есть, только если хаб запущен как systemd-юнит (в окружении есть INVOCATION_ID). Иначе — пояснение вместо кнопки:

  • Docker / Kubernetes — бинарник в слое образа: обновление — docker compose pull && docker compose up -d или новый тег образа;
  • бинарник запущен вручную — поставьте хаб службой (установка), и кнопка появится.

Бета-версии ​

Тег vX.Y.Z-beta собирает такой же релиз, помеченный pre-release: бинарник с версией X.Y.Z-beta, образ :X.Y.Z-beta и :beta (:latest не трогается). Галочка «использовать бета-версии» переводит хаб на бета-канал: беты считаются обновлениями, «последняя доступная» перепроверяется сразу. Без галочки хаб на бете обновится до стабильной сборки той же версии, когда она выйдет. Хосты приводятся к версии хаба — бета-хаб раздаёт бету. Бета помечена бейджем «beta» в шапке и в «О системе».

Хосты после обновления хаба ​

Хост с версией, отличной от хаба, при открытии сначала обновляется; «обновить всё» в списке хостов — для всех отставших сразу (подробно — в Хостах).

База уязвимостей ​

Без хаба каждый хост при сканировании уязвимостей сам качает trivy (~50 МБ) и его базу (~100–150 МБ сжатой, ~1 ГБ распакованной). На хабе база одна:

  • хаб в фоне раз в NKT_HUB_VULNDB_REFRESH_INTERVAL (12 ч) проверяет её свежесть; скачивание — не чаще раза в сутки;
  • «Обновить сейчас» форсирует проверку (свежая база заново не качается);
  • «Сканировать» на странице «Уязвимости» хоста под хабом: хаб забирает у хоста манифест пакетов (дамп dpkg и /etc/os-release, сотни КБ) через SSH и сканирует его своей базой. Хосту для пакетов ОС не нужны ни trivy, ни база;
  • образы контейнеров сканируются на самом хосте — нужен его Docker/Podman-сокет. Хост с контейнерами один раз ставит trivy и базу только ради этой части; хост без контейнеров не качает ничего;
  • «localhost» использует тот же каталог базы (NKT_DATA_DIR/vuln).

База ClamAV ​

Копия базы сигнатур ClamAV на хабе. Заводится кнопкой в «О системе», дальше обновляется раз в NKT_HUB_CLAMDB_REFRESH_INTERVAL (24 ч, 0 — не обновлять), качается только изменившееся. На странице хоста во вкладке «Вредоносное» кнопка «база с хаба» заливает её по SSH — хосту без интернета не нужно ходить к зеркалам ClamAV.

Кэш пакетов ​

Размер, попадания, лимит и очистка — там же; устройство — на странице Кэш пакетов.

Разбор моделью и приватный режим ​

Настройка модели (Anthropic или OpenAI-совместимая, включая локальные), инструкции и галочка «скрыть чувствительное» — на странице Оповещения, задания, ИИ.

Справка ​

Значок «?» у названия раздела (на месте прежнего «ⓘ») при наведении показывает короткую подсказку, а по щелчку открывает раздел этого сайта для текущей страницы интерфейса — в окне внутри nkt; «Открепить» выносит справку в отдельное окно браузера (как терминал), «В новой вкладке» — обычной вкладкой. В редакторе конвейера, в «Секретах» и в мастере «Сайтов» — кнопки прямо на нужные разделы.

Значок справки

Справка

Адрес сайта — карточка «Справка» в «О системе» (и ссылка «Адрес справки…» в окне справки, в том числе у отдельного хоста без хаба): по умолчанию https://piqab.github.io/nkt/, можно свою копию — например, в локальной сети без интернета (npm run build в site/ проекта, результат — site/.vitepress/dist). Правка — с разницей перед записью и историей прежних адресов. Сайт описывает последнюю версию nkt; своя копия из того же коммита, что и установленный nkt, — справка ровно к нему. Если свой сервер запрещает показ внутри чужих страниц (X-Frame-Options), окно будет пустым — «Открепить» или «В новой вкладке».

Меню ​

Разделы хоста

Карточка «Меню» в «О системе» (только администратору):

  • «Порядок разделов хаба» — окно со списком разделов меню хаба: перетащите раздел (или двигайте стрелками ↑↓). Скрывать разделы хаба нельзя — только менять порядок.
  • «Редактирование разделов хоста» — то же для меню хоста, плюс галочка «показывать»: меню всех хостов, открытых через хаб, станет таким. «Обзор» скрыть нельзя. Скрытый раздел пропадает только из меню — по прямой ссылке он открывается, права не меняются.

Перед записью — разница «сейчас → станет», у каждой раскладки — история версий с «вернуть эту» и «Сбросить к умолчанию». Раскладки общие для всех, кто входит в хаб, хранятся на хабе и едут в его экспорте; разделы, которые появятся в новых версиях, встают в конец меню. Отдельный хост без хаба показывает меню по умолчанию. API: GET и PUT /api/hub/ui/nav/hub и /api/hub/ui/nav/host с {"order": [...], "hidden": [...]}.

Установка nkt на хосты ​

Карточка «Установка nkt на хосты» (только администратору) — рядом с опасной зоной. Окно со списком хостов хаба: галочки сняты, «Выбрать все» и «Снять все»; у каждого хоста — состояние (nkt такой-то версии, не установлен, недоступен, ошибка установки). Машины хаба (localhost) в списке нет. «Установить» — задание хаба со стандартным окном журнала: по три хоста одновременно, на каждом обычная установка, как «Переустановить» у хоста (её задание видно в «Заданиях»); задание ждёт итог каждой и пишет его. Хост с nkt, поставленным другим хабом, пропускается — такой переустанавливают в списке хостов с подтверждением. Нужен вход по SSH и root или sudo без пароля.

Опасная зона ​

Карточка с красной рамкой (только администратору) — «Удалить nkt со всех хостов»:

  1. Экспорт — обязательно. Сначала то же окно, что «экспорт» в «Хостах» (полный, с ключом; шифрование паролем). Пока файл не скачан, дальше не пустит; хаб тоже проверяет — без полного экспорта за последние 30 минут запрос отвергается.
  2. Выбор хостов. Список всех хостов хаба, галочки сняты; «Выбрать все» и «Снять все». Машины хаба (localhost) в списке нет. Хосты, где удаление заведомо не пройдёт (sudo просит пароль, недоступен), помечены. Что удалять — как при удалении одного хоста; по умолчанию служба и файлы, данные, следы доступа хаба и возврат входа по паролю, без удаления SSH-пользователя.
  3. Подтверждение — ввести слово «удалить», затем задание хаба со стандартным окном журнала: по три хоста одновременно, провал одного не мешает остальным. Где очистка прошла, хост убирается из хаба; где нет — остаётся в списке, а в журнале — причина.

Вернуть хаб и хосты — импортом того самого файла экспорта: хосты вернутся в список, хаб сам заметит, где nkt нет, и предложит поставить его. Но установка требует входа по SSH и sudo без пароля: если при удалении отмечены «следы доступа хаба», ключ хаба из authorized_keys и его правило sudo убраны — на хост, заведённый по ключу, новый хаб не войдёт, а на заведённый по паролю войдёт, но sudo без пароля придётся вернуть вручную (или подключить хост как root). С отмеченным «удалить SSH-пользователя» входить некуда вовсе. Если задача — просто переехать на новый хаб, удалять nkt не нужно: экспорт и импорт хватает, хосты продолжают работать.