一般にパッケージには関連するコマンドや機能を実装するにに必要なファイ ルすべてが含まれています。Debian パッケージには二つのタイプがあります。
このパッケージシステムでは、ソフトウェアをインストールするとき、パッ
ケージ保守担当者が注意深く設計した「依存情報」を使います。この依存情報は
それぞれのパッケージに関連する制御 (control)ファイルに記載され
ています。例えば、GNU C コンパイラ (gcc
) を含むパッケージは、
リンカやアセンブラを含む binutils
パッケージに「依存」していま
す。もしユーザがあらかじめ binutils
をインストールしていないの に
gcc
をインストールしようとしたなら、Debian のパッケージシス テムは
binutils
も必要であるというエラーメッセージを出力し、ユー ザがまず
binutils
をインストールするのに同意するまで gcc
をインストールしません (とは言うものの、頑固なユーザはこの
機能を上書きできます)。詳細は下記の 他のパッケージに
Depends/Recommends/Suggests/Conflicts/Replaces/Provides しているとはどう
いう意味ですか?, Section 6.9をご覧ください。
Debian のパッケージングツールは以下の用途に使えます。
Debian の「パッケージ」つまり Debian アーカイブファイルには、実行プロ グラム一式や関連するプログラムのセットに関係する実行可能ファイルやライブ ラリ・文書が含まれています。通常、Debian アーカイブファイルはファイル名 の最後に .debが付いています。
Debian バイナリパッケージの形式の内部仕様は deb(5)
マニュアルページに解説されています。この内部形式は (Debian GNU/Linux
のメジャーリリースの間で) 変更されることがあるので、 .deb
ファイルを操作する時は必ず dpkg-deb(8)
を使って下さい。
Debian バイナリパッケージのファイル名は次のような規則に従います。 <foo>_<バージョン番号>-<Debian リビジョン番号>.deb。
foo はパッケージ名の代わりであることに注意して下さい。照会す るためには、以下の方法で特定の Debian アーカイブファイル (.deb ファイル ) に関係のあるパッケージ名を調べることができます。
VVV の部分はバージョン番号を示し、上流の開発者により指定され ます。この部分には標準がありません。バージョン番号は「19960513」や 「1.3.8pre1」のようにフォーマットが異なっているかもしれません。
RRR の部分は Debian のリビジョン番号で、Debian の開発者 (か自分 自身のためにパッケージをビルドすることにした個人ユーザ) が決定します。こ の番号は Debian パッケージのリビジョンレベルに対応します。したがって、リ ビジョンレベルが新しくなると、普通、Debian の Makefile (debian/rules) や Debian 制御ファイル (debian/control)、インストールまたは削除スクリプト (debian/p*)、パッケージが利用する設定ファイルなどに変更があった ことを意味します。
Debian 制御ファイルの内容に関する仕様は Debian パッケージングマニュア ルの第 4 章にあります。Debian システムに関するドキュメントは他にどんなも のがありますか?, Section 11.1 を参照してください。 簡単に Debian パッケージ hello のための制御ファイルの例を以下に書いてお きます。
Package: hello Priority: optional Section: devel Installed-Size: 45 Maintainer: Adam Heath <doogie@debian.org> Architecture: i386 Version: 1.3-16 Depends: libc6 (>= 2.1) Description: The classic greeting, and a good example The GNU hello program produces a familiar, friendly greeting. It allows nonprogrammers to use a classic computer science tool which would otherwise be unavailable to them. . Seriously, though: this is an example of how to do a Debian package. It is the Debian version of the GNU Project's `hello world' program (which is itself an example for the GNU Project).
Package フィールドにはパッケージ名が書いてあります。これはパッケージ ツールがパッケージを操作するときの名前です。通常は Debian アーカイブファ イル名の最初の構成要素と同じですが、同じでなければならないわけではありま せん。
version フィールドには上流の開発者のバージョン番号と (最後の構成要素 で) そのプログラムの Debian パッケージのリビジョンレベル (どうして Debian パッケージのファイル名はこんなに長い のですか?, Section 6.3 で説明したもの) が表示されます。
Architecture フィールドにはどの CPU 向けにそのバイナリがコンパイルさ れているか書かれています。
Depends フィールドにはこのパッケージをきちんとインストールするために、 あらかじめインストールされていなければならないパッケージの一覧があります。
Installed-Size フィールドはインストールしたパッケージがどれくらいディ スク領域を消費するかを表しています。プログラムをインストールするのに十分 なディスクがあるかどうかをインストールのフロントエンドが表示するために使 われる予定です。
Section フィールドは Debian パッケージが Debian FTP サイトのどの「セ クション」に収容されるかを示します。これはパッケージが収容されるサブディ レクトリ(main ディレクトリの中の一つ。Debian FTP アーカイブにあるあのディレクトリは何ですか?, Section 5.1 参照) の名前で す。
Priority フィールドはこのパッケージがインストールにあたってどのくらい 重要かを示します。これによって dselect や console-apt のような半インテリ ジェントなソフトウェアが、パッケージを「任意にインストールされるパッケー ジ」のようなカテゴリーに並べ変えられるようになります。Required/Important/Standard/Optional/Extra パッケー ジとはなんですか ?, Section 6.7 を参照してください。
Maintainer フィールドは、現在そのパッケージの維持に責任を持っている人 の電子メールアドレスを示します。
Description フィールドはパッケージの特徴の簡単なまとめがあります。
パッケージで使えるすべての可能なフィールドのより詳細な情報に関しては Debian パッケージングマニュアルの第 4 章「制御ファイルとそのフィールド」 を参照してください。
conffile は (通常 /etc/の下に置かれる) 設定ファイルの一覧で す。これらの設定ファイルはパッケージをアップグレードしてもパッケージ管理 システムに上書きされません。つまり、これらのファイルの内容のローカルな値 が保存されることが保証されます。また、稼動中のシステムのパッケージをきち んと更新できるようにする重要な機能です。
更新中にどのファイルが保存されるかを正確に断定するには
dpkg --status package
を実行して「Conffile:」の下を見てください。
これらのファイルはパッケージがインストールされる前か後で自動的に実行 される実行可能なスクリプトです。これらのファイルは control とい う名前のファイルと一緒にすべて Debian アーカイブファイルの制御セクション の一部となっています。
個々のファイルは以下の通りです。
現在、制御ファイルはすべて /var/lib/dpkg/info/ に置かれてい ます。パッケージ foo に関係するファイルは「foo」で始まる名前を 持ち、「preinst」や「postinst」などの適当なファイル拡張子を持ちます。こ のディレクトリにある foo.list というファイルは、パッケージ foo によってインストールされたファイルがすべてリストされていま す (これらのファイルの存在場所は dpkg が内部に持っていることに注意して下 さい。存在場所を頼りにしないほうがいいでしょう)。
それぞれの Debian パッケージには、パッケージ管理システムの助けとして、 ディストリビューション保守担当者が優先度を割りあてています。優 先度には以下のものがあります。
システムの欠陥を修復するのに必要なツールをすべて含みます。これら のパッケージを消去してはいけません。システムがすっかり破壊され、復旧 するために dpkg を使うことすら恐らくできなくなります。Required パッ ケージだけのシステムは恐らく使いものになりませんが、システム管理者が 起動したり他のソフトウェアをインストールするだけの機能はあります。
Required 以外のパッケージで、ないとシステムがうまく動かなかったり 不便だったりするものにこの優先度がつけられています。これには Emacs や X11、TeX 他の巨大なアプリケーションは含まれていません。 ここのパッケージは、素のインフラストラクチャを構成するだけです。
ユーザが何も指示しなかったらデフォルトでインストールされます。多 くの巨大なアプリケーションは含まれませんが、Emacs はあります (これは アプリケーションというよりも多くのプログラムのためのインフラストラク チャの一部です) し、TeX と LaTeX の手頃なサブセットが (X なしで稼動 可能な部分なら) 含まれています。
これには X11 や TeX 配布物全体、多くのアプリケーションが含まれて います。
仮想パッケージとは、すべて同じ基本機能を提供するパッケージの集まりの どれか一つに供される一般的な名前のことです。たとえば tin と trn プログラムはどちらもニュースリーダであり、それゆえ、動作す るか便利に使うかするためにニュースリーダを要求するプログラムの依存性を満 たします。したがって両プログラムは news-reader と呼ばれる「仮想 パッケージ」を供給します。
同様に、smail と sendmail には両方ともメール配送エー ジェント (mail transport agent) の機能が備わっています。それゆえ仮想パッ ケージ「mail transport agent」を提供するといわれます。どちらかがインストー ルされていれば、mail transport agent がインストールされているこ とに依存するプログラムはどれでも、この仮想パッケージが存在しているので条 件を満たされています。
Debian はこのようなしくみを提供するので、同じ仮想パッケージを持つパッ ケージが一つ以上システムにインストールされると、システム管理者は優先パッ ケージを設定できます。関連するコマンドは update-alternatives で、 mawk が好きなユーザもいれば gawk が好きなユーザもいま す。vim が好きなユーザもいれば elvis が好きなユーザもいます。trn が好き なユーザもいればtin が好きなユーザもいます。このような多様性を Debian は どのようにしてサポートしていますか?, Section 10.10 の節でより詳しく解説されています。
Debian パッケージシステムはパッケージ「依存性」に幅を持っています。あ るシステム上でプログラム A がプログラム B の存在からどれくらい独立して動 作させられるかを (フラグ一つで) 表示するよう設計されています。
これらの用語の使用法についてのより詳しい情報は Debian パッケージング マニュアルとポリシーマニュアルにあります。
「Pre-Depends」は特殊な依存性です。たいていのパッケージでは、 dpkg はそのアーカイブファイル (つまりその .deb ファイ ル)を、そのパッケージが依存するファイルがシステムにあろうがなかろうが、 アンパックしようとします。単純にいうと、アンパックとは dpkg が アーカイブファイルからファイルを取り出すことを意味しています。取り出され たファイルはファイルシステムにインストールされ、あるべき場所に置かれるこ とになります。これらのパッケージが他のパッケージに依存している なら dpkg はその他のパッケージがインストールされるまで「設定」 動作を行わずにインストールの完了を拒否します。
しかしながらいくつかのパッケージでは dpkg はある依存関係が解 決されるまでアンパックすら拒否します。このようなパッケージを、他のパッケー ジの存在に「Pre-depends」していると言います。Debian プロジェクトは、 a.out 形式から ELF 形式へシステムを安全にアップグレー ドするためにこのしくみを作りました。このアップグレードの際はどのパッケー ジがアンパックされるかその順序が重要なのです。この方法が役に立 つ大きなアップグレード状況は他にもあります。例えば「required (要求)」優 先度を持つパッケージとその LibC 依存などです。
先の項目と同様に、より詳しい情報はパッケージングマニュアルにあります。
これらの「want」フラグは利用者がそのパッケージをどう扱いたいかを示し ています。利用者は dselect の「Select」セクションでのアクション や dpkg の直接起動によってこれを示すことができます。
それぞれの意味は以下の通りです。
パッケージを hold するには二つの方法があります。dpkg を使う方法と dselect を使う方法です。
dpkg では、パッケージ選択の一覧を
dpkg --get-selections > selections.txt
で書き出すだけです。それから書き出されたファイル selections.txt
を編集して hold したいパッケージの行を変更します。例えば
libc6 install
を
libc6 hold
にします。ファイルを保存して
dpkg --set-selections < selections.txt
で dpkg データベースに再ロードしてください。
dselect では、[S]elect 画面に入って hold したいパッケージの現在の状態 を確認し、「=」キー (もしくは「H」キー) を押下するだけです。変更は [S]elect 画面を終了するとすぐに反映します。
Debian のソースパッケージは実際には「インストール」できません。作成す るバイナリパッケージを構築したい任意のディレクトリにソースの中身を取り出 せるだけです。 ソースパッケージは source というディレクトリ以下で配布されます。 マニュアルでダウンロードすることもできますし、
apt-get source foo
を使って取得することもできます (このための APT の設定法については
apt-get(8)
マニュアルページを参照してください)。
ソースをコンパイルするには foo_*.dsc と foo_*.tar.gz 、 foo_*.diff.gz のすべてが必要になります (ただし Debian 固有のパッケージに は .diff.gz はありません)。
これらを入手すると、dpkg-dev
パッケージがインストールされて いたら
dpkg-source -x foo_version-revision.dsc
というコマンドを実行すれば foo-version というディレクトリにパッ ケージが取り出されます。
単にパッケージをコンパイルしたいだけなら foo-version ディレ クトリに cd してから
debian/rules build
を実行してプログラムを作成し、root で
debian/rules binary
してパッケージを構築し、
dpkg -i ../foo_version-revision_arch.deb
で新規作成パッケージをインストールすれば結構です。
これについての詳細な情報に関しては『Debian メンテナ入門』を読んでくだ
さい。maint-guide-ja
パッケージか ftp://ftp.debian.org/debian/doc/package-developer/maint-guide.ja.html.tar.gz
で入手できます。