Установка ZoneMinder в Ubuntu
Видеонаблюдение – важная составляющая безопасности. Камеры устанавливаются в квартирах и общих коридорах, на дачах и в гаражах. Руководство компании следит за сотрудниками, охрана – за посетителями. В присмотре нуждаются пожилые родственники и маленькие дети. Простого вывода картинки недостаточно – сидеть перед монитором всё время никто не сможет. Нужна система, которая проанализирует видеопоток, сделает скриншоты и уведомит хозяев о нарушении периметра.
Промышленные модули стоят огромных денег, однако сообщество открытого ПО предлагает собственные бесплатные альтернативы, например, программу ZoneMinder. В этой статье мы рассмотрим как выполняется установка ZoneMinder Ubuntu 18.04.
Как установить ZoneMinder в Ubuntu
Первым делом в свежеустановленной операционке необходимо установить стандартный стек веб-сервера LAMP. Подробно останавливаться на этом процессе мы не будем, на сайте этому посвящена отдельная статья. Для того, чтобы получить самую свежую версию ZoneMinder, следует подключить персональный архив разработчиков PPA с помощью команды:
sudo add-apt-repository ppa:iconnor/zoneminder-1.34
Здесь 1.34 – номер текущей версии программы. Чтобы не вводить команду sudo перед всеми следующими командами, рекомендуем выполнить в консоли команду:
Все последующие инструкции в консоли будут выполняться от имени суперпользователя.
Итак, репозиторий добавлен. Теперь необходимо обновить список пакетов и саму операционную систему:
Затем можно запустить установщик:
apt-get install zoneminder
В свежеустановленной операционной системе потребуется установить почти 200 пакетов, поэтому процесс займёт некоторое время. После установки ZoneMinder требуется настроить для пользователя www-data права для доступа к конфигурации:
chmod 740 /etc/zm/zm.conf
chown root:www-data /etc/zm/zm.conf
Далее следует разрешить доступ к каталогу с файлами ZoneMinder:
chown -R www-data:www-data /usr/share/zoneminder/
Затем настроить Apache, подключить к ядру веб-сервера модули с помощью команды:
a2enmod cgi
a2enmod rewrite
После этого добавить настройки с помощью команды:
Для повышения скорости кэширования рекомендуется также активировать модули expires и headers:
Прежде, чем последовать настойчивым просьбам Apache о перезапуске, надо активировать и запустить ZoneMinder с помощью команд:
systemctl enable zoneminder
systemctl start zoneminder
Команда start отрабатывает без сообщений, поэтому можно проверить состояние сервиса, выполнив команду:
systemctl status zoneminder
На экране появятся строки, говорящие о том, что система видеонаблюдения ZoneMinder активна.
Осталось установить правильную временную зону для php. Открываем нужный нам файл в редакторе Nano с помощью команды:
Затем нажимаем сочетание клавиш Ctrl-W, в белом поле вводим слово Date, нажимаем клавишу Enter. Переходим таким образом в секцию [Date]. Убираем символ «;» перед строкой date.timezone и прописываем нашу временную зону. Для Москвы это Europe/Moscow. В результате содержимое файла должно выглядеть как на скриншоте:
Для выхода из редактора нажимаем сочетание клавиш Ctrl-X, подтвердив сохранение отредактированного нами файла php.ini. Вот теперь можно перезапустить веб-сервер с помощью команды:
systemcltl reload apache2
Установка ZoneMinder Ubuntu Server завершена. Наконец-то мы можем посмотреть на результаты своих трудов. Запускаем браузер, выполняем переход по адресу веб-сервера, в нашем случае это http://localhost/zm. В открывшемся окне соглашаемся с тем, что программа будет собирать данные, и далее попадаем в консоль ZoneMinder:
Настройка ZoneMinder
Первое, что желательно сделать, это поставить пароль на вход. Если сервер развёрнут в публичной сети, это обязательно. Выбираем пункт Options в строке меню и переходим по ссылке System на левой панели.
В открывшемся окне устанавливаем флажок напротив OPT_USE_AUTH и сохраняем конфигурацию с помощью кнопки Save в правом нижнем углу страницы. Если обновить страницу с помощью клавиши F5, будет выполнен сразу же переход к форме авторизации. По умолчанию установлено: логин: admin, пароль: admin. Сменить это можно выбрав в левой панели ссылку Users.
Большинство реальных камер будут подключаться по сети. Для пробы используем старый смартфон с установленной программой IP Webcam.
Для подключения камеры к ZoneMinder Ubuntu нажмём в главном меню кнопку ADD, откроется окно с интерфейсом добавления камеры.
На закладке General заполним поля Source Type = Remote и Function = Monitor (режим просмотра). Затем переходим на вкладку Source и устанавливаем значения параметров так, как показано на скриншоте:
- Protocol = HTTP (если на смартфоне выбран этот протокол);
- Method = Simple;
- Host Name = 192.168.0.184 (это адрес смартфона с камерой);
- Port = 8080 (как в настройках смартфона);
- Path = /video;
- Capture Resolution (pixels) = 320×240 (должно соответствовать потоку с камеры).
Для сохранения настроек нажимаем кнопку SAVE. Программа возвращает нас к списку камер. Если поток подсоединился, название камеры и адрес будут зелёного цвета, если нет — красного. Ошибки подключения можно посмотреть в меню Log.
Начать просмотр изображения с камеры можно кликнув мышкой по названию камеры. Откроется окно просмотра.
В окне доступно масштабирование, запуск трансляции, тестирование событий. На этом базовая настройка ZoneMinder закончена.
Выводы
Рассмотренная нами установка ZoneMinder Ubuntu 18.04 показала, что организация видеонаблюдения – это не сложно. При этом программный комплекс с большими возможностями может быть и бесплатным тоже, а его мощь и удобство – в гибких настройках.
Встроенный модуль для веб-сервера принимает потоки видео с любых локальных или сетевых камер, анализирует кадры в поисках событий для дневной и ночной съёмок, информирует пользователей о событиях и прочем. Управляется видеонаблюдение с помощью браузера или мобильного приложения, данные сохраняются в локальную базу. Подходит для построения систем наблюдения любых масштабов – от гаража до предприятия.
ZoneMinder Viewer
ZoneMinder Viewer представляет из себя систему наблюдения с нескольких камер.
Домик в деревне. Картошечка, укропчик, помидорки.
Маленький магазинчик. Водочка, пивко, конфетки.
И пока никаких проблем.
Люди любят окружать себя материальными благами цивилизации.
Дорогие вещи, недвижимость, машины, о них нужно заботиться и охранять.
Попробуем сделать нашу жизнь немного легче – поставим виртуального сторожа, который никогда не спит.
Это ZoneMinder Viewer.
ZoneMinder Viewer является пакетом приложений, который предназначен для использования в системах видеонаблюдения, включая защиту от воров, а также наблюдение за детьми, членами семьи и домашними животными.
ZoneMinder Viewer поддерживает оцифровку, анализ, запись и наблюдение за видеоданными, поступающими с одной или нескольких видео или сетевых камер, подключенных в системе.
ZoneMinder Viewer характеризуется удобным Web интерфейсом, позволяющим просматривать текущую видеоинформацию, просматривать видеоархив и удалять изображения и видео, полученные с камеры.
ZoneMinder Viewer умеет не только записывать одновременно несколько видеопотоков, но и поддерживает технологию Live motion (определение движения в кадре) .
Захват видео возможен с аналоговых видеокамер, подключаемых через video4linux2 — совместимые платы видеозахвата, а также c сетевых ip-камер и видеосерверов работающих по протоколу Motion JPEG (MJPEG) over HTTP.
ZoneMinder на службе клиентской зоны
В данной заметке я хочю разобрать как поднять сервис видеонаблюдения за зоной где находятся клиентские автомобили которые они передали в центр на обслуживание. К примеру пришел человек в дилерский центр своей марки автомобиля, и пока он ждет к примеру сидя на диванчике в клиентской зоне или в баре он может на выведенном мониторе в режиме реального времени наблюдать за своим автомобилем. Достаточно удобно и этим мы выражаем клиенту что мы всячески заботимся о его сервисе и его автомобиль в зоне видимости.
Все дальнейшие действия я буду производить на системе Ubuntu 12.04.5 Server amd64
текущий характеристики которой в рамках моего сперва теста:
- RAM = 1Gb
- HDD = 25Gb
- CPU = 1Gb
используемые камеры: Acti ACM-5611 A1D-220-V3.14.19-AC
Обновляю информацию по репозитариям и установленным пакетам системы:
$ sudo apt-get update && sudo apt-get upgrade -y
Проверяю текущую версию разворачиваемого пакета ZoneMinder присутствующего в дефолтных репозитариях:
$ apt-cache show zoneminder | grep Version
Устанавливаю пакет ZoneMinder в систему:
$ sudo apt-get install zoneminder -y
в процессе если не установлен mysql придется создать пароль на учетную запись root применительно к БД:
New password for the MySQL «root» user:712mbddr@
Repeat password for the MySQL «root» user:712mbddr@
Mailname of your system: srv-mon_
Smarthosts:ничего не ввожу, просто удаляю что было введено установщиком
Настройку почты я разберу чуточку позже.
если же хочется использоваться саму последнюю версию программного обеспечения, то нужно подключить репозитарий PPA:
$ sudo nano /etc/apt/sources.list
deb http://ppa.launchpad.net/iconnor/zoneminder/ubuntu precise main
deb-src http://ppa.launchpad.net/iconnor/zoneminder/ubuntu precise main
P.S. Разработчики да оставили ссылку на этот репозитарий для Ubuntu Precise но внутри больше нет пакетов (deb-пакетов), так что уже пока не получится развернуть ZM по этой заметке. Мое уточнение от 21.03.2016.
P.S. Переработанная (работоспособная) заметка доступна здесь
$ sudo apt-get update
W: GPG error: http://ppa.launchpad.net precise Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 4D0BF748776FFB04
Добавляю данный публичный ключ в систему:
$ sudo apt-key adv —keyserver keyserver.ubuntu.com —recv 4D0BF748776FFB04
$ sudo apt-get update
Далее обновляю текущую версию пакета ZoneMinder 1.25.0-1 до самого последнего состояния:
$ apt-cache show zoneminder | grep Version
$ apt-cache policy zoneminder
500 http://ppa.launchpad.net/iconnor/zoneminder/ubuntu/ precise/main amd64 Packages
500 http://us.archive.ubuntu.com/ubuntu/ precise/universe amd64 Packages
$ sudo apt-get install zoneminder=1.28.1-precise-1 -y
ZoneMinder is stopped
invoke-rc.d: initscript zoneminder, action «status» failed.
Previous versions of ZoneMinder used the MyISAM database engine.
However, the recommended database engine is InnoDB.
Hint: InnoDB tables are much less likely to be corrupted during an unclean shutdown.
Press ‘y’ to convert your tables to InnoDB or ‘n’ to skip : y
Converting MyISAM tables to InnoDB. Please wait.
Database already at version 1.28.1, update aborted.
Starting ZoneMinder: success
Setting up gs-cjk-resource (1.20100103-3) …
Setting up libgs9 (9.05
Setting up ghostscript (9.05
Processing triggers for libc-bin …
ldconfig deferred processing now taking place
После перехожу к настройке: — сайта
$ sudo ln -s /etc/zm/apache.conf /etc/apache2/sites-available/zoneminder.conf
$ sudo nano /etc/apache2/apache2.conf
$ sudo a2ensite zoneminder.conf
Перезапускаю Веб сервер Apache:
$ sudo service apache2 reload
После проверяю, что сайт ZoneMinder работает, для этого запускаем браузер где в строке URL адреса указываем: http://IP&DNS/zm и перед нами предстает Административная страница по организации видеонаблюдения:
Чтобы вам было проще ориентироваться включите русский язык оболочки. Для этого нажмите на Options и в строке LANG_DEFAULT установите значение ru-ru и нажмите на кнопку save внизу либо выставляем значение: en_us , как сделал я.
Теперь нужно в интерфейс ZoneMinder добавить камеры, для этого нажимаем: Add New Monitor открывается всплывающее окно мастера где определяются параметры на добавления видеоустройства (т.е. камеры):
В открывшемся окне вкладке General (Общее) указываем:
- Name: Camera1 (удобное имя камеры)
- Source Type: Remote (Тип источника камеры)
- Function: Monitor
- Варианты определяемых функций:
- Monitor: — обычное наблюдение за изображением без записи
- record: — постоянная запись
- modect – запись при наличии в видео ряде движения
- Enabled: отмечаем галочкой
После переходим на вкладку Source где задаем параметры подключения к IP камере:
- Remote Protocol: HTTP
- Remote Method: Simple
- Remote Host Name: ekzorchik:712mbddr@192.168.13.27
- Remote Host Port: 80 (Удаленный порт)
- Remote Host Path: /cgi-bin/cmd/encoder?GET_STREAM (Путь на удаленном устройстве)
- Target Colorspace: 24 bit colour
- Capture Width (pixels): 1280 (Размер по X (в пикселях))
- Capture Height (pixels): 1024 (Размер по Y (в пикселях))
- Orientation: Normal (Ориентация)
- Deinterlacing: Four field motion adaptive – Medium
- После переключаюсь на вкладку: Buffers (буферы)
- Image Buffer Size (frames): 50
- Warmup Frames: 25
- Pre Event Image Count: 25
- Post Event Image Count: 25
- Stream Replay Image Buffer: 200
- Alarm Frame Count: 1
На заметку: имя камеры должно быть не на русском написано, а на английском, в противном случае у Вас будет ошибка вида:
Names may only contain alphanumeric characters plus hyphen and underscore
После нажимаю Save текущего окна настроек камеры и в главном меня появится добавленная настроенная камера:
Щелкнув по именованию Camera1 откроется новое окно где будет показано изображения получаемое в режиме реального времени с видеокамеры в полный размер, а именно 1280 на 1024 именно такие настройки указаны на самой камере.
Варьируя параметром Scale, сейчас я выставил ¼ – можно регулировать размер отображаемой картинки в Web-представленном интерфейсе.
По такому же принципу как я добавил камеру выше добавляю остальные 3 штуки, но если же у Вас все таки видео по добавленной камере не отображается, а добавленная камера в Web-интерфейсе управления ZoneMinder
источник камеры 192.168.13.27 – отмечен красным, значит Вам дорога в правый угол где нужно нажать Log и анализировать проблемы почему такое произошло, хотя можно и обратить внимание на строку по середине: ZoneMinder Console — Stopped – v1.28.1 и щелкнуть по состоянию Stopped а далее выставить: Start – и нажать Apply
После этого строка добавленной камеры сменит свой статус на активированный:
Отлично, рассматриваю что у меня происходило когда я добавил все 4 камеры, две из них показывали, а вот остальные две нет:
Открыв логи, обнаружил, что присутствуют ошибки:
2015-06-27 09:01:53.921944 | zms | 2543 | WAR | Shared data not initialised by capture daemon, some query functions may not be available or produce invalid results for monitor Camera2 | zm_monitor.cpp |
2015-06-27 09:01:53.808429 | web_php | 2432 | ERR | socket_sendto( /tmp/zm/zms-427548s.sock ) failed: No such file or directory | /usr/share/zoneminder/includes/functions.php |
2015-06-27 09:01:35.547113 | zms | 2527 | WAR | Shared data not initialised by capture daemon, some query functions may not be available or produce invalid results for monitor Camera3 | zm_monitor.cpp |
2015-06-27 09:07:21.587530 | zmdc | 3014 | ERR | ‘zmc -m 4’ exited abnormally, exit status 255 | zmdc.pl |
2015-06-27 09:07:21.378150 | zmdc | 3014 | ERR | ‘zmc -m 3’ exited abnormally, exit status 255 | zmdc.pl |
Большую часть лога я опустил, но уже некоторая его часть дает понять, что при добавлении последующий каме р 3 и 4 сервис ZoneMinder начинает сбоить от поступающей информации .
При тестировании доступности камеры 3 & 4 получаю ответ
Unable to determine path for arp command, type -p arp returned ‘127’
В моем случае это просто с текущей системы нельзя сделать arp запрос к камере с целью определить MAC адрес устройства и только то, так что это никакой роли не играет.
Почитавши документацию и различные форумы пришел к выводу что у меня на системе нужно поправить параметр отвечающий за общую память (shared memory), отобразить текущий параметры системы:
—— Shared Memory Limits ———
max number of segments = 4096 (Максимум очередей для всей системы)
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1
—— Semaphore Limits ——— (Пределы семафоров)
max number of arrays = 128 (Максимальное количество массивов)
max semaphores per array = 250 (Максимум семафоров на массив)
max semaphores system wide = 32000 (Максимум семафоров на всю систему)
max ops per semop call = 32 (Максимум операций на вызов семафора)
semaphore max value = 32767 (Максимальное значение семафора)
—— Messages Limits ———(Пределы совместного использования памяти)
max queues system wide = 1982
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384
Но вот как посчитать рекомендуемое значение shared memory для текущей системы, т.к. какие значения shmmax & shmall нужно предопределить в системе для корректной работы программы ZoneMinder, почитавши различных форумов остановился на этом варианте: Ниже скрипт который определит на основе текущей системы необходимые значения:
#!/bin/bash
# simple shmsetup script
page_size= getconf PAGE_SIZE
phys_pages= getconf _PHYS_PAGES
shmall= expr $phys_pages / 2
shmmax= expr $shmall \* $page_size
echo kernel.shmmax = $shmmax
echo kernel.shmall = $shmall
$ sudo bash -c «sh ./kernel >> /etc/sysctl.conf»
После перезапускаю систему:
Результат такой же, видимо 1Gb памяти системе не достаточно, из дальнейшей вычитки как расчитывается все-таки параметр
- для x86 архитектуры: 4*1024*1024*1024 – итого значение в байтах но не более 4Gb
- для x64 архитектуры: уже такого ограничения нет.
В документации к программе рекомендуется выставить значение в 127 Мегабайт переведя его в байты, но мне к слову это тоже не помогло.
Раз не получается, то увеличил просто размер оперативной памяти на системе с 1Gb до 4Gb и ни каких значения в /etc/sysctl.conf я не вносил
Система сама предопределила наиболее корректные для нее значения:
итог, все IP камеры успешно завелись и отображаются, в логах кстати всё чисто:
Теперь мне нужно чтобы с одной странички можно было наблюдать за всеми четырьмя камерами сразу, делается это с помощью плагина именованного как cambozola, устанавливаю его в систему:
$ sudo wget http://www.charliemouse.com:8080/code/cambozola/cambozola-latest.tar.gz
$ tar -xzf cambozola-latest.tar.gz
$ sudo cp cambozola-0.936/dist/cambozola.jar /usr/share/zoneminder/
Теперь щелкаем по Running и перезапускаем Zoneminder, как только процесс завершится – переход на ссылки именованной, как Montage позволит манипулировать процессом отображения всех 4 камер с одной страницы.
К примеру как-то так:, но придется подобрать значения:
Теперь имея полученное можно задействовать ссылку (ее вид: http://IP&DNS/zm/index.php?view=montage&group=0) на доступ к данной странице использовать на телевизорах подключенных к тонкому клиенту к примеру: HP EliteDesk800G1 (этот уже лучше чем всякие доисторические Tonk 1202,1207) в клиентской зоне.
Через неделю взглянув на экран с моим ZoneMinder обнаружил, что видеоизображение с камер не отображается
, в логах идут ошибки
Еще более внимательное чтение логов и форумов показало, что у меня файл сайт zoneminder.conf содержит не вполне корректные значения – изменил на:
$ sudo nano /etc/apache2/sites-available/zoneminder.conf
Alias /zm /usr/share/zoneminder
php_flag register_globals off
php_value short_open_tag 1
Options Indexes FollowSymLinks
ScriptAlias /cgi-bin /usr/lib/cgi-bin
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
# The code unfortunately uses short tags in many places
php_value short_open_tag 1
Сохранил внесенные изменения, а после перезапустил Web-сервис Apache & ZoneMinder
$ sudo service apache2 stop
$ sudo service zoneminder stop
Stopping ZoneMinder: success
$ sudo service zoneminder start
Starting ZoneMinder: success
$ sudo service apache2 start
и после действий выше ошибка была успешно исправлена и видео стена стала работать как и раньше. Вот так всегда сделаешь что-то, а потом потребуется улучшение к созданному. Считаю заметку выполненной. И прощаюсь с уважением, автор блога – ekzorchik.
Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:
Поблагодари автора и новые статьи
будут появляться чаще 🙂
Карта МКБ: 4432-7300-2472-8059
Yandex-деньги: 41001520055047
Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.