RedHat Linux 7.3でのNetSaintのインストール


・原因はpingにあり!

既に書きましたように、RedHat Linux  7.3にNetSaintをインストールするとき、./configure の途中で処理が止まってしまいます。
これは、iputils-20020124-3のバージョンでpingのsyntaxが変更となり、NetSaintがpingから返されるメッセージをパースできないためです。

RedHat Linux 7.2でpingした場合、応答がある場合には次のように返ってきます。

# ping -c 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) from 192.168.0.12 : 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=732 usec

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max/mdev = 0.732/0.732/0.732/0.000 ms


そして、RedHat Linux 7.3の場合には、次のように返ってきます。

# ping -c 1 192.168.0.1
PING 192.168.0.1 (192.168.0.1) from 192.168.0.11 : 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=0.675 ms

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% loss, time 0ms
rtt min/avg/max/mdev = 0.675/0.675/0.675/0.000 ms

赤字の部分に注目してください。
特に最後の行のところで、RedHat  Linux 7.2では「 round-trip 」となっているところが、RedHat Linux 7.3では「 rtt 」となっています。
ここがポイントとなります。

また、RedHat Linux 7.2のpingで相手側から応答がない場合には、次のように返ってきます。

# ping -c 1 192.168.168.168
PING 192.168.168.168 (192.168.168.168) from 192.168.0.12 : 56(84) bytes of data.

--- 192.168.168.168 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss

RedHat Linux 7.3の場合は、こうです。

# ping -c 1 192.168.168.168
PING 192.168.168.168 (192.168.168.168) from 192.168.0.11 : 56(84) bytes of data.

--- 192.168.168.168 ping statistics ---
1 packets transmitted, 0 received, 100% loss, time 0ms

以上で、今回のpingのsyntaxの変更内容がお分かりいただけたかと思います。
この変更に対応するには、以下の3つのファイルの修正が必要となります。
   1.netsaint-0.0.7のconfigureファイル
   2.netsaint-plugins-1.2.9-4のconfigureファイル
   3.netsaint-plugins-1.2.9-4のcheck_ping.cファイル
      ( ./netsaint-plugins-1.29.-4/plugins にあります。)
今回修正した内容を下記に示します。



1.netsaintのconfigureファイルの修正
赤字の部分が修正箇所です。
基本的には、「^round-trip 」の文字をegrepしているところで、「 |^rtt 」を追加しているだけです。(~_~;)

#re 2002.08.29
elif ping -n -U -c 1 127.0.0.1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n -U -c %d %s"
cat >> confdefs.h <<EOF
#define PING_PACKETS_FIRST "$PING_COMMAND"
EOF

echo " ping syntax... $PATH_TO_PING -n -U -c <count> <host>"
#re 2002.08.29
elif ping -n -c 1 127.0.0.1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n -c %d %s"
cat >> confdefs.h <<EOF
#define PING_PACKETS_FIRST "$PING_COMMAND"
EOF

echo " ping syntax... $PATH_TO_PING -n -c <count> <host>"
#re 2002.0829
elif ping -n 127.0.0.1 -c 1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n %s -c %d"
echo " ping syntax... $PATH_TO_PING -n <host> -c <count>"
#re 2002.08.29
elif ping 127.0.0.1 -n 1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING %s -n %d"
echo " ping syntax... $PATH_TO_PING <host> -n <count>"
#re 2002.08.29
elif ping -n -s 127.0.0.1 56 1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/n
ull
then
PING_COMMAND="$PATH_TO_PING -n -s %s 56 %d"
echo " ping syntax... $PATH_TO_PING -n -s <host> 56 <count>"
#re 2002.08.29
elif ping -n -h 127.0.0.1 -s 56 -c 1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n -h %s -s 56 -c %d"
echo " ping syntax... $PATH_TO_PING -n -h <host> -s 56 -c <count>"
#re 2002.08.29
elif ping -n -s 56 -c 1 127.0.0.1 2>/dev/null | egrep -i "^round-trip|^rtt" >/de
v/null
then
PING_COMMAND="$PATH_TO_PING -n -s 56 -c %d %s"
cat >> confdefs.h <<EOF
#define PING_PACKETS_FIRST "$PING_COMMAND"
EOF

echo " ping syntax... $PATH_TO_PING -n -s 56 -c <count> <host>"
#re 2002.08.29
elif ping -n -c 1 127.0.0.1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n -c %d %s"
cat >> confdefs.h <<EOF
#define PING_PACKETS_FIRST "$PING_COMMAND"
EOF




