次のページ 前のページ 目次へ

8. 依存性(dependencies)について

8.1 依存性(dependencies)

これは非常にばかげた例ですが、先程例に上げた 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.003b5.003 よりも新しいと判断されてしまいます。 このような事態を回避するために、パッケージにシリアル番号を 付けておく事が出来ます。

Serial: 19
このシリアル番号を持つパッケージを Requires: で指定 するには
Requires: perl =S 19
とします。

8.2 仮想パッケージ

ここで、あるパッケージを使用するにはなんらかの fortran コンパイラが必要であるが、コンパイラ自体は fort77(をコンパイラと呼ぶなら) でも g77 でも良いという場合を想像してみましょう。 こういう場合には、個々のパッケージ (fort77 又は g77) を指定する代わりに 「なんらかの fortran コンパイラ」として仮想的な パッケージを Requires: に指定する事も出来ます:

Requires:  fortran
この時は、fort77 又は g77 パッケージに
Provides:  fortran
という指定がなされていて、且つそれらのいずれがインストール されていれば、依存性が満たされ、これに依存するパッケージを 正常にインストール(して使用)する事が出来ます。

8.3 依存性関係の自動的な追加

しかし、便利な依存性関係も、いちいち全て Requires: で指定しなくてはならないとしたら、たまったもんではありません。 また、そのパッケージが依存するパッケージをいちいち手で調べて追加 していくのも容易ではありません。

そこで、RPM は、パッケージのファイルリスト中に共有ライブラリ を必要とするものがあった場合は、(その so 名が) Requires: に指定されているものと見做してそのパッケージ の依存性リストに自動的に追加して行きます。 また、逆にそのパッケージが供給する共有ライブラリの so 名も自動的に追加されます。


次のページ 前のページ 目次へ