EJPスタッフブログ

ソフトウェアやボードゲームの開発を行うEJP株式会社のスタッフブログです。

サーバー管理者に絶対必要なプロトコル その1

こんにちは。 私の経験の中で、サーバー管理者など、ネットワーク関連の技術者に必要なプロトコル、アプリケーションについて、紹介して行きたいと思います。

今回は絶対に必要な、SNMPについて紹介します。

SNMPとは

SNMPとは、「Simple Network Management Protocol」の略で、サーバーなどのネットワークリソースの情報を簡単に取得することが可能なプロトコルです。 この機能の実現の為には、SNMP Agentと呼ばれるアプリケーションが稼働していることが、条件になりますが、逆にこのアプリケーションさえ動いていて、ネットワークに接続されていればどんなものでも情報取得が可能です。

例えば、Linuxのサーバーなどではもちろん、SNMP Agentのインストールは可能ですが、ルーターやパソコン(Windowsも)、ネットワークプリンタやIP電話などでもSNMP Agentが稼働している製品は存在します。

ネットワーク技術者ではない一般の方に有益な情報でいうと、SNMP Agentが稼働中のプリンタに対して情報取得のリクエストを送れば、インク残量や残りの印刷待ち情報が取得できたりします。

上記した、SNMP Agentに対する情報取得のリクエストはどのように実現するのかというと、専用のアプリケーションを使用します。

ここで、情報を取得する側のアプリケーションをSNMP Managerと言います。

一番有名なアプリケーションはNet-SNMPというSNMPスイートのオープンソースプロジェクトに同梱されている、snmpgetやsnmpwalkなどでしょう。

snmpgetはある単一の情報に対する取得リクエストを送ります。 snmpwalkはある情報にぶら下がっている複数の情報に対する取得リクエストを送ります。

snmpgetやsnmpwalkは多くの場合、Linux上でCUIのコマンドとして実行します。 しかし、サーバー管理初心者にとってはCUIでのオペレーションは不慣れな場合もあるでしょう。 しかし、SNMPは世界で統一された標準規格であるため、情報取得の為の手続きが決められています。 その為、Windows用のアプリケーションも存在しますし、私が作ったアプリ「iMonitor」を使用すれば画面タップで簡単に情報取得が可能です。

[browser-shot url="http://apps.tetoatom.com/imonitor" width="400"]

2.SNMP Agentについて

それでは、具体的にSNMP Agentの設定について説明して行きたいと思います。 今回のテーマとしては、入門編として、自宅サーバーを立ち上げてこれから管理して行きたい方向けの設定を説明したいと思います。 基本的にはシンプルなプロトコルですが、今回説明の為に使用するNet-SNMPは様々な設定が可能になっています。 奥が深いので、ひとまずSNMP Agentのインストールとローカルからの情報取得までを説明したいと思います。

