Compilando o nrpe no HPUX 11.31
Ok, chegaram nossos novos servidores HP rx8640 com HPUX 11.31 e precisávamos monitorá-los com o nagios. Como o check_by_ssh se mostrou muito mais lento que o NRPE+SSL nos nossos antigos servidores Solaris, definimos como política que todo servidor sob nosso controle deve ser monitorado usando NRPE.
Descobri que alguém já fez o trabalho sujo de compilá-lo e até criou um depot atual (pacote de software, na linguagem do HPUX) que funciona com o 11.31. Tem algumas desvantagens, porém: roda via inetd, o que não é prático quando você faz muitas verificações frequentes, e foi compilado sem “–enable-command-args”, e esse último ponto o torna inútil para o que precisamos.
Usando as notas de build do Olivier, levemente modificadas, compilei o NRPE com “–enable-command-args” e criei um script para iniciá-lo como serviço standalone em vez de usar o inetd.
Aqui está o processo:
Nota sobre TCP Wrappers
Segundo as notas do Olivier, ele usou o código-fonte do tcpwrapper incluído com o SSHD (será o Openssh?) localizado em /opt/ssh/src/tcp_wrappers_7.6-ipv6.4. Para conseguir compilá-lo, tive que modificar o Makefile, adicionando “-DUSE_GETDOMAIN” à definição da macro BUGS. Caso contrário, eu recebia o seguinte erro:
/usr/ccs/bin/ld: Unsatisfied symbols: yp_get_default_domain (code)Procedimento:
vi Makefile <-- add "-DUSE_GETDOMAIN" to BUGS macro definition
make REAL_DAEMON_DIR=/tmp hpux
ls -l libwrap.aO problema é que não funcionou…. Depois de compilá-lo e usar o libwrap.a gerado na compilação do NRPE, eu recebia:
-------------
utils.c:
ld: Unsatisfied symbol "fromhost" in file nrpe.o
1 errors.
*** Error exit code 1
Stop.
*** Error exit code 1
Stop.
-------------Voltando ao libwrap padrão do HPUX, só precisei definir no nrpe.c uma variável que estava faltando (rfc931_timeout)
Aplicando patch/modificando o 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;Configuração do 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-argsCompilação e instalação
make
make install
mkdir /opt/nagios/etc
cp sample-config/nrpe.cfg /opt/nagios/etc/Script de init
Criei um script de init para iniciar o NRPE como serviço, mas aparentemente o wordpress não permite o upload de arquivos arbitrários. Vou publicá-lo assim que possível.
Atualização: Como não consigo publicar arquivos, vou ter que incluir o script aqui mesmo…. Para isso funcionar você precisa de dois arquivos, um para “habilitar” o serviço e o script de controle.
/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 $rvalDepois de criar esses arquivos você precisará criar links para o script de controle para poder iniciar e parar o serviço na inicialização e no desligamento
/sbin/rc1.d/K500nrpe -/sbin/init.d/nrpe
/sbin/rc3.d/S999nrpe -/sbin/init.d/nrpeEram essas as peças que faltavam…
Editar este post no GitHub · achou um erro? Pull requests são bem-vindos.