mirror of
https://git.freebsd.org/ports.git
synced 2025-06-10 07:10:32 -04:00
159 lines
5.1 KiB
Text
159 lines
5.1 KiB
Text
|
|
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/mysql56-server or newer
|
|
You may choose your favourite method - ports or packages here.
|
|
FreeBSD default setting use STRICT_TRANS_TABLES sql_mode. It's mandatory to disable it. Edit your my.cnf accordingly
|
|
|
|
The following SQL mode should be compatible with ZM:
|
|
sql_mode= NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
|
|
|
|
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/letsencrypt.sh is a
|
|
good way to get a valid SSL certificate.
|
|
|
|
Your server block should include the following:
|
|
|
|
server {
|
|
root /usr/local/www/zoneminder;
|
|
try_files $uri $uri/ /index.php$is_args$args;
|
|
index index.php;
|
|
|
|
location = /cgi-bin/nph-zms {
|
|
include fastcgi_params;
|
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
|
|
}
|
|
|
|
location ~ \.php$ {
|
|
include fastcgi_params;
|
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
fastcgi_pass unix:/var/run/php-fpm.sock;
|
|
}
|
|
|
|
location /api {
|
|
rewrite ^/api/(.+)$ /api/index.php?p=$1 last;
|
|
}
|
|
}
|
|
|
|
1.2.1 ZoneMinder has it's own authentication system, however it's recommend to use NGINX basic
|
|
auth over HTTPS if you don't need fine grain control to ZoneMinder components.
|
|
|
|
1.2.2 If you choose ZoneMinder authentication, it's recommended to prohibit access to
|
|
image and events folder as it's possible to guess file names inside it.
|
|
|
|
location ~ ^/(?:images|events)/ {
|
|
deny all;
|
|
}
|
|
|
|
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_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
|
|
listen.group = 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 https://www.freebsd.org/cgi/man.cgi?query=tmpfs for more
|
|
information.
|
|
|
|
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
|
|
|
|
CREATE DATABASE zm;
|
|
GRANT ALL PRIVILEGES ON zm.* TO 'zmuser'@'localhost' IDENTIFIED BY 'zmpass';
|
|
FLUSH PRIVILEGES;
|
|
quit;
|
|
|
|
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
|
|
|
|
Upgrades
|
|
========
|
|
|
|
1. Stop ZoneMinder
|
|
service zoneminder stop
|
|
|
|
2. Upgrade database
|
|
sudo -u www zmupdate.pl
|
|
|
|
3. Start ZoneMinder
|
|
service zoneminder start
|