RPMファイルの作成
パッケージ管理システム
- Linuxディストリビューションで利用されているパッケージ管理システムはいくつかあり、あらかじめ標準的なオプションでコンパイルされたバイナリファイルをパッケージングしたもの。
- RedHat系:RPM .rpm - Fedora、Vine、SuSE ...
- Debian系:dpkg .deb - Ubuntu、omoikane ...
RPM(RedHat Package Manager)
- RPMはRedHat系のLinuxディストリビューションで広く利用されているパッケージ管理システムで、RPMによってパッケージングされたソフトウェア(拡張子が「.rpm」)は、インストール,アンインストール/アップグレードなどバージョン管理が簡単に行えて便利。
例えば...
・ パッケージの依存関係調査
rpm -q --whatrequires php
・ パッケージに含まれる設定ファイルなどの調査
rpm -q --filesbypkg php
・ 設定ファイルなどを含んだパッケージの調査
rpm -q --whatprovides /etc/php.ini
などなど
- しかし、コンパイル済みのバイナリファイルがパッケージングされているため、自分にとって必要な機能を組み込んだり、不要な機能を取り除いたりして、ソフトウェアをカスタマイズすることが不可能。
- そういう場合は、コンパイルされていないソースコードのRPMファイルであるSRPMファイル(拡張子が「.src.rpm」)が提供されていれば、簡単にオリジナルRPMファイルを作成することができます。
今回は、SRPMファイルを元に独自RPMファイルを作成する方法を簡単に説明します。
独自RPMファイル作成
- 作業手順:
- SRPMファイルの取得
- パッチファイルなどの取得
- パッケージ作成手順ファイルの編集(SPECファイル)
- RPM作成の実行
- インストール
- 動作の確認
RPM作成の基礎知識
RPMを作成するときには以下のディレクトリで処理されるのが一般的。
- /usr/src/redhat/下の各サブディレクトリとテンポラリを使って処理される
- 作業ディレクトリの設定は/usr/lib/rpm下のrpmrcやmacrosファイルなどに設定されている
SPECS 各ソフトウェアのRPMを作成するためのspecファイルが保存される SOURCES 各ソフトウェアのソースファイルやパッチファイルが保存される BUILD 各ソフトウェアを構築(コンパイル等)するのに使用される作業ディレクトリ SRPMS 作成したSRPMファイルが保存される RPMS 作成したRPMファイルは該当アーキテクチャ(CPUの種類など)のサブディレクトリ以下に保存される 通常、i386/以下にRPMファイルが保存される athlon、i386、i486、i586、i686、noarch
- 今回はお題として「稼動監視ツールのnagios管理画面日本語化」を行います。
日本語版nagiosのRPM作成
nagios本体のSRPMファイル取得
- http://nagios.org/ よりファイルを取得する
日本語化パッチファイル取得
- http://nagios.x-trans.jp/ より日本語化パッチを取得する(+日本語ヘルプ)
- 取得したsrc.rpmファイルはLINUXマシンの”/usr/src/redhat/SRPMS”に格納
- 日本語化パッチと日本語ヘルプは、とりあえず”/usr/src/redhat/SOURCES”に格納
/ usr/ src/ redhat/ SOURCES/ nagios-2.6-ja.patch.gz Nagios-doc-20031021.tar.bz2 SRPMS/ nagios-2.6-1.rf.src.rpm
SRPMインストール
- 通常のRPMインストールと同様にSRPMをインストールする
$ rpm -ivh /usr/src/redhat/SRPMS/nagios-2.6-1.rf.src.rpm
- SRPMパッケージをインストールすると、ソースファイルをまとめたtarballやパッチファイルが”/usr/src/redhat/SOURCES”ディレクトリ下に、specファイルが”/usr/src/redhat/SPECS”ディレクトリ下にインストールされる。
/ usr/ src/ redhat/ SOURCES/ nagios-2.6-ja.patch.gz Nagios-doc-20031021.tar.bz2 nagios-2.6.tar.gz .... SPECS/ nagios.spec SRPMS/ nagios-2.6-1.rf.src.rpm
日本語化
- 作業ディレクトリへ移動
$ cd /usr/src/redhat/SOURCES/
- 管理画面を日本語化するためパッチファイルを解凍しておく
$ tar xzf nagios-2.6-ja.patch.gz
- インストールされたソースファイルのtarballと日本語ヘルプを解凍しオリジナルヘルプファイルと置き換える
ソースファイルの解凍 $ tar xzf nagios-2.6.tar.gz 日本語ヘルプファイルの解凍 $ tar xjf Nagios-doc-20031021.tar.bz2 日本語ヘルプファイルをオリジナルファイルに上書き $ cp -rp Nagios-doc/JAPANESE/* nagios-2.6/html/docs オリジナルファイルを削除 $ rm -f nagios-2.6.tar.gz
- ソースファイルを再圧縮しておく
$ tar czf nagios-2.6.tar.gz nagios-2.6
- 上記の解凍、圧縮の手順もがんばれば自動で可能
SPECファイル編集
コンパイル、パッケージングの設定が書いてあるSPECファイルに以下の設定を追加する
- 作成されるRPMファイル名をオリジナルのパッケージ名に変更
- 日本語化パッチの定義
- パッチの適用処理追加
・ /usr/src/redhat/SPECS/nagios.specの編集
Summary: Open Source host, service and network monitoring program Name: nagios Version: 2.6 #Release: 1.rf ↓コメント化変更 Release: 1.ja.rf ←パッケージ名変更 License: GPL Group: Applications/System URL: http://www.nagios.org/ Packager: Dag Wieers <dag@wieers.com> Vendor: Dag Apt Repository, http://dag.wieers.com/apt/ Source: http://dl.sf.net/nagios/nagios-%{version}.tar.gz Source1: http://dl.sf.net/nagios/imagepak-base.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root Patch1: nagios-2.6-ja.patch ←パッチファイル定義 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %prep %setup %patch1 -p0 ←パッチ適用処理追加 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※SPECファイルについて
* パッケージに関する情報の定義 Summary: Open Source host, service and network monitoring program Name: nagios Version: 2.6 Release: 1.rf License: GPL Group: Applications/System URL: http://www.nagios.org/ %description * パッケージ構築に必要な準備作業の処理を定義 %prepセクション ソールファイルのtarball解凍、パッチ適用 * ソフトウェアを実際にソースからコンパイルする部分までの処理を定義 %buildセクション configure、make * コンパイル済みのソフトウェアのファイルをインストールする処理を定義 %installセクション テンポラリディレクトリにファイルを配置:/tmp/~ * %installセクションでインストールされたファイルを削除する処理を定義 %cleanセクション テンポラリディレクトリを削除:/tmp/~ * インストール前に行うスクリプト処理を記述 %preセクション ユーザ追加 * インストール後に行うスクリプト処理を記述 %postセクション サービス設定・起動 * アンインストール前に行うスクリプト処理を記述 %preunセクション サービス停止 * アンインストール後に行うスクリプト処理を記述 %postunセクション 設定ファイル、テンポラリファイル削除 * 作成するRPMパッケージに含ませるファイルとその属性を定義 %filesセクション アップデート時、既存設定ファイル属性は上書きしない * パッケージに行われた重要な変更履歴を記述 %changelogセクション
RPMファイルの構築
- 編集したSPECファイルを元にRPMファイルを構築する
$ rpmbuild -bb /usr/src/redhat/SPECS/nagios.spec
- オプション
-ba バイナリパッケージ(.rpm)とソースパッケージ(.src.rpm)をビルドする。 -bb バイナリパッケージ(.rpm)だけをビルドする。 -bs ソースパッケージ(.src.rpm)だけをビルドする。
- マシンのアーキテクチャにあったRPMが無くてSRPMからカスタマイズせずにRPMを作成する場合
$ rpmbuild --rebuild /usr/src/redhat/SRPMS/nagios-2.6-1.rf.src.rpm
パッケージインストール
- 作成したRPMファイルをインストールする
$ rpm -Uvh /usr/src/redhat/RPMS/i386/nagios-2.6-1.ja.rf.i386.rpm
Nagiosを再起動する
# service nagios restart
サーバ稼働状況を確認する
RPMをマスターする
今回は、提供されているSRPMを元にRPMを作成しましたが、ソースファイルのtarballとコンパイル,パッケージングの設定が書いてあるSPECファイルがあればRPM化が可能です。
マイナーバージョンアップ
- 旧バージョンでSRPMが提供されている場合などは新バージョンのソースと入れ替えるだけで作成可能。
- アップデート内容、パッチの内容など把握しておく必要がある
開発元から提供
- Apacheなどはソースファイルのtarballにspecファイルが含まれておりRPM化が容易に行える
- configureオプションやコンパイルオプション、ディレクトリ構成などを使用しているディストリビューションに合わせないと大変なことになります。
SPECファイルを自力で作成
- 肝となるSPECファイルを作成しRPM化
- SPECファイル設定の挙動を完全に把握しないと取り返しのつかないことになります。
ディストリビューション間のパッケージ変換
debian用に公開されているdebファイルはrpmファイルと比べるとはるかに多いので必要なソフトウェアのrpmが無い場合は以下のツールで変換してインストールすることができる
- debian系とRedHat系ではディレクトリ構成などなどが異なるので注意が必要
Alien
- alien:エイリアン
- rpm→deb、deb→rpmなどが可能
構文:alien [コンバート形式] [オプション] ファイル名... コンバート形式: --to-deb:RPMパッケージからDebianパッケージに変換 --to-rpm:DebianパッケージからRPMパッケージに変換 オプション: -i:作成したパッケージをインストールする 使用例: RPMパッケージからDebianパッケージに変換してインストールする alien --to-deb -i s1-3.03-2.i386.rpm RPMパッケージからDebianパッケージに変換する alien --to-deb s1-3.03-2.i386.rpm DebianパッケージからRPMパッケージに変換する alien --to-rpm s1-3.03-2.i386.deb