Неудачный эксперимент по установке 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 это работать не будет и тут или надо под более старую версию виртуализировать или смотреть другие решения. Увы.

Похожие записи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

GlusterFS — это масштабируемая, распределённая файловая система с открытым исходным кодом, которая объединяет хранилища нескольких серверов в единое пространство имён. Она идеально подходит для создания отказоустойчивых и высокопроизводительных хранилищ, особенно…

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Запихать Mysql в Kubernetes оказалось не очень хорошей идеей и я решил основательно пересмотреть инфраструктуру своего pet-проекта и за основу будет принят кластер из трех серверов. На каждом узле кластера…

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

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

Читать еще статьи

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Как проверить работу камеры в Ubuntu Linux: диагностика USB и встроенных веб-камер

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Полное руководство по установке Docker, Docker Compose, kubectl, Helm и k9s в Linux

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS

Настройка маршрутизации через VipNet: пошаговое руководство для RedOS