第1章 まずは正攻法で始めよう

# 第1章 まずは正攻法で始めよう

最新の内容とより実用的な例でこの入門書を書き換えたものが Guide for Debian Maintainers として入手できます。この新しい入門書を第一次的な入門書として使ってください。

この文書では、一般の Debian ユーザーやデベロッパーを目指している人を対象に Debian パッケージのビルド方法の解説を試みます。技術用語はできるだけ避けて、実用的な例示を多用しています。古いラテンの諺にもあるように、Longum iter est per praecepta, breve et efficax per exempla (百聞は一見にしかず) です。

本文書は多くの翻訳があるため Debian `Buster` リリースでは提供されます。本文書はこれに続くリリースでは内容が陳腐化しているため提供されなくなります。[1]

Debian を最高峰の Linux ディストリビューションたらしめている理由のひとつが、そのパッケージ管理システムです。すでに膨大な数のソフトウェアが Debian 形式で配布されていますが、まだパッケージ化されていないソフトウェアをインストールしなければならないことがあるでしょう。どうやったら自分でパッケージが作れるんだろうとか、それはとても難しいことなんじゃないかなどと考えたことがありませんか。確かに、もしあなたが本当に駆け出しの Linux ユーザーなら難しいでしょうが、それなら今ごろこんな文書を読んでませんよね :-) Unix のプログラミングについて少々知っている必要がありますが、神様みたいに精通している必要は全くありません。 [2]

ただ、確かなことがひとつあります。Debian パッケージをきちんと作成し保守していくには時間がかかるということです。間違えないでください、Debian のシステムが機能するには、メンテナーは技術的に有能であるだけでなく、勤勉であることも必要なのです。

パッケージ作成において手助けが必要な際には、「相談するには」 を読んでください。

この文書の最新版は常に以下の場所からネットワーク経由で入手できます。http://www.debian.org/doc/maint-guide/ また、`maint-guide`パッケージにも含まれています。日本語訳は`maint-guide-ja`パッケージに含まれています。本文書の内容が少々古くなっているかもしれない事に注意して下さい。

本書は入門書ですので、一部の重要なトピックスは詳細なステップを個々説明するようにしました。あなたには不要と思われる部分があるかもしれません。我慢して下さい。本文書を簡潔にするように一部のコーナーケースを意識的に省略したり参照を提供するだけに止めています。

## 1.1. Debianにおける社会ダイナミクス

あなたがDebian と関わる際の準備となることを望み、Debianの社会ダイナミクスの観察結果を記します:

- 我々全員はボランティアです。

  - 他人に何をするかを押し付けてはいけません。

  - 自分自身で行う意欲を持つべきです。

- 友好的な協力が推進力です。

  - あなたの寄与は他人にストレスを掛けすぎてはいけません。

  - あなたの寄与は他人に評価されて初めて価値があります。

- Debian は教師の注意が自動的にあなたに注がれるあなたの学校とは違います。

  - 多様な案件の独学能力を持つべきです。

  - 他ボランティアに注意を払ってもらうことは貴重なリソースです。

- Debian は常に改良されています。

  - あなたには高品質パッケージを作成することが期待されています。

  - あなたは変化に自らを適合させる必要があります。

Debian 界隈では異なる役割で色々なタイプの人が交流しています:

- upstream author (アップストリームの作者): 元のプログラムを作った人です。

- upstream maintainer (アップストリームのメンテナー): 現在プログラムをメンテナンスしている人です。

- maintainer (メンテナー): プログラムの Debian パッケージを作成している人です。

- sponsor (スポンサー): メンテナーのパッケージを、(内容をチェックした後で)公式 Debian パッケージアーカイブにアップロードするのを手伝う人です。

- mentor (指導役): 新米メンテナーをパッケージを作成等で手助けする人です。

- Debian Developer (Debian デベロッパー) (DD): 公式 Debian パッケージアーカイブへの全面的アップロード権限を持っているDebian プロジェクトのメンバーです。

- Debian Maintainer (Debian メンテナー) (DM): 公式 Debian パッケージアーカイブへの限定的アップロード権限持っている人です。

技術的なスキル以外の要件があるので、一夜にして正式な Debian デベロッパー (DD) になることはできません。これでがっかりしないでください。あなたのパッケージが他の人にとっても有用ならば、あなたはそれをメンテナーとして スポンサー を通して、あるいは Debian メンテナー として、アップロードすることが可能です。

