Zoneminder for Debian --------------------- Initializing database --------------------- pv /usr/share/zoneminder/db/zm_create.sql | sudo mysql --defaults-file=/etc/mysql/debian.cnf OR cat /usr/share/zoneminder/db/zm_create.sql | sudo mysql --defaults-file=/etc/mysql/debian.cnf echo 'grant lock tables,alter,create,select,insert,update,delete,index,trigger on zm.* to 'zmuser'@localhost identified by "zmpass";'\ | sudo mysql --defaults-file=/etc/mysql/debian.cnf mysql With MySQL8: echo "CREATE USER 'zmuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'zmpass';"\ | sudo mysql --defaults-file=/etc/mysql/debian.cnf echo 'grant lock tables,alter,create,select,insert,update,delete,index,trigger on zm.* to 'zmuser'@localhost;'\ | sudo mysql --defaults-file=/etc/mysql/debian.cnf Hint: generate secure password with `pwgen` and update "/etc/zm/zm.conf" accordingly. The following command can help to ensure that zoneminder can read its configuration file: chgrp -c www-data /etc/zm/zm.conf To configure ZoneMinder to use the local database connection, use the following in the "/etc/zm/zm.conf": ZM_DB_HOST=localhost:/run/mysqld/mysqld.sock Upgrading database ------------------ Prior to 1.28.1 database upgrade was performed automatically. "zoneminder" service will refuse to start with outdated database. Assuming that database is on "localhost" then the following command can be used to upgrade "zm" database: zmupdate.pl Additional permissions may be required to perform upgrade: echo 'grant lock tables,alter,alter routine,create,drop,select,insert,update,delete,index,trigger on zm.* to 'zmuser'@localhost identified by "zmpass";'\ | sudo mysql --defaults-file=/etc/mysql/debian.cnf mysql The following command prints the current version of zoneminder database: echo 'select Value from Config where Name = "ZM_DYN_CURR_VERSION";' \ | sudo mysql --defaults-file=/etc/mysql/debian.cnf --skip-column-names zm Enabling service ---------------- By default Zoneminder service is not started automatically and needs to be manually enabled once database is configured: On systemd: sudo systemctl enable zoneminder.service On SysV: sudo update-rc.d zoneminder enable Web server set-up ----------------- There are few manual steps to get the web interface working: ## Apache2 Apache can be configured as folder "/zm" using sample .conf: sudo a2enconf zoneminder Alternatively Apache web site configuration template can be used to setup zoneminder as "http://zoneminder": sudo cp -v /usr/share/doc/zoneminder/examples/apache.conf /etc/apache2/sites-available/ sudo a2ensite zoneminder.conf Common configuration steps for Apache2: sudo a2enmod cgi sudo service apache2 reload ## nginx / fcgiwrap Nginx needs "php-fpm" package to support PHP and "fcgiwrap" package for binary "cgi-bin" applications: sudo apt-get install php-fpm fcgiwrap To enable a URL alias that makes Zoneminder available from http://yourserver/zm the following line is to be added to "server" section of a web site configuration: include /usr/share/doc/zoneminder/examples/nginx.conf; For "default" web site it would be sufficient to include the above statement to the file /etc/nginx/sites-enabled/default To avoid problems with feeds from multiple cameras "fcgiwrap" should be configured to start at least as many processes as there are cameras. It can be done by adjusting DAEMON_OPTS in "/etc/default/fcgiwrap". Systemd users may be affected by the following bug: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=792705 ## Note: When Zoneminder web site is running it may be necessary to set Options/Paths/PATH_ZMS to "/zm/cgi-bin/nph-zms" or according to chosen web site configuration. ## Time Zone ------------ It is imperative to configure matching system and PHP time zones. System time zone can be set by the following command: sudo dpkg-reconfigure tzdata PHP time zone can be configured by changing value of "date.timezone" in one of the following files: /etc/php/*/fpm/php.ini /etc/php/*/apache2/php.ini Please note that MariaDB/MySQL time zone should be identical to system and PHP time zones. By default MariaDB uses system time zone but it might be necessary to confirm time zone of the database especially when it is running on the different host. Failure to configure identical time zones will result in odd issues like missing Timeline images, etc. Changing the location for images and events ------------------------------------------- Zoneminder, in its upstream form, stores data in /usr/share/zoneminder/. This package modifies that by changing /usr/share/zoneminder/images and /usr/share/zoneminder/events to symlinks to directories under /var/cache/zoneminder. There are numerous places these could be put and ways to do it. But, at the moment, if you change this, an upgrade will fail with a warning about these locations having changed (the reason for this was that previously, an upgrade would silently revert the changes and cause event loss - refer bug #608793). If you do want to change the location, here are a couple of suggestions. (thanks to vagrant@freegeek.org): These lines in fstab could allow you to bind-mount an alternate location /dev/sdX1 /otherdrive ext3 defaults 0 2 /otherdrive/zoneminder/images /var/cache/zoneminder/images none bind /otherdrive/zoneminder/events /var/cache/zoneminder/events none bind or if you have a separate partition for each: /dev/sdX1 /var/cache/zoneminder/images ext3 defaults 0 2 /dev/sdX2 /var/cache/zoneminder/events ext3 defaults 0 2 -- Peter Howard , Sun, 16 Jan 2010 01:35:51 +1100 Access to /dev/video* --------------------- For cameras which require access to /dev/video*, zoneminder may need the www-data user added to the video group in order to see those cameras: adduser www-data video Note that all web applications running on the zoneminder server will then have access to all video devices on the system. -- Vagrant Cascadian Sun, 27 Mar 2011 13:06:56 -0700 --- Troubleshooting API ------------------- Check the following URLs are returning valid JSON: * http://localhost/zm/api/host/getVersion.json * http://localhost/zm/api/monitors.json The following page might be of help to troubleshoot errors (set debug level in "/etc/zm/core.php" to get more verbose errors): http://localhost/zm/api/ Verify that "zm.conf" is complete by comparing "/etc/zm/zm.conf" to "/usr/share/doc/zoneminder/examples/zm.conf" to identify missing pieces. For instance, missing definitions of ZM_DB_SSL_* variables can cause malfunction in "/zm/api/monitors.json" so those variables must be defined even to empty values.