Debian 9 64-bit with Zoneminder 1.30.4 the Easy Way

From ZoneMinder Wiki
Jump to: navigation, search

Debian 9 with Zoneminder 1.30.4

08OCT17 - This procedure has been verified with the Debian 9.2.0.

Note: 23JUN17 - I was able to get the libvlc source to work! I have added the install for vlc-plugin-base which allows the Zoneminder install to complete without errors. However, I have been getting some console errors from VLC. It may be my old camera and you may have good results with libvlc but I consider ffmpeg better to use.

I used Debian 9 net install CD (

Install only: web server, SSH server and standard system utilities from tasksel

Login and become root (su root) or prepend sudo to the following commands

If needed check to make sure you are up to date

apt update
apt upgrade
apt dist-upgrade

Install additional LAMP components Mariadb server (recommended)

apt install php mariadb-server php-mysql libapache2-mod-php7.0

Secure Mariadb, create root password et. al.


NOTE:The MySQL/MariaDB configuration file is located at: /etc/mysql/mysql.conf.d/mysqld.cnf To better manage the MariaDB server I recommend you move the config file and replace the default my.cnf symbolic link (this also works for MySQL 5.6).

rm /etc/mysql/my.cnf  
cp /etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/my.cnf

The following change to Mariadb settings is optional but is included if you have problems logging into Zoneminder

nano /etc/mysql/my.cnf

Make the following changes:

character-set-server = latin1
collation-server = latin1_swedish_ci

Note: The above settings are actually the Mariadb default. Changing back to default is necessary to avoid errors when logging into Zoneminder. This was added on 01APR17 but is not an April Fool! It may be necessary to align these settings with your regional language.

Ctrl+o Enter to save

Ctrl+x to exit

Restart Mariadb

service mariadb restart

Install Zoneminder

Add the Deb Multimedia repository. (instructions at:

Edit sources.list

nano /etc/apt/sources.list

Add to the end of the file:

deb stretch main non-free

Ctrl+o Enter to save

Ctrl+x to exit

After you have added the necessary line in /etc/apt/sources.list the first package to install is deb-multimedia-keyring.

apt update
apt install deb-multimedia-keyring

If apt-get can not find the new key, do that :

dpkg -i deb-multimedia-keyring_2016.8.1_all.deb

Update packages list:

apt update
apt upgrade
apt dist-upgrade

Install Zoneminder

apt install zoneminder vlc-plugin-base php7.0-gd

Set permissions of /etc/zm/zm.conf to root:www-data 740

chmod 740 /etc/zm/zm.conf
chown root:www-data /etc/zm/zm.conf

Enable Zoneminder service to start at boot

systemctl enable zoneminder.service

Add www-data to the sudo group (to enable use of local video devices)

adduser www-data video

Start Zoneminder

systemctl start zoneminder.service

Check to see that Zoneminder is running

systemctl status zoneminder.service

Enable CGI and Zoneminder configuration in Apache.

a2enmod cgi
a2enmod rewrite
a2enconf zoneminder

Add timezone to PHP

sed -i "s/;date.timezone =/date.timezone = $(sed 's/\//\\\//' /etc/timezone)/g" /etc/php/7.0/apache2/php.ini

Change permissions in /usr/share/zoneminder/

chown -R www-data:www-data /usr/share/zoneminder/

Restart Apache

service apache2 restart

Open Zoneminder in a web browser (http://server-ip/zm).

10OCT17 - An issue with the /tmp/zm directory has been reported. Debian uses private tmp folders so even though you can see the files & folders, zoneminder cannot because it is running under a different user account.

Go to Options -> Paths and then inspect each PATH_XXX variable. If it is set to "/tmp/zm", change it to "/dev/shm". Don't forget to restart zoneminder.

Alternate install MySQL Server

Note: Install of MySQL was not tested with the Debian 9.0.0 release but should work based on past experience

apt install php default-mysql-server php-mysql apache2-mod-php7.0

Make a change to MySQL settings: (Note: Your my.cnf may be in another location)

nano /etc/mysql/my.cnf

In the [mysqld] section add the following


Note: if you are installing on an existing database server you can use the following as an alternate to 'sql_mode = NO_ENGINE_SUBSTITUTION' (Thanks to "bodom" for this alternate):

init_connect = 'SET @@sql_mode = CASE CURRENT_USER() WHEN \'zmuser@localhost\' THEN \'NO_ENGINE_SUBSTITUTION\' ELSE @@sql_mode END;'

Ctrl+o Enter to save

Ctrl+x to exit

Restart MySQL

systemctl restart mysql

Continue with Zoneminder install