正式な Debian デベロッパーになるのに新しいパッケージの作成は必須ではないことに注意してください。既存のパッケージに対して貢献していくことでも正式な Debian デベロッパーへの道は開かれます。多くのパッケージがよいメンテナーを待っています (「プログラムの選定」 を参照)。

本書ではパッケージングの技術面にのみフォーカスするので、Debian が如何にして機能し、あなたが如何にすれば関与できるのかは以下を参照下さい:

- Debian: フリーソフトウェアと、"do-ocracy" (実行による支配)と、democracy (多数決による支配)の17年間 (紹介スライド、英語)

- Debian に協力するには? (正規)

- The Debian GNU/Linux FAQ, Chapter 13 - "Contributing to the Debian Project" (準正規)

- Debian Wiki, HelpDebian (補足)

- Debian New Member サイト (正規)

- Debian Mentors FAQ (補足)

## 1.2. 開発に必要なプログラム

何はさておき、開発に必要なパッケージがきちんとインストールされていることを確認するべきです。以下のリストには `essential` または `required` なパッケージが含まれていないことに注意してください。これらのパッケージは既にインストールされていることを前提としています。

以下のパッケージは Debian の標準 (standard) インストール構成に含まれており、すでに (それらが依存する他のパッケージとともに) システムに含まれているはずです。しかし、念のために `aptitude show `package`` もしくは `dpkg -s `package`` を用いて確認しておきましょう。

開発用システムにインストールする一番重要なパッケージは、`build-essential` です。これをインストールしようとすると、基本的なビルド環境で必要な他のパッケージを 引き込むでしょう。

パッケージの種類によっては、必要になるのはこれが全てかもしれません。ただ、すべてのパッケージのビルドに必須ではないにせよ、インストールしておくと便利だったり、パッケージによっては必要になったりするパッケージ群があります:

- `autoconf` と `automake` と `autotools-dev` - 多くの新しいプログラムが、これらのプログラムを使って前処理される設定スクリプトや `Makefile` を利用しています。 (詳しくは `info autoconf`, `info automake` を参照)。 `autotools-dev` には、特定の auto ファイルを最新版に保ち、 そのようなファイルを使う最善の方法についてのドキュメントが含まれています。

- `debhelper` と `dh-make` - `dh-make` は例示に用いられたパッケージのひな型を用意するのに必要となり、またそれはパッケージの生成をするために `debhelper` ツールをいくつか使います。これらを使わなくてもパッケージ作成は可能ですが、初めてパッケージを作る方には利用を強くお勧めします。こうすると、取り付きやすく、以後パッケージを管理するのもずっと簡単です。 (詳しくは dh_make(8)、debhelper(1) を参照。) [3]

  標準的な `dh-make` の代わりに、新しい`debmake` が使えます。機能が多く種々のパッケージング例が `debmake-doc` 中の文書に含まれます。

- `devscripts` - このパッケージはメンテナーにとって便利であると思われる有用で優れたスクリプトを含んでいますが、だからといってパッケージをビルドするために必須というわけではありません。このパッケージが推奨 (Recommends)、あるいは提案 (Suggests) しているパッケージは、一見の価値があります。(詳しくは `/usr/share/doc/devscripts/README.gz` を参照。)

- `fakeroot` - このユーティリティを使うと、ビルドの過程で何度か必要となる root 権限をエミュレートすることができます。(詳しくは fakeroot(1) を参照。)

- `file` - この便利なプログラムを使うと、そのファイルがどういう形式のものか判定することができます。(詳しくは file(1) を参照。)

- `gfortran` - GNU Fortran 95 コンパイラ。あなたのプログラムが Fortran 言語で書かれている場合に必要です。(詳しくは gfortran(1) 参照。)

- `git` - このパッケージは人気のあるバージョン管理システムで、大規模なプロジェクトを素早く、効率的に扱えるように設計されています。知名度の高い多数のオープンソースプロジェクトで使われており、特に有名なものとして Linux カーネルがあります。(詳しくは git(1)、git Manual (`/usr/share/doc/git-doc/index.html`) 参照。)

