依存情報の記述に関する詳細
- III.9.1. Requires
- III.9.2. Provides
- III.9.3. BuildRequires
- III.9.4. BuildPrereq
III.9.1. Requires
Requires には、従来の Requires: だけではなく Requires(pre): などのように ( ) をつけて厳密に指定することもできるようになりました。
( ) の中には表 III.9-1にあるものが入ります。 ( ) の中に入る項目は セクション II.5.2 - スクリプト部 のタグ等に対応しています。どの部分で必要になるかを書きます。
Requires( ): のように ( ) の中に何も書かなかった場合は、Requires: として扱われます。
( ) の中は、Requires(pre,preun,post,postun): のように , を用いることで複数を同時に指定できます。
項目 | 対応するタグ等 |
---|---|
pre | %pre で必要になるもの |
preun | %preun で必要になるもの |
post | %post で必要になるもの |
postun | %postun で必要になるもの |
prereq | インストール時に必要になるもの |
verify | %verifyscript で必要になるもの |
interp | スクリプト部を解釈(interpret)するために必要になるもの |
rpmlib | rpmのデータベース等を扱うために必要なもの |
Requires(pre): などを指定した場合には、インストール、アンインストールされる順番が保証されます。 指定されたパッケージは先にインストールされ、後にアンインストールされます。
prereq は pre,preun,post,postun などよりも曖昧な書き方ですが、以前 PreReq で書かれていたものを Requires に機械的に置き換える場合には利用できると思います。
rpmlib については、通常、build 時に自動的に追加されるものなので、特別な機能を利用するのでなければ、記述する必要はありません。
interp も、自動的に追加されますが、特別な shell などを利用する場合には記述しておいた方がよいでしょう。
III.9.2. Provides
日本語化されたgsであるgsjというパッケージがあるとします。 このパッケージはもともとのgsと同等の機能を持っています。 インストールしたいhoge-1.1-2.rpmがgsを必要(Requires)としてるとしましょう。 しかし、gsjがインストールされているためにgsはインストールされていません。 このとき、hoge.rpmをインストールしようとするとrpmコマンドは gsが無いためにエラー・メッセージを出します。
このようなトラブルをさけるためには、gsjを作るときに、
Provides: gs
また、あるパッケージ A がpdfを読むツールをRequiresするときに、 xpdf と gs(pdf対応) のように複数の選択肢がある場合、 xpdf と gs の Providesに
Provides: pdf-reader
III.9.3. BuildRequires
コンパイラなどのパッケージや、 ヘッダーファイルやライブラリなどを含んだ hoge-devel などのパッケージで不足するものがないか確認しましょう。
また、Source: で指定されたファイルが hoge.zip のように zip 形式の場合は、 ソースの展開に unzip のパッケージが、 同様に lzh 形式なら lha のパッケージが必要になります。
Vine Linux では build-essential という仮想パッケージがあり、 このパッケージをインストールすることでたくさんのパッケージがインストールされます。 参照 環境設定
パッケージの作成時には build-essential をインストールすることを前提としているので、 build-essential に含まれている make,gzip,bzip2,tar,patch,findutils,coreutils,file,libtool,automake,autoconf などは省略してかまいません。 gcc や gettext などは、ソースが C言語であることや、メッセージが国際化されていることなどを示す意味もあるので、必要であれば書いておいた方がいいかもしれません。
%prep,%setup,%build,%install で必要になるコマンドやパッケージを指定します。
Requires( ): と同じように、BuildRequires も ( ) をつけて詳細な指定をすることができます。
( ) の中には表 III.9-2にあるものが入ります。 ( ) の中に入る項目は セクション II.5.2 - スクリプト部 のタグ等に対応しています。どの部分で必要になるかを書きます。
III.9.4. BuildPrereq
BuildRequiresと同様にパッケージの作成の時に必要になるパッケージを書きます。 BuildRequiresとの違いは必要とするパッケージを作成する順番を決めるということです。
BuildRequiresと同様、BuildPrereq(prep) のように prep,build,install,clean を指定できます。
A というパッケージがパッケージ作成時に B と C の二つのパッケージを必要としているとします。 この場合 B と C をインストールすれば、A というパッケージを作成することができます。
このときに B と C のパッケージがなくて、それぞれ作る必要があったとします。 B と C がそれぞれ独立したものではなく、C のパッケージ作成時に B が必要で、 できあがった C は B の特定のバージョンを必要とするパッケージになるということがあります。 このような場合には BuildPrereq に B を BuildRequires に C を指定し、 B を C よりも先に作成する必要があるということを示しておきます。