(These instructions assume installation from source on a ubuntu 14.x+ system)
sudo apt-get update
sudo apt-get install cmake git
sudo apt-get install apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm automake autoconf libjpeg8-dev libjpeg8 apache2 libapache2-mod-php5 php5-cli libphp-serialization-perl libgnutls-dev libjpeg8-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libv4l-dev libtool ffmpeg libnetpbm10-dev libavdevice-dev libmime-lite-perl dh-autoreconf dpatch policykit-1 libpolkit-gobject-1-dev libextutils-pkgconfig-perl libcurl3 libvlc-dev libcurl4-openssl-dev curl php5-gd
(We are asked for the mysql root password when installing mysql server - we can put any password that we like).
git clone https://github.com/ZoneMinder/ZoneMinder.git
cd ZoneMinder/
git submodule init
git submodule update
cmake .
make
sudo make install
sudo ./zmlinkcontent.sh
Now lets make sure ZM has DB permissions to write to the DB:
mysql -uroot -p -e "grant select,insert,update,delete,create,alter,index,lock tables on zm.* to 'zmuser'@localhost identified by 'zmpass';"
mysql -uroot -p <db/zm_create.sql
edit /lib/systemd/system/zoneminder.service file * rename /usr/bin/zmpkg to /usr/local/bin/zmpkg everywhere (The step above is needed because when you compile from source, it installs to /usr/local/instead of /usr/)
# ZoneMinder systemd unit file
# This file is intended to work with Debian distributions
[Unit]
Description=ZoneMinder CCTV recording and surveillance system
After=network.target mysql.service
Requires=mysql.service
[Service]
#User=www-data
Type=forking
ExecStart=/usr/local/bin/zmpkg.pl start
ExecReload=/usr/local/bin/zmpkg.pl restart
ExecStop=/usr/local/bin/zmpkg.pl stop
PIDFile=/var/run/zm/zm.pid
Restart=on-abnormal
[Install]
WantedBy=multi-user.target
1599 sudo service zoneminder stop
1597 sudo service zoneminder start
1598 sudo service zoneminder status
sudo cp distros/ubuntu1504_cmake/conf/apache2/zoneminder.conf /etc/apache2/conf-available/
sudo a2enconf zoneminder
sudo a2enmod cgi
sudo a2enmod rewrite
sudo service apache2 reload
/usr/lib/zoneminder/cgi-bin to /usr/local/libexec/zoneminder/cgi-bin
/usr/share/zoneminder to /usr/local/share/zoneminder
After editing your /etc/apache2/conf-available/zoneminder.conf should look like:
ScriptAlias /zm/cgi-bin "/usr/local/libexec/zoneminder/cgi-bin" <Directory "/usr/local/libexec/zoneminder/cgi-bin"> Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch AllowOverride All Require all granted
Alias /zm /usr/local/share/zoneminder/www <Directory /usr/local/share/zoneminder/www> php_flag register_globals off Options Indexes FollowSymLinks DirectoryIndex index.php
<Directory /usr/local/share/zoneminder/www/api> AllowOverride All
Step 11: Now lets make sure ZM can read/write to the zoneminder directory:
sudo chown -R www-data:www-data /usr/local/share/zoneminder/
Step 12: Make sure you can view Monitor View
Open up ZM, configure your monitors and verify you can view Monitor feeds
If not, open up ZM console in your browser, go to Options->Path and make sure PATH_ZMS is set to /zm/cgi-bin/nph-zms and restart ZM
Step 13: Edit Timezone in PHP
vi /etc/php5/apache2/php.ini Look for [Date] and inside it you will see a date.timezone that is commented. remove the comment and specific your timezone. Please make sure the timezone is valid (see http://php.net/manual/en/timezones.php)
In my case:
date.timezone = America/New_York
Step 14: Finally, lets make a config change to apache (needed for htaccess overrides to work for APIs) Edit /etc/apache2/apache2.conf and add this:
<Directory /usr/local/share> AllowOverride All Require all granted
Restart apache
sudo service apache2 reload
You are done. Lets proceed to make sure everything works:
Making sure ZM and APIs work:
open up a browser and go to http://localhost/zm - should bring up ZM
(OPTIONAL - just for peace of mind) open up a tab and go to http://localhost/zm/api - should bring up a screen showing CakePHP version with some green color boxes. Green is good. If you see red, or you don’t see green, there may be a problem (should not happen). Ignore any warnings in yellow saying “DebugKit” not installed. You don’t need it
open up a tab in the same browser and go to http://localhost/zm/api/host/getVersion.json
If it responds with something like:
{ "version": "1.28.107", "apiversion": "1.28.107.1" }
Then your APIs are working
Make sure ZM and APIs work with security: 1. Enable OPT_AUTH in ZM 2. Log out of ZM in browser 3. Open a NEW tab in the SAME BROWSER (important) and go to http://localhost/zm/api/host/getVersion.json - should give you “Unauthorized” along with a lot more of text 4. Go to another tab in the SAME BROWSER (important) and log into ZM 5. Repeat step 3 and it should give you the ZM and API version
Congrats your installation is complete Suggested changes to MySQL (Optional but recommended)
For most of you Zoneminder will run just fine with the default MySQL settings. There are a couple of settings that may, in time, provide beneficial especially if you have a number of cameras and many events with a lot of files. One setting we recommend is the “innodb_file_per_table” This will be a default setting in MySQL 5.6 but should be added in MySQL 5.5 which comes with Ubuntu 14.04. A description can be found here: http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html
To add “innodb_file_per_table” edit the my.cnf file:
vi /etc/mysql/my.cnf Under [mysqld] add innodb_file_per_table
Save and exit.
Restart MySQL service mysql restart