- `gnupg` - このツールを使うと、パッケージに「デジタル 署名」を付けることができます。もしあなたが自分の作成したパッケージを他の人々に配布したいのなら、これは特に重要です。また、Debian ディストリビューションにあなたの作成したパッケージが含まれるようになった時には、確実にこのデジタル署名をすることになります。(詳しくは gpg(1) 参照。)

- `gpc` - GNU Pascal コンパイラ。あなたのプログラムが Pascal 言語で書かれている場合に必要です。ここで注目に値するのは `fp-compiler` Free Pascal コンパイラで、こちらもまたこの作業に適しています。(詳しくは gpc(1)、 ppc386(1) 参照。)

- `lintian` - これは Debian パッケージチェッカで、あなたがビルドしたパッケージを調べて、その中にありがちなミスが見つかったらそれを指摘し、その問題について説明してくれます。(詳しくは lintian(1)、 Lintian User's Manual 参照。)

- `patch` - このとても有用なユーティリティは、(diff プログラムによって生成された) オリジナルとの差分が列挙されたファイルを読み込んでオリジナルのファイルに適用し、パッチが当てられたバージョンを作成します。 (詳しくは patch(1) を参照。)

- `patchutils` - このパッケージには、lsdiff、 interdiff や filterdiff といったパッチを扱うユーティリティが含まれています。

- `pbuilder` - このパッケージには chroot 環境の作成や保守に使用されるプログラムが含まれます。この chroot 環境下で Debian パッケージをビルドすることで適切なビルド依存を確認して FTBFS (Fails To Build From Source) バグを回避することができます。(詳しくは pbuilder(8) と pdebuild(1) 参照)

- `perl` - Perl は今日の UNIX 系システムにおいてもっとも使われているインタープリタ型スクリプト言語のひとつで、その強力さはしばしば「Unix のスイス軍用チェーンソー」と形容されるほどです。(詳しくは perl(1) を参照。)

- `python` - Python は Debian システムにおいてもっとも使われているもう一つの インタープリタ型スクリプト言語で、並外れたパワーと非常に明快な書式を 兼ねそなえています。 (詳しくは python(1) を参照。)

- `quilt` - このパッケージは、一連のパッチそれぞれの変更点を追跡して、その管理を補助するものです。パッチは簡単に当てたり、外したり、刷新したり色々することができます。(詳しくは quilt(1)、 `/usr/share/doc/quilt/quilt.pdf.gz` 参照。)

- `xutils-dev` - ある種のプログラム (通常 X11のために開発されたもの) は、これらのプログラムを利用して、マクロ関数の組み合わせから `Makefile` 群を生成します。(詳しくは imake(1)、 xmkmf(1) 参照。)

上記の簡単な説明は、それぞれのパッケージが何をするのか紹介するだけのものです。先に進む前にmake等のようにパッケージ依存関係でインストールされたプログラムを含むパッケージングに関連する各プログラムに付属の文書を読み、標準的な使い方だけでも理解しておいてください。いまはきついと思われるかも知れませんが、あとになればきっと 読んでてよかったなあ と思うことでしょう。もし後日特定の疑問を持った場合は上記で触れた文書を読み返すことをお勧めします。

## 1.3. 開発に必要な文書

以下は、この文書と合わせて読むべきとても重要な文書です:

- `debian-policy` - Debian Policy Manual (Debian ポリシーマニュアル)は、Debian アーカイブの構造と内容、OS の設計に関するいくつかの案件、Filesystem Hierarchy Standard (FHS、個々のファイルやディレクトリーがどこにあるべきかを規定した文書) が含まれています。さしあたって重要なのは、ディストリビューションに含まれるためにそれぞれのパッケージが満たすべき必要条件の説明です (ローカルコピーのpolicy.pdf と `/usr/share/doc/debian-policy/fhs/fhs-3.0.pdf.gz` を参照。)

- `developers-reference` - Debian Developer's Reference (Debian デベロッパーリファレンス)には、例えばアーカイブの構造、パッケージ名の変更方法、パッケージの選び方、メンテナーを降りるにはどうしたらよいか、どうやって NMU をするか、バグとのつき合い方、パッケージ作成のベストプラクティス、いつどこにアップロードすればよいかなどなど、特に技術的な事柄以外のパッケージ化についてのありとあらゆる情報がここにあります。(ローカルコピーの `/usr/share/doc/developers-reference/developers-reference.pdf` を参照。)

以下は、この文書と合わせて読むべきとても重要な文書です:

- Autotools Tutorial は、Autoconf、Automake、Libtool や gettext を最も重要な構成要素としてもつ GNU Autotools として知られる GNU ビルドシステム の非常に好適な入門書です。

- `gnu-standards` - このパッケージには、GNU プロジェクトからの文書が 2 つ含まれています。GNU コーディング標準と、GNU ソフトウェアのメンテナー向け情報です。Debian ではこれらに従うことは求められませんが、ガイドラインまたは常識としても有用です(ローカルコピーの `/usr/share/doc/gnu-standards/standards.pdf.gz` と `/usr/share/doc/gnu-standards/maintain.pdf.gz` を参照。)

この文書が、上記文書の記述と矛盾している場合は、そちらが正解です。reportbug を使って`maint-guide` パッケージにバグレポートをしてください。

以下は、この文書と合わせて読める同様の入門書です:

- Debian Packaging Tutorial

## 1.4. 相談するには

公開の場で質問をすると決心する前に、以下に示す良くできた文書を読みましょう:

- 全ての関与するパッケージの `/usr/share/doc/`package`` 中のファイル

- 全ての関与するコマンドの `man `command`` の内容

- 全ての関与するコマンドの `info `command`` の内容

- debian-mentors@lists.debian.org メーリングリストのアーカイブ の内容

- debian-devel@lists.debian.org メーリングリストのアーカイブ の内容

`site:lists.debian.org` のような検索文字列を含めてドメインを制約するようなことでウェブ検索エンジンをより効率的に利用することを考えましょう。

小さなテストパッケージを作ることは、パッケージ作成の詳細を学ぶよい方法です。他の人がどのようにパッケージを作成しているか学ぶには、既存のよく保守されているパッケージを調べるのが一番です。

入手可能な文書やウェブのリソースからは答えを見つけられない疑問が残った場合には、インタラクティブに疑問を聞く事が出来ます:

- debian-mentors@lists.debian.org メーリングリスト。 (初心者向けメーリングリストです。)

- debian-devel@lists.debian.org メーリングリスト。 (上級者向けメーリングリストです。)

- `#debian-mentors` の様な IRC。

- 特定群のパッケージにフォーカスしたチーム (全リストはhttps://wiki.debian.org/Teamsを参照下さい)

- debian-devel-{french,italian,portuguese,spanish}@lists.debian.org や debian-devel@debian.or.jp 等の特定言語のメーリングリスト(全リストは https://lists.debian.org/devel.html と https://lists.debian.org/users.html を参照下さい)

あなたがするべき努力をした後に適切に質問すれば、より経験を持った Debian デベロッパーは喜んで助けてくれるでしょう。

バグレポート (そう、本物のバグレポートです！) を受けとったら、レポートを効率的に処理するために、Debian バグ追跡システム に入り込み、その説明文書を読む時だということがわかるでしょう。Debian デベロッパーリファレンスの 5.8. 'Handling bugs' を読むよう、強くおすすめします。

すべてうまくやったとしても、これからはお祈りの時間です。なぜか？ それは、ほんの数時間 (あるいは数日) で、世界中のユーザーがそのパッケージを使いはじめるからです。もし何か致命的なエラーをやらかしていたら、膨大な数の怒った Debian ユーザーからメール爆弾を受けとることになります……なんて冗談ですが :-)

リラックスしてバグ報告に備えてください。なにしろ、そのパッケージが Debian ポリシーやそのベストプラクティスに完全に沿うようになるまでには、やらなくてはいけないことは沢山あるのですから (繰り返しますが、詳細は正式の文書を読んでください)。頑張ってください！

[1] 文中では、`jessie` より新しいシステムを使っていると想定しています。古いシステム (古い Ubuntu システム等を含む)を使ってこの文書についていきたいのであれば、少なくともバックポートされた `dpkg` および `debhelper` パッケージをインストールする必要があります。

[2] Debian システムの基本的な操作は Debian Reference から学べます。Unix プログラミングに関しても学べるいくつかのポインターも含まれています。

[3] `dh-make-perl`、`dh-make-php`等のように、同様の内容で特化したパッケージもいくつかあります。

Debian 新メンテナーガイド |  | 第2章 はじめの一歩