[% title = "The Debian GNU/Linux FAQ - Debian パッケージ管理システムの基本" %]
[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 次のページ ]
一般にパッケージには関連するコマンドや機能を実装するにに必要なファイ ルすべてが含まれています。Debian パッケージには二つのタイプがあります。
バイナリパッケージ。これには実行ファイル、設定ファイル、 man ページと info ページ、著作権情報やその他の文書が含まれます。これら のパッケージは Debian 固有のアーカイブ形式で配布されています (Debian バイナリパッケージはどんな形式ですか?, 第 6.2 節 参照)。また .deb というファイル拡張子を持っているので、 普通それと分かります。バイナリパッケージは Debian ユーティリティ dpkg を用いて展開できます。詳細はそのマニュアルページに記載さ れてあります。
ソースパッケージ。ソースパッケージの解説が書かれた .dsc ファイル (このファイルには以下のファイルの名前も書かれて います) や、修整されていないオリジナルのプログラムソースが gzip で圧縮 された tar フォーマット形式で含まれている .orig.tar.gz ファイ ル、通常 Debian 固有の変更を記した .diff.gzファイルから構成 されています。dpkg-source ユーティリティは Debian ソースアー カイブをパックしたりアンパックしたりします。詳細はマニュアルページに記 載されています。
このパッケージシステムでは、ソフトウェアをインストールするとき、パッ
ケージ保守担当者が注意深く設計した「依存情報」を使います。この依存情報は
それぞれのパッケージに関連する制御 (control)ファイルに記載され
ています。例えば、GNU C コンパイラ (gcc
) を含むパッケージは、
リンカやアセンブラを含む binutils
パッケージに「依存」していま
す。もしユーザがあらかじめ binutils
をインストールしていないの に
gcc
をインストールしようとしたなら、Debian のパッケージシス テムは
binutils
も必要であるというエラーメッセージを出力し、ユー ザがまず
binutils
をインストールするのに同意するまで gcc
をインストールしません (とは言うものの、頑固なユーザはこの
機能を上書きできます)。詳細は下記の 他のパッケージに
Depends/Recommends/Suggests/Conflicts/Replaces/Provides しているとはどう
いう意味ですか?, 第 6.9 節をご覧ください。
Debian のパッケージングツールは以下の用途に使えます。
パッケージやパッケージの一部を操作したり管理したりする。
フロッピーディスクなどの限られたサイズの媒体を通じて伝送しなけれ ばならないパッケージをユーザが分解するのを助ける。
パッケージアーカイブを開発者が構築するのを助ける。
遠くにあるFTPサイトに置かれたパッケージをユーザがインストールす るのを助ける。
Debian の「パッケージ」つまり Debian アーカイブファイルには、実行プロ グラム一式や関連するプログラムのセットに関係する実行可能ファイルやライブ ラリ・文書が含まれています。通常、Debian アーカイブファイルはファイル名 の最後に .debが付いています。
Debian バイナリパッケージの形式の内部仕様は deb(5)
マニュアルページに解説されています。この内部形式は (Debian GNU/Linux
のメジャーリリースの間で) 変更されることがあるので、 .deb
ファイルを操作する時は必ず dpkg-deb(8)
を使って下さい。
Debian バイナリパッケージのファイル名は次のような規則に従います。 <foo>_<バージョン番号>-<Debian リビジョン番号>.deb。
foo はパッケージ名の代わりであることに注意して下さい。照会す るためには、以下の方法で特定の Debian アーカイブファイル (.deb ファイル ) に関係のあるパッケージ名を調べることができます。
Debian FTP アーカイブサイトの中の、そのパッケージが置かれていた ディレクトリにある「Packages」ファイルを調べる。このファイルにはそれぞ れのパッケージの解説が数行づつ書かれています。解説行の最初のフィールド は正式なパッケージ名です。
コマンド dpkg --info foo_VVV-RRR.deb を使う (VVV と RRR はそれぞれ、問い合わせたいパッケージのバージョンとリビジョン)。この コマンドは、アンパックされるアーカイブファイルに対応するパッケージ名を 他の情報と一緒に表示します。
VVV の部分はバージョン番号を示し、上流の開発者により指定され ます。この部分には標準がありません。バージョン番号は「19960513」や 「1.3.8pre1」のようにフォーマットが異なっているかもしれません。
RRR の部分は Debian のリビジョン番号で、Debian の開発者 (か自分 自身のためにパッケージをビルドすることにした個人ユーザ) が決定します。こ の番号は Debian パッケージのリビジョンレベルに対応します。したがって、リ ビジョンレベルが新しくなると、普通、Debian の Makefile (debian/rules) や Debian 制御ファイル (debian/control)、インストールまたは削除スクリプト (debian/p*)、パッケージが利用する設定ファイルなどに変更があった ことを意味します。
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 章「制御ファイルとそのフィールド」 を参照してください。
conffile は (通常 /etc/の下に置かれる) 設定ファイルの一覧で す。これらの設定ファイルはパッケージをアップグレードしてもパッケージ管理 システムに上書きされません。つまり、これらのファイルの内容のローカルな値 が保存されることが保証されます。また、稼動中のシステムのパッケージをきち んと更新できるようにする重要な機能です。
更新中にどのファイルが保存されるかを正確に断定するには
dpkg --status package
を実行して「Conffile:」の下を見てください。
これらのファイルはパッケージがインストールされる前か後で自動的に実行 される実行可能なスクリプトです。これらのファイルは control とい う名前のファイルと一緒にすべて Debian アーカイブファイルの制御セクション の一部となっています。
個々のファイルは以下の通りです。
このスクリプトは、パッケージが Debian アーカイブ (「.deb」) ファイ ルからアンパックされる前に実行されます。パッケージがインストールかアップ グレードし終わる (「postinst」スクリプトが正常に実行されたあと) まで、多 くの「preinst」スクリプトの中で、更新されるパッケージのためにサービスが 停止されるようになっています。
このスクリプトの典型的な仕事は、パッケージ foo が Debian アーカイブファイル (「.deb」) からアンパックされたらそれに必要な 設定をすべて完了させることです。「postinst」スクリプトのよくある動作とし て、ユーザに入力を求め、既定値を受け入れるなら後戻りしてこのパッケージを 環境に沿うように再設定することを忘れないように警告を表示します。新しいパッ ケージがインストールされるかアップグレードされると、多くの「postinst」ス クリプトはサービスを開始または再開するのに必要なコマンドをすべて実行しま す。
このスクリプトは典型的にはパッケージに関連したあらゆるデーモンを停 止します。これはパッケージに関連したファイルを削除する前に実行されます。
このスクリプトは典型的には foo に関連したリンクや他のファ イルを修整したりパッケージが作成したファイルを削除したりします (仮想パッケージとはなんですか?, 第 6.8 節 も参照してください)。
現在、制御ファイルはすべて /var/lib/dpkg/info/ に置かれてい ます。パッケージ foo に関係するファイルは「foo」で始まる名前を 持ち、「preinst」や「postinst」などの適当なファイル拡張子を持ちます。こ のディレクトリにある foo.list というファイルは、パッケージ foo によってインストールされたファイルがすべてリストされていま す (これらのファイルの存在場所は dpkg が内部に持っていることに注意して下 さい。存在場所を頼りにしないほうがいいでしょう)。
それぞれの Debian パッケージには、パッケージ管理システムの助けとして、 ディストリビューション保守担当者が優先度を割りあてています。優 先度には以下のものがあります。
Required (要求): システムを正しく動作させるため に必要なパッケージです。
システムの欠陥を修復するのに必要なツールをすべて含みます。これら のパッケージを消去してはいけません。システムがすっかり破壊され、復旧 するために dpkg を使うことすら恐らくできなくなります。Required パッ ケージだけのシステムは恐らく使いものになりませんが、システム管理者が 起動したり他のソフトウェアをインストールするだけの機能はあります。
Important (重要): どのような Unix ライクなシス テムにもあるべきパッケージです。
Required 以外のパッケージで、ないとシステムがうまく動かなかったり 不便だったりするものにこの優先度がつけられています。これには Emacs や X11、TeX 他の巨大なアプリケーションは含まれていません。 ここのパッケージは、素のインフラストラクチャを構成するだけです。
Standard (標準): どんな Linux システムにも標準 的なパッケージで、手頃な小ささですが機能が限定されすぎていないキャラ クタモードシステムを含んでいます。
ユーザが何も指示しなかったらデフォルトでインストールされます。多 くの巨大なアプリケーションは含まれませんが、Emacs はあります (これは アプリケーションというよりも多くのプログラムのためのインフラストラク チャの一部です) し、TeX と LaTeX の手頃なサブセットが (X なしで稼動 可能な部分なら) 含まれています。
Optional (任意): そのパッケージが何なのかを知ら なかったり、そのパッケージを使わなければならない特別な要求がなかった りしてもインストールしてかまわないパッケージが含まれています。
これには X11 や TeX 配布物全体、多くのアプリケーションが含まれて います。
Extra (付録): より高い優先度を持つパッケージと 衝突するか、そのパッケージがどういうものか知っているか、あるいは「任意」 というには相応しくない特殊な要求を持っているパッケージです。
仮想パッケージとは、すべて同じ基本機能を提供するパッケージの集まりの どれか一つに供される一般的な名前のことです。たとえば 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 は どのようにしてサポートしていますか?, 第 10.10 節 の節でより詳しく解説されています。
Debian パッケージシステムはパッケージ「依存性」に幅を持っています。あ るシステム上でプログラム A がプログラム B の存在からどれくらい独立して動 作させられるかを (フラグ一つで) 表示するよう設計されています。
もし A を実行するためには B が必ずインストールされていなければな らないなら、パッケージ A はパッケージ B に依存 (Depend)して います。A は B の存在だけではなく B のバージョンにも依存していること があります。この場合、バージョン依存性は通常下限を設定します。つまり、 A はあるバージョンより新しいバージョンの B に依存しているということ です。
パッケージ A の保守担当者が、たいていのユーザはパッケージ B の機 能を使うことなく A を使いたくはないだろうと判断したら、パッケージ A はパッケージ B を推奨 (Recommends)しているといいます。
もしパッケージ B に含まれているファイルがパッケージ A の機能に関 係している (通常は機能を拡張する) なら、パッケージ A はパッケージ B を提案 (Suggest)すると言います。
システムにパッケージ B がインストールされているとパッケージ A が 動作しないというとき、パッケージ A はパッケージ B と衝突 (conflicts)していると言います。ほとんどの場合、衝突はパッケージ B に含まれているファイルをパッケージ A が書き換えるのが原因で起こり ます。「衝突 (Conflicts)」はしばしば「置換 (Replaces)」と組みあわさ れます。
パッケージ B がインストールしたファイルが削除され (ある場合には) パッケージ A のファイルで上書きされるとき、パッケージ A はパッケージ B を置換 (Replace)するといいます。
パッケージ B のすべてのファイルと機能がパッケージ A の中に組み込 まれているとき、パッケージ A はパッケージ B を提供 (Provide)するといいます。このしくみは、ディスクの空き容量に余裕 がないユーザに、パッケージ A のなかで本当に必要な部分を取得する方法 を用意します。
これらの用語の使用法についてのより詳しい情報は Debian パッケージング マニュアルとポリシーマニュアルにあります。
「Pre-Depends」は特殊な依存性です。たいていのパッケージでは、 dpkg はそのアーカイブファイル (つまりその .deb ファイ ル)を、そのパッケージが依存するファイルがシステムにあろうがなかろうが、 アンパックしようとします。単純にいうと、アンパックとは dpkg が アーカイブファイルからファイルを取り出すことを意味しています。取り出され たファイルはファイルシステムにインストールされ、あるべき場所に置かれるこ とになります。これらのパッケージが他のパッケージに依存している なら dpkg はその他のパッケージがインストールされるまで「設定」 動作を行わずにインストールの完了を拒否します。
しかしながらいくつかのパッケージでは dpkg はある依存関係が解 決されるまでアンパックすら拒否します。このようなパッケージを、他のパッケー ジの存在に「Pre-depends」していると言います。Debian プロジェクトは、 a.out 形式から ELF 形式へシステムを安全にアップグレー ドするためにこのしくみを作りました。このアップグレードの際はどのパッケー ジがアンパックされるかその順序が重要なのです。この方法が役に立 つ大きなアップグレード状況は他にもあります。例えば「required (要求)」優 先度を持つパッケージとその LibC 依存などです。
先の項目と同様に、より詳しい情報はパッケージングマニュアルにあります。
これらの「want」フラグは利用者がそのパッケージをどう扱いたいかを示し ています。利用者は dselect の「Select」セクションでのアクション や dpkg の直接起動によってこれを示すことができます。
それぞれの意味は以下の通りです。
unknown - インストールするかどうかユーザが表明していないパッケー ジ
install - ユーザがインストールまたはアップグレードしたいパッケー ジ
remove - 削除はしたいが、既存の設定ファイルは一つも削除したくな いパッケージ
purge - 設定ファイルを含め、完全に削除してしまうパッケージ
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 画面を終了するとすぐに反映します。
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
で入手できます。
[ 前のページ ] [ 目次 ] [ 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