NRPE e Perl - não pode incluir QUALQUER COISA ou quebra

6

Eu tenho batido minha cabeça fora de NRPE e Perl por semanas agora.

Eu decidi começar pelos princípios absolutos, e criar um plugin nagios fictício que não faz nada, mas sempre retorna OK. Eu chamei de check_true.pl, instalei-o no servidor remoto e configurei o NRPE para servi-lo como check_test.

O script inteiro é apenas:

#!/usr/bin/perl

print "OK - this dummy test always returns OK\n";
exit 0;

Isso funciona sobre o NRPE sem problemas.

Com isso como ponto de partida, eu iria construir o roteiro que quero lentamente ver em que ponto ele se rompe. Eu não cheguei longe. A seguinte quebra sobre NRPE (mas funciona bem com localmente e por SSH):

#!/usr/bin/perl

use strict;

print "OK - this dummy test always returns OK\n";
exit 0;

Dá o erro temido: NRPE: não é possível ler a saída.

Eu não posso incluir QUALQUER COISA ou recebo este erro. Isso torna impossível fazer o que realmente preciso fazer!

Eu pensei que poderia ser um problema com o caminho de inclusão do perl, mas executar o seguinte sobre o NRPE mostra que não é (fornece caminho de inclusão idêntico ao executado no terminal):

#!/usr/bin/perl

print "OK - Perl include path: ".join(q{, }, @INC)."\n";
exit 0;

Alguém sabe por que o NRPE está se comportando tão mal com o Perl? Alguém pode recomendar uma correção? Ou até mesmo uma solução alternativa?

Atualização 1: O comando é definido no NRPE da seguinte forma:

command[check_test]=/usr/lib64/nagios/plugins/check_true.pl

Atualização 2: Eu fiz um pouco mais de depuração, e adicionando o wrapper abaixo em torno do script perl eu fui capaz de capturar STDERR.

#!/bin/sh

out='/usr/lib64/nagios/plugins/check_true.pl 2>&1'
echo $out

O resultado torna as coisas ainda mais confusas:

Can't locate strict.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/lib64/nagios/plugins/check_true.pl line 3. BEGIN failed--compilation aborted at /usr/lib64/nagios/plugins/check_true.pl line 3.

Uma pesquisa rápida mostra que strict.pm está localizado em /usr/share/perl5/strict.pm e / usr / share / perl5 IS no @INC listado!

Como o Perl não consegue encontrar um arquivo que está lá? Isso funciona perfeitamente quando executado como nagios do usuário em um terminal, então o que o NRPE está fazendo no ambiente para bagunçar o Perl?

    
por Bart B 26.06.2012 / 13:40

1 resposta

2

O culpado foi o SELinux, que no RHEL6 restringe muito o processo do NRPE. Por padrão, até bloqueia o acesso aos módulos principais do perl, como strict e warnings.

Ainda não encontrei uma boa solução para desativar o SELinux apenas por NRPE.

    
por 03.07.2012 / 11:36