Gentoo – Zoneminder


The Zoneminder ebuild in the portage tree has been broken for a couple of years now. Here is the process I use to build Zoneminder from source on a Gentoo x86 install:

1. Get Root Access

sudo -s

2. Make The Source Directory

mkdir /usr/src/Zoneminder

3. Get The Source Package

cd /usr/src/Zoneminder

Stable: 1.25.0


Development: svn

svn co zm

4. Unpack The Sources

tar xzf ZoneMinder-1.25.0.tar.gz

5. Install Required Dependencies

Add the following to /etc/portage/package.keywords:


Emerge all dependencies:

emerge -avq dev-perl/Archive-Zip dev-perl/Device-SerialPort dev-perl/MIME-Lite dev-perl/MIME-tools dev-perl/PHP-Serialization virtual/perl-Getopt-Long virtual/perl-Module-Load virtual/perl-Time-HiRes dev-perl/DateManip ffmpeg libjpeg-turbo gnutls libgcrypt g-cpan

Install Sys::Mmap with cpan:

g-cpan -i Sys::Mmap

6. Configure and Build Zoneminder

cd /usr/src/Zoneminder/ZoneMinder-1.25.0

Configure the sources (note this is for a localhost install, you can change it to whatever vhost you want)

Make sure to change the zm db username and password to reflect your setup.

./configure --with-webdir=/var/www/localhost/htdocs/zm --with-cgidir=/var/www/localhost/cgi-bin ZM_DB_USER="YOUR_USER" ZM_DB_PASS="YOUR_PASS" cflags="-O2 -march=native -fomit-frame-pointer" cxxflags="-O2 -march=native -fomit-frame-pointer" CPPFLAGS="-D__STDC_CONSTANT_MACROS"

Setup the DB

mysql -u root -p
create database zm;
grant select,insert,update,delete on zm.* to '<database user>'@localhost identified by '<database password>';
flush privileges;

Import the Initial DB

mysql -u root -p -D zm < db/zm_create.sql

Build it

make clean
make install

After all that Zoneminder should be installed on your system and ready to run. Here are is an init script that I created to get Zoneminder started, stopped and reset as well as allow it to start up and shutdown on a machine power cycle.

# File:    /etc/init.d/zoneminder
# Purpose:  Startup the Zoneminder Server
# By:   Ronny L. Bull
# Date: 8-31-2010

ZM_START='/usr/local/bin/ start'
ZM_STOP='/usr/local/bin/ stop'

depend() {
    need net mysql

start() {
        ebegin "Starting Zoneminder"
        eend $? "Failed to start Zoneminder!"

stop() {
        ebegin "Stopping Zoneminder"
        eend $? "Failed to stop Zoneminder!"

Save the file as zoneminder and copy it to /etc/init.d/zoneminder then make sure to run

chmod +x /etc/init.d/zoneminder

Now you can start and stop your server by doing:

/etc/init.d/zoneminder start

If you want it to start on power up add it to the default runlevel

rc-update add zoneminder default

Thats it! You should now be able to access the Zoneminder web interface at http://serverip/zm.

Now go buy some cameras!