[% title = "The Debian GNU/Linux FAQ - Debian パッケージ管理システムの基本" %]


[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 次のページ ]


The Debian GNU/Linux FAQ
第 6 章 - Debian パッケージ管理システムの基本


6.1 Debian パッケージとはどのようなものですか?

一般にパッケージには関連するコマンドや機能を実装するにに必要なファイ ルすべてが含まれています。Debian パッケージには二つのタイプがあります。

このパッケージシステムでは、ソフトウェアをインストールするとき、パッ ケージ保守担当者が注意深く設計した「依存情報」を使います。この依存情報は それぞれのパッケージに関連する制御 (control)ファイルに記載され ています。例えば、GNU C コンパイラ (gcc) を含むパッケージは、 リンカやアセンブラを含む binutils パッケージに「依存」していま す。もしユーザがあらかじめ binutils をインストールしていないの に gcc をインストールしようとしたなら、Debian のパッケージシス テムは binutils も必要であるというエラーメッセージを出力し、ユー ザがまず binutils をインストールするのに同意するまで gcc をインストールしません (とは言うものの、頑固なユーザはこの 機能を上書きできます)。詳細は下記の 他のパッケージに Depends/Recommends/Suggests/Conflicts/Replaces/Provides しているとはどう いう意味ですか?, 第 6.9 節をご覧ください。

Debian のパッケージングツールは以下の用途に使えます。


6.2 Debian バイナリパッケージはどんな形式ですか?

Debian の「パッケージ」つまり Debian アーカイブファイルには、実行プロ グラム一式や関連するプログラムのセットに関係する実行可能ファイルやライブ ラリ・文書が含まれています。通常、Debian アーカイブファイルはファイル名 の最後に .debが付いています。

Debian バイナリパッケージの形式の内部仕様は deb(5) マニュアルページに解説されています。この内部形式は (Debian GNU/Linux のメジャーリリースの間で) 変更されることがあるので、 .deb ファイルを操作する時は必ず dpkg-deb(8) を使って下さい。


6.3 どうして Debian パッケージのファイル名はこんなに長い のですか?

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*)、パッケージが利用する設定ファイルなどに変更があった ことを意味します。


6.4 Debian 制御ファイルとは何ですか?

Debian 制御ファイルの内容に関する仕様は Debian パッケージングマニュア ルの第 4 章にあります。Debian システムに関するドキュメントは他にどんなも のがありますか?, 第 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 パッケージのファイル名はこんなに長い のですか?, 第 6.3 節 で説明したもの) が表示されます。

Architecture フィールドにはどの CPU 向けにそのバイナリがコンパイルさ れているか書かれています。

Depends フィールドにはこのパッケージをきちんとインストールするために、 あらかじめインストールされていなければならないパッケージの一覧があります。

Installed-Size フィールドはインストールしたパッケージがどれくらいディ スク領域を消費するかを表しています。プログラムをインストールするのに十分 なディスクがあるかどうかをインストールのフロントエンドが表示するために使 われる予定です。

Section フィールドは Debian パッケージが Debian FTP サイトのどの「セ クション」に収容されるかを示します。これはパッケージが収容されるサブディ レクトリ(main ディレクトリの中の一つ。Debian FTP アーカイブにあるあのディレクトリは何ですか?, 第 5.1 節 参照) の名前で す。

Priority フィールドはこのパッケージがインストールにあたってどのくらい 重要かを示します。これによって dselect や console-apt のような半インテリ ジェントなソフトウェアが、パッケージを「任意にインストールされるパッケー ジ」のようなカテゴリーに並べ変えられるようになります。Required/Important/Standard/Optional/Extra パッケー ジとはなんですか ?, 第 6.7 節 を参照してください。

Maintainer フィールドは、現在そのパッケージの維持に責任を持っている人 の電子メールアドレスを示します。

Description フィールドはパッケージの特徴の簡単なまとめがあります。

