SIRINVIDEO Документация администратора и интегратора На сайт 2026.08

Обновление и удаление

Порядок обновления исполняемого файла, проверка конфигурации новой сборкой до перезапуска, откат на прежнюю версию и полное удаление вместе с данными.

Обновление сводится к замене одного исполняемого файла. Всё остальное — конфигурация, лицензия, архив — остаётся на месте. Риск в другом: новая сборка может иначе относиться к вашей конфигурации, а служба с ошибочной конфигурацией не запускается. Поэтому порядок ниже начинается не с замены файла, а с проверки.

Перед обновлением#

1. Узнайте текущую версию#

curl -sS "http://media.example.com:8080/api/v1/config" -H "Authorization: Bearer $TOKEN" \
  | grep -o '"version":"[^"]*"'
"version":"2026.8.0"

Тот же ответ содержит подробности сборки (поле build) — их стоит записать, чтобы было к чему возвращаться при откате. Версия видна и в панели управления.

Ответ GET /api/v1/config содержит секреты

В нём отдаётся текст конфигурации целиком — вместе с паролем администратора, учётными данными камер и ключами хранилищ. Не прикладывайте его к обращениям в поддержку и не сохраняйте в общедоступные файлы.

2. Проверьте право на обновления в лицензии#

sudo hastreamer --license-status
Expires:       2027-01-31
Updates until: unlimited

Если в поле Updates until стоит дата, а вы ставите сборку, выпущенную позже неё, лицензия перестанет действовать сразу после перезапуска и раздача медиа остановится: license does not cover builds after …. Подробности — Лицензирование.

3. Сделайте резервную копию#

sudo tar czf /root/hastreamer-backup-$(date +%F).tar.gz \
  /etc/hastreamer \
  /etc/systemd/system/hastreamer.service \
  /etc/sysctl.d/99-hastreamer.conf
sudo cp -a /usr/local/bin/hastreamer /usr/local/bin/hastreamer.prev
Что сохраняется Зачем
/etc/hastreamer/hastreamer.conf конфигурация
/etc/hastreamer/license.txt лицензия: без неё после переустановки медиа не пойдёт
/etc/systemd/system/hastreamer.service юнит с вашими лимитами ресурсов
/etc/sysctl.d/99-hastreamer.conf сетевые настройки ядра
/usr/local/bin/hastreamer.prev прежний исполняемый файл — единственный быстрый путь отката

Архив (/var/lib/hastreamer/dvr и другие хранилища) в резервную копию не входит: обновление его не трогает. О резервировании записей — Резервное копирование.

Обновление#

Шаг 1. Положите новый файл рядом, не заменяя рабочий#

sudo install -o root -g root -m 0755 ./hastreamer /usr/local/bin/hastreamer.new

Шаг 2. Проверьте конфигурацию новой сборкой#

Это ключевой шаг всей процедуры: он показывает, примет ли новая версия ваш файл, пока служба ещё работает на старой.

sudo /usr/local/bin/hastreamer.new --validate /etc/hastreamer/hastreamer.conf
/etc/hastreamer/hastreamer.conf: OK (12 streams)

Если вывод отличается от OK, не заменяйте файл: сначала приведите конфигурацию в соответствие. Ошибка выглядит так и всегда содержит номер строки:

parse /etc/hastreamer/hastreamer.conf: line 27: unknown stream directive "frobnicate"

Ошибки разбора сообщаются по первой встреченной; ошибки проверки значений печатаются все сразу, через ; .

Шаг 3. Замените файл и перезапустите службу#

sudo systemctl stop hastreamer
sudo mv /usr/local/bin/hastreamer.new /usr/local/bin/hastreamer
sudo systemctl start hastreamer

Обновление всегда требует перезапуска: reload перечитывает конфигурацию, но не подменяет работающий процесс.

Шаг 4. Проверьте результат#

systemctl is-active hastreamer
sudo journalctl -u hastreamer -n 20 --no-pager
active
hastreamer — 12 stream(s) · http :8080 (HLS+player+api) · rtsp :8554 · 8 cores (cpu affinity [0, 1, 2, 3, 4, 5, 6, 7])
hastreamer: license OK (enforced) — owner="example-customer" streams=50 expires=2027-01-31 updates-until=unlimited
Версия сменилась, потоки поднялись, медиа отдаётся
curl -sS "http://media.example.com:8080/api/v1/config" -H "Authorization: Bearer $TOKEN" \
  | grep -o '"version":"[^"]*"'
curl -sS -o /dev/null -w '%{http_code}\n' "http://media.example.com:8080/demo/index.m3u8"
"version":"2026.9.0"
200

