[ 前のページ ] [ 著作権表示 ] [ 目次 ] [ 次のページ ]

Debian メンテナ入門
章 4 debian/ ディレクトリ以下に無くてはならないファイル


プログラムのメインディレクトリ (「gentoo-0.9.12」) の中に、 「debian」という名前の新しいディレクトリが作られています。 このディレクトリ内には様々なファイルが納められていますが、 パッケージの動作をカスタマイズするために、これらのファイルを これから編集していきます。 最も重要なファイルは「control」、「changelog」、「copyright」、 そして「rules」であり、これらのファイルはすべてのパッケージが 必ず用意しなければならないものです。


4.1 「control」ファイル

このファイルには dpkg と dselect がパッケージを管理するために 利用する様々な情報が納められています。 以下は dh_make が作ってくれる control ファイルのひな型です。

       1  Source: gentoo
       2  Section: unknown
       3  Priority: optional
       4  Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
       5  Standards-Version: 3.0.1
       6
       7  Package: gentoo
       8  Architecture: any
       9  Depends: ${shlibs:Depends}
       10 Description: <insert up to 60 chars description>
       11  <insert long description, indented with spaces>

(行番号は筆者が書き加えました)

1-5 行目はソースパッケージの管理情報です。1行目はソースパッケージの 名前です。

2 行目はディストリビューションにおいてこのパッケージが所属する セクションです。 既にお気づきかも知れませんが、Debian はいくつかのセクションに 分割されています。セクションには main (完全にフリーなソフトウェア)、 non-free (実際の所フリーであるとはいえないソフトウェア)、そして contrib (それ自身はフリーなソフトウェアであるけれども、non-free な ソフトウェアが無ければ使えないもの) があります。 更に、これらの下にはどんなパッケージが含まれているのか簡単に説明する ような名前の付いた、論理的なサブセクションがいくつか 存在しています。 つまり、管理者専用のプログラムのために「admin」、基本的なツールの ために「base」、プログラマーのためのツールが含まれる「devel」、文書の 「doc」、ライブラリの「libs」、電子メールを読み書きするための リーダやデーモンのための「mail」、ネットワーク関係のアプリケーション やデーモンの「net」、X11 用のプログラムのための「x11」など、そして さらに多くのものが用意されています。

ここでは x11 に変更しておきましょう。

3行目はこのパッケージがこのパッケージをインストールする ユーザにとってどれくらい重要なものかを示しています。 セクション(Section) と優先度 (Priority) は、実際には dselect が パッケージをソートするときとデフォルトを選ぶときにしか 使われません。そしてこれらのフィールドは (よくあることですが) 我々の FTP メンテナたちによって上書きされることが あります。 これらのフィールドに何を設定すべきかについては、ポリシーマニュアル の説明を読んでください。

この gentoo は通常の優先度を持つパッケージなので、 ここでは optional のままにしておきましょう。

4 行目はメンテナの名前と電子メールアドレスです。

5 行目はこのパッケージが準拠している Debian ポリシー基準の バージョン (インストールされている debian-policy パッケージの 2 つのメジャーバージョン) です。

もしパッケージを生成するために標準的でないコンパイラ、または その他のツールが必要なら、ここ (5 行目と 6 行目(空行) の間) に 「Build-Depends」行を追加して、必要なパッケージをそこに記載して おきましょう。これについての詳細は、パッケージングマニュアル (8.7 節) および「build-essential」パッケージの附属文書を参照して ください。

7 行目はバイナリパッケージの名前です。

8 行目にはバイナリパッケージをコンパイル可能な CPU アーキテクチャ を記述します。 ここを「any」のままにしておけば、 dpkg-gencontrol(1)が、このパッケージを コンパイルしたマシンに合わせて適当に埋めてくれます。 (パッケージのポーティングについては、開発者レファレンスを参照して ください。) あなたのパッケージが特定のアーキテクチャに依存しないのであれば (例えば、シェルや Perl のスクリプトであるとか、あるいは 文書のパッケージである場合) ここを「all」に変更し、パッケージの 生成に「binary-arch」ではなく「binary-indep」を使う方法について の説明をあとで 「rules」ファイル, Section 4.4 の項で読んでおいてください。

