Debian Lenny(x86) Hinemos Agent導入

■Hinemos Agent をDebian Lenny(x86)に導入

 AgentはHinemosの管理対象とするためのプログラム。

 以下は古いがとりあえず。
 参考:UNIX 系OS向け Hinemos ver2.1 エージェント 作成メモ 
 ftp://ftp.iij.ad.jp/pub/sourceforge.jp/hinemos/22288/agent_for_UNIX_memo.pdf

■構成(ブリッジ)

 WindowsXP Client → CnetOS5.7 Manager → CnetOS5.7(Mabagerと同じ) Agent
                    ↓
              Debian Lenny(Agent)

■現在の環境

 CentOS5.7とHinemos3.2
 http://d.hatena.ne.jp/labunix/20120120

$ cat /etc/redhat-release
CentOS release 5.7 (Final)

$ ls hinemos_*.tar.gz
hinemos_agent-3.2.2_rhel5_32.tar.gz  hinemos_manager-3.2.2_rhel5_32.tar.gz

■要件のチェック
 ※すべての機能を使うわけではない。

CentOSでAgentを導入した際のログを確認。

# grep OK install.log.hinemos_agent |    grep '^  ' | sed s/"\..*"//g | column
   net-snmp                shadow-utils            passwd
   net-snmp-libs           gawk                    openssh
   net-snmp-5              grep                    openssh-clients
   net-snmp-libs-5         sed                     expect
   coreutils               krb5-workstation

■Debian Lennyの導入

 インストーラ:debian-509-i386-businesscard.iso
 ゲストOSとして「標準システム」のみ
 sshの導入とIP固定

# apt-get update && apt-get upgrade && apt-get install -y openssh-server vim sudo
# env EDITOR=vim sudoedit
$ ssh-keygen -t rsa
$ sudo /etc/init.d/ssh restart
$ sudo vim /etc/network/interfaces
$ sudo shutdown -r now

■要件の確認
 ※「ii」は導入済み

$ echo '   net-snmp                shadow-utils            passwd
   net-snmp-libs           gawk                    openssh
   net-snmp-5              grep                    openssh-clients
   net-snmp-libs-5         sed                     expect
   coreutils               krb5-workstation
' | for list in `xargs`;do \
      echo -n "$list ";dpkg -l | awk '{print $2 " " $1}' | grep ${list} || echo "# Not Found"; \
    done | sort -k 2
expect # Not Found
gawk # Not Found
krb5-workstation # Not Found
net-snmp # Not Found
net-snmp-5 # Not Found
net-snmp-libs # Not Found
net-snmp-libs-5 # Not Found
openssh-clients # Not Found
shadow-utils # Not Found
passwd base-passwd ii
coreutils coreutils ii
grep grep ii
openssh-blacklist-extra ii
openssh-client ii
openssh-server ii
passwd ii
openssh openssh-blacklist ii
sed sed ii

■「expect gawk snmpd snmp snmptrapfmt」の導入

$ echo "expect gawk snmpd snmp snmptrapfmt" | for list in `xargs`;do sudo apt-get install -y "$list";done

■snmpdのコミュニティの設定

$ sudo vim /etc/snmp/snmpd.cof
$ grep -v "^#\|^\$" /etc/snmp/snmpd.conf  | head -3
com2sec readonly default            public
com2sec readonly 127.0.0.1         public
com2sec readonly 192.168.100.0/24    public

■snmpdのディスクの設定の有効化

$ sudo grep ^disk /etc/snmp/snmpd.conf
disk / 10000

■snmpdのリッスンポートの修正

$ sudo grep 0.0.0.0 /etc/default/snmpd
SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid 0.0.0.0'

$ sudo /etc/init.d/snmpd restart
Restarting network management services: snmpd.

$  snmpwalk -v 1 localhost -c public system | wc -l
31

■CentOSからのチェック

# yum install net-snmp-utils
# snmpwalk -v 1 -c public 192.168.100.9 | wc -l
1312

■Hinemos-Agentのインストーラで置き換えるべきパッケージを導入

$ ls Hinemos_Agent-3.2.2_rhel5_32/rpms/
libevtlog0-0.2.7-1.i386.rpm  syslog-ng-2.0.9-1.i386.rpm

$ sudo apt-get install libevtlog0 syslog-ng

■マネージャとの通信の為のコマンドを導入

$ echo "su ftp ssh" | for list in `xargs`;do whereis -b "$list";done
su: /bin/su
ftp: /usr/bin/ftp
ssh: /usr/bin/ssh /etc/ssh /usr/share/ssh

