エンタープライズ:特集 2003/09/26 18:00:00 更新


特集:第2回 RPM活用のステップアップ−SRPMリビルドとコンパイルマスター (2/6)

手始めは最も簡単なリビルド操作をしてみよう

 src.rpmから新しいバイナリパッケージを作るという作業は、1つのコマンドで処理可能だ。

# rpmbuild --rebuild srcパッケージ名

 これだけでよい。実際の例を見ると、次のような表示になる。

# rpmbuild --rebuild autofs-3.1.7-36.src.rpm

〜中略〜

Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHave
Prefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/autofs-tmp
書き込み中: /usr/src/redhat/RPMS/i386/autofs-3.1.7-36.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/autofs-debuginfo-3.1.7-36.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.37796

〜以下略〜

 この操作だけで利用するのは、次のような条件下である。

  • 確実にコンパイルできることが分かっている。
  • 基幹ライブラリをアップデートしたのでバイナリを最適化したい。
  • パッケージ作成オプションを変更したので、適合するバイナリにしたい。

 このような目的であれば上記の方法で十分だ。この一連の操作を「パッケージのリビルド」と呼ぶ。

パッケージの新規コンパイル

 一方、パッケージの内容をカスタマイズしたり、コンパイルが成功するかどうか分からない場合には、SPECファイルやソースファイルの修正が必要となる。その際には、src.rpm内のファイルを編集する必要があるため、いちどインストールを行う。方法は通常のRPMパッケージのインストール手順と同じだ。

 このsrc.rpm形式のパッケージをインストールすると、Red Hat Linuxの場合には、/usr/src/redhat/ディレクトリ下(開発用ディレクトリ)に各種のファイルが置かれる(他ディストリビューションでは、/var/src/ディレクトリ下などが利用されることも多い)。このディレクトリは、以下のような構造だ。

/usr/src/redhat/

/BUILD 作業用一時ディレクトリ

/RPMS 作成したパッケージのアーキテクチャ別保管場所

 /athlon、/i386、/i486、/i586、/i686

/SOURES ソースtarファイル展開ツリー

 /SPECS RPM作成用SPECファイル

 /SRPMS 作成したSRPMSパッケージの保管場所

 src.rpmをインストールしたら、/SPECS以下にパッケージのSPECファイルが配置されているはずだ。

# rpm -ivh balsa-2.0.6-1.src.rpm
 1:balsa ########################################### [100%]

# ls /usr/src/redhat/SPECS/
balsa.spec


One Point:
src.rpmは、インストールしても/usr/src/reedhat/ディレクトリ下にファイルが置かれるだけのため、システムそのものに影響はない。

 次にコンパイルと呼ぶ作業を行う。上記のリビルドやこのコンパイルという手順は、従来rpmコマンドに続けて「--rebuild」や「-b」というオプションを使ってきた(バージョン3まで)。しかし、最近のバージョン4では、rpmコマンドからパッケージ作成機能は除外されており「Unknown Option」とエラーになってしまう。この場合、パッケージ作成専用の「rpmbuild」というコマンドを使用すればよい。

 rpmbuildでパッケージを作成するには、「-b」オプションと、どのようなパッケージ作成を行うかを決めるオプションを組み合わせる。その後、パッケージのSPECファイル名を指定する。

オプション(パラメータ)
内     容
p
ソースコードにパッチをあてる
l
パッケージに必用なファイルが揃っているかチェックする
c
コンパイルを行う
i
インストールを行う
b
バイナリパッケージだけを作成する
s
src.rpmを構築する
a
バイナリパッケージとsrc.rpmパッケージの両方を作成する

 これは上記のものから順に実行されていく。もし「-bc」とすればコンパイルまででインストールやパッケージの作成は行われない。「-ba」とすればパッチ当てから2つのパッケージの作成まですべてを実行する。

 自ディストリビューションが公式に提供するsrc.rpm形式のファイルであれば、直接「-ba」を実行してもそのままコンパイルでき、何ごともなくパッケージが作成できるだろう。作成されたパッケージは/usr/src/redhat/RPM/i386/下にバイナリパッケージ、/usr/src/redhat/SRPM/下に新しいsrc.rpmが再構築される。以下は、例としてgv(グラフィックビューア)を最後までリビルドしたものだ。

# rpmbuild -ba /usr/src/redhat/SPEC/gv.spec

〜中略〜

Obsoletes: ghostview
Processing files: gv-debuginfo-3.5.8-22
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/gv-root
書き込み中: /usr/src/redhat/SRPMS/gv-3.5.8-22.src.rpm
書き込み中: /usr/src/redhat/RPMS/i386/gv-3.5.8-22.i386.rpm
書き込み中: /usr/src/redhat/RPMS/i386/gv-debuginfo-3.5.8-22.i386.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.15529

〜以下略〜

 しかし、上記のようにストレートにコンパイル、パッケージ作成ができることはあまりない。途中でコンパイルエラーが表示されたり、パッケージ作成に失敗することもある。他のディストリビューション向けのsrc.rpmをリビルドはもちろん、大規模なパッケージのリビルドは一筋縄でいかないことが多いのだ。

 そのような場合、SPECファイルや環境の調整が必要になってくる。同時に、SPECファイルの調整で既存のRPMパッケージにはないコンパイルオプションを利用、カスタマイズすることもできるようになる。

前のページ | 1 2 3 4 5 6 | 次のページ

[渡辺裕一,ITmedia]