9 行目は Debian パッケージ管理システムの最も強力な機能のひとつ を示しています。 それぞれのパッケージは様々な形で相互に関係情報を持つことができます。 パッケージ間の関係には、Depends: すなわち「依存」の他に、Recommends:、 Suggests:、Pre-depends:、Conflicts:、Provides:、Replaces: が あります。

dpkg、dselect、APT (そしてそのフロントエンド) などの パッケージ管理ツールは、通常これらの関係を処理する場合に、 同じ動作をします。 そうでない場合については、追々説明していきます。 (dpkg(8)dselect(8)apt(8)console-apt(8)gnome-apt(8) を参照してください)。

以下にこれらの依存関係が通常持つ意味を説明します。

これらのフィールドはすべて共通の書式で記述します。 指定したいパッケージ名をコンマで区切って並べてください。 もしいくつか選択肢があれば、それらのパッケージ名を 縦棒 | (パイプ記号)で区切って並べてください。 あるバージョンより上でなければダメ、などというようにパッケージの バージョン番号によって制限を加えることも可能です。 これを指定したい場合にはそれぞれのパッケージ名の後で丸カッコ(パーレン) を開き、以下の関係式に続けてバージョン番号を指定してください。 使用できる関係式は <<<==>=>>で、それぞれ 「指定されたものより古いバージョンのみ」、 「指定されたもの以前か指定のバージョン」、 「指定のバージョンのみ」 「指定されたもの以降か指定のバージョン」、 「指定されたものより新しいバージョンのみ」 を意味します。

最後に、知っておかなければいけない機能をもうひとつ。 それは $(shlibs:Depends) で、例えば libc6 や xlib6g のような あなたのプログラムが利用している共有ライブラリの名前すべてが dh_shlibdeps(1) によって自動的に 調べられ、その結果は dh_gencontrol(1) によってこの記述と 置換されます。 これを使えば、あなた自身が自分で共有ライブラリを調べて記述する 必要はありません。 以上の説明から、今回は 9 行目をそのままにしておくことができます。

ここで 10 行目に gentoo が「提案」するパッケージの一覧を 追加します。 gentoo は「file」プログラム/パッケージによって提供される機能をいくつか 利用することができるので、ここではそれだけを記載しておきましょう。

11 行目はこのパッケージに関する簡潔な説明です。多くの人々は 一行半角 80 文字幅のスクリーンでこれを見ますから、 半角 60 文字以上にしてはいけません。 今回は「A fully GUI configurable GTK+ file manager」としました。

12 行目はこのパッケージに関する詳細な説明文です。 ここでは一つの段落でパッケージについてより詳しく説明するように してください。それぞれの行は空白で始めなければいけません。 また空白行を入れてはいけませんが、先頭の空白の後に . (半角ピリオド) を書くことで、それらしく見せることができます。 また、説明文の後に空白行があってはいけません。

以下が修正後の control ファイルです。

       1  Source: gentoo
       2  Section: x11
       3  Priority: optional
       4  Maintainer: Josip Rodin <jrodin@jagor.srce.hr>
       5  Standards-Version: 3.0.1
       6
       7  Package: gentoo
       8  Architecture: any
       9  Depends: ${shlibs:Depends}
       10 Suggests: file
       11 Description: A fully GUI configurable GTK+ file manager
       12  gentoo is a file manager for Linux written from scratch in pure C. It
       13  uses the GTK+ toolkit for all of its interface needs. gentoo provides
       14  100% GUI configurability; no need to edit config files by hand and re-
       15  start the program. gentoo supports identifying the type of various
       16  files (using extension, regular expressions, or the 'file' command),
       17  and can display files of different types with different colors and icons.
       18  .
       19  gentoo borrows some of its look and feel from the classic Amiga file
       20  manager "Directory OPUS" (written by Jonathan Potter).


4.2 「copyright」ファイル

このファイルにはパッケージの上流 (upstream) に関する リソース (URI など)、著作権、およびライセンスなどの情報を記載します。 このファイルの書式はポリシーに規定されていませんが、内容については (6.5 節に) 規定されています。 dh_make はデフォルトとして以下のようなひな型を作成します。

       1  This package was debianized by Josip Rodin jrodin@jagor.srce.hr on
       2  Wed, 11 Nov 1998 21:02:14 +0100.
       3
       4  It was downloaded from <fill in ftp site>
       5
       6  Upstream Author(s): <put author(s) name and email here>
       7
       8  Copyright:
       9
       10 <Must follow here>

