datchの日記

気がついたら社会人。気になる技術的なことについて少しずつ書いていけたらと思っております。

監視ツールXymonのrpmをビルドしてみた話

背景



現在、今の環境をpuppetで置き換えようと色々と頑張っています。
Xymonというサーバ監視ツールを勉強で入れているのですが、それをpuppetで表現しようとしていました。
結果的にexecだらけで管理しずらいのと、デフォルトでspecファイルが用意されていのたでrpmをビルドすることにした次第であります。

specファイル



rpmbuildにはspecファイルが必須です。
specファイルは公式から提供されているのでまずはそれを入手しましょう。

specファイルの入手

xymonの本体と一緒に提供されています。
本日時点では4.3.21が最新ですのでそれを例に取っていますが、以下のURLから最新のバージョンを確認してください.
http://sourceforge.net/projects/xymon/files/Xymon/

以下のコマンドから最新のパッケージをダウンロードし、解凍・rpmディレクトリにspecファイルと関連するファイル一式が存在することを確認します。
(ここではホームディレクトリで解凍されたと仮定します)

$ wget http://sourceforge.net/projects/xymon/files/Xymon/4.3.21/xymon-4.3.21.tar.gz
$ tar xvfz xymon-4.3.21.tar.gz
$ ls -l xymon-4.3.21/rpm/
$ ls -l xymon-4.3.21/rpm/
合計 24
-rw-r--r--. 1 xymon xymon  739  38  2011 xymon-client.default
-rw-r--r--. 1 xymon xymon 1830  23  2014 xymon-client.init
-rw-r--r--. 1 xymon xymon 1253  38  2011 xymon-init.d
-rw-r--r--. 1 xymon xymon  274  38  2011 xymon.logrotate
-rw-r--r--. 1 xymon xymon 5761  74 10:05 xymon.spec
specファイルの修正

specファイルが存在するのを確認したら必要な部分を修正します。
といっても、ビルドするために必要な最小限の部分だけ修正を行います。
xymon.specファイルの二箇所に"@VER" と記述された部分が存在するのでそれを置換します。

Version: @VER -> Version: 4.3.21
Source: xymon-@VER.tar.gz -> Source: xymon-4.3.21.tar.gz

ビルドするために



specファイルの準備はできたが、まだビルドするためのパッケージの準備ができていない.

依存パッケージのインストール

root権限で以下のコマンドを使用して、パッケージをインストールする.

[root] $ yum install gcc pcre-devel rrdtool-devel libpng-devel openssl-devel openldap-devel

これで必要なパッケージはインストールできているはず.

必要なファイルの移動

specファイルを見てもらうとわかるが、ソースの部分に必要なファイルが記述されています.
ほとんどがxymonのrpmディレクトリにありますが、xymon-4.3.21.tar.gz の解凍前のファイルも必須です。
これらを今回はデフォルトのrpmbuildのパス($HOME/rpmbuild)にコピーします.

$ mkdir -p ~/rpmbuild/{SOURCES, SPEC} # rpmbuildの必要ファイルを置くディレクトリを作成
$ cp ~/xymon-4.3.21/rpm/* ~/rpmbuild/SOURCES/ # 不必要なspecファイルもコピーされているが、ビルドに支障はないので気にしない
$ cp ~/xymon-4.3.21.tar.gz ~/rpmbuild/SOURCES/ 
$ cp ~/xymon-4.3.21/rpm/xymon.spec ~/rpmbuild/SPEC # 実はここにspecファイルを持ってこなくてもビルドできるが一応

rpmのビルド



あとはrpmbuildを使用してビルドを行います。
今回はソースパッケージとバイナリパッケージを作成します。
ソースパッケージについては使用したことがないので言及できませんが、調べてみるとrpm -iコマンドでインストールできない時、異なるOSでインストールするときにリビルドする時に使用するらしいです。

$ rpmbuild -ba ~/rpmbuild/xymon.spec

あとはひたすら待つ.
すると以下のファイルが生成される.

$ tree ~/rpmbuild/RPMS
/home/xymon/rpmbuild/RPMS/
└── x86_64
    ├── xymon-4.3.21-1.x86_64.rpm
    ├── xymon-client-4.3.21-1.x86_64.rpm
    └── xymon-debuginfo-4.3.21-1.x86_64.rpm

最後に



本当はもう少しspecファイルに対して理解の深めてから書きたいところだったけど今回はとりあえずrpmbuildを行う流れをまとめた.
余裕があるときにでもspecファイルの記述されている部分について理解を深めたい.