[% title = "Debian Packaging Manual - ソースパッケージ" %]


[ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ next ]


Debian Packaging Manual
Chapter 3 - ソースパッケージ


Debian バイナリパッケージは Debian ソースから生成されます。 Debian ソースはバイナリパッケージを簡単に、かつ自動的に 構築しやすいように特殊な形式になっています。

以前のバージョンの Debian ソースの形式は廃止されました。 古い形式のパッケージの変換についての説明は Debian policy manual にあります。


3.1 ソースパッケージを処理するためのツール

ソースパッケージを扱うために様々なツールが提供されています。 これらはソースをパックやアンパックしたり、 バイナリパッケージの構築や新しいバージョンの ディストリビューションを扱うのを手助けしたりします。

ここではこれらのツールの紹介と典型的な用途を説明します。 引数や動作についての完全な文書は dpkg-source(1) を見て下さい。

Debian ソースパッケージをどうやって作るかの例と、 Debian ソースパッケージからどの様にこれらのユーティリティを 使うかについては、例題パッケージである hello を見て下さい。


3.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 を行いません。 必要な場合は別にやっておく必要があります。

アーカイブとしてのソースファイル, Section 3.3 も見て下さい。


3.1.2 dpkg-buildpackage - 全体的なパッケージ構築の 制御スクリプト

dpkg-buildpackage は、 dpkg-sourcedebian/rules を順に呼びだします。debian/rules のターゲットは 順に cleanbuildbinary です。最後に dpkg-buildpackage は、 dpkg-genchangesPGP を 呼び出し、署名済のソースパッケージおよび バイナリパッケージを作成、アップロードします。

このコマンドは、通常、すでに構築されている、あるいは 構築されていないソースディレクトリのトップレベルで、 手動で実行します。引数なしで呼び出しても構いません。 よく使う引数は次の通りです。

-uc, -us

それぞれ、.changes ファイル、ソース パッケージの .dsc ファイルに PGP サインを しないという指示です。

-ppgp-command

pgp-commandPATH で 見つかる pgp の代わりに呼び出します。 pgp-commandpgp と全く同じ 動作をしなくてはなりません。

-rroot-command

root 特権が必要な時、root-command という コマンドを呼び出します。root-command は 第1引数をコマンドとして、必要ならば PATH から呼び出し、第2引数以降を 呼び出したコマンドに渡さなければいけません。 root-command が与えられなかった場合は、 dpkg-buildpackage は root 特権を 得るための特別な動作をしません。そのため、 ほどんどのパッケージでは dpkg-buildpackage を root として 実行しなければなりません。

-b, -B

2種類の、バイナリのみの構築とアップロード - dpkg-source(1) を 見て下さい。


3.1.3 dpkg-gencontrol - バイナリパッケージ 制御ファイルの生成

このプログラムは通常ソースツリーのトップレベルで debian/rules (Debian 化されたソースツリー, Section 3.2 を見て下さい。) から呼び出されます。

これは通常、パッケージが構築されている一時的な ディレクトリツリー中のファイルやディレクトリの許可属性や 所有権を設定したあと、パッケージが dpkg-deb を用いて構築される直前に行なわれます [5]。

dpkg-gencontrol は、パッケージに入るファイルが 一時的な構築ディレクトリの中に全て置かれた後で 呼ばれなければなりません。パッケージがインストールされた時の サイズの計算を正確にするためです。

また、dpkg-gencontroldpkg-shlibdeps の後で実行する必要があります。 debian/substvars 中で dpkg-shlibdeps によって作られた 変数置換(variable substitutions)を利用できるように するためです。

ソースパッケージのトップから相対パスで debian/tmp にあるファイルからバイナリパッケージを一つだけ作成する 場合は、通常、dpkg-gencontrol を呼び出せば 十分です。

複数のバイナリを構築するソースでは、一般に次の様にする 必要があります。

       dpkg-gencontrol -Pdebian/tmp-pkg -ppackage

-Pdpkg-gencontrol に パッケージをデフォルト以外のどのディレクトリで構築するかを 伝え、-p はどのパッケージの 制御ファイルを生成するべきかを伝えます。

dpkg-gencontrol は(例えば) dpkg-genchanges を将来呼び出すために debian/files 中のファイルのリストに 情報を加えることもします。