(行番号は筆者が書き加えました)

ここでファイルに追加すべき重要なことは、あなたがこのソフトウェアを 入手した場所と、実際に有効な著作権表示およびライセンスです。 原則としてライセンスは全文を含めなければなりません。 ただし、もしプログラムのライセンスが GNU GPL または LGPL、BSD、 あるいは Artistic などの良く知られたフリーソフトウェアのライセンス であって、どの Debian システムにも存在するディレクトリ /usr/share/common-licenses/ の中の適切なファイルを参照することで ライセンスの内容をすべて示すことができる場合に限って、 全文をここに引用する必要はありません。 gentoo は GNU 一般使用許諾 (GPL) に従って配布されていますから、 こんな風に変更しましょう。

       1  This package was debianized by Josip Rodin jrodin@jagor.srce.hr on
       2  Wed, 11 Nov 1998 21:02:14 +0100.
       3
       4  It was downloaded from http://www.obsession.se/gentoo/
       5
       6  Upstream Author(s): Emil Brink <emil@obsession.se>
       7
       8  This software is copyright (c) 1998-99 by Emil Brink, Obsession
       9  Development.
       10
       11 You are free to distribute this software under the terms of
       12 the GNU General Public License.
       13 On Debian systems, the complete text of the GNU General Public
       14 License can be found in /usr/share/common-licenses/GPL file.

(行番号は筆者が書き加えました)


4.3 「changelog」ファイル

これは必須のファイルです。パッケージングマニュアル (3.2.3 節) にはこのファイルのための特別な書式が規定されています。 この書式は dpkg やその他のプログラムによってあなたのプログラムの バージョン番号、レビジョン、ディストリビューション、それに緊急度 (urgency) を識別するために利用されます。

あなたが行なったすべての変更をきちんと記載しておくことは 良いことであり、その意味でこのファイルはまた、パッケージメンテナ であるあなたにとっても重要なものです。 あなたのパッケージをダウンロードした人々は、 このファイルを見ることで、ユーザが最初に知っておくべき このパッケージに関する解決されていない問題があるかどうかを 知ることができます。 このファイルはバイナリパッケージ中に 「/usr/share/doc/gentoo/changelog.Debian.gz」として保存されます。

dh_make がデフォルトとして生成する changelog はこんな感じです。

       1  gentoo (0.9.12-1) unstable; urgency=low
       2
       3   * Initial Release.
       4
       5  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       6
       7  Local variables:
       8  mode: debian-changelog
       9  End:

(行番号は筆者が書き加えました)

1 行目はパッケージ名、バージョン、ディストリビューション、 そして緊急度 (urgency) です。 ここに書くパッケージ名はソースパッケージの名前と一致していなければ なりません。 またディストリビューションは (今の時点では) 「unstable」または 「experimental」のどちらかにすべきであり、緊急度は「low」より 高いものに変更するべきではありません :-)

3-5 行目はログエントリで、ここにこのリビジョンのパッケージで 行われた変更を記述します (上流プログラムそのものの変更点では ありません - その目的のためには、上流作者によって作成され、 /usr/share/doc/gentoo/changelog.gz としてインストールされる 専用のファイルが存在しています)。 新しい行はアスタリスク(「*」)で始まる最初の行の直前に挿入します。 この操作は dch(1)、や emacs(1) (7-10 行目は Emacs エディタ用のモード情報です) を使うと 便利ですが、その他の普通のテキストエディタを使って実行しても もちろん構いません。 最終的にこんな風になればよいわけです。

       1  gentoo (0.9.12-1) unstable; urgency=low
       2
       3   * Initial Release.
       4   * This is my first Debian package.
       5   * Adjusted the Makefile to fix $DESTDIR problems.
       6
       7  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       8
       9  Local variables:
       10  mode: debian-changelog
       11 End:

(行番号は筆者が書き加えました)

パッケージの新バージョンをリリースする際には、バージョン番号を 増やさなければいけません。 これは単に「dch -i」を実行するか、あるいは 「dch -v <version>-<revision>」によって明示的に バージョン番号を指定して、その後で好みのエディタを使って 必要なコメントを記載していきます。 ヒント: 規定の書式で日時を入力する簡単な方法。 「822-date」または「date -R」を使いましょう。