$ sudo apt-get install -y xinetd chkconfig
$ whereis -b xinetd
xinetd: /usr/sbin/xinetd /etc/xinetd.d /etc/xinetd.conf

■SELINUXのチェックの無効化

$ grep -A 10 "# check selinux is Disabled" agent_installer_all
        # check selinux is Disabled
#       echo
#       echo -n "${MSG_I002}" && sleep 0.5
#       if [ "x${SELINUX_CHECK}" == "xtrue" ] && [ "xDisabled" != "x`/usr/sbin/getenforce`" ]
#       then
#               EchoNG
#               echo "${MSG_E003}" && echo "${MSG_E004}"
#               return 255
#       fi
#       EchoOK

■rpmチェックの無効化
 ※関数を呼び出すコマンドの方を無効化。

$ grep "#CheckRPM\|#InstallSyslogNg" agent_installer_all
                                #CheckRPM || continue
                #InstallSyslogNg || continue

■「syslog-ng libevtlog0」のインストール/アンインストールの無効化
 ※上述の通りこれはapt-getで管理する。

$ grep -A 10 'rpm -q syslog-ng' agent_installer_all | grep ^#
#       rpm -q syslog-ng > /dev/null
#       RET=$?
#       if [ ${RET} -ne 0 ]
#       then
#               rpm -ivh --force ${SYSLOG_NG_RPM}
#               if [ $? -ne 0 ]
#               then
#                        echo "${MSG_E007}" && echo "${MSG_E004}"
#                        return 255
#               fi
#
#       rpm -q syslog-ng > /dev/null
#       if [ $? -ne 0 ]
#       then
#               echo "${MSG_I033}"
#               return 0
#       fi

$ grep -A 10 libevt agent_installer_all | grep ^#
#       rpm -e syslog-ng libevtlog0
#       if [ $? -ne 0 ]
#       then
#               echo "{MSG_E010}"
#               return 255
#       fi
#       echo "${MSG_I035}" && echo "${MSG_I036}"

■「rpm -q」と「dpkg -l」の入れ替え

$ sed s/'rpm -q'/'dpkg -l'/g agent_installer_all | grep dpkg
                dpkg -l ${RPM} > /dev/null 2>&1
                PKG_NET_SNMP=`dpkg -l net-snmp`
                PKG_NET_SNMP_LIB=`dpkg -l net-snmp-libs`
                dpkg -l ${RPM} > /dev/null 2>&1
#       dpkg -l syslog-ng > /dev/null
        dpkg -l rsyslog > /dev/null
        dpkg -l syslog > /dev/null
#       dpkg -l syslog-ng > /dev/null
        dpkg -l rsyslog > /dev/null
        dpkg -l syslog > /dev/null

$ mv agent_installer_all agent_installer_all.rhel5
$ sed s/'rpm -q'/'dpkg -l'/g agent_installer_all.rhel5 > agent_installer_all

■「redhat-release」のチェックに失敗した場合の処理があるのでそのまま。
 ※Javaの設定箇所

# grep redhat-release agent_installer_all
        if [ `cat /etc/redhat-release | grep "release 6.[0-9]" | wc -l` -ne 0 ]
        if [ `cat /etc/redhat-release | grep "release 6.[0-9]" | wc -l` -eq 0 ]

■agentインストーラのチェック

# grep -B 2 -A 15 'ConfirmInstallation ' agent_installer_all
                        if [ -e ${SCRIPT_DIR}/hinemos_agent ]
                        then
                                ConfirmInstallation || continue
                                CheckInstallDirectory || continue
                                CheckHosts || continue
                                #CheckRPM || continue
                                InputIpAddress || continue
                                CopyFiles || continue
                                ConfigureFiles || continue
                                CopyServiceScripts || continue
                                InstallJRE || continue
                                ConfigureNetSnmp || continue
                                #InstallSyslogNg || continue
                                echo && echo "${MSG_I028}" && echo
                        else
                                # if installed script is executed
                                echo "${MSG_W001}"
                        fi

■実行権限を付けて導入
 ※エラーはredhat-releaseのチェックのみ。

# chmod +x agent_installer_all
# ./agent_installer_JP.sh

■インストールログの確認

# tail -15 /root/install.log.hinemos_agent

Done.

Hinemosエージェントのインストールが完了しました。


--- 実行する項目を選択してください ---
  1) Hinemosエージェントのインストール
  2) Hinemosエージェントのアンインストール
  9) インストーラを終了する

==>
インストーラを終了します。

### Hinemos Agent installer ended at 2012-01-28 22:03:33 ###