3.1.4 dpkg-shlibdeps - 共有ライブラリの依存関係の算定

通常、このプログラムは dpkg-gencontrol (Debian 化されたソースツリー, Section 3.2 を参照) の直前に、ソースツリーのトップレベルで debian/rules から呼ばれます。

このプログラムの引数は、バイナリパッケージの制御ファイルに 共有ライブラリの依存関係を含める必要のある実行形式 [6] です。

検索された共有ライブラリが RecommendsSuggests のみを保証すべき場合や、 Pre-Depends を保証すべき場合は、 それらの実行形式の前に -ddependency-field オプションをつけてこれを指示しなければなりません。 (各 -d オプションは 次の -d が 現れるまで有効です。)

dpkg-shlibdeps は出力される制御ファイルを 直接修正することはしません。 代わりに、デフォルトでは shlibs:Depends の様な 変数の設定を debian/substvars というファイルに 加えます。ソース制御ファイルにはバイナリパッケージ毎に セクションがありますが、これらの変数の設定は適切な セクションの依存関係フィールドから参照しなければなりません。

例えば、procps パッケージは2種類のバイナリを 生成します。predependency の必要な ps の様な 単純な C バイナリと、recomendation のみが必要な top の様なフルスクリーンの ncurses バイナリです。これは debian/rules 内で 次のように書けます:

       dpkg-shlibdeps -dPre-Depends ps -dRecommends top

そしてメイン制御ファイル debian/control で 次のように書けます:

       ...
       Package: procps
       Pre-Depends: ${shlibs:Pre-Depends}
       Recommends: ${shlibs:Recommends}
       ...

あるソースが提供する(複数の)バイナリパッケージが 共有ライブラリに対して異なった依存要求を持つ場合は、 -pvarnameprefix オプションを 利用することが出来ます。このオプションはデフォルトの shlib: プレフィックスを上書きします (このオプションを設定する毎に dpkg-shlibdeps を一回実行)。よって、 varnameprefix:dependencyfield という形式で依存変数の集合を幾つか作ることが出来ます。 これはバイナリパッケージ制御ファイルの適切な部分で 参照されます。


3.1.5 dpkg-distaddfile - debian/files へのファイルの追加

幾つかのパッケージのアップロードではソースパッケージ やバイナリパッケージ以外のファイルを含める必要が あります。

dpkg-distaddfiledebian/files に ファイルを加えます。dpkg-genchanges が 実行されたときに .changes にそのファイルが 含まれるようにする為です。

これは通常、debian/rulesbinary ターゲットで呼び出されます:

       dpkg-distaddfile filename section priority

filenamedpkg-genchanges が そのファイルを見つけると思われるようなディレクトリ - これは通常ソースツリーのトップレベルの上のディレクトリ - に対する相対ファイル名です。debian/rules の ターゲットは dpkg-distaddfile が呼ばれる直前か 直後にそのファイルをその場所に置かねばなりません。

sectionpriority は、生成される .changes ファイルに変更されずに渡されます。 SectionPriority, Section 4.2.9 を見て下さい。


3.1.6 dpkg-genchanges - アップロード制御ファイル .changes の生成

通常、このプログラムはパッケージに依存しない dpkg-buildpackage の様な自動構築スクリプトから 呼び出されますが、手動で呼びだすこともあります。

このプログラムは通常、構築されたソースツリーの トップレベルで呼び出されます。引数をつけずに 呼び出した場合は、ソースパッケージの変更履歴ファイル、 制御ファイルの情報と、構築されているバイナリパッケージ、 ソースパッケージの情報に基づいて、簡単な .changes ファイルを書きだします。


3.1.7 dpkg-parsechangelog - changelog の解析結果の生成

このプログラムは dpkg-source によって内部的に 用いられます。時折 debian/rules や他の場所で 使われるかもしれません。変更履歴 (デフォルトでは debian/changelog) を解析し、そこに含まれる情報を 制御ファイル形式の表現で標準出力に出力します。


3.1.8 dpkg-architecture - パッケージを構築するシステム、あるいはホストシステムに ついての情報