新バージョンについての情報は changelog ファイルの先頭に追加されます。 作業後 changelog はこんな風になります。

       1  gentoo (0.9.12-2) unstable; urgency=low
       2
       3   * Fixed a glitch in the menu file.
       4
       5  -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 22:15:39 +0100
       6
       7  gentoo (0.9.12-1) unstable; urgency=low
       8
       9   * Initial Release.
       10  * This is my first Debian package.
       11  * Adjusted the Makefile to fix $DESTDIR problems.
       12
       13 -- Josip Rodin <jrodin@jagor.srce.hr> Wed, 11 Nov 1998 21:02:14 +0100
       14
       15 Local variables:
       16 mode: debian-changelog
       17 End:

(行番号は筆者が書き加えました)

あとから パッケージの更新, Section 6.4 の中で新しいパッケージの バージョンとレビジョンについてもっと詳しく説明します。


4.4 「rules」ファイル

さて、今度は dpkg-buildpackage(1) が 実際にパッケージを作成するために使う「rules」ファイルを 調べる必要があります。 このファイルは「make -f」で実行されるため、実はもう一つの Makefile といったものですが、上流ソースに含まれる Makefile とは 違います。

すべての「rules」ファイルは、他の Makefile と同じく、ソースから プログラムを構築する方法を記述したいくつかのルールによって 構成されています。 それぞれのルールはいくつかのターゲット、ファイル名、 あるいは実行されるべき動作の名前(つまり「build:」や「install:」) によって構成されます。 実行したいルールは、コマンドライン引数として指定します (例えば「./debian/rules build」または「make -f rules install」と いうように)。ターゲット名の後には、依存関係、そのルールが 依存しているプログラムやファイルの名前を指定できます。 この後には、いくらでもコマンドを記述できます (各行を <タブ>で始めてください!) 空行があると、そこで一つのルールが終り、次のルールが 始まります。複数の空行、および「#」 (ハッシュ) で始まる行は 行の終りまでコメントと見なされ、無視されます。

以上を読んでもわけが分からないかもしれませんが、dh_make が デフォルトとして作成する「rules」ファイルを実際に読んでみると、 理解できるようになるでしょう。 また、info コマンドの「make」エントリーに、より詳細な説明が あるので、読んでおくと良いでしょう。

dh_make によって作成された rules ファイルについて知っておくべき 最も重要なことは、これが単なる提案であり、サンプルに過ぎない、と いうことです。 単純なパッケージに対してはこのままでも使えるでしょうけれど、 もっと複雑なパッケージの場合には、必要に応じて追加したり 省略したりすることをためらってはいけません。 あなたが変えてはいけないのはたった一つ、rules ファイル内に 記述された各ルールの名前だけです。 すべてのツールがパッケージングマニュアルに規定されたように これらの名前を参照するので、ルールの名前を変更してしまうと うまくパッケージを生成できなくなってしまいます。

       1  #!/usr/bin/make -f
       2  # Made with the aid of dh_make, by Craig Small
       3  # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
       4  # Some lines taken from debmake, by Christoph Lameter.
       5
       6  # Uncomment this to turn on verbose mode.
       7  #export DH_VERBOSE=1
       8
       9  # This is the debhelper compatability version to use.
       10 export DH_COMPAT=1
       11
       12 build: build-stamp
       13 build-stamp:
       14	dh_testdir
       15
       16	# Add here commands to compile the package.
       17	$(MAKE)
       18
       19	touch build-stamp
       20
       21 clean:
       22	dh_testdir
       23	dh_testroot
       24	rm -f build-stamp
       25
       26	# Add here commands to clean up after the build process.
       27	-$(MAKE) clean
       28
       29	dh_clean
       30
       31 install: build-stamp
       32	dh_testdir
       33	dh_testroot
       34	dh_clean -k
       35	dh_installdirs
       36
       37	# Add here commands to install the package into debian/tmp.
       38	$(MAKE) install DESTDIR=`pwd`/debian/tmp
       39
       40 # Build architecture-independent files here.
       41 binary-indep: build install
       42 # We have nothing to do by default.
       43
       44 # Build architecture-dependent files here.
       45 binary-arch: build install
       46 #	dh_testversion
       47	dh_testdir
       48	dh_testroot
       49 #	dh_installdebconf
       50	dh_installdocs
       51	dh_installexamples
       52	dh_installmenu
       53 #	dh_installemacsen
       54 #	dh_installpam
       55 #	dh_installinit
       56	dh_installcron
       57	dh_installmanpages
       58	dh_installinfo
       59 #	dh_undocumented
       60	dh_installchangelogs
       61	dh_link
       62	dh_strip
       63	dh_compress
       64	dh_fixperms
       65	# You may want to make some executables suid here.
       66	dh_suidregister
       67 #	dh_makeshlibs
       68	dh_installdeb
       69 #	dh_perl
       70	dh_shlibdeps
       71	dh_gencontrol
       72	dh_md5sums
       73	dh_builddeb
       74
       75 binary: binary-indep binary-arch
       76 .PHONY: build clean binary-indep binary-arch binary install

