zoneminder - Complete security camera solution, fully web based with image analysis

Property Value
Distribution FreeBSD 11
Repository FreeBSD Ports Latest i386
Package filename zoneminder-1.32.3_4.txz
Package name zoneminder
Package version 1.32.3
Package release 4
Package architecture i386
Package type txz
Category multimedia
License GPLv2
Download size 5.97 MB
Installed size 30.11 MB
Zoneminder is an all-in-one GPL'd security and surveillance camera solution.
Fully web-based system for viewing and analyzing security camera feeds.
- DOCS: on
- NLS: on
- V4L: off
ZoneMinder is a free, open source Closed-circuit television software 
application developed for Unix-like operating systems which supports 
IP, USB and Analog cameras. 
New installs
ZoneMinder requires a MySQL (or MySQL forks) database backend and 
a http server, capable to execute PHP and CGI scripts.
To simplify things, we assume, that you use MySQL and NGINX on 
the same server.
1. Preliminary steps
1.1 Install databases/mysql57-server or newer
You may choose your favourite method - ports or packages here. 
ZoneMinder use very simple queries, however it tends to write to 
the database quite a lot depending on your capture mode and number 
of cameras. So tweak your MySQL instance accordantly
Now, enable and start MySQL
sysrc mysql_server_enable="YES"
service mysql-server start
1.2 Install www/nginx 
We provide an example for an HTTP install, however, you should use 
HTTPS if you plan to expose your installation to the public. There 
are plenty guides how to do it and security/ is a 
good way to get a valid SSL certificate. Probably, your installation
will be behind reverse proxy, so this example should work for you.
Please, notive the following issues with ZM:
- web interface has several hardcoded /zm in url generation, so it is
mandatory to serve your installtion from /zm subfolder
- if behind reverse proxy, HTTP_X_FORWARDED_PROTO must be supplied or link
generation will use http://
Your server block should include the following:
server {
listen 80;
root /usr/local/www/zoneminder;
index index.php
gzip off;
location /cgi-bin/nph-zms {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass  unix:/var/run/fcgiwrap/fcgiwrap.sock;
location /zm/cache {
alias /var/cache/zoneminder;
location /zm {
alias	/usr/local/www/zoneminder;
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_index index.php;
fastcgi_pass unix:/var/run/php-fpm.sock;
location ~ \.(jpg|jpeg|gif|png|ico)$ {
access_log	off;
expires	33d;
location /zm/api/ {
alias	/usr/local/www/zoneminder;
rewrite ^/zm/api(.+)$ /zm/api/app/webroot/index.php?p=$1 last;
Enable and start NGINX
sysrc nginx_enable="YES"
service nginx start
1.3 Install www/fcgiwrap 
As NGINX lacks it's own CGI wrapper, we need external one. Please 
note that ZoneMinder's montage page use simultaneous access to all 
cameras, so you need to use at least as many fcgiwrap workers as 
your number of cameras. The following example assumes you have 4.
Enable and start FcgiWrap
sysrc fcgiwrap_enable="YES"
sysrc fcgiwrap_user="www"
sysrc fcgiwrap_socket_owner="www"
sysrc fcgiwrap_flags="-c 4"
1.4 PHP is installed as a dependency to ZoneMinder. However, you should 
tweak some of it's settings.
Edit /usr/local/etc/php-fpm.conf and set
listen = /var/run/php-fpm.sock
listen.owner = www = www
env[PATH] = /usr/local/bin:/usr/bin:/bin
If you want to set another path for the socket file, make sure you 
change it in your NGINX config well. The env[PATH] needs to be set 
to locate the zip utility as ZoneMinder's export functions rely on 
exec(). Sorry, chroot folks. 
PHP throws warning if date.timezone option is not set. The best place 
to do it is to create new ini file in /usr/local/etc/php with overrides
date.timezone = "UTC"
Enable and start php-fpm
sysrc php_fpm_enable="YES"
service php-fpm start
1.5 ZoneMinder constantly keeps the last N frames from its cameras to 
preserve them when alarm occurs. This can be a performance hog if 
placed on spindle drive. The best practice is put it on tmpfs.
See for more 
ZoneMinder will use /tmp for default. If you plan to change it, see 
ZM_PATH_MAP setting.
Mapping /tmp to tmpfs is actually a recommended step under FreeBSD.
Edit /etc/fstab and add the following:
tmpfs			/tmp		tmpfs	rw,nosuid,mode=01777	0	0
The size of temporary files depends on your number of cameras 
number and frames you plan to keep. My 12 3Mbit cameras with 25 
last frames consumes 6 GB.
2. ZoneMinder installation
Connect to MySQL under root and create zm user and populate database.
mysql -u root -p
GRANT ALL PRIVILEGES ON zm.* TO 'zmuser'@'localhost' IDENTIFIED BY 'zmpass';
mysql -u root -p zm < /usr/local/share/zoneminder/db/zm_create.sql
2.1 If you have chosen to change the ZoneMinder MySQL credentials to something
other than zmuser/zmpass then you must now edit /usr/local/etc/zm.conf. Change
ZM_DB_USER and ZM_DB_PASS to the values you created in the previous step.
Enable and start ZoneMinder
sysrc zoneminder_enable="YES"
service zoneminder start
1. Stop ZoneMinder
service zoneminder stop
2. Upgrade database
sudo -u www
3. Start ZoneMinder
service zoneminder start
Upgrading from www/zoneminder 1.30.x or www/zoneminder-h264
Before proceeding to upgrade sequence listed above,
1. Connect to mysql server with root and issue
set global log_bin_trust_function_creators=1;
2. Add write access to www user to /usr/local/etc/zoneminder/zmcustom.conf
3. Take notice, that default monitor files are not under ${WWWDIR} anymore.
Old setup will work, but as security concideration it is recommended to
move them to /var/db/zoneminder (default) or to any place not under www root.


Package Version Architecture Repository
zoneminder-1.32.3_4.txz 1.32.3 amd64 FreeBSD Ports Latest
zoneminder-1.32.3_4.txz 1.32.3 i386 FreeBSD Ports Quarterly
zoneminder-1.32.3_4.txz 1.32.3 amd64 FreeBSD Ports Quarterly
zoneminder - - -


Name Value
ffmpeg = 4.2_2,1
gettext-runtime = 0.20.1
jpeg-turbo = 2.0.2 - - - - -
libgcrypt = 1.8.4_1 - - - - -
libx264 = 0.157.2980 -
mp4v2 = 2.0.0
mysql57-client = 5.7.27
p5-DBD-mysql = 4.050
p5-DBI = 1.642
p5-Data-Dump = 1.23_1
p5-Data-UUID = 1.224
p5-Date-Manip = 6.77
p5-Device-SerialPort = 1.040000_2
p5-IO-Socket-Multicast = 1.12_2
p5-JSON-MaybeXS = 1.004000
p5-LWP-Protocol-https = 6.07_1
p5-Number-Bytes-Human = 0.11_1
p5-SOAP-WSDL = 3.003
p5-Sys-CPU = 0.61
p5-Sys-MemInfo = 0.99
p5-Sys-Mmap = 0.19
p5-Test-LWP-UserAgent = 0.030
perl5 = 5.30.0
php72 = 7.2.21
php72-ctype = 7.2.21
php72-gd = 7.2.21
php72-json = 7.2.21
php72-opcache = 7.2.21
php72-pdo_mysql = 7.2.21
php72-pecl-APCu = 5.1.17
php72-session = 7.2.21
php72-sockets = 7.2.21
sudo = 1.8.27_1
zip = 3.0_1


Type URL
Binary Package zoneminder-1.32.3_4.txz
Source Package multimedia/zoneminder

Install Howto

Install zoneminder txz package:

# pkg install zoneminder

See Also

Package Description
zonenotify-0.1_1.txz DNS notify sender written in C
zoo-2.10.1_3.txz Manipulate archives of files in compressed form
zookeeper-3.5.5.txz Coordination Service for Distributed Applications
zoom-1.1.5_3.txz Z-Interpreter for X with full V6 support
zope213-2.13.24_1.txz Object-based web application platform Version 2.13
zopfli-1.0.3_1.txz Zopfli Compression Algorithm
zorba-2.7.0_28.txz General purpose C++ XQuery processor
zorro-1.1.8_3.txz Simple to-do list manager
zphoto-1.2_14.txz Zooming photo album generator
zpu-binutils-1.0.txz ZPU toolchain
zpu-gcc-1.0_1.txz ZPU gcc compiler
zrythm-0.5.097_1.txz Modern music production system, also known as DAW
zsd-0.0.2014.12.07.txz Destroys ZFS snapshots
zsh-5.7.1_1.txz The Z shell
zsh-antigen-2.2.3.txz Tool for managing Zshell plugins inspired by Vundle