Product SiteDocumentation Site

15.2. 最初のパッケージのビルド

15.2.1. メタパッケージか偽物のパッケージ

偽物のパッケージとメタパッケージは似ています。両者は自分のメタデータをパッケージ取り扱いスタックに置いておくためだけに存在する抜け殻です。
偽物のパッケージの目的は、dpkgapt を騙して、抜け殻に過ぎない幾つかのパッケージがインストールされていると信じこませる事にあります。これを使うことで、あるソフトウェアの依存関係を満足させるために必要なソフトウェアがパッケージシステムの管轄外にインストールされている場合に、そのソフトウェアの依存関係を満足させる事が可能です。この方法は問題を解決しますが、これはできる限り避けるべき方法です。なぜなら、手作業でインストールされたソフトウェアが対応するパッケージと全く同様に振る舞う保証はありませんし、手作業でインストールされたソフトウェアに依存する他のパッケージが適切に動く保証もないからです。
逆に、メタパッケージはほとんどの場合依存関係の集合体として機能します。メタパッケージをインストールするだけで、一連の他のパッケージがインストールされます。
偽物のパッケージとメタパッケージは equivs-controlequivs-build コマンド (equivs パッケージに含まれます) を使って作成されます。equivs-control file コマンドは Debian パッケージヘッダファイルを作成します。 Debian パッケージヘッダファイルには、パッケージの名前、バージョン番号、メンテナ、依存関係、説明を含めるように編集します。デフォルト値を持たない他のフィールドは任意で、削除する事も可能です。CopyrightChangelogReadmeExtra-Files フィールドは Debian パッケージの標準的なフィールドではありません; これらのフィールドは equivs-build を使う限りにおいて意味を持つものであり、生成されるパッケージのヘッダから削除されるべきです。

例15.2 libxml-libxml-perl 偽物のパッケージのヘッダファイル

Section: perl
Priority: optional
Standards-Version: 3.8.4

Package: libxml-libxml-perl
Version: 1.57-1
Maintainer: Raphael Hertzog <hertzog@debian.org>
Depends: libxml2 (>= 2.6.6)
Architecture: all
Description: Fake package - module manually installed in site_perl
 This is a fake package to let the packaging system
 believe that this Debian package is installed. 
 .
 In fact, the package is not installed since a newer version
 of the module has been manually compiled & installed in the
 site_perl directory.
次のステップでは、equivs-build file コマンドを使って Debian パッケージを生成します。さぁこれで、パッケージは現在のディレクトリに作成され、他の Debian パッケージと同様に取り扱う事が可能になります。

15.2.2. 単純なファイルアーカイブ

Falcot Corp の管理者は大量のマシン上に一連の文書を配備する事を簡単に行うために Debian パッケージを作成する必要があります。この作業を担当する管理者は最初に「新メンテナーガイド」を読み、その後最初のパッケージに対する作業に着手します。
最初に、対象のソースパッケージを含める falcot-data-1.0 ディレクトリを作成します。このパッケージは必然的に、falcot-data と名付けられ、バージョン番号は 1.0 になります。その後、管理者は文書ファイルを data サブディレクトリに置きます。その後、管理者は dh_make コマンド (dh-make パッケージに含まれます) を実行し、パッケージ生成作業に必要なファイルを追加します。このファイルは debian サブディレクトリに保存されます:
$ cd falcot-data-1.0
$ dh_make --native

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs?
 [s/i/m/l/k/n/b] i

Maintainer name : Raphael Hertzog
Email-Address   : hertzog@debian.org
Date            : Mon, 11 Apr 2011 15:11:36 +0200
Package Name    : falcot-data
Version         : 1.0
License         : blank
Usind dpatch    : no
Type of Package : Independent
Hit <enter> to confirm:
Currently there is no top level Makefile. This may require additional tuning.
Done. Please edit the files in the debian/ subdirectory now. You should also
check that the falcot-data Makefiles install into $DESTDIR and not in / .
$
パッケージの種類で single binary を選ぶと、ソースパッケージから単一のバイナリパッケージをアーキテクチャ毎に (Architecture: any) 生成します。indep binary はその逆の振る舞いで、対象のアーキテクチャに依存しない (Architecture: all) 単一のバイナリを生成します。今回作成するパッケージの場合、indep binary がより適切です。なぜなら、このパッケージは文書だけを含みバイナリプログラムを含まないからです。このため、すべてのアーキテクチャのコンピュータで同じように使う事が可能です。
multiple binary を選ぶと、ソースパッケージから復数のバイナリパッケージを作成する事になります。library は特別な場合で、共有ライブラリ用に用意されています。なぜなら、共有ライブラリは厳しいパッケージ化規則に従う必要があるからです。同様に、kernel module はカーネルモジュールを含むパッケージ用に用意されています。最後に、cdbs は特定のパッケージビルドシステム用に用意されています; これはかなり柔軟ですが、より多くの知識が必要です。
dh_make コマンドは debian サブディレクトリと各種ファイルを作成しました。一部のファイル、特に rulescontrolchangelogcopyright は必須です。.ex 拡張子を持つファイルは例ファイルで、必要ならばこれらのファイルをひな形として (拡張子を削除して) 使う事が可能です。必要なければ例ファイルを削除する事をおすすめします。compat ファイルはそのままにしておくべきです。なぜなら、compat ファイルはパッケージビルド作業の様々な段階で使われる debhelper プログラムスイート (dh_ から始まるプログラム群) を適切に動作させるために必要だからです。
copyright ファイルには、必ずパッケージに含まれる文書の著者と対応するライセンスに関する情報を含めなければいけません。今回の場合、パッケージには内部文書が含まれ、その使用は Falcot Corp 社内だけに制限されています。デフォルトの changelog ファイルはほとんどの場合に適切です; 「Initial release」をより詳しい説明に置き換えたり、unstableinternal に変えるだけで十分です。control ファイルも更新します: section は misc に変更され、HomepageVcs-GitVcs-Browser は削除されました。Depends フィールドには iceweasel | www-browser を指定しました。これはパッケージ内の文書を表示するために必要なウェブブラウザがインストールされている事を保証するためです。