このプログラムは手動で使用することもできますが、 dpkg-buildpackagedebian/rules に よっても起動されます。そこでは、パッケージを構築するマシンの アーキテクチャ、あるいはホストのアーキテクチャを示す 環境変数や make 変数を設定します。これらの変数は、 パッケージ構築過程において必要なものです。


3.2 Debian 化されたソースツリー

以降で述べるソースアーカイブの構成は、関連した制御情報をもつ Debian 化されたソースツリーが容易に再現され輸送されるように することを意図したものになっています。Debian 化された ソースツリーは、オリジナルのプログラムに Debian 化の 工程の為のファイルを付け、残りのソースコードと インストールスクリプトに必要な変更を加えたものです。

Debian のために作られた特別なファイルは、 Debian 化されたソースツリーのトップレベルの debian ディレクトリに置かれます。


3.2.1 debian/rules - メイン構築スクリプト

このファイルは実行可能な makefile で、ソースから パッケージをコンパイルしバイナリパッケージを構築するための パッケージ特有のレシピを含んでいます。

このファイルの先頭は #!/usr/bin/make -f という 行でなければなりません。make を明示的に実行するのではなく、 debian/rules という名前で実行できるように する為です。

対話型の debian/rules スクリプトは、 そのパッケージの自動コンパイルを不可能にし、さらに、 メンテナー以外の人が同じバイナリパッケージを 再構築するのを難しくします。ですから、全ての 必要なターゲット は非対話的で なくてはなりません。最小限の範囲で言えば、 必要なターゲットとは、dpkg-buildpackage によって呼び出されるターゲット、つまり cleanbinarybinary-archbuild の ことです。また、これらのターゲットによって呼び出される ターゲットも非対話的でなくてはなりません。

必要なターゲットは次の通りです。

build

パッケージの構築、すなわち全てのパッケージの 非対話的な設定とコンパイルを行ないます。 もしパッケージに構築前の設定作業がある場合は、 Debian 化されたソースパッケージは設定作業を 行なった後で構築しなければなりません。これは、 設定を再びせずに構築出来るようにするためです。

いくつかのパッケージで、同一のソースツリーから それぞれ違う二つのバイナリパッケージを生成する場合が あります。build ターゲットは、 そういう場合には対応できません。これらの場合は、 それぞれの構築方法にしたがって、2 つまたは それ以上のターゲット (build-abuild-b やその他) を使用するのがよいでしょう。 そしてこの場合、単独の build は なにも実行しません。binary ターゲットで、これらの可能な方法でパッケージを 作成して、それぞれに対応したバイナリパッケージを 生成することになります。

ルート権限が必要なことを build ターゲットで実行してはいけません。

また、build ターゲットの前には、 clean を走らせなければならないでしょう。

パッケージの設定ルーチンに長い時間がかかる時や、 makefile があまりよく設計されていない時、 build の前に clean が 必要な時、構築プロセスの終了時に touch build を実行するのがよいでしょう。これによって、 debian/rules build が再度実行されたときに、 プログラム全体を再構築しなくてすみます。

binary, binary-arch, binary-indep

binaryターゲットは、ユーザにとって バイナリパッケージを構築するときに必要な唯一の ものでなければいけません。全てのこれらのターゲットは、 非対話的でなければなりません。binary ターゲットは、二つの部分に分けられます: binary-arch は、特定のアーキテクチャ用の ファイル、binary-indep は、 そうでないものを生成します。

通常、binary は、余分なコマンドを 必要とせず、単純に binary-archbinary-indep に依存するターゲットで なければいけません。

両方の binary-* ターゲットは、 build ターゲットに依存しなければ いけません。このようにしておけば、もしパッケージ 構築処理が済んでいないときは構築処理が実施されます。 そして次に関連したバイナリパッケージを 生成しなければいけません。この時、 dpkg-gencontrol を使って 制御ファイルを作成し、 dpkg-deb を使って構築し、それらを トップのディレクトリの上に置きます。

binary-* のうちの一つがなにもしない 場合(アーキテクチャ依存、非依存に関わらずソースから 一つのバイナリパッケージしか生成しない場合) においても、なにもしない側の binary-* が存在しなければなりませんし、処理が成功したという あつかいとしなければなりません。