はじめに書いちゃいますが、以下のコマンドを投入することで、インストール可能です。 (ちなみに’#'から始まる行はシェルコマンド上でコメント扱いになりますので、以下のすべてをコピペしても問題有りません。)

[bash]

テンポラリディレクトリへ移動して作業

cd /tmp

インストールディレクトリの作成

sudo mkdir -p /usr/local/snmp/

Net-SNMPソースコードをダウンロード(TARボール)

wget http://sourceforge.net/projects/net-snmp/files/net-snmp/5.7.2/net-snmp-5.7.2.tar.gz

TARボールの解凍

tar xvzf net-snmp-5.7.2.tar.gz

解凍したディレクトリへ移動

cd net-snmp-5.7.2

コンフィギュレーション

sudo ./configure --prefix=/usr/local/snmp

ソースコードコンパイル

sudo make [/bash]

では、各コマンドを説明していきます。

2行目は作業用のディレクトリとして”/tmp”に移動して作業します。 一般的にこのディレクトリは暫定的なファイルの展開場所に使用したります。 私は、よくここに圧縮ファイルを展開します。 ただし、”/tmp”配下はシステム再起動でファイルが削除されてしまうので、ファイルを更新した場合は退避させる必要があるので、気をつけてください。

5行目は今回、SNMPのインストールディレクトリとして、”/usr/local/snmp”にインストールすることにしました。 その為のディレクトリを作成しています。 このあとのコンフィギュレーション時にインストール先として指定することになります。

8行目はNet-SNMPソースコードをダウンロードしています。 今回はNet-SNMP最新板のVersion 5.7.2をダウンロードします。

11行目はソースコードのTARボールを解凍しています。 よくオープンソースソースコードはTARという形式で一つのファイルに固められて、GZIPやBUNZIPなどで圧縮されています。 その為、このように圧縮されたファイルをTARボールと読んでいます。

14行目で解凍されたディレクトリへ移動します。

17行目はMakefileコンフィギュレーションです。オプションを指定することで、defaultのビルドターゲットから、不要なプログラムを減らしたり、必要なものを追加したりすることが可能です。今回は、インストールディレクトリを”/usr/local/snmp”に指定するのみとします。 また、途中で応答を求められると思いますが、今回は特に気にせず、毎回「Enter」を入力してください。 configureは1分くらいかかります。

20行目はconfigureで作成されたMakefileというビルド用情報を元に、ソースコードコンパイルするコマンドになります。 ただし、もしかしたらコンパイルエラーになるかもしれません。 以下の様なエラーで途中で止まってしまっていませんか?

[bash] /usr/bin/ld: cannot find -lperl collect2: ld returned 1 exit status

[/bash]

Ubuntuをインストールしたばかりだと、perlのライブラリがNet-SNMPコンパイルできない状態で配置されている可能性があります。 もし、Ubuntuインストール後に特にperlのライブラリ配置を修正した覚えが無ければ修正が必要です。 まずは以下のコマンドで、perlがどこに配置されているかを表示します。

[bash] locate libperl

[/bash]

上記コマンドを投入して、一行目に表示されているファイルが今回必要なperlのライブラリになりますので、Net-SNMPコンパイルできるように配置します。

[bash] sudo ln -sf /usr/lib/libperl.so.5.14 /usr/lib/libperl.so sudo ldconfig

[/bash]

私の環境では、perlのライブラリが「/usr/lib/libperl.so.5.14」というファイル名で配置されていました。 最後の数字はバージョンになっていますので、これを外したファイル名(/usr/lib/libperl.so)のシンボリックリンク(Windowsでいうショートカット)を作成しておきます。 その後、ライブラリの配置を更新したので、再認識させるコマンドを実行しておきます。

これで、ひとまずmakeコマンドが通るはずです。 改めていかのコマンドを実施します。

[bash] sudo make

[/bash]

なお、初心者には馴染みがないかもしれませんが、上記のコマンドところどころで、「sudo」という単語が出てきます。 これは、あとに続くコマンドを管理者権限で実行するという意味になります。 その為、初回はパスワードが求められると思いますので、パスワードを入力してください。 makeのログを見ていると、結構ワーニングが出ていますが、まあ、気にしないでください。。 makeは4分程かかりました。

では、以下のコマンドを実施します。

[bash]

コンパイルされたプログラムのテストを実施する。

sudo make test

[/bash]

make testはコンパイルされたプログラムの正常性を確認します。 私の環境で実施したところ、以下のテスト時にエラーが出ていました。。 「com2secunix directive」 しかし、今回は気にしません。。無視してインストールへ進むことにします。 気になるようであれば、エラーになった詳細要因が出力されていますので、調査することも可能です。 わからない場合は、コメントで教えていただければこちらで調べてみます。

[bash]

インストールの実施

sudo make install

[/bash]

これで、Net-SNMPのインストールが完了です。 それでは早速SNMP Agentを起動してみましょう!!!

と、思いましたが、ここからがちとめんどくさい。。。 コンフィグをつくらないといけない。。

すみませんが、次回説明します。。