Easy Way: Ubuntu 15, Install ZoneMinder API from Package - 3esmit/zmNinja GitHub Wiki

<Back to main tutorial

#####These instructions are for a brand new ubuntu 15.04 system which does not have ZM installed.

Step 1: Make sure we add the correct packages

sudo  add-apt-repository ppa:iconnor/zoneminder
sudo apt-get update

if you don't have mysql already installed:

sudo apt-get install mysql-server 

This will ask you to set up a master password for the DB (you are asked for the mysql root password when installing mysql server).

Step 2: Install ZoneMinder

sudo apt-get install zoneminder

(Note this step will result in a zmuser error - please ignore it)

Step 3: Configure the Database

sudo mysql -uroot -p < /usr/share/zoneminder/db/zm_create.sql
mysql -uroot -p -e "grant select,insert,update,delete,create,alter,index,lock tables on zm.* to 'zmuser'@localhost identified by 'zmpass';"

You don't really need this, but no harm (needed if you are upgrading)

sudo /usr/bin/zmupdate.pl

Step 4: Configure systemd to recognize ZoneMinder and configure Apache correctly:

sudo systemctl enable zoneminder
sudo a2enconf zoneminder
sudo a2enmod cgi
sudo chown -R www-data:www-data /usr/share/zoneminder/www/api

We need this for API routing to work:

sudo a2enmod rewrite

This is probably a bug with iconnor's PPA as of Oct 3, 2015 with package 1.28.107. After installing, zm.conf does not have the right read permissions, so we need to fix that. This may go away in future PPA releases:

sudo chown www-data:www-data /etc/zm/zm.conf 

We also need to install php5-gd (as of 1.28.107, this is not installed)

sudo apt-get install php5-gd

Step 5: 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 this)

In my case:

date.timezone = America/New_York

Step 6: Restart services

sudo service apache2 reload
sudo systemctl restart zoneminder

Step 7: If you have changed your DB login/password

If you changed the DB password after installing ZM, the APIs will not be able to connect to the DB.

If you have, go to zoneminder/www/api/app/Config & Edit database.php

There is a class there called DATABASE_CONFIG - change the $default array to reflect your new details. Example:

public $default = array(
                'datasource' => 'Database/Mysql',
                'persistent' => false,
                'host' => 'localhost',
                'login' => 'mynewDBusername',
                'password' => 'mynewDBpassword'
                'database' => 'zm',
                'prefix' => '',
                //'encoding' => 'utf8',`
        );

You are done. Lets proceed to make sure everything works:

####Making sure ZM and APIs work:

  1. open up a browser and go to http://localhost/zm - should bring up ZM
  2. (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
  3. 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 you can view Monitor View

  1. Open up ZM, configure your monitors and verify you can view Monitor feeds.
  2. 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

###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 you now have ZM working with APIs and with security. The APIs tie into ZM security -- if you are not logged into ZM, the APIs won't work (hence the need to try it from the same browser instance)