2.netsaint-pluginsのconfigureファイルの修正
この場合も、「^round-trip 」の文字をegrepしているところで、「 |^rtt 」を追加しているだけです。(~_~;)

#re 2002.08.29
elif ping -n -c 1 127.0.0.1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n -c %d %s"
cat >> confdefs.h <<EOF
#define PING_PACKETS_FIRST "$PING_COMMAND"
EOF

echo " ping syntax... $PATH_TO_PING -n -c <count> <host>"
#re 2002.08.29
elif ping -n 127.0.0.1 -c 1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n %s -c %d"
echo " ping syntax... $PATH_TO_PING -n <host> -c <count>"
#re 2002.08.29
elif ping 127.0.0.1 -n 1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING %s -n %d"
echo " ping syntax... $PATH_TO_PING <host> -n <count>"
#re 2002.08.29
elif ping -n -s 127.0.0.1 56 1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/n
ull
then
PING_COMMAND="$PATH_TO_PING -n -s %s 56 %d"
echo " ping syntax... $PATH_TO_PING -n -s <host> 56 <count>"
#re 2002.08.29
elif ping -n -h 127.0.0.1 -s 56 -c 1 2>/dev/null | egrep -i "^round-trip|^rtt" >
/dev/null
then
PING_COMMAND="$PATH_TO_PING -n -h %s -s 56 -c %d"
echo " ping syntax... $PATH_TO_PING -n -h <host> -s 56 -c <count>"
#re 2002.08.29
elif ping -n -s 56 -c 1 127.0.0.1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n -s 56 -c %d %s"
cat >> confdefs.h <<EOF
#define PING_PACKETS_FIRST "$PING_COMMAND"
EOF

echo " ping syntax... $PATH_TO_PING -n -s 56 -c <count> <host>"
#re 2002.08.29
elif ping -n -c 1 127.0.0.1 2>/dev/null | egrep -i "^round-trip|^rtt" >/dev/null
then
PING_COMMAND="$PATH_TO_PING -n -c %d %s"
cat >> confdefs.h <<EOF
#define PING_PACKETS_FIRST "$PING_COMMAND"
EOF




3.netsaint-pluginsのcheck_ping.cファイルの修正
この場合には、正常な応答があった場合と、エラーが返ってきた場合の2箇所に関して修正が必要です。

/* get the percent loss statistics */
if (sscanf (input_buffer, "%*d packets transmitted,
   %*d packets received, +%*d errors, %d%% packet loss", &pl) == 1 ||
sscanf (input_buffer, "%*d packets transmitted,
   %*d packets received, %d%% packet loss", &pl) == 1
/* re 2002.09.01 */
||
sscanf (input_buffer, "%*d packets transmitted,
   %*d packets received, %d%% loss, time", &pl) == 1 ||
sscanf (input_buffer, "%*d packets transmitted,
   %*d received, %d%% loss, time", &pl) == 1

)
continue;

/* get the round trip average */
else
if (sscanf (input_buffer, "round-trip min/avg/max =
%*f/%f/%*f", &rta) == 1 ||
sscanf (input_buffer,
   "round-trip min/avg/max/mdev = %*f/%f/%*f/%*f", &rta) == 1 ||
sscanf (input_buffer,
   "round-trip min/avg/max/sdev = %*f/%f/%*f/%*f", &rta) == 1 ||
sscanf (input_buffer,
   "round-trip min/avg/max/stddev = %*f/%f/%*f/%*f", &rta) == 1 ||
sscanf (input_buffer,
   "round-trip min/avg/max/std-dev = %*f/%f/%*f/%*f", &rta) == 1 ||
sscanf (input_buffer,
    "round-trip (ms) min/avg/max = %*f/%f/%*f", &rta) == 1

/* re 2002.09.01 */
||
sscanf (input_buffer,
"rtt min/avg/max/mdev = %*f/%f/%*f/%*f ms", &rta) == 1

)
continue;
}



以上で修正は終わりです。
あとは、別紙の「NetSaintのインストール」に書いているとおりに処理すればOKです。

今回の方法を見つけ出すのに、結構インターネット上を探し回ったのですが、結局「Nagios」のconfigureファイルを参考に修正しました。
(Nagiosでは今回のpingの変更に対応されていました。)

やはり、これからはNagiosの時代なのでしょうか。
今回のこともあって、試しにインストールしてみたのですが、かなり設定ファイルに変更点があって、インストールや設定方法等をアップするのにはかなり勉強が必要なようです。(ーー;)

いずれチャレンジしようと思っていますので、そのときには。。。。。。。。。。。。。。。