パッケージで使えるすべての可能なフィールドのより詳細な情報に関しては Debian パッケージングマニュアルの第 4 章「制御ファイルとそのフィールド」 を参照してください。


6.5 Debian conffile とは何ですか?

conffile は (通常 /etc/の下に置かれる) 設定ファイルの一覧で す。これらの設定ファイルはパッケージをアップグレードしてもパッケージ管理 システムに上書きされません。つまり、これらのファイルの内容のローカルな値 が保存されることが保証されます。また、稼動中のシステムのパッケージをきち んと更新できるようにする重要な機能です。

更新中にどのファイルが保存されるかを正確に断定するには

     dpkg --status package

を実行して「Conffile:」の下を見てください。


6.6 Debian preinst、postinst、prerm、postrm スクリプ トとは何ですか?

これらのファイルはパッケージがインストールされる前か後で自動的に実行 される実行可能なスクリプトです。これらのファイルは control とい う名前のファイルと一緒にすべて Debian アーカイブファイルの制御セクション の一部となっています。

個々のファイルは以下の通りです。

preinst

このスクリプトは、パッケージが Debian アーカイブ (「.deb」) ファイ ルからアンパックされる前に実行されます。パッケージがインストールかアップ グレードし終わる (「postinst」スクリプトが正常に実行されたあと) まで、多 くの「preinst」スクリプトの中で、更新されるパッケージのためにサービスが 停止されるようになっています。

postinst

このスクリプトの典型的な仕事は、パッケージ foo が Debian アーカイブファイル (「.deb」) からアンパックされたらそれに必要な 設定をすべて完了させることです。「postinst」スクリプトのよくある動作とし て、ユーザに入力を求め、既定値を受け入れるなら後戻りしてこのパッケージを 環境に沿うように再設定することを忘れないように警告を表示します。新しいパッ ケージがインストールされるかアップグレードされると、多くの「postinst」ス クリプトはサービスを開始または再開するのに必要なコマンドをすべて実行しま す。

prerm

このスクリプトは典型的にはパッケージに関連したあらゆるデーモンを停 止します。これはパッケージに関連したファイルを削除する前に実行されます。

postrm

このスクリプトは典型的には foo に関連したリンクや他のファ イルを修整したりパッケージが作成したファイルを削除したりします (仮想パッケージとはなんですか?, 第 6.8 節 も参照してください)。

現在、制御ファイルはすべて /var/lib/dpkg/info/ に置かれてい ます。パッケージ foo に関係するファイルは「foo」で始まる名前を 持ち、「preinst」や「postinst」などの適当なファイル拡張子を持ちます。こ のディレクトリにある foo.list というファイルは、パッケージ foo によってインストールされたファイルがすべてリストされていま す (これらのファイルの存在場所は dpkg が内部に持っていることに注意して下 さい。存在場所を頼りにしないほうがいいでしょう)。


6.7 Required/Important/Standard/Optional/Extra パッケー ジとはなんですか ?

それぞれの Debian パッケージには、パッケージ管理システムの助けとして、 ディストリビューション保守担当者が優先度を割りあてています。優 先度には以下のものがあります。


6.8 仮想パッケージとはなんですか?

仮想パッケージとは、すべて同じ基本機能を提供するパッケージの集まりの どれか一つに供される一般的な名前のことです。たとえば tintrn プログラムはどちらもニュースリーダであり、それゆえ、動作す るか便利に使うかするためにニュースリーダを要求するプログラムの依存性を満 たします。したがって両プログラムは news-reader と呼ばれる「仮想 パッケージ」を供給します。

同様に、smailsendmail には両方ともメール配送エー ジェント (mail transport agent) の機能が備わっています。それゆえ仮想パッ ケージ「mail transport agent」を提供するといわれます。どちらかがインストー ルされていれば、mail transport agent がインストールされているこ とに依存するプログラムはどれでも、この仮想パッケージが存在しているので条 件を満たされています。

Debian はこのようなしくみを提供するので、同じ仮想パッケージを持つパッ ケージが一つ以上システムにインストールされると、システム管理者は優先パッ ケージを設定できます。関連するコマンドは update-alternatives で、 mawk が好きなユーザもいれば gawk が好きなユーザもいま す。vim が好きなユーザもいれば elvis が好きなユーザもいます。trn が好き なユーザもいればtin が好きなユーザもいます。このような多様性を Debian は どのようにしてサポートしていますか?, 第 10.10 節 の節でより詳しく解説されています。


6.9 他のパッケージに Depends/Recommends/Suggests/Conflicts/Replaces/Provides しているとはどう いう意味ですか?

Debian パッケージシステムはパッケージ「依存性」に幅を持っています。あ るシステム上でプログラム A がプログラム B の存在からどれくらい独立して動 作させられるかを (フラグ一つで) 表示するよう設計されています。

これらの用語の使用法についてのより詳しい情報は Debian パッケージング マニュアルとポリシーマニュアルにあります。


6.10 Pre-Depends とはどういう意味ですか?

「Pre-Depends」は特殊な依存性です。たいていのパッケージでは、 dpkg はそのアーカイブファイル (つまりその .deb ファイ ル)を、そのパッケージが依存するファイルがシステムにあろうがなかろうが、 アンパックしようとします。単純にいうと、アンパックとは dpkg が アーカイブファイルからファイルを取り出すことを意味しています。取り出され たファイルはファイルシステムにインストールされ、あるべき場所に置かれるこ とになります。これらのパッケージが他のパッケージに依存している なら dpkg はその他のパッケージがインストールされるまで「設定」 動作を行わずにインストールの完了を拒否します。

しかしながらいくつかのパッケージでは dpkg はある依存関係が解 決されるまでアンパックすら拒否します。このようなパッケージを、他のパッケー ジの存在に「Pre-depends」していると言います。Debian プロジェクトは、 a.out 形式から ELF 形式へシステムを安全にアップグレー ドするためにこのしくみを作りました。このアップグレードの際はどのパッケー ジがアンパックされるかその順序が重要なのです。この方法が役に立 つ大きなアップグレード状況は他にもあります。例えば「required (要求)」優 先度を持つパッケージとその LibC 依存などです。

先の項目と同様に、より詳しい情報はパッケージングマニュアルにあります。


6.11 パッケージ状態の unknown/install/remove/purge/hold とはどういう意味ですか?

これらの「want」フラグは利用者がそのパッケージをどう扱いたいかを示し ています。利用者は dselect の「Select」セクションでのアクション や dpkg の直接起動によってこれを示すことができます。

それぞれの意味は以下の通りです。


6.12 どうしたらパッケージを hold にできますか?

パッケージを 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 画面を終了するとすぐに反映します。


6.13 ソースパッケージをインストールするにはどうしたらよ いですか?

Debian のソースパッケージは実際には「インストール」できません。作成す るバイナリパッケージを構築したい任意のディレクトリにソースの中身を取り出 せるだけです。 ソースパッケージは source というディレクトリ以下で配布されます。 マニュアルでダウンロードすることもできますし、

     apt-get source foo

を使って取得することもできます (このための APT の設定法については apt-get(8) マニュアルページを参照してください)。


6.14 ソースパッケージからバイナリパッケージを作るには どうしたらよいですか?

ソースをコンパイルするには 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

で新規作成パッケージをインストールすれば結構です。


6.15 Debian パッケージを自分で作るにはどうしたらよい ですか?

これについての詳細な情報に関しては『Debian メンテナ入門』を読んでくだ さい。maint-guide-ja パッケージか ftp://ftp.debian.org/debian/doc/package-developer/maint-guide.ja.html.tar.gz で入手できます。


[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 次のページ ]


The Debian GNU/Linux FAQ

version CVS, 2 January 2007

著者, 第 15.1 節