This is version 1.32.3 installed on a freenas install (freebsd). I have tried the 'plugin' and installing the port in a jail and get the same result. I cannot view an 'event'. In monitor mode, I can see both cameras. I select modect for both cameras and events are created. If I select the event , I get a black image which has: "The video could not be loaded, either necause the network or server failed or because the format is not supported." If I go to the actual folder in the directory, I can see a jpg and a mp4 file. I can open the jpg, but the mp4 appears to be corrupted or possibly a container with no content.
When I installed the port, I was given these instructions which I followed:
Code: Select all
Installing zoneminder-1.32.3...
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/letsencrypt.sh 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
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
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.
===> SECURITY REPORT:
This port has installed the following files which may act as network
servers and may therefore pose a remote security risk to the system.
/usr/local/www/zoneminder/cgi-bin/zms
/usr/local/bin/zmu
/usr/local/bin/zma
/usr/local/bin/zmc
This port has installed the following startup scripts which may cause
these network services to be started at boot time.
/usr/local/etc/rc.d/zoneminder
If there are vulnerabilities in these programs there may be a security
risk to the system. FreeBSD makes no guarantee about the security of
ports included in the Ports Collection. Please type 'make deinstall'
to deinstall the port if this is a concern.
For more information, and contact details about the security
status of this software, see the following webpage:
https://www.zoneminder.com/
In the log, I get these messages:
Code: Select all
2019-01-06 23:34:06.759310 zmdc[98783].ERR-zmdc.pl ['zma -m 1' exited abnormally, exit status 255]
2019-01-06 23:34:06.743643 zma_m1[101877].ERR-zm_monitor.cpp/477 [Shared data not initialised by capture daemon for monitor IPCAM]
2019-01-06 23:23:23.456989 zmc_m2[101922].ERR-zm_remote_camera_http.cpp/1096 [Unable to get response, disconnecting]
2019-01-06 23:23:23.387776 zmc_m2[101922].ERR-zm_remote_camera_http.cpp/956 [Unable to read subheader]
2019-01-06 23:23:23.370970 zmc_m2[101922].ERR-zm_remote_camera_http.cpp/212 [Select error: Interrupted system call]
2019-01-06 23:16:15.144281 web_php[95029].FAT-views/image.php/179 [Can't create frame images from video for this event (61-video.mp4]
2019-01-06 23:16:14.950557 web_php[95030].ERR-includes/Event.php/415 [Capture file does not exist at /var/db/zoneminder/events/1/2019-01-06/61/00007-capture.jpg]
2019-01-06 23:16:14.345434 web_php[95030].FAT-views/image.php/179 [Can't create frame images from video for this event (61-video.mp4]
2019-01-06 23:16:14.025948 web_php[95029].FAT-views/image.php/179 [Can't create frame images from video for this event (61-video.mp4]
2019-01-06 23:16:13.875971 web_php[95030].ERR-includes/Event.php/415 [Capture file does not exist at /var/db/zoneminder/events/1/2019-01-06/61/00006-capture.jpg]