# -*- coding: utf-8; mode: tcl; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- vim:fenc=utf-8:ft=tcl:et:sw=4:ts=4:sts=4
# $Id: Portfile 103218 2013-02-19 03:26:34Z eborisch@macports.org $

PortSystem          1.0

name                zabbix2
version             2.0.5
revision            0
categories          net
maintainers         nomaintainer
platforms           darwin

license             GPL-2

description         An open source application and network monitor

long_description    Zabbix is the ultimate open source availability and \
                    performance monitoring solution. Zabbix offers advanced \
                    monitoring, alerting, and visualization features today \
                    which are missing in other monitoring systems, even some \
                    of the best commercial ones. 

distname            zabbix-${version}
livecheck.name      zabbix
livecheck.regex     "zabbix-(\[0-9.\]+\.\[0-9.\]+)\.tar"
homepage            http://www.zabbix.com/
master_sites        sourceforge:zabbix

checksums \
    rmd160  b716ba7780a375654dcbf3be90546fb54be10bad \
    sha256  9539abb848049195b6e8d24d23de40c26e07d3e5219ca890f4272a0d88cc640f

universal_variant   no

depends_lib         port:OpenIPMI

conflicts           zabbix

dist_subdir         zabbix2

subport zabbix2-agent {}

configure.args      --bindir=${prefix}/bin/zabbix \
                    --sbindir=${prefix}/sbin/zabbix \
                    --libexecdir=${prefix}/libexec/zabbix \
                    --datadir=${prefix}/share/zabbix \
                    --sysconfdir=${prefix}/etc/zabbix \
                    --localstatedir=${prefix}/var/zabbix

configure.args-append       --with-openipmi=${prefix}

configure.ldflags-append    -lresolv

startupitem.create      yes

if { ${subport} != ${name} } {
    startupitem.name        zabbix2-agentd
    startupitem.executable  \
        ${prefix}/sbin/zabbix/zabbix_agentd \
        -c ${prefix}/etc/zabbix/zabbix_agentd.conf
    startupitem.pidfile     clean /tmp/zabbix_agentd.pid

    configure.args-append   --enable-agent
} else {
    depends_lib-append      port:fping \
                            port:curl

    configure.args-append   --enable-server \
                            --with-net-snmp

    startupitem.name        zabbix2-server
    startupitem.start       "${prefix}/share/zabbix/zabbix_server.init start"
    startupitem.stop        "${prefix}/share/zabbix/zabbix_server.init stop"

    array set DBLIST {
        mysql5  {"MySQL 5.x"            path:bin/mysql_config5:mysql5 \
                 mysql=${prefix}/lib/mysql5/bin/mysql_config}
        pgsql81 {"PostgreSQL 8.1.x"     port:postgresql81 \
                 pgsql=${prefix}/lib/postgresql81/bin/pg_config}
        pgsql82 {"PostgreSQL 8.2.x"     port:postgresql82 \
                 pgsql=${prefix}/lib/postgresql82/bin/pg_config}
        pgsql83 {"PostgreSQL 8.3.x"     port:postgresql83 \
                 pgsql=${prefix}/lib/postgresql83/bin/pg_config}
        pgsql84 {"PostgreSQL 8.4.x"     port:postgresql84 \
                 pgsql=${prefix}/lib/postgresql84/bin/pg_config}
        sqlite3 {"SQLite 3.x"           port:sqlite3 \
                 sqlite3=${prefix}}
    }
    set DBLIST_KEYS [lsort [array names DBLIST]]

    foreach dbitem $DBLIST_KEYS {
        set this_key [lsearch $DBLIST_KEYS $dbitem]
        set conf_list [lreplace $DBLIST_KEYS $this_key $this_key]
        set prms $DBLIST($dbitem)

        variant $dbitem \
            description "Use [lindex $prms 0] for server database" \
            conflicts $conf_list "
                depends_lib-append      [lindex $prms 1]
                configure.args-append   --with-[lindex $prms 2]
            "
    }

    if {![variant_isset pgsql81] &&
        ![variant_isset pgsql82] &&
        ![variant_isset pgsql83] &&
        ![variant_isset pgsql84] &&
        ![variant_isset sqlite3]} {
        default_variants +mysql5
    }

# Notify anyone with +agent_only installed of new zabbix2-agent port
    variant agent_only description {Old variant -- install zabbix2-agent} {
        pre-fetch {
            ui_error \
                "Variant 'zabbix2 +agent_only' replaced by port zabbix2-agent"
            return -code error "+agent_only variant replaced by zabbix2-agent"
        }
    }
}

