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

目次

1.1. Debianにおける社会ダイナミクス
1.2. 開発に必要なプログラム
1.3. 開発に必要な文書
1.4. 相談するには

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

The rewrite of this tutorial document with updated contents and more practical examples is available as Guide for Debian Maintainers. Please use this new tutorial as the primary tutorial document.

This document is made available for the Debian Buster release since it is offered in many translations but this will be dropped in the following releases since contents are getting outdated. [1]

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

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

If you need some help with packaging, please read 「相談するには」.

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

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

あなたが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 が如何にして機能し、あなたが如何にすれば関与できるのかは以下を参照下さい:

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

The following packages come with the standard Debian installation, so you probably have them already (along with any additional packages they depend on). Still, you should check them with aptitude show package or with dpkg -s package.

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

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

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

  • debhelperdh-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 - this utility lets you emulate being root, which is necessary for some parts of the build process. (See 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 - a tool that enables you to digitally sign packages. This is especially important if you want to distribute packages to other people, and you will certainly be doing that when your work gets included in the Debian distribution. (See gpg(1).)

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

  • lintian - this is the Debian package checker, which lets you know of any common mistakes after you build the package and explains the errors found. (See lintian(1), Lintian User's Manual.)

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

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

  • pbuilder - this package contains programs which are used for creating and maintaining a chroot environment. Building a Debian package in this chroot environment verifies the proper build dependency and avoids FTBFS (Fails To Build From Source) bugs. (see pbuilder(8) and 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等のようにパッケージ依存関係でインストールされたプログラムを含むパッケージングに関連する各プログラムに付属の文書を読み、標準的な使い方だけでも理解しておいてください。いまはきついと思われるかも知れませんが、あとになればきっと 読んでてよかったなあ と思うことでしょう。もし後日特定の疑問を持った場合は上記で触れた文書を読み返すことをお勧めします。

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

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

  • developers-reference - the Debian Developer's Reference describes all matters not specifically about the technical details of packaging, like the structure of the archive, how to rename, orphan, or adopt packages, how to do NMUs, how to manage bugs, best packaging practices, when and where to upload, etc. (See the local copy of /usr/share/doc/developers-reference/developers-reference.pdf.)

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

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

The following is an alternative tutorial document that you may read along with this document:

Before you decide to ask your question in some public place, please read this fine documentation:

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

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

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

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

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

Even if it all worked well, it's time to start praying. Why? Because in just a few hours (or days) users from all around the world will start to use your package, and if you made some critical error you'll get mailbombed by numerous angry Debian users… Just kidding. :-)

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



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

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

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