ZoneMinder

来自 ArchWiki
(重定向自 Zoneminder)

ZoneMinder 是一套集成的应用程序,提供完整的监控解决方案,可以捕获、分析、记录和监控连接到基于 Linux 的机器的任何闭路电视或安全摄像头。它旨在运行在支持 Video For Linux (V4L) 接口的发行版上,并且已经过连接到 BTTV 卡、各种 USB 摄像头的视频摄像头的测试,并且还支持大多数 IP 网络摄像头。

安装

Install the zoneminderAUR 软件包。

注意: 为了使 ZoneMinder 正常工作,安装并正确配置 LAMP (Linux, Apache, MySQL, PHP) 堆栈非常重要。

Apache

1) 编辑 Apache/etc/httpd/conf/httpd.conf 并取消注释以下行

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule cgid_module modules/mod_cgid.so

2) 在同一文件中,通过在末尾添加以下行来启用 ZoneMinder 的配置

Include conf/extra/zoneminder.conf

现在启动或重启 httpd.service

Nginx

警告: 在 Nginx 中使用 ZoneMinder 之前,请确保您已安装可选依赖项 fcgiwrap, spawn-fcgimultiwatchAUR
注意: 以下说明将为 Nginx 创建一个模块化设置,类似于 Debian-based 发行版中使用的设置。

1) 编辑 Nginx/etc/nginx/nginx.conf 并在 http 块的末尾添加以下行

include sites-enabled/*.conf;

2) 如果 /etc/nginx/sites-enabled 目录尚不存在,则创建它

# mkdir -p /etc/nginx/sites-enabled

3) 将 ZoneMinder 的配置文件从 /etc/nginx/sites-available 链接到 /etc/nginx/sites-enabled

# ln -sf /etc/nginx/sites-{available,enabled}/zoneminder.conf

现在启动或重启 fcgiwrap-multiwatch.servicenginx.service

提示: 如果 fcgiwrap-multiwatch.service 抱怨套接字已存在并拒绝启动,请检查 fcgiwrap.socketfcgiwrap.service 的状态,如果它们处于活动状态,则停止它们。

MariaDB

1) 如果您尚未这样做,请初始化 MariaDB 的默认数据库

# mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql 2> /dev/null

2) 启动 mariadb.service 并为 ZoneMinder 创建数据库和用户

注意: 如果您尚未为 MariaDB 的 root 用户设置密码(您真的应该这样做),则必须在以下命令中省略 -p 选项。
# mariadb -u root -p < /usr/share/zoneminder/db/zm_create.sql
# mariadb -u root -p -e "grant select,insert,update,delete,create,drop,alter,index,lock tables,alter routine,create routine,trigger,execute on zm.* to 'zmuser'@localhost identified by 'zmpass';"

最后步骤

运行以下命令以创建 ZoneMinder 在运行时所需的一些 volatile 文件和目录

# systemd-tmpfiles --create

然后,除了上述步骤中已启动的任何服务外,启动 php-fpm.servicezoneminder.service。ZoneMinder 的 Web 界面将在 https://127.0.0.1:8095 上访问。

故障排除

日志默认保存在 /var/log/zoneminder 中。您也可以在 Web 界面中检查日志。

请参阅上游 wiki 页面:故障排除

清理应用程序数据

这对于需要擦除所有 ZoneMinder 并重新开始的开发人员或用户很有用。

重建数据库

删除 ZoneMinder MySQL 数据库并删除 MySQL 用户

# mysql -u root -p
DROP DATABASE zm;
DROP USER 'zmuser'@'localhost';

重建数据库和用户

# mysql -u root -p
CREATE DATABASE zm;
CREATE USER 'zmuser'@'localhost' IDENTIFIED BY 'zmpass';
GRANT ALTER, CREATE, DELETE, INSERT, SELECT, UPDATE ON zm.* TO 'zmuser'@'localhost';
exit

将预配置的表导入到您新创建的 zm 数据库中

# mysql -u root -p zm < /usr/share/zoneminder/db/zm_create.sql

清理缓存文件夹

警告: 这将删除所有图像和事件。
# rm -Rf /var/lib/zoneminder/events/* /var/lib/zoneminder/images/* /var/lib/zoneminder/cache/*

本地视频设备

重要的是,运行 httpd 的用户(通常是 http)可以访问您的摄像头,例如

$ groups http
video http
$ ls -l /dev/video0
crw-rw----+ 1 root video 81, 0 Oct 28 21:54 /dev/video0

也就是说,将 http 用户添加到 video 组。

要将用户添加到组,请运行以下命令

# usermod -aG video http

多个本地 USB 摄像头

如果您在使用多个 USB 视频设备(例如多个网络摄像头)时观察到类似 libv4l2: error turning on stream: No space left on device 的错误,您可能需要增加总线上的带宽。

首先通过停止 zoneminder.service 进行测试,然后

# rmmod uvcvideo
# modprobe uvcvideo quirks=128

启动 zoneminder.service,如果问题得到解决,通过将模块选项添加到 /etc/modprobe.d/uvcvideo.conf 来持久化更改。例如

options uvcvideo nodrop=1 quirks=128

(参考)

参见