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

<Back to main tutorial

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

Step 1: Install ZoneMinder

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

(just press OK for the prompts you get)

Step 2: Set up DB

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';"

Step 3: Set up Apache

sudo a2enconf zoneminder
sudo a2enmod rewrite
sudo a2enmod cgi

Step 4::Some tweaks that will be needed:

Edit /etc/init.d/zoneminder:

add a sleep 10 right after line 25 that reads echo -n "Starting $prog:" (The reason we need this sleep is to make sure ZM starts after mysqld starts)

As of Oct 3 2015, zm.conf is not readable by ZM. This is likely a bug and will go away in the next package

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

Step 5: 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',`
        );

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

sudo apt-get install php5-gd

Step 6: 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

restart:

sudo service apache2 restart
/etc/init.d/zoneminder restart

####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 (you should not need to do this for packages, as this should automatically work)

###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)