Logotipo de CentOS ( https://commons.wikimedia.org/wiki/File:Centos-logo-light.svg )

Instalación de Pandora FMS sobre «CentOS 8 Stream»

Download PDF

Advertencia.
Advertencia.

Pandora FMS recomienda CentOS versión 7 u 8 para garantizar un desempeño estable y productivo. Esta entrada en el blog es experimental y debe asumir, si ud. practica este tipo de instalación, que es bajo su propio riesgo. (Vamos, como todo libre software, el único responsable es el usuario, quien cuenta con el código fuente siempre a la mano.)

¡Quedan avisadas y avisados!

CentOS 8 Stream es el sistema operativo que lleva ahora la vanguardia en el desarrollo de todo lo que conlleva la rama Red Hat Enterprise Linux® (mejor conocido como RHEL). Esto quiere decir que de la retaguardia, cuando recibía filtrados y mejorados todas las características de esa familia Red Hat / Fedora ahora queda al frente de todo, lo que puede derivar en inestabilidad e inconvenientes (de esto es lo que va esta aventura).

Artículo actualizado el viernes 13 de agosto de 2021.

Al momento de escribir estas líneas tanto CentOS 7 y CentOS 8 están activas y son las recomendadas oficialmente por Pandora FMS. Ya el señor Sancho Lerena, su fundador y principal desarrollador, ha escrito un manual de instalación para todas y todos aquellos quienes les falten por aprender las nociones básicas de la monitorización. Así es, este artículo está escrito casi desde cero, coloco siempre los enlaces para que puedan ampliar más la información y así llevamos al mínimo la redundancia, que en el idioma castellano pues que desagrada (algo no más).

Ya cuando tengamos asimilado las normas básicas de monitorización podremos avanzar en la tarea de hoy. Por estos lares utilizamos las versión Community de Pandora FMS y la tenemos alojada en una máquina virtual (droplet) de la empresa neoyorquina DigitalOcean. La teníamos con CentOS 7 y pues le había llegado la hora de actualizar a CentOS 8.

En esa empresa la primera vez que uno crea una máquina virtual queda de cierta manera «atado» a la distribución elegida. Cuando fui a instalar CentOS 8 inmediatamente noté que tenía la opción de utilizar CentOS 8 Stream. 

DigitalOcean rebuild droplet CentOS
DigitalOcean rebuild droplet CentOS

El 9 de agosto la empresa @DigitalOcean oficialmente también anunció la disponibilidad de Rocky Linux (al momento de yo instalar esa opción no estaba habilitada, eso da material para otra entrada en este humilde blog):

Las distribuciones GNU/Linux disponibles en @DigitalOcean al momento de escribir estas líneas son:

DigitalOcean new droplet distro options
DigitalOcean new droplet distro options
  • Ubuntu (nuestra preferida y favorita).
  • FreeBSD (utiliza otro kernel distinto de Linux).
  • Fedora.
  • Debian (mis respetos, la original).
  • CentOS.
  • Rocky Linux.

Dicho toda esta introducción, pongamos manos a la obra pero primero, si aún no tienen cuenta creada en DigitalOcean, utilicen por favor mi código de referido para obtener 100$ USD en créditos para que realicen ustedes mismas y mismos sus prácticas.

Digitalocean Sammy green heart balloon
Digitalocean Sammy green heart balloon

Tabla de contenido:

Preparativos

Necesitan una máquina previamente acondicionada: esencialmente que solo pueda conectar por medio de calve privada/pública y tenga deshabilitado el inicio de sesión por SSH al usuario raíz (root user). Si utilizan esta opción, deberán usar sudo su para ejecutar todas las órdenes necesarias, en este caso yo estoy conectado como root user por clave privada/pública.

Nota: en esta entrada me conecto por medio de PuTTY, pero bien pueden conectar desde cualquier sitio por medio de un navegador web con la nueva consola SSH de DigitalOcean como muestra el siguiente vídeo:

Usaremos la nueva documentación de Pandora FMS, ejecutaremos cada una de las instrucciones para CentOS 8 y veremos qué sucede en cada paso, cómo reacciona con CentOS 8 Stream, ¡Vamos!

Configuración de repositorios en CentOS 8

Ejecutamos lo siguiente:

# dnf install -y \
epel-release \
tar dnf-utils \
http://rpms.remirepo.net/enterprise/remi-release-8.rpm

Obtuvimos apenas una advertencia en el caso de la llave de privacidad (GPG key) y lo resolvió automáticamente.

Reinstalando PHP

Con estas dos instrucciones borramos toda la configuración vieja de PHP y acto seguido instalamos la «nueva» (versión 7.3):

# dnf module reset php
# dnf module install -y php:remi-7.3

También importó unas claves de privacidad sin mayor inconveniente.

¡Todo muy rápido, apenas 9 megabytes de descarga!

Instalando powertools

Así, en minúsculas, en CentOS 8 Stream lo que cambia es eso (obvio, son versiones distintas):

 yum install dnf-plugins-core -y
yum config-manager --set-enabled powertools -y

Instalación de base de datos

Para instalar la base de datos, Percona en este caso, la instalación fue bastante fluida.

  1. Primero «instalamos» el repositorio para obtener la versión 5.7.
  2. Eliminamos «todo rastro» de MySQL.
  3. Borramos cualquier posible configuración restantes.
  4. Instalación propiamente dicha de Percona.
# dnf install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
# dnf module disable -y mysql
# rm -rf /etc/my.cnf
# dnf install -y Percona-Server-server-57

Instalación de dependencias de la Consola

Esta es la parte más larga por la gran cantidad de librerías y recursos necesarios para poner el entorno a punto:

# dnf install -y \
php \
postfix \
php-mcrypt \
php-cli \
php-gd \
php-curl \
php-session \
php-mysqlnd \
php-ldap \
php-zip \
php-zlib \
php-fileinfo \
php-gettext \
php-snmp \
php-mbstring \
php-pecl-zip \
php-xmlrpc \
libxslt \
wget \
php-xml \
httpd \
mod_php \
atk \
avahi-libs \
cairo \
cups-libs \
fribidi \
gd \
gdk-pixbuf2 \
ghostscript \
graphite2 \
graphviz \
gtk2 \
harfbuzz \
hicolor-icon-theme \
hwdata \
jasper-libs \
lcms2 \
libICE \
libSM \
libXaw \
libXcomposite \
libXcursor \
libXdamage \
libXext \
libXfixes \
libXft \
libXi \
libXinerama \
libXmu \
libXrandr \
libXrender \
libXt \
libXxf86vm \
libcroco \
libdrm \
libfontenc \
libglvnd \
libglvnd-egl \
libglvnd-glx \
libpciaccess \
librsvg2 \
libthai \
libtool-ltdl \
libwayland-client \
libwayland-server \
libxshmfence \
mesa-libEGL \
mesa-libGL \
mesa-libgbm \
mesa-libglapi \
pango \
pixman \
xorg-x11-fonts-75dpi \
xorg-x11-fonts-misc \
poppler-data \
php-yaml

Instalación de Phantomjs

El cual es utilizado para generar PDF. En este caso ya comenzamos a descargar directamente del repositorio de Pandora FMS con la siguiente instrucción:

dnf install -y http://firefly.artica.es/centos8/phantomjs-2.1.1-1.el7.x86_64.rpm

Dependencias del servidor

Otra andanada de dependencias desde los repositorios oficiales de CentOS 8 Stream, también sin inconveniente alguno:

 dnf install -y \
vim \
fping \
perl-IO-Compress \
nmap \
expect \
sudo \
perl-Time-HiRes \
perl-Math-Complex \
libnsl \
net-snmp-utils \
GeoIP \
GeoIP-GeoLite-data \
dwz \
efi-srpm-macros \
ghc-srpm-macros \
go-srpm-macros \
ocaml-srpm-macros \
openblas-srpm-macros \
perl \
perl-Algorithm-Diff \
perl-Archive-Tar \
perl-Archive-Zip \
perl-Attribute-Handlers \
perl-B-Debug \
perl-CPAN \
perl-CPAN-Meta \
perl-CPAN-Meta-Requirements \
perl-CPAN-Meta-YAML \
perl-Compress-Bzip2 \
perl-Config-Perl-V \
perl-DBD-MySQL \
perl-DBI \
perl-DB_File \
perl-Data-Dump \
perl-Data-OptList \
perl-Data-Section \
perl-Devel-PPPort \
perl-Devel-Peek \
perl-Devel-SelfStubber \
perl-Devel-Size \
perl-Digest-HMAC \
perl-Digest-SHA \
perl-Encode-Locale \
perl-Encode-devel \
perl-Env \
perl-ExtUtils-CBuilder \
perl-ExtUtils-Command \
perl-ExtUtils-Embed \
perl-ExtUtils-Install \
perl-ExtUtils-MM-Utils \
perl-ExtUtils-MakeMaker \
perl-ExtUtils-Manifest \
perl-ExtUtils-Miniperl \
perl-ExtUtils-ParseXS \
perl-File-Fetch \
perl-File-HomeDir \
perl-File-Listing \
perl-File-Which \
perl-Filter \
perl-Filter-Simple \
perl-Geo-IP \
perl-HTML-Parser \
perl-HTML-Tagset \
perl-HTML-Tree \
perl-HTTP-Cookies \
perl-HTTP-Date \
perl-HTTP-Message \
perl-HTTP-Negotiate \
perl-IO-HTML \
perl-IO-Socket-INET6 \
perl-IO-Zlib \
perl-IO-stringy \
perl-IPC-Cmd \
perl-IPC-SysV \
perl-IPC-System-Simple \
perl-JSON \
perl-JSON-PP \
perl-LWP-MediaTypes \
perl-Locale-Codes \
perl-Locale-Maketext \
perl-Locale-Maketext-Simple \
perl-MRO-Compat \
perl-Math-BigInt \
perl-Math-BigInt-FastCalc \
perl-Math-BigRat \
perl-Memoize \
perl-Module-Build \
perl-Module-CoreList \
perl-Module-CoreList-tools \
perl-Module-Load \
perl-Module-Load-Conditional \
perl-Module-Loaded \
perl-Module-Metadata \
perl-NTLM \
perl-Net-HTTP \
perl-Net-Ping \
perl-NetAddr-IP \
perl-Package-Generator \
perl-Params-Check \
perl-Params-Util \
perl-Perl-OSType \
perl-PerlIO-via-QuotedPrint \
perl-Pod-Checker \
perl-Pod-Html \
perl-Pod-Parser \
perl-SelfLoader \
perl-Socket6 \
perl-Software-License \
perl-Sub-Exporter \
perl-Sub-Install \
perl-Sys-Syslog \
perl-Test \
perl-Test-Harness \
perl-Test-Simple \
perl-Text-Balanced \
perl-Text-Diff \
perl-Text-Glob \
perl-Text-Template \
perl-Thread-Queue \
perl-Time-Piece \
perl-TimeDate \
perl-Try-Tiny \
perl-Unicode-Collate \
perl-WWW-RobotRules \
perl-XML-NamespaceSupport \
perl-XML-Parser \
perl-XML-SAX \
perl-XML-SAX-Base \
perl-XML-Simple \
perl-XML-Twig \
perl-autodie \
perl-bignum \
perl-devel \
perl-encoding \
perl-experimental \
perl-inc-latest \
perl-libnetcfg \
perl-libwww-perl \
perl-local-lib \
perl-open \
perl-perlfaq \
perl-srpm-macros \
perl-utils \
perl-version \
python-srpm-macros \
python3-pyparsing \
python3-rpm-macros \
qt5-srpm-macros \
redhat-rpm-config \
rust-srpm-macros \
systemtap-sdt-devel \
perl-TermReadKey \
perl \
perl-DBD-MySQL \
perl-DBI

Instalación de wmi

Del repositorio de Pandora FMS:

#  dnf install -y http://firefly.artica.es/centos8/wmi-1.3.14-4.el7.art.x86_64.rpm

Instalación de perl-Net-Telnet

Igual que en la sección anterior:

dnf install -y http://firefly.artica.es/centos8/perl-Net-Telnet-3.04-1.el8.noarch.rpm

Instalación de xprobe2

Un caso extraño ya que PFMS tiene a xprobe2 almacenado en el repositorio de CentOS 7… En ni en CentOS 7 ni en CentOS 8 Stream tiene problema alguno en instalarse:

<# dnf install -y http://firefly.artica.es/centos7/xprobe2-0.3-12.2.x86_64.rpm

En las instrucciones de instalación recomiendan terminar de instalar los componentes  para utilizar Discovery pero como estamos instalando la versión Community pues que no hace falta para nada.

Por favor, lea también   Centos 8: deshabilitación de SELinux

Parámetros de la base de datos

Esencialmente se trata de colocar en unas variables temporales para el bash y facilitar así todo el resto del proceso de instalación. Ponga cuidado acá que deben cambiar los valores de usuarios y contraseñas predeterminados, anoten bien para recordarlos luego.

# PANDORA_CONSOLE=/var/www/html/pandora_console
# CONSOLE_PATH=/var/www/html/pandora_console
# PANDORA_SERVER_CONF=/etc/pandora/pandora_server.conf
# PANDORA_SERVER_BIN=/usr/bin/pandora_server
# PANDORA_HA_BIN=/usr/bin/pandora_ha
# PANDORA_TABLES_MIN=160
# DBHOST=127.0.0.1
# DBNAME=pandora
# DBUSER=pandora
# DBPASS=pandora
# DBPORT=3306

Deshabilitando SELinux

# setenforce 0
# sed -i -e "s/^SELINUX =.*/SELINUX = disabled/g" /etc/selinux/config

Deshabilitando el cortafuegos

Aunque ningún cortafuegos viene instalado con CentOS 8 Stream, siempre debemos verificas:

 systemctl disable firewalld --now

Implementando la base de datos

Esencialmente se trata de colocarle una contraseña al usuario raíz de MySQL (Percona) y deshabilitar un componente para el manejo de contraseñas que será obsoleto en MySQL 8:

# systemctl start mysqld
# mysql -uroot -p$(grep "temporary password" /var/log/mysqld.log | rev | cut -d' ' -f1 | rev)
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('Pandor4!');
mysql> UNINSTALL PLUGIN validate_password;
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('pandora');
mysql> quit

Creación de la base de datos como tal

# echo "create database $DBNAME" | mysql -uroot -ppandora -P$DBPORT -h$DBHOST
# echo "GRANT ALL PRIVILEGES ON $DBNAME.* TO \"$DBUSER\"@'%' identified by \"$DBPASS\"" | mysql -uroot -ppandora -P$DBPORT -h$DBHOST

Fichero my.cnf

POOL_SIZE=$(grep -i total /proc/meminfo | head -1 | awk '{print $(NF-1)*0.4/1024}' | sed s/\\..*$/M/g)
cat> /etc/my.cnf <<EO_CONFIG_F
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
character-set-server=utf8
skip-character-set-client-handshake
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Mysql optimizations for Pandora FMS
# Please check the documentation in http://pandorafms.com for better results
max_allowed_packet = 64M
innodb_buffer_pool_size = $POOL_SIZE
innodb_lock_wait_timeout = 90
innodb_file_per_table
innodb_flush_log_at_trx_commit = 0
innodb_flush_method = O_DIRECT
innodb_log_file_size = 64M
innodb_log_buffer_size = 16M
innodb_io_capacity = 100
thread_cache_size = 8
thread_stack = 256K
max_connections = 100
wait_timeout = 900
key_buffer_size=4M
read_buffer_size=128K
read_rnd_buffer_size=128K
sort_buffer_size=128K
join_buffer_size=4M
query_cache_type = 1
query_cache_size = 64M
query_cache_min_res_unit = 2k
query_cache_limit = 256K
sql_mode=""
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
EO_CONFIG_F

Así las cosas, echamos a andar de nuevo la base de datos con las nuevas definiciones y configuración:

No menos importante es colocar para que inicie automáticamente, cuando el servidor arranque, el motor de base de datos, el servidor web y sus módulos PHP. Todo por medio de systemd:

# systemctl enable mysqld --now
# systemctl enable httpd --now
# systemctl enable php-fpm --now

Instalación de Pandora FMS

Ahora sí propiamente descargamos desde SourceForge la versión Community, pero primero creamos una carpeta y entramos en ella para alojar los tres ficheros comprimidos: el servidor, la Consola y el Agente Software.

# mkdir $HOME/pandora && cd $HOME/pandora
# wget https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_agent_unix-7.0NG.noarch.rpm
# wget https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_console-7.0NG.noarch.rpm
# wget https://firefly.pandorafms.com/pandorafms/latest/RHEL_CentOS/pandorafms_server-7.0NG.noarch.rpm

Y aquí viene lo más esperado:

yum install -y $HOME/pandora/pandorafms*.rpm

Poblando la base de datos

Creando su estructura de datos en la primera línea e introduciendo los datos en la segunda línea:

 mysql -u$DBUSER -p$DBPASS -P$DBPORT -h$DBHOST $DBNAME <$PANDORA_CONSOLE/pandoradb.sql
mysql -u$DBUSER -p$DBPASS -P$DBPORT -h$DBHOST $DBNAME <$PANDORA_CONSOLE/pandoradb_data.sql

Configuración de la Consola

Este proceso ca de colocar las credenciales, ubicación, tipo de base de datos, etc. en un fichero muy importante llamado config.php:

# cat> $CONSOLE_PATH/include/config.php <<EO_CONFIG_F
<?php
\$config["dbtype"] = "mysql";
\$config["dbname"]="$DBNAME";
\$config["dbuser"]="$DBUSER";
\$config["dbpass"]="$DBPASS";
\$config["dbhost"]="$DBHOST";
\$config["homedir"]="/var/www/html/pandora_console";
\$config["homeurl"]="/pandora_console";
error_reporting(0);
\$ownDir = dirname(__FILE__) . '/';
include (\$ownDir . "config_process.php");
EO_CONFIG_F

Configuración del servidor Apache

Se trata de que el servidor web Apache siga los enlaces simbólicos en el sistema de ficheros, necesita saber además cuáles directivas declaradas en ese archivo (.htaccess) pueden anular las directivas de configuración anteriores y otra línea para garantizar el acceso a todos los directorios desde la raíz del servicio.

# cat> /etc/httpd/conf.d/pandora.conf <<EO_CONFIG_F
<Directory "/var/www/html">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
EO_CONFIG_F
# sed -i -e "s/php_flag engine off//g" $PANDORA_CONSOLE/images/.htaccess
# sed -i -e "s/php_flag engine off//g" $PANDORA_CONSOLE/attachment/.htaccess

Ya es cuestión de otorgar permisos al fichero config.php para pueda acceder el servidor web al mismo y un detalle sumamente importante, desactivar el fichero de instalación para que no sea tocado por más nadie.

# chmod 600 $CONSOLE_PATH/include/config.php
# chown apache. $CONSOLE_PATH/include/config.php
# mv $CONSOLE_PATH/install.php $CONSOLE_PATH/install.done

Puesta a punto de PHP

PHP necesita de unos valores específicos que son introducidos en esta caso:

# sed -i -e "s/^max_input_time.*/max_input_time = -1/g" /etc/php.ini
# sed -i -e "s/^max_execution_time.*/max_execution_time = 0/g" /etc/php.ini
# sed -i -e "s/^upload_max_filesize.*/upload_max_filesize = 800M/g" /etc/php.ini
# sed -i -e "s/^memory_limit.*/memory_limit = 800M/g" /etc/php.ini

Redirección a la carpeta de la Consola

# cat> /var/www/html/index.html <<EOF_INDEX
<meta HTTP-EQUIV="REFRESH" content="0; url=/pandora_console/">
EOF_INDEX

Reinicio del servidor web

# systemctl restart php-fpm
# systemctl restart httpd
# sed -i -e "s/^dbhost.*/dbhost $DBHOST/g" $PANDORA_SERVER_CONF
# sed -i -e "s/^dbname.*/dbname $DBNAME/g" $PANDORA_SERVER_CONF
# sed -i -e "s/^dbuser.*/dbuser $DBUSER/g" $PANDORA_SERVER_CONF
# sed -i -e "s|^dbpass.*|dbpass $DBPASS|g" $PANDORA_SERVER_CONF
# sed -i -e "s/^dbport.*/dbport $DBPORT/g" $PANDORA_SERVER_CONF

Inicio y fijación del servidor PFMS

Fijación en el sentido de que sea ejecutado cada vez que el servidor que albergue PFMS sea reiniciado:

# systemctl enable pandora_server --now
# systemctl start pandora_server
# service tentacle_serverd start

Ajustando la tareas rutinarias

El componente crontab es el encargado de ello:

# echo "* * * * * root wget -q -O - --no-check-certificate http://127.0.0.1/pandora_console/enterprise/cron.php>> /var/www/html/pandora_console/log/cron.log">> /etc/crontab

Finalización de la instalación

La creación del subdominio, la configuración de los DNS y el certificado de seguridad con Let’s Encrypt queda para una entrada completa aparte que eso no forma parte del sistema Pandora FMS aunque es sumamente necesario.

Download PDF