post-extract {
    reinplace "s|# DBSocket=/tmp/mysql.sock|DBSocket=${prefix}/var/run/mysql5/mysqld.sock|" \
            ${worksrcpath}/conf/zabbix_server.conf

    reinplace "s|#FpingLocation=/usr/sbin/fping|FpingLocation=${prefix}/sbin/fping|" \
        ${worksrcpath}/conf/zabbix_server.conf
}

pre-destroot {
    add_users zabbix group=zabbix
}

post-destroot {
    if { ${name} != ${subport} } {
     ####### AGENT #######
# Copy sample agent .conf files
        xinstall -d -m 755 -d ${destroot}${prefix}/etc/zabbix
        xinstall -m 755  ${worksrcpath}/conf/zabbix_agent.conf \
            ${destroot}${prefix}/etc/zabbix/zabbix_agent.conf.sample
        xinstall -m 755  ${worksrcpath}/conf/zabbix_agentd.conf \
            ${destroot}${prefix}/etc/zabbix/zabbix_agentd.conf.sample

# Don't overwrite user settings on each install
        delete ${destroot}${prefix}/etc/zabbix/zabbix_agentd.conf
        delete ${destroot}${prefix}/etc/zabbix/zabbix_agent.conf
    } else {
     ####### SERVER #######
# Copy sample server and agent .conf files
        xinstall -d -m 755 -d ${destroot}${prefix}/etc/zabbix
        xinstall -m 755 ${worksrcpath}/conf/zabbix_server.conf \
            ${destroot}${prefix}/etc/zabbix/zabbix_server.conf.sample

# Don't overwrite user settings on each install
        delete ${destroot}${prefix}/etc/zabbix/zabbix_server.conf

# Copy database data and schemas
        xinstall -d -m 755 -d ${destroot}${prefix}/share/zabbix/data
        xinstall -d -m 755 -d ${destroot}${prefix}/share/zabbix/schema

        eval xinstall -m 755 ${worksrcpath}/database/mysql/data.sql \
            ${destroot}${prefix}/share/zabbix/data
        eval xinstall -m 755 ${worksrcpath}/database/mysql/images.sql \
            ${destroot}${prefix}/share/zabbix/data
        eval xinstall -m 755 ${worksrcpath}/database/mysql/schema.sql \
            ${destroot}${prefix}/share/zabbix/schema

        file copy ${worksrcpath}/upgrades \
            ${destroot}${prefix}/share/zabbix/

# Copy the front end files
        file mkdir ${destroot}${prefix}/share/zabbix/frontends/
        file copy ${worksrcpath}/frontends/php/ \
            ${destroot}${prefix}/share/zabbix/frontends/

# Create a startup script for the server
# This script has a delay built into it (waiting for DB to start) so we
# don't use a simple startupitem.executable approach
        xinstall -m 755 ${portpath}/${filesdir}/zabbix_server.init \
            ${destroot}${prefix}/share/zabbix
        reinplace "s|__PREFIX__|${prefix}|g" \
            ${destroot}${prefix}/share/zabbix/zabbix_server.init

# Set permissions for etc (protect passwords) and the frontend
        system "chmod 660 ${destroot}${prefix}/etc/zabbix/*"
        system "chown zabbix:zabbix ${destroot}${prefix}/etc/zabbix/*"
        system "chown -R www:www ${destroot}${prefix}/share/zabbix/frontends/*"

        xinstall -d -m 755 -d \
            ${destroot}${prefix}/share/zabbix/zabbix_agent_win32
        xinstall -m 755 ${worksrcpath}/bin/win32/zabbix_agentd.exe \
            ${destroot}${prefix}/share/zabbix/zabbix_agent_win32
    }
}

