A veces vamos a tener la necesidad de instalar Zabbix a partir de su código fuente, debido por ejemplo a que los repositorios de nuestra distribución Linux no dispongan de la última versión, o que por ejemplo, al compilarlo directamente en nuestro sistema queramos ganar en optimización y rendimiento, o habilitar alguna configuración que no venga a través del paquete base.
A continuación voy a mostrar cómo instalar Zabbix a partir de sus ficheros fuente. Para ello voy a utilizar una distribución CentOS 5.4 de 64 bits y una versión 1.8.1 de Zabbix.
Lo primero que vamos a hacer es instalar RPMForge, con el objetivo de agregar repositorios adicionales a las listas que por defecto trae CentOS. También actualizaremos el sistema.
[root@centos ~]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
[root@centos ~]# rpm -Uhv rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm
[root@centos ~]# yum update -y
A continuación instalaremos los paquetes adicionales que requiere Zabbix, como por ejemplo PHP y el servidor web Apache, y una base de datos, en nuestro caso elegiremos MySQL.
[root@centos ~]# yum install -y gcc mysql-server mysql-devel curl-devel httpd php php-mysql php-bcmath php-gd php-xml php-mbstring net-snmp-devel fping e2fsprogs-devel zlib-devel libgssapi-devel krb5-devel openssl-devel libidn-devel iksemel-devel
Después lanzaremos MySQL y haremos que el servicio de base de datos y Apache se inicien automáticamente al arrancar el sistema operativo. También ejecutaremos la aplicación mysql_secure_installation con el objetivo de establecer el password para el usuario 'root', remover el usuario 'anonymous' y eliminar la base de datos test.
[root@centos ~]# service mysqld start
[root@centos ~]# chkconfig mysqld on ; chkconfig httpd on
[root@centos ~]# mysql_secure_installation
Ahora bajaremos el código fuente de Zabbix y los descomprimiremos. Sólo nos quedará por compilarlo y generar los binarios correspondientes.
[root@centos ~]# wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/1.8.1/zabbix-1.8.1.tar.gz?use_mirror=switch
[root@centos ~]# tar xvzf zabbix-1.8.1.tar.gz ; cd zabbix-1.8.1
[root@centos zabbix-1.8.1]# ./configure --enable-agent --enable-ipv6 --enable-proxy --enable-server --with-mysql --with-libcurl --with-net-snmp --with-jabber
[root@centos zabbix-1.8.1]# make ; make install
El siguiente paso consistirá en crear todos los directorios necesarios para Zabbix, añadir un usuario denominado 'zabbix' al sistema y copiar los archivos de arranque y configuración a sus respectivos directorios.
[root@centos zabbix-1.8.1]# mkdir -p /etc/zabbix/alert.d /etc/zabbix/externalscripts /var/log/zabbix-server /var/log/zabbix-agent /var/run/zabbix-server /var/run/zabbix-agent /usr/local/share/zabbix
[root@centos zabbix-1.8.1]# adduser -r -d /var/run/zabbix-server -s /sbin/nologin zabbix
[root@centos zabbix-1.8.1]# cp -a misc/conf/zabbix_server.conf misc/conf/zabbix_agentd.conf /etc/zabbix
[root@centos zabbix-1.8.1]# cp misc/init.d/redhat/8.0/zabbix_server misc/init.d/redhat/8.0/zabbix_agentd /etc/init.d
[root@centos zabbix-1.8.1]# chown -R zabbix:zabbix /var/run/zabbix* /var/log/zabbix* /etc/zabbix
Una vez depositado cada fichero en su lugar, modificaremos ciertos parámetros que por defecto vienen en dichos archivos.
[root@centos zabbix-1.8.1]# cat /etc/zabbix/zabbix_server.conf
...
# Nombre del archivo de log
LogFile=/var/log/zabbix-server/zabbix_server.log
# Nombre del archivo de PID
PidFile=/var/run/zabbix-server/zabbix_server.pid
# Password de la base de datos
DBPassword=xxxxxx
# Ubicación de los scripts de alerta
AlertScriptsPath=/etc/zabbix/alert.d/
# Ubicación de los scripts externos
ExternalScripts=/etc/zabbix/externalscripts
[root@centos zabbix-1.8.1]# cat /etc/zabbix/zabbix_agentd.conf
...
# Nombre del archivo de log
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
# Habilitar el uso de comandos remotos
EnableRemoteCommands=1
# Número máximo de segundos para el procesamiento
Timeout=10
# Nombre del host (comando hostname)
Hostname=centos.local
# Dirección IP del servidor Zabbix
Server=::ffff:127.0.0.1
[root@centos zabbix-1.8.1]# cat /etc/init.d/zabbix_server
...
# Orden de arranque y apagado
# chkconfig: - 80 30
# Ubicación del binario
progdir="/usr/local/sbin/"
# Retardo de 5 sg para el reinicio
...
restart() {
stop
sleep 5
start
...
[root@centos zabbix-1.8.1]# cat /etc/init.d/zabbix_agentd
...
# Ubicación del binario
progdir="/usr/local/sbin/"
# Retardo de 5 sg para el reinicio
...
restart() {
stop
sleep 5
start
...
También estableceremos permisos de lectura y escritura para el fichero de configuración de Zabbix sólo para el propietario (hemos definido dentro del fichero la clave de administración de bases de datos para el usuario root).
[root@centos zabbix-1.8.1]# chmod 600 /etc/zabbix/zabbix_server.conf
En el fichero /etc/services definiremos los servicios para el agente y servidor de Zabbix.
[root@centos ~]# echo "zabbix-agent 10050/tcp Zabbix Agent" >> /etc/services
[root@centos ~]# echo "zabbix-agent 10050/udp Zabbix Agent" >> /etc/services
[root@centos ~]# echo "zabbix-trapper 10051/tcp Zabbix Trapper" >> /etc/services
[root@centos ~]# echo "zabbix-trapper 10051/udp Zabbix Trapper" >> /etc/services
Ahora vamos a configurar la parte web:
[root@centos ~]# cp -ar frontends/php/* /usr/local/share/zabbix
[root@centos ~]# chown -R zabbix:zabbix /usr/local/share/zabbix
[root@centos ~]# echo "Alias /zabbix /usr/local/share/zabbix" > /etc/httpd/conf.d/zabbix.conf
[root@centos ~]# service httpd start
Ahora sólo nos quedará que hacer que los servicios de Zabbix se arranquen automáticamente al iniciar la máquina. Iniciaremos también el agente de Zabbix.
[root@centos ~]# chkconfig zabbix_server on ; chkconfig zabbix_agentd on
[root@centos ~]# chmod +x /etc/init.d/zabbix_server /etc/init.d/zabbix_agentd
[root@centos ~]# service zabbix_agentd start
En este momento abriremos un navegador web y pondremos la siguiente URL: http://192.168.1.10/zabbix (192.168.1.10 es la dirección IP de mi servidor).
Si tenemos activado SELinux, veremos que éste nos impide el acceso. Esto se debe a que los contextos de los archivos PHP no están correctamente establecidos; lo arreglaremos con la siguiente sentencia. A su vez, también activaremos la variable booleana httpd_can_network_connect para permitir que scripts externos se puedan conectar al servidor Apache.
[root@centos ~]# chcon -R -t httpd_sys_content_t /usr/local/share/zabbix
[root@centos ~]# setsebool -P httpd_can_network_connect on
Lo primero que aparecerá será un asistente que comprobará los pre-requisitos de la instalación. Como puede verse en la siguiente imagen, hay varios puntos que no son correctos y que afectan al fichero php.ini.
Modificaremos los valores solicitados:
[root@centos ~]# cat /etc/php.ini
...
# Cantidad máxima de memoria que un script puede consumir
memory_limit = 256M
# Tamaño máximo del archivo que se puede subir al servidor web
post_max_size = 32M
# Tiempo máximo de ejecución para cada script
max_execution_time = 600
# Zona horaria
date.timezone = Europe/Madrid
# Soporte adicional para cadenas multi-byte
mbstring.func_overload = 2
[root@centos ~]# service httpd restart
Una vez establecidos dichos valores, pulsaremos sobre el botón Retry. En la siguiente pantalla de configuración el asistente nos indica que tenemos que crear la base de datos manualmente.
Crearemos una nueva base de datos en MySQL con el nombre 'zabbix', utilizando los esquemas que generamos durante la compilación.
[root@centos ~]# (echo "CREATE DATABASE zabbix;" ; echo "USE zabbix;" ; cat create/schema/mysql.sql ; cat create/data/data.sql ; cat create/data/images_mysql.sql) | mysql -h 127.0.0.1 -u root --password=xxxxxx
Al finalizar el asistente, se grabarán los datos de conexión con la base de datos en el fichero zabbix.conf.php. Debido a que este fichero contendrá la password de la base de datos, le asignaremos permisos de lectura-escritura sólo al propietario. También iniciaremos el servidor de Zabbix.
[root@centos ~]# chmod 600 /usr/local/share/zabbix/conf/zabbix.conf.php
[root@centos ~]# service zabbix_server start