Неудачный эксперимент по установке ZoneMinder в Ubuntu 25.04

Оцените статью

Пришло время реанимировать домашнюю систему видеонаблюдения на базе ZoneMinder. У меня как раз есть китайская камера BESDER 6024pb-jw201 которая уже год как не используется и просто смотрит в коридор для устрашения хулиганов.

Установка ZoneMinder

Тут стоит отметить, все очень удобно и вам потребуется просто перейти по адресу https://cloud.zoneminder.com/downloads.html, выбрать версию вашей операционной системы и получить собранный пакет.

В моем случае получается так:

root@srv-prod-rain-01:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 25.04
Release:        25.04
Codename:       plucky

И для такой свежей системы собранной стабильной версии просто нет и мы можем использовать пакет для более старой версии и он будет работать или собрать из исходных кодов https://github.com/ZoneMinder/zoneminder/releases.

ZoneMinder Download Package

Для начала мы установим пакет для LTS Ubuntu 22.04 и нам понадобится ряд зависимостей без которых ZoneMinder работать не будет.

В нашем случае мы сделаем хитро и просто установим пакет и сделаем фикс сломанных зависимостей.

# wget https://zmrepo.zoneminder.com/debian/release-1.36/jammy/zoneminder_1.36.35~20241022.27-jammy_amd64.deb7
# dpkg -i ./zoneminder_1.36.35~20241022.27-jammy_amd64.deb7
# apt --fix-broken install
# apt-get upgrade

Активируем и запускаем сервис ZoneMinder.

# systemctl enable zoneminder
# systemctl start zoneminder

Работать ненастроенным он конечно не будет, так как у нас не настроена база данных.

авг 27 07:52:42 srv-prod-rain-01 zmpkg.pl[10785]: Compilation failed in require at /usr/bin/zmpkg.pl line 34.
авг 27 07:52:42 srv-prod-rain-01 zmpkg.pl[10785]: BEGIN failed--compilation aborted at /usr/bin/zmpkg.pl line 34.
авг 27 07:52:42 srv-prod-rain-01 zmpkg[10785]: ERR [Error reconnecting to db: errstr:Access denied for user 'www-data'@'localhost' (using password: NO) error val:]

Установка MySQL для ZoneMinder

Устанавливаем Mysql server.

# aptitude install mysql-server
# systemctl enable mysql
# systemctl start mysql

Создаем пользователя и базу данных.

# mysql
mysql> CREATE USER user_zoneminder@'%' IDENTIFIED BY 'xxxxPASSWORDxxx';
mysql> CREATE DATABASE db_zoneminder;
mysql> GRANT ALL PRIVILEGES ON db_zoneminder.* TO user_zoneminder@'%';
mysql> FLUSH PRIVILEGES;

Инициализируем базу данных. И перед инициализацией закомментируйте в файле zm_create.sql создание и переключение на базу данных zm.

# cat /usr/share/zoneminder/db/zm_create.sql | mysql db_zoneminder
# cat /usr/share/zoneminder/db/triggers.sql | mysql db_zoneminder

Попытка настройки ZoneMinder

Прописываем логин и пароль для базы данных в файле cat /etc/zm/zm.conf.

# ZoneMinder database hostname or ip address and optionally port or unix socket
# Acceptable formats include hostname[:port], ip_address[:port], or
# localhost:/path/to/unix_socket
ZM_DB_HOST=localhost

# ZoneMinder database name
ZM_DB_NAME=db_zoneminder

# ZoneMinder database user
ZM_DB_USER=user_zoneminder

# ZoneMinder database password
ZM_DB_PASS=xxxxPASSWORDxxx

Перезапускаем сервис и сильно удивляемся, что ничего не изменилось и он все еще пытается подключиться под пользователем www-data.

В целом понятно почему это происходит и сервис не может скомпилировать Perl-скрипт.

root@srv-prod-rain-01:~# systemctl status zoneminder
× zoneminder.service - ZoneMinder CCTV recording and surveillance system
     Loaded: loaded (/usr/lib/systemd/system/zoneminder.service; enabled; preset: enabled)
     Active: failed (Result: exit-code) since Sat 2025-08-30 08:23:57 +07; 4min 18s ago
 Invocation: ad3ac41ff4434295ae0da2259e6c5624
       Docs: http://zoneminder.readthedocs.org/en/latest/
    Process: 1262 ExecStart=/usr/bin/zmpkg.pl start (code=exited, status=255/EXCEPTION)
   Mem peak: 15.3M
        CPU: 180ms

авг 30 08:23:57 srv-prod-rain-01 zmpkg.pl[1262]: Unable to connect to DB. ZM Cannot continue.
авг 30 08:23:57 srv-prod-rain-01 zmpkg.pl[1262]: BEGIN failed--compilation aborted at /usr/share/perl5/ZoneMinder/Config.pm line 150.
авг 30 08:23:57 srv-prod-rain-01 zmpkg.pl[1262]: Compilation failed in require at /usr/share/perl5/ZoneMinder.pm line 33.
авг 30 08:23:57 srv-prod-rain-01 zmpkg.pl[1262]: BEGIN failed--compilation aborted at /usr/share/perl5/ZoneMinder.pm line 33.
авг 30 08:23:57 srv-prod-rain-01 zmpkg.pl[1262]: Compilation failed in require at /usr/bin/zmpkg.pl line 34.
авг 30 08:23:57 srv-prod-rain-01 zmpkg.pl[1262]: BEGIN failed--compilation aborted at /usr/bin/zmpkg.pl line 34.
авг 30 08:23:57 srv-prod-rain-01 zmpkg[1262]: ERR [Error reconnecting to db: errstr:Access denied for user 'www-data'@'localhost' (using password: NO) error val:]
авг 30 08:23:57 srv-prod-rain-01 systemd[1]: zoneminder.service: Control process exited, code=exited, status=255/EXCEPTION
авг 30 08:23:57 srv-prod-rain-01 systemd[1]: zoneminder.service: Failed with result 'exit-code'.
авг 30 08:23:57 srv-prod-rain-01 systemd[1]: Failed to start zoneminder.service - ZoneMinder CCTV recording and surveillance system.