バイナリパッケージ, Chapter 2 に、どのようにして バイナリパッケージを構築するかについて 書かれています。

binary ターゲットは、ルートで 起動されなければいけません。

clean

buildbinary ターゲットによる実行結果を元に戻します。ただし、 binary の実行による親ディレクトリへ 生成された出力ファイルはそのまま残します。 このターゲットは、非対話的である必要があります。

build されたファイルが、 上で述べたように、buildターゲットの 最後に touch されていた場合、そのファイルは、 clean の最初の作業として 削除しなければいけません。中断された clean の後に build が 実行された場合、すべてが終了したと認識されて しまいかねないからです。

build がルートで起動されてから、または binary が起動された後には、 clean ターゲットはルートで 起動されなければいけません (例えば、build はディレクトリを 作成することもあるからです)。

get-orig-source (オプション)

主要なアーカイブサイトから最新版の オリジナルソースパッケージを取得します (FTP や WWW 経由)。以下に述べるように、オリジナルの ソースの tar ファイル形式に再構成し、 現在のディレクトリに置きます。

このターゲットは、どのディレクトリからも実行できます。 一時ファイルを残している場合がありますので、 その時は削除してください。

このターゲットはオプションです。 しかしつけた方がよいでしょう。

buildbinaryclean ターゲットはパッケージの トップディレクトリをカレントディレクトリとして 実行されなければいけません。

debian/rules に他のターゲットがあることもあります。 これらは、公開されている、またはいないインターフェースや、 パッケージ内部で使用されるものです。

パッケージを実際に構築するマシンや、インストールの対象となる マシンのアーキテクチュアは、dpkg-architecture を通して 変数を設定することによって決定されます (dpkg-architecture - パッケージを構築するシステム、あるいはホストシステムに ついての情報, Section 3.1.8 を見て下さい)。これにより、ホストマシンだけでなく パッケージの構築をするマシンの Debian アーキテクチュアと GNU 型のアーキテクチュア指定文字列を得ることができます。 以下に、サポートされている make 変数を示します。

*BUILDHOST のどちらかです。 BUILD の場合はパッケージを構築するマシンの 指定になり、HOST の場合にはインストールされる マシンの指定になります。

rules ファイル中で適当なデフォルト値を設定することに よって、後方互換性を保つことができます。 詳しくは dpkg-architecture のドキュメントを参照して下さい。

DEB_*_ARCH は、マシンの Debian アーキテクチュア のみ決定するということは、重要です。CPU や システムの 情報を得るのに DEB_*_ARCH を使ってはいけません。 その場合には GNU 型変数を使わなくてはいけません。


3.2.2 debian/control

ソースパッケージとそれから生成される バイナリパッケージについてのバージョン非依存の詳細を 含みます。

それは、制御フィールドのセットが連続したものです。 その書式はバイナリパッケージ制御ファイルに 似ています。フィールドのセットは、一つ以上のブランクで 区切られます。そして、最初のセットは、ソースパッケージに ついての全般的な情報です; それに続くセットには、ソースの ツリーがバイナリパッケージを生成する方法について 書かれています。

フィールドの書式とその意味するところについては、 制御ファイルとそのフィールド, Chapter 4 をご覧ください。

一般的な、(バイナリパッケージ非依存) フィールド:

バイナリパッケージごとのフィールド:

これらのフィールドは、dpkg-gencontrol が バイナリパッケージ用の制御ファイルを 生成するとき(以下参照)や dpkg-genchanges が アップロードに付随する .changes を生成するとき、 dpkg-source がソースのアーカイブの一部として .dsc ソース制御ファイルを生成するときに、 使用されます。

また、これらのフィールドは、変数参照を含むこともあります。 - それらの値は、出力制御ファイルを 生成するときに dpkg-gencontroldpkg-genchangesdpkg-source に よって使用されます。詳細は、 debian/substvars と変数の置換, Section 3.2.4 をご覧ください。


3.2.2.1 ユーザー定義フィールド

ソースパッケージ制御ファイルには ユーザ定義フィールドを追加することができます。 これらは無視され、バイナリや ソースパッケージ制御ファイル、 アップロード制御ファイルにはコピーされません。

出力ファイルにサポートされていないフィールドを 付加したいときは、ここに述べる方法を使用してください。

