Обновление и удаление
Порядок обновления исполняемого файла, проверка конфигурации новой сборкой до перезапуска, откат на прежнюю версию и полное удаление вместе с данными.
Обновление сводится к замене одного исполняемого файла. Всё остальное — конфигурация, лицензия, архив — остаётся на месте. Риск в другом: новая сборка может иначе относиться к вашей конфигурации, а служба с ошибочной конфигурацией не запускается. Поэтому порядок ниже начинается не с замены файла, а с проверки.
Перед обновлением#
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) |
остаётся | удаляется |
| Хранилища на других томах | остаются | остаются |
Что дальше#
- Установка с нуля — если после удаления нужно поставить сервер заново.
- Лицензирование — восстановление лицензии после переустановки.
- Резервное копирование — что и как сохранять на работающей установке.