Дальше всякое интересное изнасилование моего мозга 🙂 И в целом лучше сразу переходить к этапу мэйнтейнер забил на все в 2020 году и мы просто запустимся в ручном режиме и удивимся. Настройки применились, но получили другую ошибку.

авг 30 08:02:47 srv-prod-rain-01 zmpkg[51524]: ERR [Error reconnecting to db: errstr:Plugin 'mysql_native_password' is not loaded error val:]
авг 30 08:02:47 srv-prod-rain-01 systemd[1]: zoneminder.service: Control process exited, code=exited, status=255/EXCEPTION
авг 30 08:02:47 srv-prod-rain-01 systemd[1]: zoneminder.service: Failed with result 'exit-code'.
авг 30 08:02:47 srv-prod-rain-01 systemd[1]: Failed to start zoneminder.service - ZoneMinder CCTV recording and surveillance system.

Подключаем плагин. Для чего создаем файл /etc/mysql/conf.d/enable-mysql-native-password.cnf со следующим содержимым:

[mysqld]
mysql_native_password=ON

Перезапускаем сервис:

# systemctl restart mysql

Создаем пользователя с шифрованием пароля в native password:

mysql> CREATE USER 'user_zoneminder'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxxPASSWORDxxx';

Проверяем, что пользователь теперь использует native password:

mysql> SELECT user, host, plugin FROM mysql.user WHERE plugin='mysql_native_password';
+-----------------+-----------+-----------------------+
| user            | host      | plugin                |
+-----------------+-----------+-----------------------+
| user_zoneminder | localhost | mysql_native_password |
+-----------------+-----------+-----------------------+
1 row in set (0,00 sec)

Запуск ZoneMinder в Docker

Эксперименты начнем с https://hub.docker.com/r/zoneminderhq/zoneminder, там правда четыре года ничего не менялось, но как я понимаю и весь проект уже как раз в то время и заглох.

Запуск для теста будет выглядеть следующим образом.

# docker run -d -t -p 1080:443 \
    -v /disk/zoneminder/events:/var/lib/zoneminder/events \
    -v /disk/zoneminder/mysql:/var/lib/mysql \
    -v /disk/zoneminder/logs:/var/log/zm \
    --name zoneminder \
    zoneminderhq/zoneminder:latest-el7

Выглядит рабочим и даже web-интерфейс доступен.

zoneminder web-interface

Но наша цель немного не такая и хотелось бы запустить это недоразумение локально и без докер-оберток. Странно, но это чудо похоже и в Docker не хочет работать.

==> /var/log/zoneminder/zmdc.log <==
09/01/25 09:00:03.379709 zmdc[570].FAT [main:195] [Can't connect to zmdc.pl server process at /var/lib/zoneminder/sock/zmdc.sock: No such file or directory]

Это уже становится интересной задачей и давайте соберем все это из исходников стабильной-ветки https://github.com/ZoneMinder/zoneminder.

Сборка ZoneMinder из исходных кодов

Удаляем к чертовой матери прошлые эксперименты.

# aptitude purge zoneminder

И соберем все сами из мастер ветки, для чего нам понадобятся ряд зависимостей. И интересно, что теперь для сборки используется GitLab CI и Docker, они честно об этом предупреждают в описании проекта, но мы попробуем по старой схеме.

# apt-get install build-essential
# apt-get install devscripts

Сборка получается довольно странная, но dev-пакеты получилось установить автоматически.

# ./utils/do_debian_package.sh --snapshot=stable --type=binary --interactive=no --dput=no --debbuild-extra=--no-sign

Собранные пакеты находятся в корне репозитория.

Установим собранные пакеты, а недостающие пакеты также установим через apt –fix-broken install.

# dpkg -i ./zoneminder_1.36.35-plucky_amd64.deb
# apt --fix-broken install
# apt-get install postfix  libmojolicious-perl  libapache2-mod-perl2  libnet-jabber-perl  libtemplate-plugin-gd-perl  libtemplate-plugin-xml-perl  php-pear

Итог

На Ubuntu 25.04 это работать не будет и тут или надо под более старую версию виртуализировать или смотреть другие решения. Увы.

Related Posts

Терминальный сервер и RemoteAPP в Ubuntu Linux

Пришло время закрыть вопрос с RemoteAPP в Ubuntu Linux и большая часть уже сделана и можете посмотреть предыдущие заметки как я понимал Windows Server 2025 и службы терминалов без использования…

Примеры конфигурации HAProxy

HAProxy — это программное обеспечение с открытым исходным кодом, которое предоставляется бесплатно. Оно используется для распределения нагрузки и как прокси-сервер, чтобы обеспечить непрерывную работу и высокую доступность веб-приложений и сервисов.…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

You Missed

Неудачный эксперимент по установке ZoneMinder в Ubuntu 25.04

Неудачный эксперимент по установке  ZoneMinder в Ubuntu 25.04

Терминальный сервер и RemoteAPP в Ubuntu Linux

Терминальный сервер и RemoteAPP в Ubuntu Linux

Примеры конфигурации HAProxy

Примеры конфигурации HAProxy
Установка и настройка InfluxDB (V2 OSS)

Немного экспериментов с Windows Server 2025

Немного экспериментов с Windows Server 2025

Шпаргалка по работе с envsubst

Шпаргалка по работе с envsubst