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

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

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Nextcloud — отличное решение для хранения файлов, но управление пользователями вручную становится головной болью при масштабировании. Keycloak позволяет централизовать аутентификацию, обеспечивая безопасность, поддержку MFA (двухфакторной аутентификации) и удобный вход через…

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог…

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

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

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

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда