書式
control説明
各 Debian パッケージには、マスタとなる `control' ファイルがある。ファイルはフィールド行や '#' で始まるコメント行からなる。各フィールド行は Package や Version (大文字小文字の区別なし) といったフィールドタグで始まり、コロンの後にフィールド本体 (値) が続く。フィールドがフィールドタグ以外で区切られることはない。言い換えると、フィールド本体のテキストは複数行にまたがっても構わない。ただし、インストールを行うツールは通常フィールド本体を処理する際にそれらを 1 行にまとめてしまう (以下で説明する Description フィールドを除く)。必須フィールド
- Package: パッケージ名
- このフィールドの値によってパッケージ名が決まる。またインストールを行うツールの大半によって、ファイル名を生成するために使用される。
- Version:バージョン文字列
- 通常、このフィールドの値はプログラムの作者が使用する形式で付けられた、パッケージ本来のバージョン番号であるが、(Debian 固有のパッケージでない場合は) Debian リビジョン番号が付加されることもある。この形式とソートアルゴリズムの詳細は、deb-version(5) で説明されている。
- Maintainer: fullname-email
- `Joe Bloggs <[email protected]>' 形式で設定すること。パッケージ化されたソフトウェアの開発者ではなく、パッケージ作成者の情報を設定する。
- Description: 短い説明
-
長い説明
パッケージ説明の形式は、先頭行 ("Description" フィールドの後) に短い説明、それ以降の行に詳細な長い説明というものである。長い説明の各行は、スペースから始まる必要がある。空行は、行頭のスペースに続けて '.' を 1 つだけ記述する必要がある。
オプションフィールド
- Section: セクション
- パッケージによりインストールされるソフトウェアがどのセクションの分類に属するかを示すフィールドである。一般的なセクションには `utils', `net', `mail', `text', `x11' などがある。
- Priority: priority
- システム全体からみたこのパッケージの重要度を示す。一般的に使われる priority には `required'、`standard'、`optional'、`extra' などがある。
Debian では、Section と Priority フィールドで使える値がポリシーマニュアルで定められている。最新の debian-policy パッケージから一覧を取得できる。
- Essential: yes|no
- このフィールドは通常 yes に設定する場合だけ必要とされ、パッケージがシステムを適切に稼働させる上で必須であることを示す。dpkg を含むインストールを行うツールは、(少なくとも強制オプションのいずれかを用いない限り) Essential パッケージの削除を許可しない。
- Architecture: アーキテクチャ|all
- アーキテクチャは、パッケージがコンパイルされた際の対象ハードウェアを示す。一般的なアーキテクチャには `i386', `m68k', `sparc', `alpha', `powerpc' などがある。all オプションは、パッケージが architecture 非依存であることを意味する。これには、シェルスクリプト、Perl スクリプト、ドキュメントなどが該当する。
- Origin: ディストリビューション名
- パッケージの起源となったディストリビューション名。
- Bugs: url
- パッケージのバグトラッキングシステムの url。現在使われている形式は、debbugs://bugs.debian.org のような bts-type://bts_address 形式である。
- Homepage: url
- アップストリームのプロジェクトのホームページ url。
- Tag: タグのリスト
- パッケージの品質を示すタグのリスト。サポートされているタグの一覧と説明は、debtags パッケージを参照のこと。
- Multi-Arch: same|foreign|allowed
- このフィールドは、multiarch インストールの際のパッケージの動作を定義するために使用される。same は、パッケージが多重インストール (co-install) 可能である (訳注: あるパッケージに対して、別アーキテクチャの同一パッケージをインストールできる) 一方、別アーキテクチャのいかなるパッケージとの依存関係を満たすためにも使用してはいけないことを意味する。foreign は、パッケージを多重インストールできないが、別アーキテクチャのパッケージの依存関係を満たすことが可能であることを意味する。 allowed は、別アーキテクチャのパッケージを許容するような逆の依存関係を Depends フィールドに指定可能であることを示すだけで、それ以上の意味はない。
- Source: ソースパッケージ名
-
このバイナリパッケージを作るために使われたソースパッケージ名である。バイナリパッケージの名前とソースパッケージの名前が違う時に使われる。
- Subarchitecture: value
- Kernel-Version: value
-
Installer-Menu-Item: value
これらのフィールドは、debian-installer
によって用いられるもので、通常は不要である。詳細については、debian-installer
パッケージに含まれている/usr/share/doc/debian-installer/devel/modules.txt を参照のこと
- Depends: パッケージのリスト
- このパッケージが提供する大半の機能にとって必要となるパッケージのリスト。パッケージ管理ソフトウェアは、インストールするパッケージの Depends フィールドに列挙されているパッケージがインストールされていない場合、(少なくとも強制オプションを指定しない限りは)、そのパッケージのインストールを許可しない。インストールの際は、Depends: フィールドに列挙されているパッケージの postinst スクリプトが、依存しているパッケージのスクリプトより先に実行される。反対に削除の際には、削除しようとしているパッケージの prerm スクリプトが Depends: フィールドに列挙されているパッケージのスクリプトより先に実行される。
- Pre-Depends: パッケージのリスト
- パッケージのインストール前にインストールされ、かつ設定済でなければならないパッケージのリスト。このフィールドは、通常あるパッケージが他のパッケージをpreinst スクリプトで必要とする際に用いられる。
- Recommends: パッケージのリスト
- 例外的な場合を除き、このパッケージと共にインストールした方がよいパッケージのリスト。Recommends フィールドに列挙されているパッケージ抜きでパッケージをインストールしようとすると、パッケージ管理ソフトウェアは警告を発する。
- Suggests: パッケージのリスト
- このパッケージと関係があり、利便性を向上させることができるが、インストールしなくても構わないパッケージのリスト。
Depends, Pre-Depends, Recommends, Suggests フィールドは、代替パッケージグループのリストである。各代替パッケージグループは、パッケージを縦棒(`パイプ')記号 `|' で区切ったリストで表現する。代替パッケージグループ間はコンマで区切る。コンマは `AND'、パイプは `OR' で、パイプの優先度が高いという理解でよい。各パッケージ名の後に、括弧で囲んでバージョン番号の指定を行うこともできる。
バージョン番号が `>>' で始まる場合は、それより新しいバージョンすべてにマッチする。バージョン番号には、(ハイフンに続けて) Debian パッケージリビジョンを指定することもできるが、省略しても構わない。「より新しい」を意味する ">>"、「より古い」を意味する "<<"、「同じか新しい」を意味する ">="、「同じか古い」を意味する "<="、「同じ」を意味する "=" を使用できる。
- Breaks: パッケージのリスト
- パッケージが依存している機能のバグを顕在化させてしまうなどで、パッケージを機能不全に陥れてしまうパッケージのリスト。パッケージ管理ソフトウェアは、こうしたパッケージを設定できないようにしている。一般的には、Breaks フィールドに設定されているパッケージのアップグレードが解決策となる。
- Conflicts: パッケージのリスト
- 同じ名前のファイルが存在しているなどで、このパッケージと競合するパッケージのリスト。パッケージ管理ソフトウェアは、競合しているパッケージを同時にインストールできないようにしている。競合しているパッケージ同士は、互いに相手を Conflicts 行に設定しておくべきである。
- Replaces: パッケージのリスト
- このパッケージによって置き換えられるファイルを含むパッケージのリスト。このパッケージと競合するパッケージに同じ名前のファイルが含まれている際に、他のパッケージのファイルを上書きできるようにするために用いられる。通常、他のパッケージを強制的に削除するため Conflicts フィールドも併せて設定される。
- Provides: パッケージのリスト
- このパッケージが提供する仮想パッケージのリスト。通常、仮想パッケージは複数パッケージが同一のサービスを提供している場合に用いられる。例えば、sendmail と exim は共にメールサーバの機能を提供しているので、共通のパッケージ (`mail-transport-agent') を提供した上で、他のパッケージがこれに依存するように設定する。これにより、sendmail でも exim でも依存関係を満たすような設定が可能となり、メールサーバに依存するパッケージが、メールサーバとして機能するパッケージをすべて把握した上で、`|' を用いて列挙するといった必要がなくなる。
Breaks, Conflicts, Replaces, Provides は、コンマで区切られた (空白文字があってもよい) パッケージ名のリストである。 Breaks および Conflicts フィールドにおけるコンマは `OR' と解釈できる。Breaks, Conflicts, Replaces フィールドでは、前述した記法で、バージョンを指定することもできる。
- Built-Using: パッケージのリスト
- このフィールドには、このバイナリパッケージのビルドに用いられる別のソースパッケージを列挙する。これは、このバイナリパッケージをメンテナンスし続ける限り、別のソースパッケージも維持しなければならないことをアーカイブメンテナンスソフトウェアに通知するために用いられる。このフィールドには、(= を用いて) バージョン番号を明示したソースパッケージ名を列挙しなければならない。アーカイブメンテナンスソフトウェアは、アーカイブ内で解決できないような依存関係が Built-Using で指定された場合に、アップロードを拒否する可能性があるという点に留意すること。
例
# Comment Package: grep Essential: yes Priority: required Section: base Maintainer: Wichert Akkerman <[email protected]> Architecture: sparc Version: 2.4-1 Pre-Depends: libc6 (>= 2.0.105) Provides: rgrep Conflicts: rgrep Description: GNU grep, egrep and fgrep. The GNU family of grep utilities may be the "fastest grep in the west". GNU grep is based on a fast lazy-state deterministic matcher (about twice as fast as stock Unix egrep) hybridized with a Boyer-Moore-Gosper search for a fixed string that eliminates impossible text from being considered by the full regexp matcher without necessarily having to look at every character. The result is typically many times faster than Unix grep or egrep. (Regular expressions containing backreferencing will run more slowly, however).