Script de Despliegue de EndPoint de Pandora FMS
Introducción
Instalador de EndPoint para Linux. Siempre instala desde un tarball (nunca desde un RPM), valida que el tarball descargado sea un EndPoint real de Pandora FMS y configura el agente para que reporte a un Servidor de Pandora FMS.
- Script:
../pandora_agent_deploy.sh - Alcance: Descarga desde
packages.pandorafms.com. - SO Soportados: RHEL/Fedora (EL7/8/9/10), SUSE/OpenSUSE, Debian/Ubuntu.
- Arquitecturas soportadas:
x86_64(agentes binarios).x86,armv7l,aarch64cambian automáticamente aPERL_SOURCES(compilación desde el código fuente). Otras arquitecturas abortan la instalación.
Inicio rápido
Instalación mínima (agente de GO, canal estable):
export PANDORA_SERVER_IP='10.0.0.1' curl -sSL https://pfms.me/agent-deploy | bash
Totalmente automatizado (sin interacciones):
export PANDORA_SERVER_IP='10.0.0.1' \ PANDORA_AGENT_PACKAGE=GO \ PANDORA_AGENT_RELEASE=STABLE \ PANDORA_SKIP_CONFIRMATION=1 curl -sSL https://pfms.me/agent-deploy | bash
Variables de entorno
Requeridas
| Variable | Descripción |
|---|---|
PANDORA_SERVER_IP | Requerido. Dirección IP o nombre de host del Servidor de Pandora FMS al que reportará el agente. El script se aborta si no se configura esto. |
Selección de paquete
| Variable | Por defecto | Valores aceptados |
|---|---|---|
PANDORA_AGENT_PACKAGE (A través de PANDORA_AGENT_PACKAGE_TYPE) Selecciona qué tarball del agente instalar. Ver Selección de paquete. | GO | GO, PERL, PERL_SOURCES, o una URL directa de http(s):// |
PANDORA_AGENT_PACKAGE_TYPE Tipo de respaldo usado solo cuando PANDORA_AGENT_PACKAGE no está definido. Útil cuando se desea un tipo por defecto pero aún se permite a los llamadores sobreescribirlo con una URL directa. | GO | GO, PERL, PERL_SOURCES |
PANDORA_AGENT_RELEASE Canal de lanzamiento. STABLE descarga desde …/latest, BETA descarga desde …/nightlies. Ver Canales de lanzamiento. | STABLE | STABLE, BETA (no distingue mayúsculas/minúsculas) |
PANDORA_SKIP_CONFIRMATION Cuando se establece en 1, omite los avisos de confirmación interactivos. Úselo en CICD y tuberías automatizadas. Ver Confirmación. | unset | 1 / unset |
Configuración del agente (opcional)
Todos estos se inyectan en /etc/pandora/pandora_agent.conf después de la instalación mediante sed. Si una variable no está configurada, la línea de configuración correspondiente se deja intacta.
| Variable | Clave de config. afectada | Efecto |
|---|---|---|
PANDORA_REMOTE_CONFIG | remote_config | Habilita/deshabilita la configuración remota desde el servidor. |
PANDORA_GROUP | group | Establece el grupo del agente. |
PANDORA_DEBUG | debug | Habilita el modo de depuración (registro detallado). |
PANDORA_AGENT_NAME | agent_name | Establece el nombre del agente (descomenta la línea). |
PANDORA_AGENT_ALIAS | agent_alias | Establece el alias del agente (descomenta la línea). |
PANDORA_SECONDARY_GROUPS | secondary_groups | Establece grupos secundarios (descomenta la línea). |
PANDORA_AGENT_SSL | server_ssl | Habilita SSL para la conexión tentacle (descomenta la línea). |
TIMEZONE | enlace simbólico /etc/localtime | Establece la zona horaria del sistema (p. ej. Europe/Madrid). |
Comportamiento del SO
| Variable | Por defecto | Valores aceptados | Descripción |
|---|---|---|---|
RHEL_CHECK_SUBSCRIPTION | 1 | 0 / 1 | Cuando es 1, en RHEL (no Oracle Linux) el script verifica el estado de subscription-manager antes de instalar. Establézcalo en 0 para omitir la verificación de suscripción. |
PANDORA_SKIP_DEPENDENCIES | unset | 1 / unset | Cuando se establece en 1, omite toda la instalación de dependencias del SO ( perl, libnsl, etc.). Úselo cuando preinstale las dependencias usted mismo. |
Selección de paquete
PANDORA_AGENT_PACKAGE acepta dos tipos de valores: un selector de tipo o una URL directa.
Selectores de tipo
| Valor | Tarball descargado (estable) | Descripción |
|---|---|---|
GO | pandorafms_one_agent_linux-latest.go.tar.gz | Agente de Go (binario). Por defecto. |
PERL | pandorafms_one_agent_linux-latest.tar.gz | Agente de Perl (tarball binario precompilado). |
PERL_SOURCES | pandorafms_one_agent_linux-latest.src.tar.gz | Agente de Perl desde código fuente (requiere Perl en la máquina destino). |
- El selector no distingue entre mayúsculas y minúsculas (
go,Go,GOfuncionan todos). PERL_SOURCEStambién acepta los aliasPERLSOURCES,PERL_SRC,PERLSRC.
URL directa
Si el valor comienza con http:// o https://, se utiliza tal cual y se omite la lógica de versión predeterminada. Se imprime una advertencia amarilla:
PANDORA_AGENT_PACKAGE is a direct URL, default version logic (GO/PERL/PERL_SOURCES) is skipped.
El tarball aún se valida antes de la instalación (ver Validación de tarball), por lo que una URL incorrecta falla rápidamente en lugar de instalar basura.
export PANDORA_SERVER_IP='10.0.0.1' \ PANDORA_AGENT_PACKAGE='https://my-ci.example.com/builds/agent-1234.tar.gz'
Valor inválido
Si PANDORA_AGENT_PACKAGE se establece en algo que no es ni un selector de tipo ni una URL, el script se aborta con un error en rojo.
Anulación de arquitectura
Los agentes binarios (GO, PERL) solo funcionan en x86_64. Si el script detecta x86, armv7l, o aarch64, automáticamente anula el tipo de paquete a PERL_SOURCES (compilación desde el código fuente) e imprime una advertencia amarilla:
Arch: armv7l is not supported by the binary agent, switching to PERL_SOURCES (source build). Overriding PANDORA_AGENT_PACKAGE from GO to PERL_SOURCES for arch armv7l.
Esta anulación NO se aplica si:
- El usuario ya seleccionó
PERL_SOURCES(no se necesita cambio). - El usuario proporcionó una URL directa (se respeta, pero se imprime una advertencia amarilla recordando que la arquitectura requiere una compilación desde el código fuente).
Canales de lanzamiento
PANDORA_AGENT_RELEASE elige entre compilaciones estables y beta (nightly).
| Valor | URL Base |
|---|---|
STABLE Sufijo del tarball latest | https://packages.pandorafms.com/pandorafms/latest |
BETA Sufijo del tarball nightlies | https://packages.pandorafms.com/pandorafms/nightlies |
Por lo tanto, con PANDORA_AGENT_RELEASE=BETA PANDORA_AGENT_PACKAGE=GO, el tarball descargado es:
https://packages.pandorafms.com/pandorafms/nightlies/pandorafms_one_agent_linux-nightlies.go.tar.gz.
El valor se normaliza a mayúsculas, por lo que beta, Beta, BETA son todos aceptados. Un valor inválido se aborta con un error en rojo.
Advertencia de BETA
Cuando PANDORA_AGENT_RELEASE=BETA, se imprime una advertencia amarilla mostrando la URL de las nightlies.
Dependiendo de PANDORA_SKIP_CONFIRMATION, el script pide confirmación o continúa automáticamente (ver Confirmación).
Confirmación
La función confirm() le pide al usuario que escriba Y o y para continuar. Lee de /dev/tty por lo que funciona incluso cuando el script es canalizado (curl … | bash).
PANDORA_SKIP_CONFIRMATION | PANDORA_AGENT_RELEASE | Comportamiento |
|---|---|---|
unset / distinto de 1 | BETA | Imprime advertencia amarilla + pregunta Y/y para continuar. Aborta con cualquier otra respuesta. |
1 | BETA | Imprime advertencia amarilla solamente, continúa sin preguntar. |
| cualquiera | STABLE | Sin aviso de confirmación (estable no lo requiere). |
CICD / uso automatizado: siempre establezca PANDORA_SKIP_CONFIRMATION=1 para que el script nunca se bloquee esperando una entrada.
export PANDORA_SERVER_IP='10.0.0.1' \ PANDORA_AGENT_RELEASE=BETA \ PANDORA_SKIP_CONFIRMATION=1
Validación de tarball
Después de la descarga, el script valida el tarball antes de instalarlo. Dos capas:
- Estructural —
tar tzfenumera los contenidos y verifica que existan estas entradas:unix/pandora_agent_installerunix/pandora_agentunix/tentacle_client
- Huella digital — extrae
unix/pandora_agent_installera STDOUT y comprueba si existe la cadenaPandora FMS Agent Installer for Unix.
Si alguna de las capas falla, el script imprime un error rojo mostrando la URL descargada, limpia el directorio temporal y sale. Esto evita instalar un tarball que no sea un agente de Pandora FMS (p. ej., una URL incorrecta que apunte a un paquete de consola o servidor).
Flujo de instalación
- Verifica que
PANDORA_SERVER_IPesté configurada. - Verifica que
grep,sed, ycurlestén disponibles. - Detecta el SO desde
/etc/os-release(ID_LIKE/ID). Aborta si no es RHEL/Fedora/SUSE/Debian. - Verifica permisos de root.
- Verifica conectividad a
packages.pandorafms.com. - Verifica la arquitectura.
x86_64continúa con el paquete seleccionado.x86,armv7l,aarch64cambian automáticamente aPERL_SOURCES(los agentes binarios no se ejecutarán en estas arquitecturas). Otras arquitecturas abortan. - Resuelve
PANDORA_AGENT_PACKAGE(selector de tipo o URL directa) yPANDORA_AGENT_RELEASE(estable/beta). BETA puede solicitar confirmación. - Crea el espacio de trabajo temporal
$HOME/pandora_deploy_tmp. - Instala dependencias (se omite si
PANDORA_SKIP_DEPENDENCIES=1). Las dependencias varían según el tipo de agente:- GO:
perl tar(+procpsen Debian). - PERL:
perl perl-Sys-Syslog unzip tar(+ RHEL: libnsl/libxcrypt, SUSE: ninguna, Debian: procps). - PERL_SOURCES: conjunto completo que incluye
perl-Scalar-List-Utils,perl-IO-Socket-SSL,
perl-Digest-MD5,perl-threads,perl-Thread-Semaphore,
libnsl(RHEL);perl-YAML-Tiny,
perl-IO-Socket-SSL,libnsl3(SUSE);libsys-syslog-perl,
libyaml-tiny-perl,libio-socket-ssl-perl,libscalar-list-utils-perl(Debian).
- Descarga el tarball con
curl. - Valida el tarball (estructural + huella digital).
- Instala mediante
install_tarball:
tar xvzf+cd unix && ./pandora_agent_installer –install. - Configura
/etc/pandora/pandora_agent.confcon las variablesPANDORA_*. - Compatibilidad Docker/systemd: si
systemctl statusfalla, copiapandora_agent_daemona/etc/init.d/y lo reinicia ahí. - Reinicia
pandora_agent_daemony verifica que el proceso se esté ejecutando (hasta 5 reintentos, con 1s de diferencia). - Limpia
$HOME/pandora_deploy_tmp. - Imprime mensaje de éxito en verde.
Registros
Toda la salida de comandos se dirige a /tmp/pandora-agent-deploy-YYYY-MM-DD.log. En caso de fallo, el script imprime la ruta del registro.
Ejemplos
Agente de GO, estable, con nombre y grupo de agente
export PANDORA_SERVER_IP='10.0.0.1' \ PANDORA_AGENT_PACKAGE=GO \ PANDORA_AGENT_NAME='web-01' \ PANDORA_GROUP='Web' curl -sSL https://pfms.me/agent-deploy | bash
Agente de Perl desde código fuente, beta, automatizado
export PANDORA_SERVER_IP='10.0.0.1' \ PANDORA_AGENT_PACKAGE=PERL_SOURCES \ PANDORA_AGENT_RELEASE=BETA \ PANDORA_SKIP_CONFIRMATION=1 curl -sSL https://pfms.me/agent-deploy | bash
URL directa (compilación personalizada), automatizada
export PANDORA_SERVER_IP='10.0.0.1' \ PANDORA_AGENT_PACKAGE=\ 'https://ci.internal/builds/pandorafms_one_agent_linux-999.go.tar.gz' \ PANDORA_SKIP_CONFIRMATION=1 \ curl -sSL https://pfms.me/agent-deploy | bash
RHEL sin verificación de suscripción
export PANDORA_SERVER_IP='10.0.0.1' \ RHEL_CHECK_SUBSCRIPTION=0 curl -sSL https://pfms.me/agent-deploy | bash
SUSE / OpenSUSE (agente de GO)
export PANDORA_SERVER_IP='10.0.0.1' \ PANDORA_AGENT_PACKAGE=GO curl -sSL https://pfms.me/agent-deploy | bash
Omitir instalación de dependencias (sistema preinstalado)
export PANDORA_SERVER_IP='10.0.0.1' \ PANDORA_SKIP_DEPENDENCIES=1 curl -sSL https://pfms.me/agent-deploy | bash
Matriz de SO soportados
| SO | Versiones | Gestor de paquetes | Notas |
|---|---|---|---|
| RHEL / CentOS / Rocky / Alma | 7 | yum | |
| RHEL / CentOS / Rocky / Alma | 8 | dnf | + libnsl para PERL |
| RHEL / Rocky / Alma | 9 | dnf | + libnsl libxcrypt-compat para PERL |
| RHEL / Rocky / Alma | 10 | dnf | + libnsl libxcrypt-compat para PERL |
| SUSE / OpenSUSE | Tumbleweed / Leap | zypper | Sin subpaquetes extra de perl (todo en perl). libnsl3 para PERL_SOURCES. |
| Debian / Ubuntu | 22.04+ | apt | + procps para todos los tipos. |
Resultados de pruebas
Los resultados a continuación son de pruebas en contenedores utilizando el canal BETA (PANDORA_AGENT_RELEASE=BETA).
SO Canónicos (totalmente soportados)
| SO | GO | PERL | PERL_SOURCES |
|---|---|---|---|
| Rocky Linux 8 | 🆗 | 🆗 | 🆗 |
| Rocky Linux 9 | 🆗 | 🆗 | 🆗 |
| Rocky Linux 10 | 🆗 | 🆗 | 🆗 |
| Ubuntu 22.04 | 🆗 | 🆗 | 🆗 |
| Ubuntu 24.04 | 🆗 | 🆗 | 🆗 |
| Ubuntu 26.04 | 🆗 | 🆗 | 🆗 |
| openSUSE Tumbleweed | 🆗 | fallo instalado, no iniciará — libnsl.so.1 no presente en SUSE (el binario lo necesita) | 🆗 |
SO Adicionales probados
| SO | GO | PERL | PERL_SOURCES |
|---|---|---|---|
| Debian 12 | 🆗 | 🆗 | 🆗 |
| Debian 13 | 🆗 | 🆗 | 🆗 |
| Fedora 43 | 🆗 | fallo necesita libnsl + libxcrypt-compat (no instalados por defecto) | 🆗 |
| AlmaLinux 9 | 🆗 | 🆗 | 🆗 |
| AlmaLinux 10 | 🆗 | 🆗 | 🆗 |
| CentOS Stream 9 | 🆗 | 🆗 | 🆗 |
| CentOS Stream 10 | 🆗 | 🆗 | 🆗 |
Notas de tuberías (Pipeline)
- El canal BETA requiere
PANDORA_SKIP_CONFIRMATION=1en entornos no-TTY (contenedores, CICD). PANDORA_SKIP_DEPENDENCIES=1omite la instalación de paquetes del SO. Úselo solo cuando las dependencias ya estén presentes — tanto el script como elpandora_agent_installerdel agente de GO necesitanperlytar.- Oracle Linux no está soportado porque
perlno está presente en sus repositorios base. Habilitarol8_codeready_buildero EPEL puede resolverlo, pero está fuera del alcance del script. - Alpine Linux carece de
bashy utilizabusybox ash, que no soporta la sintaxis bash utilizada por el script.