(行番号は筆者が書き加えました)

1 行目は、シェルや Perl のスクリプトでおなじみの表現でしょう。 これは、このファイルが /usr/bin/make によって処理されることを オペレーティングシステムに指示しています。

12 行目から 19 行目までは「build」 (およびその子供である 「build-stamp」) ルールを記述しており、その中でプログラムを コンパイルするためにアプリケーション自身の Makefile を実行 しています。

21 行目から 29 行目までに記述されている「clean」ルールは、 パッケージの生成過程によって自動生成されたバイナリその他の 不要なファイルをすべて削除します。 このルールはどんな時でも (たとえソースツリーが 削除 されてしまっている状態でも!) きちんと動作しなければいけません。 このため、強制オプションを使うか (たとえば rm なら「-f」)、 返り値を無視する (コマンド名の前に「-」を追加) などの措置を 講じてください。

インストール方法を記述する「install」ルールは 31行目から 始まります。このルールは基本的にプログラム自身の Makefile に 記述されている「install」ルールを実行しますが、 インストール先は `pwd`/debian/tmp ディレクトリです - このために gentoo の Makefile の中で $(DESTDIR) を ルートインストールディレクトリとして指定しておいたのです。

コメントにもあるように、41 行目の「binary-indep」ルールは アーキテクチャに依存しないパッケージを生成するために使われます。 今回の例はそのようなパッケージではないため、ここでするべきことは 何もありません。 もしあなたのパッケージが「Architecture: all」なら、パッケージを 生成するために必要なコマンドをすべてこのルールの中で指定し、 その代りに次のルール (「binary-arch」) を空にしておかなければ いけません。

さあ、次のルール - 「binary-arch」の番です。45 行目から 73 行目に かけて記述されたこのルールでは、あなたのパッケージが Debian ポリシー に適合するよう、debhelper パッケージに収録されているいくつかの小さな ユーティリティを実行して、これから生成するパッケージ中のファイルに 対してさまざまな操作を行ないます。

これらのユーティリティの名前は dh_ で始まり、残りの部分は そのユーティリティが実際に行なう内容に関する説明となっています。 これらはほとんど読めばすぐわかるような簡単なものですが、 以下に説明を追加しておきます。

これらすべての dh_* スクリプトが実際にはそれぞれ何をするのか、 また他にはどんなオプションが使えるのか、などのさらに詳しい情報に ついては、それぞれの man ページを参照してください。 また、ここでは取り上げませんでしたが、非常に便利だと思われる dh_* スクリプトが他にもいくつか用意されています。 これらに関しては、必要に応じて debhelper の説明書を読んでみて ください。

binary-arch セクションの中にある、不要な処理を実行している行は すべてどんどんコメントにしてしまうべきです。gentoo の場合には、 testversion、emacsen、pam、init、cron、manpages、info、undocumented、 suidregister, makeshlibs、そして perl に関する行を、単に gentoo が これらの処理を必要としていないという理由によってコメントにします。 また、今回の場合、60 行目に「FIXES」を追加する必要があります。 上流開発者 (upstream) の changelog (変更履歴) ファイルの名前が FIXES だからです。

最後の 2 行は (説明しなかった他の行と同様に) 多少なりとも 必要なものです。これらについては make のマニュアルや パッケージングマニュアルの中に説明があります。 今のところは、必ず知っておかなくてはいけないような重要な項目 というわけではありません。


[ 前のページ ] [ 著作権表示 ] [ 目次 ] [ 次のページ ]
Debian メンテナ入門
version 1.0, 2000 年 1 月 25 日
Josip Rodin jrodin@jagor.srce.hr
翻訳: 八田真行 mhatta@debian.or.jp