Код 403 вместо 200 означает, что лицензия не действует для новой сборки — см. пункт 2 выше.

Что происходит при перезапуске#

Что Поведение
Зрители все сессии обрываются; плееры переподключаются сами, обычно за секунды
Приём от источников соединения устанавливаются заново, потоки поднимаются по мере подключения
Запись архива на остановку даётся до 5 секунд, чтобы закрыть открытые файлы корректно; процесс завершается раньше, если все записи уже закрыты
Готовые записи не затрагиваются; после старта запись продолжается новыми файлами
Потоки «по требованию» возвращаются в припаркованное состояние до первого зрителя
Токены входа продолжают действовать, если задан auth.session_secret; иначе все сессии придётся открыть заново

Планируйте перезапуск как короткое окно обслуживания: разрыв заметен зрителям, но данные не теряются.

Откат на прежний исполняемый файл#

sudo systemctl stop hastreamer
sudo cp -a /usr/local/bin/hastreamer.prev /usr/local/bin/hastreamer
sudo systemctl start hastreamer
sudo journalctl -u hastreamer -n 20 --no-pager

Откат безопасен, пока вы не пользовались возможностями, которых в прежней сборке не было: старая сборка не знает новых директив и откажется запускаться с ошибкой unknown directive. Проверьте конфигурацию прежним файлом до перезапуска:

sudo /usr/local/bin/hastreamer.prev --validate /etc/hastreamer/hastreamer.conf

Откат конфигурации#

Изменения конфигурации ведутся журналом версий, независимо от версии программы. Посмотреть историю:

curl -sS "http://media.example.com:8080/api/v1/config/history" -H "Authorization: Bearer $TOKEN"
[
  { "epoch": 1, "hash": "d9b4d2d2a819ff24", "ts_ms": 1786787600937, "actor": "system", "via": "boot" },
  { "epoch": 2, "hash": "4a186afe976f6ef3", "ts_ms": 1786787999012, "actor": "admin",  "via": "api"  }
]

Вернуться к записанной версии:

curl -sS -X POST "http://media.example.com:8080/api/v1/config/rollback" \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"epoch":2}'
{ "epoch": 5, "hash": "d9b4d2d2a819ff24", "changed": true, "rolled_from": 2 }

Журнал только дополняется: откат применяет прежние байты как новую версию, номер epoch никогда не уменьшается. Подробности — Конфигурация и система.

Удаление#

Штатное удаление#

sudo ./uninstall.sh
removed the hastreamer service, unit, and binary.
kept /etc/hastreamer (config + license) and /var/lib/hastreamer (DVR) — run with --purge to remove.

Удаляются служба, юнит, исполняемый файл и файл системных настроек. Конфигурация, лицензия и архив остаются: повторная установка подхватит их без переделки.

Удаление вместе с данными#

--purge удаляет лицензию и весь архив

Каталог /etc/hastreamer удаляется вместе с license.txt — после этого потребуется повторная активация. Каталог /var/lib/hastreamer удаляется вместе со всеми записями архива. Операция необратима.

Перед удалением выясните, где на самом деле лежат записи: хранилище могло быть перенесено на отдельный том, который --purge не тронет.

grep -E '^\s*storage ' /etc/hastreamer/hastreamer.conf
storage local /var/lib/hastreamer/dvr {
storage archive /srv/archive {

Затем:

sudo ./uninstall.sh --purge
purged /etc/hastreamer (config + license) and /var/lib/hastreamer (DVR).

Каталоги хранилищ вне /var/lib/hastreamer (в примере — /srv/archive) удаляются вручную.

Удаление вручную#

Если установочного набора под рукой нет:

sudo systemctl disable --now hastreamer
sudo rm -f /etc/systemd/system/hastreamer.service
sudo rm -f /etc/sysctl.d/99-hastreamer.conf
sudo rm -f /usr/local/bin/hastreamer /usr/local/bin/hastreamer.prev
sudo systemctl daemon-reload

И, если данные больше не нужны:

sudo rm -rf /etc/hastreamer /var/lib/hastreamer

Изменения ядра, внесённые файлом /etc/sysctl.d/99-hastreamer.conf, действуют до перезагрузки; после его удаления система вернётся к своим значениям при следующей загрузке.

Объект uninstall.sh uninstall.sh --purge
Служба, юнит, исполняемый файл удаляются удаляются
/etc/sysctl.d/99-hastreamer.conf удаляется удаляется
/etc/hastreamer (конфигурация, лицензия) остаётся удаляется
/var/lib/hastreamer (архив по умолчанию, состояние TLS) остаётся удаляется
Хранилища на других томах остаются остаются

Что дальше#