プログラムのソースディレクトリの中に、「debian」という 名前の新しいディレクトリが作られています。 パッケージの動作を自分の意図に合わせて調整するには、 このディレクトリに存在する多くのファイルをその編集します。 最も重要なファイルは「control」、「changelog」、「copyright」、 そして「rules」であり、これらのファイルはすべてのパッケージが 必ず用意しなければならないものです。
このファイルには dpkg
と dselect
が
パッケージを管理するために利用する 様々な情報が記載されています。
以下は dh_make が作ってくれる control ファイルのひな型です。
1 Source: gentoo 2 Section: unknown 3 Priority: optional 4 Maintainer: Josip Rodin <joy-mg@debian.org> 5 Build-Depends: debhelper (>> 3.0.0) 6 Standards-Version: 3.5.2 7 8 Package: gentoo 9 Architecture: any 10 Depends: ${shlibs:Depends} 11 Description: <insert up to 60 chars description> 12 <insert long description, indented with spaces>
(行番号は筆者が書き加えました)
1-6 行目はソースパッケージの管理情報です。
1 行目はソースパッケージの名前です。
2 行目はディストリビューションにおいて このパッケージが所属するセクションです。
既にお気づきかも知れませんが、Debian はいくつかのセクションに 分割されています。セクションには main (完全にフリーなソフトウェア)、 non-free (実際の所フリーであるとはいえないソフトウェア)、そして contrib (それ自身はフリーなソフトウェアであるけれども、non-free な ソフトウェアが無ければ使えないもの) があります。 更に、これらの下には各パッケージをおおまかに分類する 論理的なサブセクションが用意されており、 そこに含まれるパッケージの種類を簡単に説明するような 名前がつけられています。 つまり、管理者専用のプログラムのために「admin」、 基本的なツールのために「base」、 プログラマーのためのツールが含まれる「devel」、 文書の「doc」、ライブラリの「libs」、 電子メールの読み書きに使うリーダや 電子メールサーバを構築するためのデーモンは「mail」、 ネットワーク関係のアプリケーションやデーモンの「net」、 他のどんな分類にもあてはまらないような X11 用の プログラムは「x11」など、そしてさらに多くのものが 用意されています。(訳注:「デーモン」とは多くの場合 「サーバー」を作るためのものです。ご存知ですよね。)
ここでは x11 に変更しておきましょう。 (「main」セクションは省略時のデフォルトなので、 ここには書きません。)
3 行目はこのパッケージをインストールすることが ユーザにとってどれくらい重要なものかを示しています。 このフィールドに何を設定すべきかについては、 Debian ポリシーマニュアルの説明を読んでください。 新規パッケージの場合、優先度「optional」(選択可能) としておけば、通常は問題無いでしょう。
セクション(Section) と優先度 (Priority) は、 dselect
のようなフロントエンドが パッケージをソートする時とデフォルトを選ぶ時に
使われます。パッケージを Debian にアップロードすると、
これらのフィールドの値はアーカイブメンテナたちによって
上書きされる場合があります。このような場合、該当する
パッケージのメンテナにそのことを知らせるための 電子メールが届きます。
(訳注:具体的な仕組みを説明すると、dpkg などのツールは
アーカイブ中に用意される「Packages」ファイルの情報を
パッケージ自体に記録された情報より優先するようになって います。そしてこの
Packages ファイルの作成と更新は
アーカイブメンテナの(たくさんある)仕事のひとつ、 というわけです。)
この gentoo は通常の優先度を持つパッケージですし、 他のパッケージと衝突することもありませんから、 ここでは「optional」のままにしておきましょう。
4 行目はメンテナの名前と電子メールアドレスです。 電子メールの宛先として問題無くそのまま使えるように 記載してください。Debian のバグ追跡システムは、 パッケージがアップロードされたら、ここに記載された 情報を使ってあなたにユーザーからのバグ報告を 転送しようとします。コンマ ,、アンド記号 &、 および括弧 () などの使用は避けてください。
5 行目はあなたのパッケージを生成するために必要となる
パッケージのリストです。例えば gcc や make のように
暗黙の前提としてこのリストに含まれているパッケージも いくつかあります。詳しくは
build-essential
パッケージをご覧ください。もしあなたのパッケージを
生成するために、このリストに記載されていない、
標準的でないコンパイラやその他のツールが必要なら、
それらを「Build-Depends」行に追加しておきます。
複数のパッケージを記載する場合は、コンマで区切ってください。
このフィールドの書式については、バイナリ依存関係(後述)の
ところでもうすこし詳しく説明します。
ここには Build-Depends-Indep や Build-Conflicts など、 その他のソース依存関係を設定することもできます。 これらの情報は Debian がサポートしている他のコンピュータ プラットフォーム用にバイナリパッケージを作成する 自動パッケージ生成プログラムによって利用されます。 ソース依存関係についての詳細は Debian ポリシーマニュアルを、 また Debian がサポートしているプラットフォーム (アーキテクチャ)と、ソフトウェアをそれらへ移植 (ポート)する方法については開発者レファレンスを 参照してください。
以下のようにすれば、自分のパッケージを生成するために 必要となるパッケージを見つけることができます。
strace -f -o /tmp/log ./configure # or make instead of ./configure, if the package don't use autoconf for x in `dpkg -S $(grep open /tmp/log|\ perl -pe 's!.* open\(\"([^\"]*).*!$1!' |\ grep "^/"| sort | uniq|\ grep -v "^\(/tmp\|/dev\|/proc\)" ) 2>/dev/null|\ cut -f1 -d":"| sort | uniq`; \ do \ echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2 -d":"` "), "; \ done
Gentoo の場合、パッケージを生成するために
xlibs-dev
、libgtk1.2-dev
および
libglib1.2-dev
が必要でしたので、 これらを debhelper
に追加しておきます。
6 行目はこのパッケージが準拠している Debian ポリシー基準の バージョン、つまりあなたがパッケージを作成する際に参照した ポリシーマニュアルのバージョンです。
8 行目はバイナリパッケージの名前です。これは通常ソースパッケージ の名前と同じですが、いつもそうだとは限りません。
9 行目にはバイナリパッケージをコンパイル可能な CPU アーキテクチャ
を記述します。 ここを「any」のままにしておけば、
dpkg-gencontrol(1)
が、このパッケージを
コンパイルしたマシンに合わせて適当に埋めてくれます。
あなたのパッケージが特定のアーキテクチャに依存しないのであれば (例えば、シェルや Perl のスクリプトであるとか、あるいは 文書のパッケージである場合) ここを「all」に変更し、パッケージの 生成に「binary-arch」ではなく「binary-indep」を使う方法について の説明をあとで 「rules」ファイル, 第 4.4 節 の項で読んでおいてください。
10 行目は Debian パッケージ管理システムの最も強力な機能のひとつ を示しています。 それぞれのパッケージは様々な形で相互に関係情報を持つことができます。 パッケージ間の関係には、Depends: すなわち「依存」の他に、Recommends:、 Suggests:、Pre-depends:、Conflicts:、Provides:、Replaces: が あります。
dpkg、dselect、APT (そしてそのフロントエンド) などの
パッケージ管理ツールは、通常これらの関係を処理する場合に、 同じ動作をします。
そうでない場合については、追々説明していきます。 (dpkg(8)
、
dselect(8)
、 apt(8)
、 aptitude(1)
などを参照してください)。
以下にこれらの依存関係が通常持つ意味を説明します。
パッケージはここで指定したパッケージをインストールしない限り インストールされません。 あなたのプログラムが特定のパッケージに依存していて、そのパッケージが 存在しない限り全く動作しない (または非常に重大な問題が発生する) 場合には、これを使いましょう。
dselect や aptitude などのフロントエンドの場合、ユーザが インストールのためにパッケージを選択すると、それが「推奨」 しているパッケージも一緒にインストールするよう促します。 さらに dselect の場合には、「Q」または「X」キーで強制的に やめさせるまで、推奨されたパッケージをインストールするよう、 何度でも繰り返し確認を求めてきます。 しかし dpkg と apt-get の場合、「推奨」されたパッケージに 関する情報は無視され、あるパッケージをインストールしても、 そのパッケージが「推奨」しているパッケージについては何の メッセージも表示しませんし、もちろんインストールもしません。 このフィールドには、厳密に言えばあなたのプログラムの動作に 必須ではないけれど、一緒に使うことがほぼ前提となっている ようなパッケージを指定しましょう。
ユーザがパッケージをインストールする際、dselect や aptitude の ようなフロントエンドはすべて、選択したパッケージによって「提案」 されているパッケージも合わせてインストールするかどうか聞いてきます。 dpkg と apt-get の場合はまったく気にしません。 あなたのパッケージの動作に必要というわけではないが、これがあると もっと便利に使える、というパッケージについては、この指定を使って ください。
これは Depends: よりも強い関係を示します。 ここで指定されたパッケージがあらかじめインストールされ、 かつ適切に設定されて いない限り、どのパッケージ 管理ツールもあなたのパッケージをインストールしません。 これを使う前に、まずは debian-devel メーリングリストで 相談しましょう。 できるだけ 使わないようにしましょう。 早い話が、使っちゃいけません。:-)
ここで指定されたパッケージがすべて削除されない限り、 あなたのパッケージはインストールされません。 特定のパッケージが存在しているとあなたのプログラムが 動作しない (または非常に重大な問題が起きる) 場合に、 この指定を使います。
ほぼ同じ機能を持つパッケージが複数あって、選択の余地が ある場合のために、仮想パッケージ名が定義されています。 仮想パッケージ名の一覧は、ファイル /usr/share/doc/debian-policy/virtual-package-names-list.txt.gz にあります。 あなたのプログラムが既存の仮想パッケージに相当する機能を 提供する場合には、これを使います。
あなたのプログラムが他のパッケージに含まれるファイルを 上書きする場合、または他のパッケージ全体を完全に置き換えて しまう場合 (この場合は Conflicts: も一緒に指定してください) この指定を使います。 ここで指定されたパッケージに含まれるファイルは、 あなたのパッケージのファイルによって上書きされます。
これらのフィールドはすべて共通の書式で記述します。 指定したいパッケージ名をコンマで区切って並べてください。 もしいくつか選択肢があれば、それらのパッケージ名を 縦棒 | (パイプ記号)で区切って並べてください。
あるバージョンより上でなければダメ、などというように パッケージのバージョン番号によって制限を加えることも可能です。 これを指定したい場合にはそれぞれのパッケージ名の後で 丸カッコ (パーレン) を開き、以下の関係式に続けて バージョン番号を指定してください。使用できる関係式は <<、<=、=、>=、 >>で、それぞれ 「指定されたものより古いバージョンのみ」、 「指定されたバージョン以前」(指定のバージョンも当然含まれます)、 「指定のバージョンのみ」 「指定されたバージョン以降」(指定のバージョンも当然含まれます)、 「指定されたものより新しいバージョンのみ」 を意味します。 今まで説明してきた依存関係を使うことで、例えば以下のような 指定も可能です。
Depends: foo (>= 1.2), libbar1 (= 1.3.4) Conflicts: baz Recommends: libbaz4 (>> 4.0.7) Suggests: quux Replaces: quux (<< 5), quux-foo (<= 7.6)
最後に、知っておかなければいけない機能をもうひとつ。 それは $(shlibs:Depends)
です。パッケージを生成する際に、
その中身が一時的なディレクトリにインストールされた後、
そこに含まれるバイナリとライブラリによって利用されている
共有ライブラリと、それらの共有ライブラリを含むパッケージ の名前 (例えば libc6
や xlib6g など) が dh_shlibdeps(1)
によって自動的に
調べられます。そしてその結果は dh_gencontrol(1)
に渡され、control
ファイル中の $(shlibs:Depends) と置換されます。
これを使えば、あなた自身が自分で共有ライブラリを調べて記述する
必要はありません。
ここまでの説明でわかるように、今回は Depends: 行を dh_make が 生成してくれたデフォルトの状態のままにしておくことができます。 gentoo は「file」プログラム/パッケージによって提供される機能を いくつか利用することができるので、10 行目の後に新しい行を追加 して、Suggests: file を記入します。
11 行目はこのパッケージに関する短い説明です。多くの人々は 一行 (半角) 80 文字幅のスクリーンでこれを見ますから、 (半角) 60 文字以上にしてはいけません。 今回は「fully GUI configurable X file manager using GTK+」 としました。
12 行目はこのパッケージに関する詳細な説明文です。 ここでは一つの段落でパッケージについてより詳しく説明するように してください。それぞれの行の先頭は空白 (スペース文字) で 始めなければいけません。 また空白行を入れてはいけませんが、先頭の空白の後に . (半角ピリオド) をひとつ書くことで、それらしく見せることができます。 さらに、説明文の後には空白行をひとつも入れてはいけません。
以下が修正後の control ファイルです。
1 Source: gentoo 2 Section: x11 3 Priority: optional 4 Maintainer: Josip Rodin <joy-mg@debian.org> 5 Build-Depends: debhelper (>> 3.0.0), xlibs-dev, libgtk1.2-dev, libglib1.2-dev 6 Standards-Version: 3.5.2 7 8 Package: gentoo 9 Architecture: any 10 Depends: ${shlibs:Depends} 11 Suggests: file 12 Description: fully GUI configurable GTK+ file manager 13 gentoo is a file manager for Linux written from scratch in pure C. It 14 uses the GTK+ toolkit for all of its interface needs. gentoo provides 15 100% GUI configurability; no need to edit config files by hand and re- 16 start the program. gentoo supports identifying the type of various 17 files (using extension, regular expressions, or the 'file' command), 18 and can display files of different types with different colors and icons. 19 . 20 gentoo borrows some of its look and feel from the classic Amiga file 21 manager "Directory OPUS" (written by Jonathan Potter).
(行番号は筆者が書き加えました)
このファイルにはパッケージの上流 (upstream) に関する リソース (URI など)、著作権、およびライセンスなどの情報を記載します。 このファイルの書式は Debian ポリシーに規定されていませんが、 内容については (13.6 節、「Copyright information (著作権情報)」に) 規定されています。
dh_make はデフォルトとして以下のようなひな型を作成します。
1 This package was debianized by Josip Rodin joy-mg@debian.org 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 の copyright ファイルはこんな風になります。
1 This package was debianized by Josip Rodin joy-mg@debian.org 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 the file `/usr/share/common-licenses/GPL'.
(行番号は筆者が書き加えました)
これは必須のファイルです。ポリシーマニュアル 4.4 節 「debian/changelog」にはこのファイルのための特別な書式が 規定されています。 この書式は 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 <joy-mg@debian.org> Wed, 11 Nov 1998 21:02:14 +0100 6
(行番号は筆者が書き加えました)
1 行目はパッケージ名、バージョン、ディストリビューション、 そして緊急度 (urgency) です。 ここに書くパッケージ名はソースパッケージの名前と一致していなければ なりません。 またディストリビューションは「unstable」(または「experimental」) にすべきであり、緊急度は「low」より高いものに変更するべきでは ありません :-)
3-5 行目はログエントリで、ここにこのリビジョンのパッケージで
行われた変更を記述します (上流プログラムそのものの変更点では ありません -
その目的のためには、上流作者によって作成され、
/usr/share/doc/gentoo/changelog.gz としてインストールされる
専用のファイルが存在しています)。
新しい行はアスタリスク(「*」)で始まる最初の行の直前に挿入します。 この操作は
dch(1)
を使うと便利ですが、
その他の普通のテキストエディタを使って実行しても もちろん構いません。
最終的にこんな風になればよいわけです。
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 <joy-mg@debian.org> Wed, 11 Nov 1998 21:02:14 +0100 8
(行番号は筆者が書き加えました)
後述する パッケージの更新, 第 9 章 の中で、changelog ファイルを 更新する方法についてもっと詳しく説明します。
さて、今度は dpkg-buildpackage(1)
が
実際にパッケージを作成するために使う「rules」ファイルを 調べる必要があります。
このファイルは実はもう一つの Makefile といったものですが、 上流ソースに含まれる
Makefile とは違います。 また debian/
ディレクトリに含まれる他のファイルとは異なり、
このファイルには実行属性が付けられています。
すべての「rules」ファイルは、他の Makefile と同じく、 ソースからプログラムを構築する方法を記述したいくつかの ルールによって構成されています。それぞれのルールには ターゲット、ファイル名、あるいは実行されるべき動作 (つまり「build:」や「install:」) などの名前がつけられて います。 あるルールを実行するには (例えば「./debian/rules build」 とか「make -f rules install」といった風に) そのルールを コマンドライン引数として指定します。 ターゲット名の後には、依存関係、つまりそのルールが 必要とするプログラムやファイルの名前を指定できます。 この次の行から、先頭を <タブ>で始めてそのルールの 中で実行すべきコマンドを書いていきます。コマンド行の 数に制限はありません。いくらでも好きなだけ続けられます。 新しいルールを始めるには、行の先頭からターゲット名の宣言を 書きます。複数の空行、および「#」 (ハッシュ) で始まる行は 行の終りまでコメントと見なされ、無視されます。
これだけ読んでもわけが分からないかもしれませんが、dh_make が デフォルトとして作成する「rules」ファイルについて調べていくうちに、 きっと理解できるようになります。 また、info コマンドの「make」エントリーに、より詳細な説明が あるので、これも合わせて読んでおくと良いでしょう。
dh_make によって作成された rules ファイルについて知っておくべき 最も重要なことは、これが単なるひな型であり、ひとつの例でしかない、 ということです。 単純なパッケージならそのまま使えるかもしれませんが、 もっと複雑なパッケージの場合には、必要に応じて追加したり 削除したりすることをためらってはいけません。 あなたが変えてはいけないのはたった一つ、rules ファイル内に 記述された各ルールの名前だけです。 パッケージ管理ツールはすべて、Debian ポリシーの規定に 従ってこれらのルール名を参照するので、変更してしまうと うまくパッケージを生成できなくなってしまいます。
dh_make はデフォルトの debian/rules ファイルとして (おおよそ) 以下のようなひな型を作成します。
1 #!/usr/bin/make -f 2 # Sample debian/rules that uses debhelper. 3 # GNU copyright 1997 to 1999 by Joey Hess. 4 5 # Uncomment this to turn on verbose mode. 6 #export DH_VERBOSE=1 7 8 # This is the debhelper compatibility version to use. 9 export DH_COMPAT=4 10 11 CFLAGS = -g 12 ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) 13 CFLAGS += -O0 14 else 15 CFLAGS += -O2 16 endif 17 18 build: build-stamp 19 build-stamp: 20 dh_testdir 21 22 # Add here commands to compile the package. 23 $(MAKE) 24 #docbook-to-man debian/gentoo.sgml > gentoo.1 25 26 touch build-stamp 27 28 clean: 29 dh_testdir 30 dh_testroot 31 rm -f build-stamp 32 33 # Add here commands to clean up after the build process. 34 -$(MAKE) clean 35 36 dh_clean 37 38 install: build 39 dh_testdir 40 dh_testroot 41 dh_clean -k 42 dh_installdirs 43 44 # Add here commands to install the package into debian/gentoo. 45 $(MAKE) install DESTDIR=$(CURDIR)/debian/gentoo 46 47 # Build architecture-independent files here. 48 binary-indep: build install 49 # We have nothing to do by default. 50 51 # Build architecture-dependent files here. 52 binary-arch: build install 53 dh_testdir 54 dh_testroot 55 # dh_installdebconf 56 dh_installdocs 57 dh_installexamples 58 dh_installmenu 59 # dh_installlogrotate 60 # dh_installemacsen 61 # dh_installpam 62 # dh_installmime 63 # dh_installinit 64 dh_installcron 65 dh_installman 66 dh_installinfo 67 # dh_undocumented 68 dh_installchangelogs ChangeLog 69 dh_link 70 dh_strip 71 dh_compress 72 dh_fixperms 73 # dh_makeshlibs 74 dh_installdeb 75 # dh_perl 76 dh_shlibdeps 77 dh_gencontrol 78 dh_md5sums 79 dh_builddeb 80 81 binary: binary-indep binary-arch 82 .PHONY: build clean binary-indep binary-arch binary install
(行番号は筆者が書き加えました。実際の debian/rules
ファイルでは行頭の空白は TAB コードです。)
1 行目は、シェルや Perl のスクリプトでおなじみの表現でしょう。 これは、このファイルが /usr/bin/make によって処理されることを オペレーティングシステムに指示しています。
6 行目から 9 行目にかけて記述されている、変数 DH_* の
意味は、コメントとして書かれている短い説明を読めばすぐに
わかるでしょう。DH_COMPAT についての詳細はマニュアル ページ
debhelper(1)
の 「Debhelper compatibility levels (debhelper
互換レベル)」 の項を参照してください。
11 行目から 16 行目までは Debian ポリシー 11.1 節 「Binaries (バイナリ)」に規定されたパラメータ DEB_BUILD_OPTIONS をサポートするための枠組です。 簡単に言えば、このパラメータはバイナリをビルドする際に デバッグシンボルを付加するかどうか、またインストールの 際にそれらをストリップすべきかどうかを制御します。 繰り返しますが、ここに記載されているのは単なる枠組であり、 どうすべきかという点についてヒントを示しているに過ぎない、 ということに注意してください。 実際にパッケージを開発する際には、デバッグシンボルの付加と インストール時のストリップについて、上流開発者がソフトウェアを 生成する際にどのように扱っているかを調べ、そして自分自身で このパラメータをサポートする仕組を実装してください。
通常、デバッグシンボルを付加するには、コンパイルの際に CFLAGS 変数を使って gcc に「-g」オプションを指定します。 もしあなたのパッケージもこの方法でうまくいくようなら、 build ルール (後述) の中で $(MAKE) を実行している箇所に CFLAGS="$(CFLAGS)" を 追加して、この 変数を指定します。もしあなたのパッケージが autoconf に よる configure スクリプトを利用しているなら、別の方法と して build ルールの中で ./configure を実行する際に 上記の CFLAGS="$(CFLAGS)" を 前置き して configure スクリプトに渡すこともできます。
ストリップについて説明すると、たいていのプログラムは
ストリップせずにインストールされるよう設定されており、
また多くの場合、それを変更するためのオプションは用意されて
いません。そのような場合でも Debian なら大丈夫、あなたは
dh_strip(1)
を利用することができます。 これは
DEB_BUILD_OPTIONS=nostrip フラッグが設定されているか
どうかを調べて、このフラッグが有効な場合にはバイナリを ストリップせずにそのまま
(エラーを出さずに) 終了してくれます。
18 行目から 26 行目までは「build」 (およびその子供である 「build-stamp」) ルールを記述しており、その中でプログラムを コンパイルするためにアプリケーション自身の Makefile を実行 しています。コメントとして記載されている docbook-to-man の サンプルについては、後で説明する manpage.1.ex, manpage.sgml.ex, 第 5.8 節 の箇所を 参照してください。
28 行目から 36 行目までに記述されている「clean」ルールは、 パッケージの生成過程によって自動生成されたバイナリその他の 不要なファイルをすべて削除します。 このルールはどんな時でも (たとえソースツリーが 削除 されてしまっている状態でも!) きちんと動作しなければいけません。 このため、強制オプションを使うか (たとえば rm なら「-f」)、 返り値 (エラー) を無視する (コマンド名の前に「-」を追加) などの措置を講じてください。
インストール方法を記述する「install」ルールは 38 行目から 始まります。このルールは基本的にプログラム自身の Makefile に 記述されている「install」ルールを実行しますが、インストール 先は $(CURDIR)/debian/gentoo ディレクトリです - このために gentoo の Makefile の中で $(DESTDIR) を ルートインストールディレクトリとして指定しておいたのです。
コメントにもあるように、48 行目の「binary-indep」ルールは アーキテクチャに依存しないパッケージを生成するために使われます。 今回の例はそのようなパッケージではないため、ここでするべきことは 何もありません。
さあ、次のルール - 「binary-arch」の番です。52 行目から 79 行目に かけて記述されたこのルールでは、あなたのパッケージが Debian ポリシー に適合するよう、debhelper パッケージに収録されているいくつかの小さな ユーティリティを実行して、これから生成するパッケージ中のファイルに 対してさまざまな操作を行ないます。
もしあなたのパッケージが「Architecture: all」なら、パッケージを 生成するために必要なコマンドをすべて「binary-indep」ルールの中で 指定し、その代りに「binary-arch」ルールを空にしておかなければ いけません。
debhelper プログラムの名前は dh_ で始まり、残りの部分は そのユーティリティが実際に行なう内容に関する説明となっています。 これらはほとんど読めばすぐわかるような簡単なものですが、 以下に説明を追加しておきます。
dh_testdir(1)
はあなたが正しい ディレクトリ
(つまり、ソースディレクトリのトップレベル) に いるかどうかをチェックします
dh_testroot(1)
は「binary-arch」
および「binary-indep」ターゲットと「clean」ルールの実行に必要な
ルート権限をあなたが持っているかどうかチェックします。
dh_installman(1)
はマニュアル
ページをパッケージ作成用ディレクトリの中の適切な場所へコピー
します。ただしこれを使う際には、インストールしたいマニュアル
ページの場所をソースディレクトリのトップレベルからの相対的な
位置で指定しなければいけません。
dh_strip(1)
はデバッグ用ヘッダを
実行形式ファイルおよびライブラリから取り除き、それらのサイズを 小さくします。
dh_compress(1)
は マニュアルページとサイズが 4 kB
より大きな附属文書を gzip(1)
で圧縮します。
dh_installdeb(1)
はパッケージに 関連するファイル
(例えばメンテナースクリプトなど) を debian/gentoo/DEBIAN
ディレクトリにコピーします。
dh_shlibdeps(1)
はライブラリや
実行形式ファイルが依存している共有ライブラリを判定します。
dh_gencontrol(1)
は control ファイルに必要な情報を追加し、
debian/gentoo/DEBIAN
へインストールします。
dh_md5sums(1)
はパッケージ中の すべてのファイルに対して MD5
チェックサムを計算します。
これらすべての dh_* スクリプトが実際にはそれぞれ何をするのか、 また他にはどんなオプションが使えるのか、などのさらに詳しい情報に ついては、それぞれのマニュアルページを参照してください。 また、ここでは取り上げませんでしたが、非常に便利だと思われる dh_* スクリプトが他にもいくつか用意されています。 これらに関しては、必要に応じて debhelper の説明書を読んでみて ください。
binary-arch セクションの中にある、不要な処理を 実行している行はすべてどんどんコメントにしてしまうか、 あるいは削除してしまうべきです。 gentoo の場合、examples、cron、init、man、そして info に 関する処理は必要ありませんから、コメントにしておきます。 また今回の場合、68 行目の「ChangeLog」を「FIXES」に変更して おきます。上流開発者 (upstream) の changelog (変更履歴) ファイルの名前が FIXES だからです。
最後の 2 行は (説明しなかった他の行と同様に) 多少なりとも 必要なものです。これらについては make のマニュアルや Debian ポリシーマニュアルの中に説明があります。 今のところは、必ず知っておかなくてはいけないような重要な項目 というわけではありません。
Debian 新メンテナガイド
version 1.2, 6 April 2002.joy-mg@debian.org
mhatta@debian.or.jp
sano@debian.org