メインのソース制御ファイルにおいて、 X から始まり、BCS とハイフン - が続くフィールドは、出力ファイルにコピーされます。 そして出力ファイルには、ハイフンの後に続く キャラクタのみが、フィールド名として使用されます。 ここで、B は、 バイナリパッケージ制御ファイルに 使用されるとき、S は、 ソースパッケージ制御ファイルに使用されるとき、 C は、アップロード制御 (.changes) ファイルに使用されるときに使われます。

メインのソース情報制御ファイルが以下の フィールドを含んでいるときは、

       XBS-Comment: I stand between the candle and the star.

バイナリとソースパッケージ制御ファイルは、次の フィールドを含みます。

       Comment: I stand between the candle and the star.

3.2.3 debian/changelog

このファイルは、パッケージの Debian 特有の部分の変更を記録します [7]。

このファイルは特別な書式を持っています。これは、 どのパッケージのバージョンが現在構築中なのか、また、 その他のリリース特有の情報を、パッケージ構築ツールが 認識するためです。

その書式を以下に示します。:

       package (version) distribution(s); urgency=urgency
     
        * change details
        more change details
        * even more change details
     	
       -- maintainer name and email address  date

packageversion は ソースパッケージの名前とバージョンです。

distribution(s) には、このバージョンが アップロードされるときにインストールされる ディストリビューションがリストされます - これらは、 .changes ファイルの Distribution フィールド にコピーされます。 Distribution, Section 4.2.14 をご覧ください。

urgency は、アップロード用の .changes ファイルの Urgency フィールドの値です。 Urgency, Section 4.2.15 をご覧ください。コンマを含む フィールドを使用することはできません; dpkg の changelog 書式において、コンマは keyword=value セットを 分離するために使用されています (しかしながら、 現在のところ urgencyとして有効な keywordは一つだけです)。

詳細な変更点は、実際には最低二つのスペースではじまる 一連の行に記されます。しかしながら、伝統的に、 それぞれの変更箇所はアスタリスクで始まり、文章との間を 空けるためにスペースが続きます。継続行は、 インデントされます。望むのであれば、変更箇所グループを 分離するのに空行が使用できます。

管理者の名前と電子メールアドレスは必ずしも通常の パッケージ管理者である必要はありません。 それらはこのバージョンを作成した人について記されて いなければいけません。この情報は、.changes ファイルにコピーされ、その後アップロードの完了時に通知が 送られることとなります。

date は RFC822 フォーマットでなければなりません [8]。; それらは、数字によって表現された タイムゾーンを必ず含んでおり、オプションとしてコメントの 形でタイムゾーン名かその省略形を付加することができます。