■インストール後のjavaのチェック

# java -version
bash: java: command not found
# /opt/hinemos_agent/jre1.5.0_22/bin/java -version
java version "1.5.0_22"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_22-b03)
Java HotSpot(TM) Client VM (build 1.5.0_22-b03, mixed mode, sharing)

# export PATH=/opt/hinemos_agent/jre1.5.0_22/bin:${PATH}
$ grep '/opt/hinemos_agent/jre1.5.0_22/bin:' /etc/login.defs
ENV_SUPATH      PATH=/opt/hinemos_agent/jre1.5.0_22/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

■Agentの開始

# /opt/hinemos_agent/bin/job_agent_start.sh
Hinemos Job Agent started.
# /opt/hinemos_agent/bin/log_agent_start.sh
Hinemos Log Agent started.

■WinXPからCentOSのマネージャにログイン、Lennyのエージェントをノードに追加
 リアルタイムグラフで状態を確認。

----以下作業中---
■killprocを置き換えたが、書き直した方が良いかも知れない。
 「restart」は出来ないので、stop、startと2回に分ける。
 この修正は、後日に持ち越しの課題ということで。。。

# grep Usage /etc/init.d/hinemos_*
/etc/init.d/hinemos_job_agent:          echo "Usage: $0 {start|stop|status|restart}"
/etc/init.d/hinemos_log_agent:          echo "Usage: $0 {start|stop|status|restart}"

■initスクリプトの調整
 ※debianには「/etc/rc.d/init.d/functions」は無い

# ls /etc/init.d/hinemos_*
/etc/init.d/hinemos_job_agent  /etc/init.d/hinemos_log_agent

# grep "^#\." /etc/init.d/hinemos_job_agent
#. /etc/rc.d/init.d/functions
# grep "^#\." /etc/init.d/hinemos_log_agent
#. /etc/rc.d/init.d/functions

■LSB TAG対応

# chkconfig --list | grep hinemos
hinemos_job_agent         0:off  1:off  2:on   3:on   4:on   5:on   6:off
hinemos_log_agent         0:off  1:off  2:on   3:on   4:on   5:on   6:off

# head -13 /etc/init.d/hinemos_log_agent
#!/bin/sh
### BEGIN INIT INFO
# Provides:          hinemos-log-agent
# Required-Start:    $remote_fs $syslog $time
# Required-Stop:     $remote_fs $syslog $time
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Hinemos-Log-Agent
# Description:       Hinemos-Log-Agent for Debian
#                         Custom version base on Hinemos_Agent-3.2.2_rhel5_32
### END INIT INFO

# head -13 /etc/init.d/hinemos_job_agent
#!/bin/sh
### BEGIN INIT INFO
# Provides:          hinemos-job-agent
# Required-Start:    $remote_fs $syslog $time
# Required-Stop:     $remote_fs $syslog $time
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Hinemos-job-Agent
# Description:       Hinemos-job-Agent for Debian
#                         Custom version base on Hinemos_Agent-3.2.2_rhel5_32
### END INIT INFO

■daemonコマンド対応
 ※「"」の位置を変更
# grep daemon /etc/init.d/hinemos_*
/etc/init.d/hinemos_job_agent:  daemon "${HINEMOS_AGENT_HOME}/bin/job_agent_start.sh" > /dev/null
/etc/init.d/hinemos_log_agent:  daemon "${HINEMOS_AGENT_HOME}/bin/log_agent_start.sh" > /dev/null

# apt-get install daemon

■「killproc」文を書き換え
 ※今後の課題とする
# grep killproc /etc/init.d/hinemos_*
/etc/init.d/hinemos_job_agent:          killproc ${PROG}
/etc/init.d/hinemos_log_agent:          killproc ${PROG}


# grep -A 2 killproc /etc/init.d/hinemos_job_agent
                #killproc ${PROG}
                ps -ef | grep "hinemos" | grep "jog" | grep -v grep | awk '{print $2}' | \
                for list in `xargs`;do kill "$list";done

# grep -A 2 killproc /etc/init.d/hinemos_log_agent
                #killproc ${PROG}
                ps -ef | grep "hinemos" | grep "log" | grep -v grep | awk '{print $2}' | \
                for list in `xargs`;do kill "$list";done

# mkdir /var/lock/subsys

# ls -l /var/lock/subsys/hinemos_*
-rw-r--r-- 1 root root 0 2012-01-29 00:18 /var/lock/subsys/hinemos_job_agent
-rw-r--r-- 1 root root 0 2012-01-29 00:17 /var/lock/subsys/hinemos_log_agent