| 1 | [wiki:docs Vine Linux ドキュメント] / [wiki:../ RPM パッケージの作成方法] / 依存情報の記述に関する詳細 |
| 2 | |
| 3 | = 依存情報の記述に関する詳細 = |
| 4 | |
| 5 | == Requires == |
| 6 | |
| 7 | Requires には、従来の Requires: だけではなく Requires(pre): などのように ( ) をつけて厳密に指定することもできるようになりました。 |
| 8 | |
| 9 | ( ) の中には表 III.9-1にあるものが入ります。 ( ) の中に入る項目は[wiki:../make-spec#スクリプト部 スクリプト部]のタグ等に対応しています。どの部分で必要になるかを書きます。 |
| 10 | |
| 11 | Requires( ): のように ( ) の中に何も書かなかった場合は、Requires: として扱われます。 |
| 12 | |
| 13 | ( ) の中は、Requires(pre,preun,post,postun): のように , を用いることで複数を同時に指定できます。 |
| 14 | |
| 15 | ||= 項目 =||= 対応するタグ等 =|| |
| 16 | ||pre ||%pre で必要になるもの|| |
| 17 | ||preun ||%preun で必要になるもの|| |
| 18 | ||post ||%post で必要になるもの|| |
| 19 | ||postun||%postun で必要になるもの|| |
| 20 | ||prereq||インストール時に必要になるもの|| |
| 21 | ||verify||%verifyscript で必要になるもの|| |
| 22 | ||interp||スクリプト部を解釈(interpret)するために必要になるもの|| |
| 23 | ||rpmlib||rpmのデータベース等を扱うために必要なもの|| |
| 24 | |
| 25 | Requires(pre): などを指定した場合には、インストール、アンインストールされる順番が保証されます。指定されたパッケージは先にインストールされ、後にアンインストールされます。 |
| 26 | |
| 27 | prereq は pre,preun,post,postun などよりも曖昧な書き方ですが、以前 !PreReq で書かれていたものを Requires に機械的に置き換える場合には利用できると思います。 |
| 28 | |
| 29 | rpmlib については、通常、build 時に自動的に追加されるものなので、特別な機能を利用するのでなければ、記述する必要はありません。 |
| 30 | |
| 31 | interp も、自動的に追加されますが、特別な shell などを利用する場合には記述しておいた方がよいでしょう。 |
| 32 | |
| 33 | == Provides == |
| 34 | |
| 35 | 日本語化された gs である gsj というパッケージがあるとします。 このパッケージはもともとの gs と同等の機能を持っています。インストールしたい hoge-1.1-2.rpm が gs を必要(Requires)としてるとしましょう。 しかし、gsj がインストールされているために gs はインストールされていません。 このとき、hoge.rpm をインストールしようとすると rpm コマンドは gs が無いためにエラー・メッセージを出します。 |
| 36 | |
| 37 | このようなトラブルをさけるためには、gsj を作るときに、 |
| 38 | {{{ |
| 39 | #!sh |
| 40 | Provides: gs |
| 41 | }}} |
| 42 | と書いておくと、gsj は gs パッケージを提供することができます。 |
| 43 | |
| 44 | また、あるパッケージ A が pdf を読むツールを Requires するときに、 xpdf と gs(pdf対応) のように複数の選択肢がある場合、 xpdf と gs の Providesに |
| 45 | {{{ |
| 46 | #!sh |
| 47 | Provides: pdf-reader |
| 48 | }}} |
| 49 | と仮想的なパッケージ名(仮想パッケージ virtual package)を書いておいて、 A で Requires: pdf-reader としておけば、パッケージ名を限定せずに、 なんらかの pdf-reader がインストールされてることを要求できます。 たとえば emacs lisp のパッケージでは emacs や xemacs ではなく emacsen という仮想パッケージを要求するものが多いです。 |
| 50 | |
| 51 | == !BuildRequires == |
| 52 | |
| 53 | コンパイラなどのパッケージや、 ヘッダーファイルやライブラリなどを含んだ hoge-devel などのパッケージで不足するものがないか確認しましょう。 |
| 54 | |
| 55 | また、Source: で指定されたファイルが hoge.zip のように zip 形式の場合は、 ソースの展開に unzip のパッケージが、 同様に lzh 形式なら lha のパッケージが必要になります。 |
| 56 | |
| 57 | Vine Linux では build-essential という仮想パッケージがあり、 このパッケージをインストールすることでたくさんのパッケージがインストールされます。 |
| 58 | |
| 59 | パッケージの作成時には build-essential をインストールすることを前提としているので、 build-essential に含まれている make, gzip, bzip2, tar, patch, findutils, coreutils, file, libtool, automake, autoconf などは省略してかまいません。 gcc や gettext などは、ソースが C言語であることや、メッセージが国際化されていることなどを示す意味もあるので、必要であれば書いておいた方がいいかもしれません。 |
| 60 | |
| 61 | %prep, %setup, %build, %install で必要になるコマンドやパッケージを指定します。 |
| 62 | |
| 63 | Requires( ): と同じように、!BuildRequires も ( ) をつけて詳細な指定をすることができます。 |
| 64 | |
| 65 | ( ) の中には下の表にあるものが入ります。 ( ) の中に入る項目は[wiki:../make-spec#スクリプト部 スクリプト部]のタグ等に対応しています。どの部分で必要になるかを書きます。 |
| 66 | |
| 67 | ||= 項目 =||= 対応するタグ等 =|| |
| 68 | ||prep ||%prep,%setup で必要になるもの|| |
| 69 | ||build ||%build で必要になるもの|| |
| 70 | ||install||%install,%check で必要になるもの|| |
| 71 | ||clean ||%clean で必要になるもの|| |
| 72 | |
| 73 | == !BuildPrereq == |
| 74 | |
| 75 | !BuildRequires と同様にパッケージの作成の時に必要になるパッケージを書きます。!BuildRequires との違いは必要とするパッケージを作成する順番を決めるということです。 |
| 76 | |
| 77 | !BuildRequires と同様、!BuildPrereq(prep) のように prep, build, install, clean を指定できます。 |
| 78 | |
| 79 | A というパッケージがパッケージ作成時に B と C の二つのパッケージを必要としているとします。この場合 B と C をインストールすれば、A というパッケージを作成することができます。 |
| 80 | |
| 81 | このときに B と C のパッケージがなくて、それぞれ作る必要があったとします。 B と C がそれぞれ独立したものではなく、C のパッケージ作成時に B が必要で、 できあがった C は B の特定のバージョンを必要とするパッケージになるということがあります。このような場合には !BuildPrereq に B を !BuildRequires に C を指定し、 B を C よりも先に作成する必要があるということを示しておきます。 |