Лицензирование
Активация ноды, HWID, что работает без лицензии и как продлить.
Лицензируется нода — сервер, который принимает видео и пишет архив. Plane лицензии не требует: админка, база, пользователи и настройки работают всегда. Каждая нода активируется отдельно, лицензия привязана к её оборудованию.
Что работает без лицензии#
Нелицензированная нода не «выключена» — она полностью управляема, но не пропускает через себя видео:
| Функция | Без лицензии |
|---|---|
| Спаривание с Plane, видимость в админке | Работает |
| Получение конфигурации, управление, журналы, метрики | Работает |
| Приём потоков с камер | Не работает |
| Живое видео зрителям | Не работает |
| Запись архива | Не работает |
Это сделано намеренно: систему можно полностью развернуть и настроить, а лицензию получить и установить позже — конфигурация при этом не потеряется.
Шаг 1. Узнать HWID#
HWID — идентификатор оборудования ноды. Код активации выпускается именно под него.
Основной способ — админка: Ноды → нужная нода → вкладка «Лицензия», поле HWID. Значение можно скопировать прямо оттуда; заходить на сервер не нужно.
Если админка недоступна (например, нода ещё не спарилась), тот же идентификатор есть в журнале ноды:
sudo journalctl -u hastreamer-cctv-node -b | grep -i licens
hastreamer-cctv: NOT LICENSED (enforced) — no license file at /etc/hastreamer-cctv/license.txt
(HWID AQKELaPKBFxs2JwF5StOzgZB8TxrByv0yXg)
Строка в скобках после HWID — то, что нужно передать поставщику лицензии.
Тот же идентификатор можно получить, не запуская сервис:
sudo hastreamer-cctv --print-hwid # AQKELaPKBFxs2JwF5StOzgZB8TxrByv0yXg
Он вычисляется по характеристикам сервера. Замена материнской платы или перенос системы на другой хост меняет HWID — понадобится новый код активации. Плановый переезд ноды на новый сервер согласуйте с поставщиком лицензии заранее.
Шаг 2. Установить код активации#
Код кладётся в файл /etc/hastreamer-cctv/license.txt:
echo 'XXXX-XXXX-XXXX-XXXX' | sudo tee /etc/hastreamer-cctv/license.txt >/dev/null sudo chmod 600 /etc/hastreamer-cctv/license.txt sudo systemctl restart hastreamer-cctv-node
/etc/hastreamer-cctv/, а не каталог нодыФайл лицензии лежит в /etc/hastreamer-cctv/license.txt — не в /etc/hastreamer-cctv-node/,
где лежит node.conf. Путь зашит в исполняемый файл и не настраивается. Код, положенный в
каталог конфигурации ноды, найден не будет, и нода останется нелицензированной.
Установщик ноды спрашивает код при установке; при автоматизации его можно передать переменной окружения:
sudo HASTREAMER_ACTIVATION_CODE='XXXX-XXXX-XXXX-XXXX' installers/hastreamer-cctv-node/install.sh
Активация выполняется онлайн: при старте нода обращается к серверу лицензирования и получает рабочую лицензию. Адрес сервера зашит в сборку и не настраивается, поэтому с ноды должен быть разрешён исходящий HTTPS (порт 443). Постоянного соединения не требуется — только периодические обращения.
Шаг 3. Проверить активацию#
sudo journalctl -u hastreamer-cctv-node -n 30 --no-pager | grep -i licens
hastreamer-cctv: license OK (enforced) — owner="ООО «Пример»" streams=500 expires=never updates-until=2027-01-01
Ключевые поля: owner — владелец лицензии, streams — лимит одновременных потоков,
expires — дата истечения (never — бессрочная), updates-until — до какой даты можно
устанавливать новые версии.
Через API Plane (лицензия конкретной ноды запрашивается по её идентификатору):
BASE=https://cctv.example.com NODE_ID=<UUID> curl -sS "$BASE/api/v1/nodes/$NODE_ID/license" -H "Authorization: Bearer $TOKEN" \ | python3 -m json.tool
В админке те же данные — Ноды → нода → вкладка «Лицензия»: владелец, контакт, максимум потоков, срок действия, срок обновлений, HWID.
--license-status не подтверждает активацию по кодуsudo hastreamer-cctv --license-status # Status: unlicensed # Reason: online activation code (validated at runtime)
Такой ответ не означает проблему: код активации проверяется на сервере лицензирования уже в работающем процессе, а команда читает только файл. Достоверный источник — журнал сервиса и API, как показано выше.
Состояния лицензии#
| Состояние | Строка в журнале | Что означает |
|---|---|---|
licensed |
license OK (enforced) — owner=… streams=… |
Всё в порядке, ограничений нет |
grace |
license in GRACE (enforced) — <причина> |
Лицензия была действительна, но обновить её сейчас не удаётся. Нода работает в полном объёме, ограничений нет |
unlicensed |
NOT LICENSED (enforced) — <причина> (HWID …) |
Лицензии нет, она истекла или недействительна — медиа заблокировано |
Нода сама повторяет проверку примерно раз в 12 часов, а сообщение в журнал пишет только при изменении состояния — поэтому отсутствие свежих строк о лицензии означает, что ничего не менялось.
Если обновить лицензию не удалось, нода переходит в состояние grace и продолжает работать в
полном объёме несколько суток — точная длительность задана в самой лицензии (обычно не менее
двух суток). Этого запаса хватает, чтобы починить сеть или межсетевой экран без остановки
видеонаблюдения.
Лимит потоков#
Поле streams=N в журнале — максимум одновременных потоков на этой ноде.
- Считаются потоки, а не камеры. У камеры с включёнными основным и дополнительным профилями на ноде два потока, поэтому лимит выбирайте с запасом.
- При достижении лимита уже работающие потоки продолжают работать, а новые не принимаются: свежедобавленные камеры останутся без видео.
- Перезапуск потока (переподключение к камере) лимитом не блокируется — это не новый поток.
Текущее число потоков видно в метриках ноды и в сводке флота:
curl -sS http://node.example.com:8090/metrics | grep -E '^hastreamer_streams ' # hastreamer_streams 128
Если лимита не хватает — увеличьте его в лицензии либо распределите камеры по нескольким нодам; распределение описано в разделе Производительность.
Истечение и продление#
Лицензия с ограниченным сроком (expires=<дата>) после истечения переводит ноду в состояние
unlicensed: медиа блокируется целиком — живое видео прекращается, запись архива
останавливается. Уже записанный архив не удаляется и остаётся на дисках.
Продление — это замена содержимого того же файла:
echo 'НОВЫЙ-КОД-АКТИВАЦИИ' | sudo tee /etc/hastreamer-cctv/license.txt >/dev/null sudo systemctl restart hastreamer-cctv-node sudo journalctl -u hastreamer-cctv-node -n 20 --no-pager | grep -i licens
После получения действительной лицензии ограничение снимается автоматически, потоки поднимаются заново, запись возобновляется.
Дата истечения видна в админке (Ноды → нода → Лицензия) и в сводке флота: там есть
счётчики нод без лицензии и нод в состоянии grace. Проверяйте их в ежедневном обходе —
Мониторинг и метрики.
Диагностика#
| Симптом | Вероятная причина | Что сделать |
|---|---|---|
NOT LICENSED (enforced) — no license file at … |
Файла нет или он пуст | Положите код в /etc/hastreamer-cctv/license.txt и перезапустите ноду |
| Код положили, но состояние не изменилось | Файл создан не по тому пути либо ноду не перезапустили | Проверьте путь (/etc/hastreamer-cctv/, не -node), затем systemctl restart hastreamer-cctv-node |
NOT LICENSED с упоминанием активации |
Нет доступа к серверу лицензирования | Разрешите исходящий HTTPS (443) с ноды, проверьте DNS и прокси |
NOT LICENSED после переноса на другой сервер |
Сменился HWID | Получите новый код активации под новый HWID |
| Нода активна, часть камер без видео | Достигнут лимит потоков | Сверьте hastreamer_streams с streams=N; расширьте лицензию или добавьте ноду |
license in GRACE несколько дней подряд |
Обновление лицензии не проходит | Проверьте исходящий доступ; до окончания окна grace видео работает, после — остановится |
Полная последовательность установки ноды — Установка с нуля: Node; проверка готовности всей системы — Проверка после установки.