パッケージ管理システム

  • 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.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
  • このエントリーをはてなブックマークに追加
Feedforce Developer Blog

新しいブログへ移行しました!こちらもよろしくお願いします。