これは非常にばかげた例ですが、先程例に上げた
plain2-2.54-3.spec
で作られるサブパッケージ
plain2-docs-2.54-3.i386.rpm
に含まれる
ファイルは plain2
で加工してはじめて
TeX のファイルとなるため、
plain2-2.54-3.i386.rpm
(plain2
本体)が
インストールされていなければなりません。
このような場合には、spec
ファイル中に
Requires: plain2
と記しておけば、「plain2-docs-2.54-3.i386.rpm
を
インストールするためには plain2
というパッケージが
インストールされていなくてはいけない」という依存性関係を明示
しておく事が出来ます。
もし plain2
がインストールされていないのに
plain2-docs
をインストールしようとすると、
[root@Flux i386]# rpm -ivh plain2-docs-2.54-3.i386.rpm
failed dependencies:
plain2 is needed by plain2-docs-2.54-3
と表示され、インストールは行なわれません。(依存性関係を無視して
無理矢理インストールしてしまう事も出来る事は出来ます。)
(注 : この様に、サブパッケージで Requires:
にメイン
パッケージを指定する事も出来ます。)
Requires:
の指定にはバージョン番号を含める事も出来ます。
例えば:
Requires: perl >= 5.003
同時に複数のパッケージを Requires:
に指定する事も出来ます:
Requires: perl >= 5.003, python
(注 : 複数パッケージの区切りは `,' でも ` ' (空白)でも良いそうです。)
ところで、RPM 中のバージョン番号の新旧判断アルゴリズムは大抵の
場合うまく働きますが、β版である事を示すために b
が付けられている場合もあり、この時は例えば 5.003b
は
5.003
よりも新しいと判断されてしまいます。
このような事態を回避するために、パッケージにシリアル番号を
付けておく事が出来ます。
Serial: 19
このシリアル番号を持つパッケージを Requires:
で指定
するには
Requires: perl =S 19
とします。
ここで、あるパッケージを使用するにはなんらかの
fortran
コンパイラが必要であるが、コンパイラ自体は
fort77
(をコンパイラと呼ぶなら) でも g77
でも良いという場合を想像してみましょう。
こういう場合には、個々のパッケージ (fort77
又は
g77
) を指定する代わりに
「なんらかの fortran
コンパイラ」として仮想的な
パッケージを Requires:
に指定する事も出来ます:
Requires: fortran
この時は、fort77
又は g77
パッケージに
Provides: fortran
という指定がなされていて、且つそれらのいずれがインストール
されていれば、依存性が満たされ、これに依存するパッケージを
正常にインストール(して使用)する事が出来ます。
しかし、便利な依存性関係も、いちいち全て Requires:
で指定しなくてはならないとしたら、たまったもんではありません。
また、そのパッケージが依存するパッケージをいちいち手で調べて追加
していくのも容易ではありません。
そこで、RPM は、パッケージのファイルリスト中に共有ライブラリ
を必要とするものがあった場合は、(その so
名が)
Requires:
に指定されているものと見做してそのパッケージ
の依存性リストに自動的に追加して行きます。
また、逆にそのパッケージが供給する共有ライブラリの
so
名も自動的に追加されます。