[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ next ]
Debian ポリシーマニュアル
Appendix C - ソースパッケージ (旧 Packaging Manual より)
Debian バイナリパッケージは Debian ソースから生成されます。 Debian ソースはバイナリパッケージを簡単に、かつ自動的に構築しやすいように特殊な形式になっています。
C.1 ソースパッケージを処理するためのツール
ソースパッケージを扱うために様々なツールが提供されています。 これらはソースをパックやアンパックしたり、バイナリパッケージの構築や新しいバージョンのディストリビューションを扱うのを手助けしたりします。
ここではこれらのツールの紹介と典型的な用途を説明します。
引数や動作についての完全な文書は dpkg-source(1) を見て下さい。
Debian ソースパッケージをどうやって作るかの例と、 Debian
ソースパッケージからどの様にこれらのユーティリティを使うかについては、例題パッケージである
hello を見て下さい。
C.1.1 dpkg-source - Debian ソースパッケージの パックとアンパック
このプログラムは手動でよく使われます。また、 dpkg-buildpackage
の様なパッケージに依存しない自動構築スクリプトからも呼び出されます。
パッケージをアンパックするには次のようにコマンドを実行します。
dpkg-source -x .../path/to/filename.dsc
この時、filename.tar.gz と、もし存在するなら
filename.diff.gz
は同じディレクトリに置いておきます。これにより
package-version
ディレクトリにソースをアンパックし、必要に応じて
package-version.orig
をカレントディレクトリにアンパックします。
パックされたソースアーカイブを作るには、次のコマンドを実行します。
dpkg-source -b package-version
これにより、.dsc、.tar.gz と、もし必要なら
.diff.gz がカレントディレクトリに作られます。
dpkg-source は最初にソースツリーに clean
を行ないません。必要な場合は別にやっておく必要があります。
Source packages as archives, Section C.3 も見て下さい。
C.1.2 dpkg-buildpackage - 全体的なパッケージ構築の制御スクリプト
dpkg-buildpackage は、dpkg-source、
debian/rules の clean、build、
binary の各ターゲット、dpkg-genchanges
を呼びだし、最後に gpg (または pgp)
を呼んで署名済のソースパッケージおよびバイナリパッケージを作成しアップロードします。
このコマンドは、通常、すでに構築されている、あるいは未構築のソースディレクトリのトップレベルで手動で実行します。 引数なしで呼び出してもかまいません。よく使う引数は次の通りです。
- -uc, -us
-
それぞれ、
.changesファイル、ソースパッケージの.dscファイルにサインをしないという指示です。 - -psign-command
-
sign-command を
PATHで見つかる gpg または pgp の代わりに呼び出します。 sign-command は gpg またはpgpと全く同じ動作をしなくてはなりません。 - -rroot-command
-
root 特権が必要な時、root-command というコマンドを呼び出します。root-command は第 1 引数をコマンドとして、必要ならば
PATHから呼び出し、第 2 引数以降を呼び出したコマンドに渡さなければいけません。 root-command が与えられなかった場合は、 dpkg-buildpackage は root 特権を得るための特別な動作をしません。 そのため、ほどんどのパッケージでは dpkg-buildpackage を root として実行しなければなりません。 - -b, -B
-
2 種類の、バイナリのみの構築とアップロード -
dpkg-source(1)を見て下さい。
C.1.3 dpkg-gencontrol - バイナリパッケージコントロールファイルの生成
このプログラムは通常ソースツリーのトップレベルで debian/rules (Debian パッケージソースツリー, Section
C.2を見て下さい) から呼び出されます。
これは通常、パッケージが構築されている一時的なディレクトリツリー中のファイルやディレクトリの許可属性や所有権を設定したあと、パッケージが
dpkg-deb を用いて構築される直前に [107] 行なわれます
dpkg-gencontrol
は、パッケージに入るファイルが一時的な構築ディレクトリの中に全て置かれた後で呼ばれなければなりません。
パッケージがインストールされた時のサイズの計算を正確にするためです。
また、dpkg-gencontrol は dpkg-shlibdeps
の後で実行する必要があります。debian/substvars 中で
dpkg-shlibdeps が行った 変数置換 (variable substitutions)
を反映できるようにするためです。
ソースパッケージのトップから相対パスで debian/tmp
にあるファイルからバイナリパッケージを一つだけ作成する場合は、通常
dpkg-gencontrol を呼び出せば十分です。
複数のバイナリを構築するソースでは、一般に次のようにする必要があります。
dpkg-gencontrol -Pdebian/tmp-pkg -ppackage
-P は dpkg-gencontrol
にパッケージをデフォルト以外のどのディレクトリで構築するかを伝え、
-p
はどのパッケージのコントロールファイルを生成するべきかを伝えます。
dpkg-gencontrol は (例えば) dpkg-genchanges
を将来呼び出すときのために debian/files
中のファイルのリストに情報を加えることもします。
C.1.4 dpkg-shlibdeps - 共有ライブラリの依存関係の算定
通常、このプログラムは dpkg-gencontrol (Debian パッケージソースツリー, Section C.2 を参照)
の直前に、ソースツリーのトップレベルで debian/rules
から呼ばれます。
このプログラムの引数は、バイナリパッケージのコントロールファイルに共有ライブラリの依存関係を含める必要のある実行形式および共有ライブラリ [108] です。
検索された共有ライブラリが Recommends や Suggests のみを保証すべき場合や、Pre-Depends を保証すべき場合は、 それらの実行形式の前に -ddependency-field オプションをつけてこれを指示しなければなりません (各 -d オプションは次の -d が現れるまで有効です)。
dpkg-shlibdeps
は出力されるコントロールファイルを直接修正することはしません。
代わりに、デフォルトでは shlibs:Depends の様な変数の設定を
debian/substvars というファイルに加えます。
ソースコントロールファイルにはバイナリパッケージ毎にセクションがありますが、
これらの変数の設定は適切なセクションの依存関係フィールドから参照しなければなりません。
例えば、依存関係を必要 (depend) とする主要部と、依存関係として
"Recommendation"
のみを必要とするオプション部を生成するパッケージでは、これらの二種類の依存関係を二つの異なったフィールドとして分離します
[109]。この場合、debian/rules
では以下のように書きます。
dpkg-shlibdeps -dDepends プログラム 他のプログラム ... \
-dRecommends オプション部 他のオプション部
そしてメインコントロールファイル debian/control
で次のように書きます。
...
Depends: ${shlibs:Depends}
Recommends: ${shlibs:Recommends}
...
あるソースが提供する (複数の)
バイナリパッケージが共有ライブラリに対して異なった依存要求を持つ場合は、
-pvarnameprefix オプションを利用することが出来ます。
このオプションはデフォルトの shlibs: プレフィックスを上書きします
(このオプションを設定する毎に dpkg-shlibdeps
を一回実行します)。それによって、
varnameprefix:dependencyfield
という形式で依存変数の集合を幾つか作ることが出来ます。
これはバイナリパッケージコントロールファイルで適宜参照されます。
C.1.5 dpkg-distaddfile - debian/files へのファイルの追加
幾つかのパッケージのアップロードではソースパッケージやバイナリパッケージ以外のファイルを含める必要があります。
dpkg-distaddfile は debian/files
ファイルにファイル記述を加えます。 dpkg-genchanges
が実行されたときに .changes
にそのファイルが含まれるようにする為です。
これは通常、debian/rules の binary
ターゲットで呼び出されます:
dpkg-distaddfile filename section priority
filename は dpkg-genchanges
がそのファイルを見つけると思われるようなディレクトリ -
これは通常ソースツリーのトップレベルの上のディレクトリ -
に対する相対ファイル名です。debian/rules のターゲットは
dpkg-distaddfile
が呼ばれる直前か直後にそのファイルをその場所に置かねばなりません。
section と priority は、生成される .changes
ファイルに変更されずに渡されます。
C.1.6 dpkg-genchanges - アップロードコントロールファイル .changes の生成
通常、このプログラムはパッケージに依存しない dpkg-buildpackage
の様な自動構築スクリプトから呼び出されますが、手動で呼びだすこともあります。
このプログラムは通常、構築されたソースツリーのトップレベルで呼び出されます。
引数をつけずに呼び出した場合は、ソースパッケージの変更履歴ファイル、コントロールファイルの情報と、構築されているバイナリパッケージ、ソースパッケージの情報に基づいて、簡単な
.changes ファイルを書きだします。
C.1.7 dpkg-parsechangelog - changelog の解析結果の生成
このプログラムは dpkg-source などで内部的に用いられます。
debian/rules や他の場所で使われるかもしれません。 変更履歴
(デフォルトでは debian/changelog)
を解析し、そこに含まれる情報をコントロールファイル形式の表現で標準出力に出力します。
C.1.8 dpkg-architecture - パッケージを構築するシステム、あるいはホストシステムについての情報
このプログラムは手動で使用することもできますが、 dpkg-buildpackage
や debian/rules によっても起動されます。
そこでは、パッケージを構築するマシンのアーキテクチャ、あるいはホストのアーキテクチャを示す環境変数や
make 変数を設定します。
これらの変数は、パッケージ構築過程において必要なものです。
C.2 Debian パッケージソースツリー
以降で述べるソースアーカイブの構成は、関連した制御情報をもつ Debian パッケージソースツリーが容易に再現され、容易に持ち運べるようにすることを意図したものになっています。 Debian パッケージソースツリーは、オリジナルのプログラムにパッケージ化の工程の為のファイルを付け、 残りのソースコードとインストールスクリプトに必要な変更を加えたものです。
Debian のために作られた特別なファイルは、 Debian
パッケージソースツリーのトップレベルの debian
ディレクトリに置かれます。
C.2.1 debian/rules - メイン構築スクリプト
debian/rules -
メイン構築スクリプト, Section 4.9 を参照ください。
C.2.2 debian/control
ソースパッケージコントロールファイル
-- debian/control, Section 5.2 を参照ください。
C.2.3 debian/substvars と変数の置換
変数置換: debian/substvars,
Section 4.10 を参照ください。
C.2.4 debian/files
debian/files, Section
4.12 を参照ください。
C.2.5 debian/tmp
binary
ターゲットによってバイナリパッケージを構築する際に標準的に使用される一時的ディレクトリです。
パッケージ構築の際は、tmp
ディレクトリがファイルシステムツリーのルートになります
(例えば、パッケージに付属する makefile の install
ターゲットを使用するときや、出力をリダイレクトする場合です)。
また、DEBIAN サブディレクトリを含みます。 パッケージファイルの作成 -
dpkg-deb, Section B.1 をご覧ください。
同じソースツリーから複数のバイナリパッケージが生成されるときは、通常複数の
debian/tmpsomething ディレクトリを使用します。
例えば、tmp-a や tmp-doc といった具合です。
binary によって、どんな tmp
ディレクトリが作成されたとしても、もちろん、clean
ターゲットによって削除されなければいけません。
C.3 Source packages as archives
FTP サイトにおいてある様に、Debian ソースパッケージは 3 つの関連したファイルから成ります。 これら 3 つのファイルは、正しいバージョンのものを入手しないと利用することが出来ません。
- Debian ソースコントロールファイル - .dsc
-
このファイルは一連のフィールドを含んでいて、各フィールドはバイナリパッケージのコントロールファイルと同様に識別され分離されています。 Debian ソースコントロールファイル -- .dsc, Section 5.4 を参照ください。
- もとのソースアーカイブ
package_upstream-version.orig.tar.gz -
このファイルは、プログラムの上流の作者からのソースコードを含む
tar(gzip -9 されている) です。
- Debian パッケージの diff ファイル
package_upstream_version-revision.diff.gz -
このファイルは、オリジナルソースを Debian ソースに変換するのに必要な変更を行なうための unified context diff (diff -u) です。 プレインファイルの編集や作成といった変更のみを含むことが出来ます。 ファイルのパーミッション、シンボリックリンク先、特殊ファイルやパイプの特性の変更は出来ません。 またファイルの移動や名前変更も出来ません。
diff に含まれるディレクトリは、ソースツリーのトップにある
debianディレクトリ以外は前もって存在していないといけません。debianディレクトリは、アンパック時に必要な場合はdpkg-sourceによって作られます。dpkg-sourceはdebian/rulesという実行ファイルを自動的に作ります (下を参照)。
オリジナルのソースコードがない場合 - 例えば、パッケージが Debian
のために特別に用意されたものだったり、Debian maintainer が上流の maintainer
でもある場合- は、 構成が少し違います。 diff ファイルは無く、tar ファイルは
package_version.tar.gz という名前で
package-version
というディレクトリを含むものになります。
C.4 dpkg-source を使わない Debian ソースパッケージのアンパック
Debian ソースパッケージのアンパックには dpkg-source -x がお勧めです。 しかし、それが出来ない場合には次のような方法でアンパック出来ます。
tar ファイルを展開し、.orig ディレクトリを作ります。
.orig ディレクトリの名前を
package-version に変えます。
debian ディレクトリをソースツリーのトップに作ります。
diff を patch -p0 として適用します。
Debian 化されたバージョンと一緒にオリジナルのソースコードも欲しい場合は、 tar ファイルをもう一度展開します。
dpkg-source を使わずに正当な Debian
ソースアーカイブを作ることは出来ません。特に、 .diff.gz
ファイルを作るのに diff 直接使おうとしてもうまくいかないでしょう。
C.4.1 ソースパッケージに含まれるものに対する制限
ソースパッケージには、ハードリンク [110] [111] デバイスファイル、ソケットファイル、及び setuid や setgid されたファイル [112] が含まれていてはいけません。
ソースパッケージングツールは diff と patch
を用いてオリジナルのソースと Debian
パッケージソースの間の変更を処理します。.orig.tar.gz
に含まれたオリジナルのソースツリーを Debian
パッケージのソースにするために、これらのツールで処理出来ないような変更を伴ってはいけません。
ソースパッケージを構築する時に dpkg-source
エラーで停止してしまうような問題のある変更は次の通りです。
-
シンボリックリンク、ソケット、パイプの追加や削除。
-
シンボリックリンク先の変更。
-
debianディレクトリ以外のディレクトリの作成。 -
バイナリファイルの内容に対する変更。
ソースパッケージを構築する時に、dpkg-source
警告を表示し、処理は継続するような問題のある変更は次の通りです。
-
ファイル、ディレクトリ、シンボリックリンクの削除 [113] 。
-
通常の最後の改行が (オリジナル及び修正版のどちらのソースツリーにも) ない変更されたテキストファイル。
変更が指摘されないが、dpkg-source
によって検出もされない変更は次の通りです。
-
(
debian/rules以外の) ファイルやディレクトリのパーミッションの変更。
debian ディレクトリと debian/rules は
dpkg-source によって別々に処理されます - 変更を行なう前に
debian ディレクトリを作成し、 その後 debian/rules
を誰もが実行できるようにします。
[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ A ] [ B ] [ C ] [ D ] [ E ] [ F ] [ G ] [ next ]
Debian ポリシーマニュアル
バージョン 3.9.1.0, 2011-07-05The Debian Policy Mailing List
