Compilando nrpe en HPUX 11.31
Bueno, nos llegaron los servidores HP rx8640 nuevos con HPUX 11.31 y había que monitorearlos con nagios. Como check_by_ssh resultó ser mucho más lento que NRPE+SSL en nuestros antiguos servidores Solaris, definimos como política que todo servidor bajo nuestro control se monitoree usando NRPE.
Encontré que alguien ya hizo el trabajo sucio de compilarlo e incluso creó un depot actual (paquete de software en términos de HPUX) que funciona con 11.31. Tiene un par de inconvenientes, eso sí: corre usando inetd, lo cual no es práctico cuando haces muchos chequeos frecuentes, y está compilado sin “–enable-command-args”, y esto último lo hace inútil para lo que necesitamos.
Usando las notas de compilación de Olivier, ligeramente modificadas, compilé NRPE con “–enable-command-args” y creé un script para iniciarlo como servicio independiente en lugar de usar inetd.
Este es el proceso:
Nota sobre TCP Wrappers
Según las notas de Olivier, él usó el código fuente de tcpwrapper incluido con SSHD (¿será Openssh?) ubicado en /opt/ssh/src/tcp_wrappers_7.6-ipv6.4. Para poder compilarlo, tuve que modificar el Makefile, agregando “-DUSE_GETDOMAIN” a la definición de la macro BUGS. De lo contrario, obtenía el siguiente error:
/usr/ccs/bin/ld: Unsatisfied symbols: yp_get_default_domain (code)Procedimiento:
vi Makefile <-- add "-DUSE_GETDOMAIN" to BUGS macro definition
make REAL_DAEMON_DIR=/tmp hpux
ls -l libwrap.aEl asunto es que no funcionó…. Después de compilarlo y usar el libwrap.a generado al compilar NRPE, obtenía:
-------------
utils.c:
ld: Unsatisfied symbol "fromhost" in file nrpe.o
1 errors.
*** Error exit code 1
Stop.
*** Error exit code 1
Stop.
-------------Volviendo al libwrap estándar de HPUX, solo necesité definir en nrpe.c una variable que le faltaba (rfc931_timeout)
Parchear/modificar NRPE
tar xvf nrpe-2.12.tar
cd nrpe-2.12
vi src/nrpe.c
/* Add syslog facilities that are missing in HPUX */
#define LOG_AUTHPRIV (10<<3) /* security/authorization messages (private) */
#define LOG_FTP (11<<3) /* ftp daemon */
/* Adding variable missing in libwrap */
int rfc931_timeout=15;Configuración de NRPE
PATH="$(cat /etc/PATH):/usr/local/bin" ./configure --prefix=/opt/nagios \
--with-ssl-inc=/opt/openssl/include --with-ssl-lib=/opt/openssl/lib/hpux32 \
--enable-command-argsCompilación e instalación
make
make install
mkdir /opt/nagios/etc
cp sample-config/nrpe.cfg /opt/nagios/etc/Script de init
Creé un script de init para iniciar NRPE como servicio, pero aparentemente wordpress no permite subir archivos arbitrarios. Lo subiré apenas pueda.
Actualización: Como no puedo publicar archivos, tendré que incluir el script en el texto…. Para que esto funcione necesitas dos archivos, uno para “habilitar” el servicio y el script de control.
/etc/rc.config.d/nrpe
# Nagios Remote Plugin Executor
ENABLE_NRPE=1/sbin/init.d/nrpe
#!/usr/bin/bash
# Ciro Iriarte - May 5th, 2010
# some parts taken from SuSE's NRPE init script and xntpd init from HPUX
if [ -f /etc/rc.config ] ; then
. /etc/rc.config
else
echo "ERROR: /etc/rc.config defaults file MISSING"
fi
rval=0
set_return() {
x=$?
if [ $x -ne 0 ]; then
echo "EXIT CODE: $x"
rval=1 # always 1 so that 2 can be used for other reasons
fi
}
NRPE_BIN=/opt/nagios/bin/nrpe
test -x $NRPE_BIN || { echo "$NRPE_BIN not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
# Check for existence of needed config file and read it
NRPE_CONFIG=/opt/nagios/etc/nrpe.cfg
test -r $NRPE_CONFIG || { echo "$NRPE_CONFIG not existing";
if [ "$1" = "stop" ]; then exit 0;
else exit 6; fi; }
case "$1" in
start_msg)
echo -n "Starting Nagios NRPE "
;;
stop_msg)
echo -n "Shutting down Nagios NRPE "
;;
start)
if [ $ENABLE_NRPE -eq 1 ]
then
$NRPE_BIN -c $NRPE_CONFIG -d
set_return
## $0 start_msg
##if [ $rval -eq 0 ];then echo -e "\t\t[ OK ]";else echo -e "\t\t[ ERR ]";fi
else
rval=2
fi
;;
stop)
if [ $ENABLE_NRPE -ne 1 ]
then
rval=2
else
PID=$(ps -el | awk '( ($NF ~ /nrpe/) && ($4 != mypid) && ($5 != mypid)) { print $4 }' mypid=$$)
##$0 stop_msg
if [[ -n $PID ]];then
if kill $PID 2/dev/null; then
echo -e "\tService stopped"
else
if [ $(ps -fp $PID|grep -v COMMAND|wc -l) -gt 0 ]
then
set_return
##echo -e "\t\t[ ERR ]"
echo -e "\tCouldn't stop NRPE"
fi
fi
else
set_return
##echo -e "\t\t[ ERR ]"
echo -e "\tUnable to stop NRPE, cannot find PID"
fi
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
rval=1
;;
esac
exit $rvalDespués de crear esos archivos tendrás que crear enlaces al script de control para poder iniciar y detener el servicio en el arranque y el apagado
/sbin/rc1.d/K500nrpe -/sbin/init.d/nrpe
/sbin/rc3.d/S999nrpe -/sbin/init.d/nrpeEsas eran las piezas que faltaban…
Editar este artículo en GitHub · ¿encontraste un error? Los pull requests son bienvenidos.