例15.3 control ファイル

Source: falcot-data
Section: misc
Priority: optional
Maintainer: Raphael Hertzog <hertzog@debian.org>
Build-Depends: debhelper (>= 7.0.50~)
Standards-Version: 3.8.4

Package: falcot-data
Architecture: all
Depends: iceweasel | www-browser, ${misc:Depends}
Description: Internal Falcot Corp Documentation
 This package provides several documents describing the internal
 structure at Falcot Corp.  This includes:
  - organization diagram
  - contacts for each department.
 .
 These documents MUST NOT leave the company.
 Their use is INTERNAL ONLY.

例15.4 changelog ファイル

falcot-data (1.0) internal; urgency=low

  * Initial Release.
  * Let's start with few documents:
    - internal company structure;
    - contacts for each department.

 -- Raphael Hertzog <hertzog@debian.org>  Mon, 11 Apr 2011 20:46:33 +0200

例15.5 copyright ファイル

This work was packaged for Debian by Raphael Hertzog <hertzog@debian.org>
on Mon, 11 Apr 2011 20:46:33 +0200

Copyright:

    Copyright (C) 2004-2011 Falcot Corp

License:

    All rights reserved.
rules ファイルには、(生成されるバイナリパッケージにちなんで名付けられた) 専用のサブディレクトリ内で対象のソフトウェアを設定、ビルド、インストールするために使われる一連の規則が定義されています。このサブディレクトリの内容はあたかもサブディレクトリがファイルシステムのルートであるかの如く Debian パッケージの中に保存されます。今回の場合、ファイルは debian/falcot-data/usr/share/falcot-data/ サブディレクトリにインストールされます。こうすることで、生成されたパッケージをインストールすると、ファイルが /usr/share/falcot-data/ の下に配備されます。rules ファイルは Makefile として使われ、幾つかの標準的なターゲット (定義済みの cleanbinary はそれぞれソースディレクトリを削除する場合、バイナリパッケージを生成する場合に使います) が定義されています。
rules ファイルはビルド作業の核心で、debhelper ツールによって提供される標準的なコマンド群を実行するために必要な最低限の要素だけを含みます。これが面倒を見るのは dh_make によって生成されたファイルだけです。自分のファイルをインストールするためには、以下の debian/falcot-data.install ファイルを作成して、dh_install コマンドの挙動を単純に設定します。
data/* usr/share/falcot-data/
この時点で、パッケージを作成する事が可能になります。しかしながら、もう少しファイルを追加します。管理者はグラフィカルデスクトップ環境のヘルプメニューから文書へ簡単にアクセスできるようにしたいので、Debian メニューシステムにエントリを作成しました。これは debian/menu.ex の拡張子を外し、以下のとおり編集することで、単純に行われます。

例15.6 menu ファイル

?package(falcot-data):needs=X11|wm section=Help\
  title="Internal Falcot Corp Documentation" \
  command="/usr/bin/x-www-browser /usr/share/falcot-data/index.html"
?package(falcot-data):needs=text section=Help\
  title="Internal Falcot Corp Documentation" \
  command="/usr/bin/www-browser /usr/share/falcot-data/index.html"
needs フィールドが X11|wm に設定された場合、このエントリがグラフィカルインターフェースでのみ意味を持つ事を意味します。そのため、このエントリはグラフィカル (X11) アプリケーションとウィンドウマネージャ (wm) のメニューに統合されます。section フィールドはこのエントリが表示されるメニュー内の場所を指定します。今回の場合、このエントリは Help メニューに表示されます。title フィールドはメニューに表示されるテキストを指定します。最後に、command フィールドはユーザがメニューエントリを選択した時に実行するコマンドを指定します。
2 番目のエントリは 1 番目のエントリを Linux コンソールテキストモードに適応させたものです。
パッケージ内でメニューを有効化するには、単純に debian/menu ファイルを作成するだけで十分です。なぜなら、パッケージビルド作業の間に dhdh_installmenu コマンドを自動的に呼び出すからです。
これでソースパッケージの準備が整いました。最後に残された作業は、以前パッケージを再ビルドした際に使った方法と同じ方法を使って、バイナリパッケージを生成する事です: バイナリパッケージを生成するには、falcot-data-1.0 ディレクトリの中で、dpkg-buildpackage -us -uc コマンドを実行します。