パッケージ名ではじまる最初の `タイトル' の行は、左詰めに しなければいけません。それに続く管理者、日付フィールドの 詳細は正確に一つのスペースによって はじまらなければいけません。管理者と日付フィールドの 詳細は、正確に2つのスペースによって区切られていなければ いけません。

この書式を編集するための debian-changelog-mode と 呼ばれている Emacs モードがあります。changelog の最後に 変数節を付加することで、編集時に自動的にこのモードを 選択するようにすることができます。


3.2.3.1 changelog の別書式の定義

使用したい書式のパーサを用意することで、標準的でない 書式を使用することが可能です。

dpkg-parsechangelog にそのパーサを 実行させるためには、そのファイルの最後の 40 行のある行を Perl の正規表現でマッチさせなければいけません: \schangelog-format:\s+([0-9a-z]+)\W 括弧内はフォーマット名でなければいけません。例えば、 以下のようなものです。

       @@@ changelog-format: joebloggs @@@

changelog 書式名は空文字でない数字の文字列となります。

もしそのような行があった場合、 dpkg-parsechangelog は、 /usr/lib/dpkg/parsechangelog/format-name か、 /usr/local/lib/dpkg/parsechangelog/format-name にパーサを探しにいきます。それが見つからない場合や 実行形式のプログラムでなかった場合はエラーになります。 デフォルトの changelog 書式は dpkg になっていて、 そのパーサは dpkg によって提供されています。

パーサはファイルの最初に changelog が標準入力で オープンされた時に実行されます。そして、必要な情報を 決定するためにファイルを読みこみ (場合によってはファイルを探しもします)、 標準的な書式で一連の制御フィールドを標準出力に パース出力します。デフォルトでは changelog 中に 記載されている最新のバージョンのみの情報を 出力しなければいけません。; -vversion オプションによって、正確に そのバージョン以降のすべての変更情報を出力しなければ いけません。この場合、changelog に version が 存在していなかったら、エラーにしなければいけません。

利用可能なフィールドを以下に示します。

(-v の使用によって) いくつかのバージョンに 関する値が返されたとき、urgency の値は、すべての バージョンの中で一番高い urgency の値になります。 maintainer と version、distribution、date は常に 最新のバージョンのものとなります。

Changes フィールドの書式については、 Changes, Section 4.2.18 をご覧ください。

パースされた changelog フォーマットがすべて、または ほとんどすべてのそれぞれの change 項目間の空行が 残されているときは、出力結果をコンパクトにするために、 それらの空行は削除されなければいけません。

changelog フォーマットが日付やパッケージ名に関する情報を 含んでいないときは、これらの情報は出力から 削除されなければなりません。パーサはそれらの情報を 調合してはいけません。または、他のソースからそれらの 情報を見つけてきてはいけません。

changelog 中の書式が、予期されるものではないときは、 混乱したままパースを試みて、多分に不正確な出力を 生成するよりは、非ゼロの終了状態で終了しなければ いけません。

changelog パーサはユーザとの対話的処理を一切行っては なりません。


3.2.4 debian/substvars と変数の置換

dpkg-gencontroldpkg-genchangesdpkg-source が制御ファイルを生成するとき、 出力に書きこむ前に変数置換を行います。変数置換の形式は 以下の通りです。${variable-name} オプションファイルの debian/substvars が、 変数置換に用いられる変数を含んでいます; これらの変数は、 ソースをパッケージするコマンドに -V オプションを 指定することで、直接 debian/rules から設定することも できます。この場合、確実に先行定義されている変数が 使用できるようになります。

これらは debian/rules ターゲットによって生成され、 動的に変更されます; この場合は clean ターゲットによって削除されなければいけません。

debian/substvars の書式を含んだソースの変数置換の 詳細については、dpkg-source(1) をご覧ください。


3.2.5 debian/files

このファイルは、ソースツリーの恒常的な部分ではありません。; パッケージを構築する途中、どのファイルが生成されたのかを 記録するのに用いられます。dpkg-genchanges が、 .changes ファイルを生成するときにこれを用います。

これらはソースパッケージのアップロード版に含まれていては いけません。そして、それら (およびすべてのバックアップファイルと一時ファイル、 例えば、files.new [9]) は、clean ターゲットによって 削除されなければいけません。また、binary ターゲットのスタート時には、これらのファイルは、 削除されるか空にして新しいスタートを確認することは よいやり方です。

dpkg-gencontrol は、.deb ファイル用の エントリを追加します。.deb ファイルは、これが 作成する制御ファイルを使って、dpkg-deb によって生成されます。たいていのパッケージが、この ファイルに関してやらなければいけないことは、 clean ターゲットによって削除される ことだけです。

アップロードされたパッケージが、ソースパッケージとすべての バイナリパッケージ、dpkg-gencontrol によって 生成されたそれらの制御ファイル以外のファイルを 含んでいるときは、それらのファイルはパッケージの トップ階層ディレクトリの親ディレクトリに 置かれなければいけません。そして、 debian/files のリストにファイルを 追加するために dpkg-distaddfile が 呼ばれなければいけません。


3.2.6 debian/tmp

binary ターゲットによってバイナリパッケージを 構築する際に標準的に使用される一時的ディレクトリです。 パッケージ構築の際は、tmp ディレクトリが ファイルシステムツリーのルートになります。 (例えば、パッケージに付属する makefile の install ターゲットを使用するときや、出力をリダイレクトする 場合です)。また、DEBIAN サブディレクトリを 含みます。パッケージファイルの作成 - dpkg-deb, Section 2.1 をご覧ください。

同じソースツリーから複数のバイナリパッケージが生成される ときは、通常、複数の debian/tmpsomething ディレクトリを使用します。例えば、tmp-atmp-doc といった具合です。

binary によって、どんな tmp ディレクトリが作成されたとしても、もちろん、 clean ターゲットによって削除されなければ いけません。


3.3 アーカイブとしてのソースファイル

FTP サイトにおいてある様に、Debian ソースパッケージは 3つの関連したファイルから成ります。これら3つのファイルは、 正しいバージョンのものを入手しないと利用することが出来ません。

Debian ソース制御ファイル - .dsc

このファイルは一連のフィールドを含んでいて、 各フィールドはバイナリパッケージの制御ファイルと 同様に識別され分離されています。それぞれのフィールドの 構文は 制御ファイルとそのフィールド, Chapter 4 で述べられています。

ソースパッケージ制御ファイルは、ソースアーカイブ 構築時にソースパッケージの他のファイルから dpkg-source によって作られます。 ソースパッケージのアンパック時には、ソースアーカイブの 他の2つの部分に含まれるファイルやディレクトリとの チェックが行なわれます。

オリジナルソースアーカイブ - package_upstream-version.orig.tar.gz

このファイルは、プログラムの上流の作者からの ソースコードを含む tar ファイル (gzip -9 されている)です。 この tar ファイルは package-upstream-version.orig というディレクトリ以下に展開されます。 それ以外の場所に展開されるようなファイルは 入っていません。

Debian 化の diff - package_upstream_version-revision.diff.gz

このファイルは、オリジナルソースを Debian ソースに 変換するのに必要な変更を行なうための unified context diff (diff -u) です。 プレインファイルの編集や作成といった変更のみを 含むことが出来ます。ファイルのパーミッション、 シンボリックリンク先、特殊ファイルやパイプの 特性の変更は出来ません。またファイルの移動や 名前変更も出来ません。

diff に含まれるディレクトリは、ソースツリーのトップに ある debian ディレクトリ以外は前もって 存在していないといけません。debian ディレクトリは、アンパック時に必要な場合は dpkg-source によって作られます。

dpkg-sourcedebian/rules という実行ファイルを自動的に作ります (下を参照)。

オリジナルのソースコードがない場合 - 例えば、パッケージが Debian のために特別に用意されたものだったり、 Debian maintainer が上流の maintainer でもある場合 - は、 構成が少し違います。diff ファイルは無く、tar ファイルは package_version.tar.gz という名前で package-version というディレクトリを含むものになります。


3.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 を 直接使おうとしてもうまくいかないでしょう。


    3.4.1 ソースパッケージに含まれるものに対する制限

    ソースパッケージには、ハードリンク [10] [11]、 デバイスファイル、ソケットファイル、及び setuid や setgid されたファイルが含まれていてはいけません。 [12]

    ソースパッケージングツールは diffpatch を用いてオリジナルのソースと Debian 化されたソースの間の変更を処理します。 .orig.tar.gz に含まれたオリジナルのソースツリーを Debian 化されたソースにするのに、これらのツールで 処理出来ないような変更を伴ってはいけません。 ソースパッケージを構築する時に dpkg-source が エラーで停止してしまうような問題のある変更は次の通りです。

    ソースパッケージを構築する時に、dpkg-sourceが 警告を表示し、処理は継続するような問題のある変更は次の 通りです。

    指摘されないが、dpkg-source によって 検出されない変更は次の通りです。

    debian ディレクトリと debian/rulesdpkg-source によって別々に処理されます - 変更を行なう前に debian ディレクトリを作成し、 その後 debian/rules を誰もが実行できるように します。


    [ previous ] [ Contents ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ next ]


    Debian Packaging Manual

    version revision 1.13, 2000-08-22

    Ian Jackson ijackson@gnu.ai.mit.edu
    校正: David A. Morris bweaver@debian.org
    メンテナー: Christian Schwarz schwarz@debian.org
    メンテナー: Manoj Srivastava srivasta@debian.org
    メンテナー: Julian Gilbey J.D.Gilbey@qmw.ac.uk
    メンテナー: The Debian Policy group debian-policy@lists.debian.org
    日本語版メンテナー: 早瀬 茂規 shayase@tky3.3web.ne.jp
    日本語版校正: Japanese Debian Documentation Project debian-doc@debian.or.jp