if { ${name} != ${subport} } {
    notes "
####                                        ####
#### ZABBIX2 agent installation section     ####

1) Edit the sample .conf file ${prefix}/etc/zabbix/zabbix_agentd.conf
   (rename & omit .sample)

   Set the following variable to the ip address of your ZABBIX server to\
   allow it access to the agent.

    Server=x.x.x.x


2) Set zabbix_agentd to run at system boot

     sudo port load zabbix2-agent

3) A Win32 agent is in ${prefix}/share/zabbix/zabbix_agent_win32 for\
   installation on Windows NT 4.0, Windows 2000, and Windows XP.

#### End ZABBIX2 agent installation section ####
####                                        ####
"
} else {
    notes "
####                                           ####
#### Begin ZABBIX2 server installation section ####

1) Setup MySQL, i.e. via MacPorts: (for local MySQL server)

    sudo port install mysql5-server


2) Setup the ZABBIX MySQL database

-Create the ZABBIX database
    mysql5 -u root -p (enter password at prompt)
    mysql> create database zabbix character set utf8;
    mysql> quit;

-Import the ZABBIX Schema
    cd ${prefix}/share/zabbix/schema
    cat mysql.sql | mysql5 -u root -p zabbix
    cd ${prefix}/share/zabbix/data
    cat images.sql | mysql5 -u root -p zabbix
    cat data.sql | mysql5 -u root -p zabbix

-Create a MySQL 'zabbix' user and password
    mysql5 -u root -p
    mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '<zabbix-mysql-password>';
    mysql> grant all privileges on zabbix.* to zabbix identified by '<zabbix-mysql-password>';
    mysql> quit;


3) Edit the sample .conf file ${prefix}/etc/zabbix/zabbix_server.conf
   (rename & omit .sample)

   Modify these variables at the very least:

    DBName=zabbix
    DBUser=zabbix
    DBPassword=<zabbix-mysql-password>


4) Install PHP 5, i.e. via MacPorts:

    sudo port install php5 php5-gd php5-mbstring php5-mysql php5-sockets


5) Set a symbolic link in your Apache document root pointing to the PHP
   frontend files

    sudo ln -s ${prefix}/share/zabbix/frontends/php <Apache-docroot>/zabbix


6) Set zabbix_server to run at system boot, then start it

    sudo port load zabbix2

   To start Zabbix manually, use: 
    ${prefix}/share/zabbix/zabbix_server.init start (stop|status)

 !! Note: Your shared memory will likely need to be increased  !!
 !!       (see http://support.apple.com/kb/HT4022)             !!

7) A Win32 agent is in ${prefix}/share/zabbix/zabbix_agent_win32 for\
   installation on Windows NT 4.0, Windows 2000, and Windows XP.  See\
   the ReadMe.txt for instructions.


8) Open http://localhost/zabbix/ in your browser and walk through the setup,
   then login with default user 'Admin' and password 'zabbix'.


9) Read the fine manual at http://www.zabbix.com/documentation/


#### End ZABBIX2 server installation section   ####
####                                           ####


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! ZABBIX -> ZABBIX2 Server Upgrade process !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!  0) BACK UP YOUR DATABASE                                                !!
!!                                                                          !!
!!  1) Be sure to use 'sudo port unload zabbix' to stop the background      !!
!!     server before deactivating zabbix, and then use                      !!
!!     'sudo port load zabbix2' **AFTER UPGRADING THE DATABASE** as         !!
!!     described below.                                                     !!
!!                                                                          !!
!!  2) For upgrading from 1.8 (zabbix -> zabbix2), upgrade scripts are      !!
!!     located in ${prefix}/share/zabbix/upgrades                          !!
!!                                                                          !!
!!  For upgrade procedure, please see                                       !!
!!    http://www.zabbix.com/documentation/2.0/manual/installation/upgrade   !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
"
}
