エンタープライズ:特集 | 2003/10/17 11:50:00 更新 |
特集:第3回 tarボールからRPMパッケージを作るコツ (1/3)
緊急のセキュリティパッチ適用には、ディストリビュータのRPM配布を待っていられない。そんな時にも後々のアップデートの手間を考えれば、RPMでの管理を放棄するのは悩みどころだ。特集最終回では、このようなケースの解決策を解説する。
この特集「リファレンスRPM」の第2回目でも解説したように、Linuxでソフトウェア管理が容易なパッケージ「RPM」を作成するためには、「コンパイルを行わせるためのSPECファイル」が必要となる。しかし、このSPECファイルの作成は変数とm4マクロ定義に関する知識が不可欠であり、かなり難易度の高い作業だ。このため、積極的にSPECファイルを触るというユーザーが多くない理由のひとつだと思われる。今回は、そのような背景ではあるものの、比較的容易な方法でtarボールからRPMパッケージを作成する方法について紹介していこう。RPMの概要については、第1回目を参考にしてほしい。
|
最近見られるSPECファイルを含むtarボールの配布
SRPMパッケージ(src.rpmファイル)の中身は、tarボールとSPECファイルで構成され、そのSPECファイル内に「./configure」実行時の設定や「RPMにパッケージする際に必要な情報」、インストール時の「プレ/アフター処理作業」が含まれていることを第2回目で解説した。
しかし最近では、RPMとは別にソースコード配布が前提のtarボール内でも、SPECファイルが含まれていることがある。そのようなtarボールは、rpmbuildコマンドの「-t」オプションに続き指定することで、直接RPMパッケージを作成することが可能なのだ。オプションは「-b」と同等であり、以下のようになっている。
|
その違いは引数であるが、SPECファイルsrc.rpmか、tarボールかの違いであり使い方は同じだ。例えば、すべてコンパイルしてバイナリパッケージとソースパッケージを作成するのであれば、以下のように指定すればよい。
# rpmbuild -ta libglade-2.0.0.tar.gz |
tarボール内にSPECファイルが含まれていることが分かっていれば、これだけでsrc.rpmと同様にパッケージ作成が始まる。ただしsrc.rpmと同様、コンパイルがスムーズに成功するかどうかは時と場合による。そのため、SPECファイルや内部ソースを調整しながら作業を進めた方が確実なのだ。
その場合には、いちどtarボールを解凍して含まれるSPECファイルを/usr/src/redhat/SPECS/に用意しよう。そして元々のtarボールのファイルは、/usr/src/redhat/SOURCE/に置けばよい。次のような操作だ。
# tar xvfz glade-2.0.0.tar.gz # cp glade-2.0.0/glade.spec /usr/src/redhat/SPECS # cp glade-2.0.0.tar.gz /usr/src/redhat/SOURCES |
後のコンパイル作業は、第2回目で解説したsrc.rpmと同じである。「rpmbuild -bp /usr/src/redhat/SPECS/glade.spec」と指定して作業を始め、コンパイルが行えるようになるまでSPECファイルやソースを調整していく。
あくまで一般論だが、tarボールに含まれるSPECファイルは特定のディストリビューションを前提としておらず、ディストリビューション固有のマクロ、環境変数が用いられることが少ない。そのため、「BuildRoot」値によるディレクトリ指定や、実際にインストールされる「%Prefix」値などは前もって確認しておくべきだろう。
最低限把握すればよいSPECファイル内変数はそれほど多くない
例えば、SPECファイル中に以下のような記述があったとしよう。
%define name glade2 %define ver 2.0.0 %define RELEASE SNAP %define rel %{?CUSTOM_RELEASE} %{!?CUSTOM_RELEASE:%RELEASE} %define prefix /usr ←※1 %define sysconfdir /etc ←※2 %define skreq 0.1.4 |
上記リスト内の「%define」とは、マクロ変数を設定するためのものであり、この例ではベースとなる「prefix」は「/usr」(※1)、システム設定ファイルを置く「sysconfdir」値には「/etc」が設定される(※2)。これより後、「%{prefix}」などのマクロ変数部分にはこれらの値が代入されることになる。
BuildRoot: /var/tmp/glade-%{ver}-root Docdir: %{prefix}/doc |
上の「%define」記述の後にこのような設定があれば、それぞれ次のように代入される。
BuildRoot: /var/tmp/glade-%{ver}-root → BuildRoot: /var/tmp/glade-2.0.0-root Docdir: %{prefix}/doc → Docdir: /usr/doc |
[渡辺裕一,ITmedia]