ports/multimedia/zoneminder/files/pkg-message.in
Ivan 71909fff64 multimedia/zoneminder: update 1.36.12 -> 1.36.33, add php 8.1 compat
- package installation now creates /var/log/zm
- fixes some locale names

PR:		267304
Changes:	https://github.com/ZoneMinder/zoneminder/releases
Tested-by:	VVD <vvd@unislabs.com>
2023-04-09 18:37:29 +02:00

186 lines
5.4 KiB
Text

[
{ type: install
message: <<EOM
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 keeps the last 1-3 frames from monitors as cache when broadcasting
stream through zms. This can be a performance hog if
placed on spindle drive or add wear to SSD. 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.
Edit /etc/fstab and add the following:
tmpfs /tmp tmpfs rw,nosuid,mode=01777 0 0
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
EOM
}
{ type: upgrade
message: <<EOM
To perform an upgrade from any version:
1. Stop ZoneMinder
service zoneminder stop
2. Upgrade database
sudo -u www zmupdate.pl
3. Start ZoneMinder
service zoneminder start
If you see error ERROR 1419 (HY000) during database update, set
log_bin_trust_function_creators = 1 in runtime or in mysql server config;
For example, login as root and issue SET GLOBAL log_bin_trust_function_creators = 1;
If ZM interface complains about absent configuration parameters, zmupdate.pl script
contains --freshen option to add them.
You can execute it with sudo -u www zmupdate.pl --freshen
Starting from version 1.36, ZM doesn't need too much tmpfs space. zmc process now
allocates memory as needed. tmpfs backed /tmp is still needed by zms to store
1-3 images, so you shrink your tmpfs /tmp drasticallyi (if you followed installation
guide).
EOM
}
]