Это старая версия документа!
Содержание
Дата написания: октябрь 2016 г.
Автор: Graf
Сервер видеонаблюдения на базе ZoneMinder |
---|
Установка
Используем Slackware Linux 14.2 64-bit без DE и всем, что с ними связанно.
Обновляем все доступные пакеты посредством slackpkg, в итоге получая ядро 4.4.19.
IP сервера куда всё устанавливаем и где настраиваем - 192.168.10.214
ZoneMinder версии 1.30.0
Устанавливаем ffmpeg от Alien, последний на день написания статьи 3.1.1.
# wget http://taper.alienbase.nl/mirrors/people/alien/restricted_slackbuilds/ffmpeg/pkg64/14.2/ffmpeg-3.1.1-x86_64-1alien.txz # upgradepkg --install-new ./ffmpeg-3.1.1-x86_64-1alien.txz
Устанавливаем vlc плеер от Alien, последний на день написания статьи 2.2.4.
# wget http://www.slackware.com/~alien/slackbuilds/vlc/pkg64/14.2/vlc-2.2.4-x86_64-1alien.txz # upgradepkg --install-new ./vlc-2.2.4-x86_64-1alien.txz
Устанавливаем sbopkg, синхронизируемся с его репозиторием попутно соглашаясь с созданием отсутствующих каталогов.
# wget https://github.com/sbopkg/sbopkg/releases/download/0.38.1/sbopkg-0.38.1-noarch-1_wsr.tgz # upgradepkg --install-new ./sbopkg-0.38.1-noarch-1_wsr.tgz # sbopkg -r
Собираем и устанавливаем необходимые пакеты.
# sbopkg -Bi "perl-Test-Inter perl-Test-Pod perl-Devel-Symdump perl-Pod-Coverage perl-Test-Pod-Coverage \ perl-yaml perl-YAML-Syck perl-net-http perl-www-robotrules perl-http-date perl-file-listing perl-IO-HTML \ perl-encode-locale perl-http-date perl-lwp-mediatypes perl-html-tagset perl-html-parser perl-http-message \ perl-http-negotiate perl-http-cookies perl-http-daemon libwww-perl perl-Date-Manip perl-Time-modules \ perl-Astro-SunTime perl-Device-SerialPort perl-X10 perl-Capture-Tiny perl-Email-Date-Format perl-MIME-Lite \ perl-Sys-Mmap perl-IO-Socket-SSL Net-SSLeay perl-Mozilla-CA perl-LWP-Protocol-https"
Собираем и устанавливаем сам ZoneMinder.
# git clone https://github.com/ZoneMinder/ZoneMinder.git # cd ZoneMinder # git submodule update --init --recursive # cmake -DCMAKE_INSTALL_PREFIX=/usr -DZM_WEBDIR=/var/www/htdocs/zm -DZM_CGIDIR=/var/www/cgi-bin \ -DZM_CONTENTDIR=/var/www/htdocs/zm # make # make install DESTDIR=/tmp/ZoneMinder-1.30.0 # cd /tmp/ZoneMinder-1.30.0/ # makepkg -l y -c n /tmp/ZoneMinder-1.30.0-x86_64-1.txz # upgradepkg --install-new /tmp/ZoneMinder-1.30.0-x86_64-1.txz
Создадим недостающие каталоги и дадим соответствующие права.
# mkdir -p /var/{run/zm,log/zm,www/htdocs/zm/{events,images,sounds}} # chown -R apache:apache /var/{run/zm,log/zm,www/htdocs/zm}
Скопируем скрипт запуска-остановки.
# cp scripts/zm /etc/rc.d/rc.zm # chmod +x /etc/rc.d/rc.zm
И, для автостарта при загрузке, пропишем в /etc/rc.d/rc.local
/etc/rc.d/rc.zm start
Всё необходимое поставили, перейдем к настройке.
Настройка
- MySQL (MariaDB)
Так как MySQL (MariaDB) в Slackware Linux уже установлена, просто настроим ее и дадим пароль пользователю root
# mkdir /var/lib/mysql/mysql # mysql_install_db # chown -R mysql.mysql /var/lib/mysql # chmod +x /etc/rc.d/rc.mysqld # /etc/rc.d/rc.mysqld start # mysql -u root MariaDB [(none)]> set password for 'root'@'localhost' = password('mypassword'); Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> \q Bye
Войдем под пользователем root, создадим базу ZoneMinder, для работы с базой дадим соответствующие права пользователю zmuser.
# mysql -u root -p Enter password: MariaDB [(none)]> source /usr/share/zoneminder/db/zm_create.sql; … Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> use zm; Database changed MariaDB [zm]> MariaDB [zm]> grant select,insert,update,delete,create,drop,lock tables,alter,index on zm.* to 'zmuser'@localhost identified by 'zmpass'; Query OK, 0 rows affected (0.00 sec) MariaDB [zm]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [zm]> \q Bye
- Apache
Редактируем /etc/httpd/httpd.conf.
Убираем знаки комментария со строк:
LoadModule cgid_module lib64/httpd/modules/mod_cgid.so LoadModule cgi_module lib64/httpd/modules/mod_cgi.so LoadModule rewrite_module lib64/httpd/modules/mod_rewrite.so Include /etc/httpd/mod_php.conf
Правим необходимые секции:
Было | Стало |
---|---|
DocumentRoot "/srv/httpd/htdocs" <Directory "/srv/httpd/htdocs"> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> | DocumentRoot "/srv/httpd/htdocs" <Directory "/var/www/htdocs"> Options Indexes FollowSymLinks IncludesNOEXEC AllowOverride All Require all granted <RequireAll> <RequireAny> Require user apache </RequireAny> </RequireAll> </Directory> |
<IfModule dir_module> DirectoryIndex index.html </IfModule> | <IfModule dir_module> DirectoryIndex index.html index.htm index.php </IfModule> |
<Directory "/srv/httpd/cgi-bin"> AllowOverride None Options None Require all granted </Directory> | <Directory "/srv/httpd/cgi-bin"> AllowOverride None Options FollowSymLinks Require all granted </Directory> |
В /etc/php.ini убираем знак комментария и редактируем timezone:
[Date] date.timezone = Europe/Moscow
Для работы сторонних приложений (например, мобильных) отредактируем файлы:
Файл | Содержимое |
---|---|
/var/www/htdocs/zm/api/.htaccess | <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ app/webroot/ [L] RewriteRule (.*) app/webroot/$1 [L] # RewriteBase /zm/api </IfModule> |
/var/www/htdocs/zm/api/app/.htaccess | <IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^$ webroot/ [L] RewriteRule (.*) webroot/$1 [L] # RewriteBase /zm/api </IfModule> |
/var/www/htdocs/zm/api/app/webroot/.htaccess | <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] # RewriteBase /zm/api </IfModule> |
Запускаем Apache.
# chmod +x /etc/rc.d/rc.httpd # /etc/rc.d/rc.httpd start
Проверяем работоспособность API:
http://192.168.10.214/zm/api/ - должно быть все зеленым.
http://192.168.10.214/zm/api/host/getVersion.json — должны увидеть
{ "version": "1.30.0", "apiversion": "1.0" }
Обновление
Если есть старый рабочий ZM сервер , допустим 1.28.1 , то перед обновлением нужно сделать полную копию его базы:
# mysqldump -u root -p zm > zm-all-1281.sql
Полученный файл перенести на вновь установленную Slackware Linux 14.2 и ZM-1.30.0 по данной статье. Остановить ZM и апач:
# /etc/rc.d/rc.httpd stop
Cкопировать кадры записей из /var/www/htdocs/zm/events
«Подсунуть» данный файл мускулу:
# mysql -u root -p zm < /путь/до/файла/zm-all-1281.sql
или
# mysql -u root -p MariaDB [(none)]> use zm; MariaDB [zm]> source /путь/до/файла/zm-all-1281.sql; MariaDB [zm]> \q
и обновить базу
# zmupdate.pl
ответить на вопросы и получить базу равную 1.30.0
Запустить апач и проверить работоспособность.
Русификация
Архив zm_ru_ru_utf8-1.30.0.tar.gz содержит 4 файла: database.php, ru_ru.php, ru_ru_utf8.sql и functions.php.
Необходимо:
1. заменить файл database.php и functions.php в zm/includes.
Или внести изменения в ручную в database.php, поменяв строку (в ZM-1.30.0 46-ю) с
$dbConn = new PDO( ZM_DB_TYPE . $socket . ';dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS );
на
$dbConn = new PDO( ZM_DB_TYPE . $socket . ';dbname='.ZM_DB_NAME, ZM_DB_USER, ZM_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") );
Файл functions.php не влияет на русификацию, но в нем исправлена ошибка постоянно появляющаяся в логах - disk_total_space returned false for events.
2. заменить файл ru_ru.php в zm/lang;
3. «Скормить» MySQL ru_ru_utf8.sql
# mysql -u root -p zm < где/оно/лежит/ru_ru_utf8.sql
Всё, ZoneMinder русифицирован %% на 90 :)
Перевод выполнен мной единолично, поэтому весьма вероятны не точности и ошибки. Пишите на форуме в специальной ветке обсуждения данной статьи, попробую своевременно их исправлять.
Фильтры, zmNinja и прочее
Применение фильтров
Опишу работу с фильтрами на основе 2 примеров:
1. отправка сообщений по e-mail.
Заходим в «Параметры» → «Email» и настраиваем под себя (пример на картинке), сохраняем;
заходим в «Фильтры» и настраиваем под себя (пример на картинке), сохраняем;
вводим название фильтра, помечаем его на работу в фоне и сохраняем (пример на картинке).
2. удаление записей старше 7 дней.
Заходим в «Фильтры» и настраиваем под себя (пример на картинке). Для добавления новой строки с условием (и/или) нужно нажать на знак «+». Сохраняем;
вводим название фильтра, помечаем его на работу в фоне и сохраняем (пример на картинке).
zmNinja
Как говорят на официальном сайте, zmNinja является потрясающим приложением для домашней безопасности, которое работает с ZoneMinder. zmNinja не поддерживается большой корпорацией. Это всего лишь один чувак, занимающийся им с 22:00 до 02:00.
Это приложение для просмотра и настройки камер на ZoneMinder. Есть мобильная (платная) версия и бесплатная для работы на компьютере. Бинарники и исходники можно скачать ТУТ.
Про самостоятельную сборку zmNinja из исходников написано ТУТ.
Для того, чтобы в zmNinja отображались камеры нужно в ZoneMinder разрешить использование API.
Если планируется только смотреть, а не управлять, то у пользователя должны быть права на просмотр монитора и поток.
Cambozola
Cambozola — это ароматизированный обезжиренный сыр, удобный Java-апплет для ZoneMinder, который используется для просмотра потока изображений в браузерах, таких как Internet Explorer, которые изначально не корректно работают с данным форматом. Рекомендуется установить данный апплет, во избежания проблем при просмотре потока в IE. Однако, если он не установлен, то изображения можно просматривать при более низкой скорости обновления.
Для сборки данного апплета необходим JDK и ant.
Собираем JDK. Переходим на сайт Oracle выбираем загрузку JDK, соглашаемся с лицензией и скачиваем архив для нашей платформы.
В моем случае, на сегодня — это jdk-8u102-linux-x64.tar.gz
Скопируем этот файл в /tmp/jdk/ и запустим java.SlackBuild с загрузочного DVD Slackware64 из extra/java или после распаковки файла java.tar.gz
# ./java.SlackBuild /tmp/jdk/jdk-8u102-linux-x64.tar.gz ... Slackware package /tmp/jdk-8u102-x86_64-1.txz created.
Установим пакет
# upgradepkg --install-new /tmp/jdk-8u102-x86_64-1.txz ... Package jdk-8u102-x86_64-1.txz installed.
После установки JDK, лучше повторно войти в систему или перезагрузиться.
Далее собираем и устанавливаем ant при помощи sbopkg.
# sbopkg -Bi apache-ant
Скачиваем с официального сайта cambozola-latest.tar.gz, распаковываем, переходим в каталог (на сегодня это cambozola-0.936) и запускаем ant:
# cd cambozola-0.936 # ant
В каталоге cambozola-0.936/dist/ получаем 3 файла: cambozola.jar, cambozola-unsigned.jar, cambozola-server.jar
Копируем файл cambozola.jar в каталог с установленным ZoneMinder, по статье это /var/www/htdocs/zm.
# cp cambozola-0.936/dist/cambozola.jar /var/www/htdocs/zm/
И разрешаем использование данного апплета в «Параметры» → «Изображения»
Заметки по работе с видео
1. Сглаживание видео
Если у вас идет вещание и запись с не большой скоростью, допустим, 6 к/с, то передав некоторые параметры ffmpeg, можно получить на выходе видео файл (например, avi) несколько сглаженным, без рывков. Для этого заходим «Параметры» → «Изображения» и прописываем входные и выходные параметры для ffmpeg
Большинство параметров ffmpeg на русском, хорошо описаны ТУТ.
Правда, в таком случае, при генерации видео прямо из ZoneMinder, выбранные параметры в окне генерации не повлияют на создаваемый видео файл. Обратите внимание на картинку, размер видео файла в реальном времени и увеличенном на 50, одинаков. Т.е. в любом случае видео получается со скоростью 25 к/с, которая задана в FFMPEG_OUTPUT_OPTIONS (ключ -r 25).
2. Особенности настройки мониторов
Я покажу настройку мониторов для 2 типов подключений, ffmpeg и удаленный.
FFMPEG (RTSP) | |
---|---|
Удаленный (RTSP) | |
Удаленный (HTTP) | |
3. В большинстве браузеров не показывается одновременно более 5-6 камер
При клике на «Общий вид» показывается 5-6 камер, на местах остальных, лишь пустые квадраты.
При этом Chromium/Chrome показывает в строке сообщений «Ожидание свободного сокета…». Решается путем правки DNS и указания ZoneMinder, якобы, дополнительных серверов. (Спасибо hokum13).
Проверялось на браузерах Chromium/Chrome/Firefox/SeaMonkey/встроенный в WebOS на телевизоре. У тех, кто пользуется приложением zmNinja или браузером Safari, такой проблемы нет.
Если к серверу ZoneMinder, кроме локальных пользователей, подключаются еще и удалённые, то править лучше свои глобальные DNS записи, т.е. у хостеров, провайдеров, регистраторов и т.д., там где у вас есть права на изменения записей в DNS. Если сервер ZoneMinder только для нужд локалки, то соответственно, править локальный DNS или файл /etc/hosts и на сервере, и на каждом подключаемом компьютере.
В моем случае к серверу ZoneMinder есть доступ удалённым пользователям по URL, допустим, vm.mydom.ru. Для решения нашей проблемы нужно создать количество CNAME записей равных количеству камер/5. Допустим, у меня их 12 штук, значить я создам 3 CNAME записи (округлил до 15, разделил на 5, получил 3). (Пример для bind)
... ... vm IN A 22.33.44.55 vm1 IN CNAME vm vm2 IN CNAME vm vm3 IN CNAME vm ... ...
Всё, записи обновятся не сразу, надо подождать. Настраиваем ZoneMinder. Переходим в «Параметры→Серверы» и добавляем наши «сервера».
Теперь проходим по каждому монитору и выбираем по каждому свой сервер, на 5 мониторов один.
Теперь показывают все камеры.