独自のDebパッケージやaptリポジトリを作ってみよう 2ページ

ビルド設定や設定ファイルなどをカスタマイズする

 ソースディレクトリ内にあるdebianディレクトリには、ビルドの際のconfigure設定や独自に追加するファイル、パッチファイルなどが格納されている。パッケージをカスタマイズしたい場合は、ここにある設定ファイルを編集したり、ファイルを追加することで対応できる。

 ビルドの設定については、debianディレクトリ内にある「rules」ファイルに記述されている。このファイルはmake(GNU make)で使われるMakefileと同じ書式の設定ファイルとなっており、configureの際のオプションやビルドルールなどが記述されている。

 rulesファイルにはいくつかのターゲットが記載されており、debuildコマンドやdpkg-buildpackageコマンド(debuildコマンドが内部的に利用するコマンド)などは指定されたオプションに応じてこれらのターゲットを適宜実行する(表2)。

表2 rulesファイルに記載されているターゲット
ターゲット名説明必須かどうか
cleanビルド時に生成されるファイルを全削除する必須
buildソースコードやドキュメントをビルドする必須
build-archアーキテクチャに依存するプログラムをビルドする必須
build-indepアーキテクチャに依存しないプログラムやドキュメントなどをビルドする必須
installビルドしたバイナリやドキュメントを作業用ディレクトリにインストールする任意
binaryバイナリパッケージを作成する必須
binary-archアーキテクチャに依存するバイナリパッケージを作成する必須
binary-indepアーキテクチャに依存しないバイナリパッケージを作成する必須
get-orig-source最新のオリジナルソースアーカイブをダウンロードする任意
patch追加で必要となるアーカイブをダウンロードしたり、パッチを実行する任意

 たとえばパッケージのconfigure設定を変更するには、rulesファイル内でconfigure設定を定義している個所を修正すればよい。また、独自のパッチを適用したい場合などは、rulesファイル内のbuildルールなどを参照し、ビルドを実行する前にソースコードにパッチを適用するよう設定を追加すれば良い。

 なお、rulesファイル内では「dh_clear」や「dh_testdir」といった「dh_」で始まるコマンドが使われていることがある。これらはパッケージ作成を支援する「debhelper」パッケージに含まれるコマンドだ。また、rulesファイルの記述を簡略化するために「CDBS(Common Debian Build System)」といったツールが利用されている場合もある。rulesファイル内に「include /usr/share/cdbs/1/class/makefile.mk」や「include /usr/share/cdbs/1/rules/debhelper.mk」といった記述がある場合、cdbsが使われていることになる。そのほか、「dpatch」や「quilt」というパッチ管理システムツールが使われていることもある。これらのパッチ管理システムが使われている場合は、debian/patchesディレクトリにパッチが格納されている。これら支援ツールについてはここでは解説しないので、適宜ドキュメントなどを参照してほしい。

パッケージの情報を変更する

 rulesファイルなどを変更してパッケージの内容を変更したら、それに併せてパッケージの情報も変更しておく必要がある。パッケージに関する情報が記述されているのは、debianディレクトリ内にある表3の3つの設定ファイルだ。

表3 Debパッケージの作成に最低限必要なファイル
ファイル名記述される内容
controlパッケージの説明や各種情報
changelogパッケージの変更履歴
copyrightパッケージの著作権関連情報

 まずcontrolファイルには、パッケージの説明や各種情報が含まれている。ここでは、以下のような形式で情報が記述されている。

<項目名>: <値>

 controlファイルは空行で区切られた複数のブロックで構成されており、1つ目のブロックにはパッケージやその作成者に関する情報を記述する。このブロックには、表4で示すような項目を記述するようになっており、その一部は必須となっている。

表4 controlファイルのソースパッケージ項目に記述する必須・推奨項目
項目名説明必須/推奨
Sourceソースパッケージの名称必須
Maintainerメンテナの名前とメールアドレス(「名前<メールアドレス>」の形式で表記)必須
Sectionパッケージの分類推奨
Priorityパッケージの重要度推奨
Standards-Version対応するDebian Policyのバージョン推奨
Build-Dependsビルドに必要なパッケージ任意

 なお、「Standards-Version」で指定するDebian Policyのバージョン番号はDebian Policy Manualの末尾に記載されている。本記事執筆時のバージョンは3.9.5.0だ。

 また、2つめ以降のブロックには作成するバイナリパッケージに関する情報を記述する。1つのソースパッケージからは複数のバイナリパッケージがビルド可能であるため、このブロックは複数置くことが可能だ。ここで記述できる主な項目は表5のものがある。

表5 controlファイルのバイナリパッケージ項目に記述する必須・推奨項目
項目名説明必須/推奨
Packageバイナリパッケージの名称必須
Architecture対応するアーキテクチャ必須
Sectionパッケージの分類推奨
Priorityパッケージの重要度推奨
Dependsパッケージのインストール時に必須のパッケージ任意
Descriptionバイナリパッケージに関する説明必須

 最後の「Description」だけはほかの項目と異なり、次のような書式で情報を記述する。複数行での説明部分の行頭は必ず半角スペース1個で始めるようになっている。

Description: <1行で収まる簡単な説明>
 <複数行での詳しい説明>
 
 

 「Architecture」では、特定のアーキテクチャのみに対応する場合はそのアーキテクチャ名を、任意のアーキテクチャに対応するのであれば「any」を、アーキテクチャ非依存であれば「all」を指定する。また、Priorityは「required」「important」「standard」「optional」「extra」のどれかになっているはずだ。「Section」で指定できるセクションについてはDebianのWebサイトなどを参照してほしい。

 そのほか、必要に応じてパッケージのアップロード者を示す「Uploaders」やWebサイトを示す「Homepage」、ソースコードのリポジトリなどを示す「Vcs-Broser」や「Vcs-svn」、競合するパッケージを示す「Conflicts」や「Build-Conflicts」、置き換えるパッケージを示す「Replaces」、同時にインストールすることを推奨するパッケージを示す「Recommends」や「Suggests」といった項目が記述される場合もある。これらについてはDebianのドキュメントなどを参照してほしい。

 たとえば以下の例は、apache2パッケージに含まれるcontrolファイルの一部だ。

Source: apache2
Section: httpd
Priority: optional
Maintainer: Debian Apache Maintainers <debian-apache@lists.debian.org>
Uploaders: Tollef Fog Heen <tfheen@debian.org>, Thom May <thom@debian.org>, Peter Samuelson <peter@p12n.org>, Stefan Fritsch <sf@debian.org>, Steinar H. Gunderson <sesse@debian.org>
Build-Depends: debhelper (>= 7.4.3), dpatch, lsb-release, libaprutil1-dev (>= 1.3.4), libapr1-dev (>= 1.2.7-6), openssl, libpcre3-dev, mawk, zlib1g-dev, libssl-dev (>= 0.9.8m), sharutils, libcap-dev [!kfreebsd-i386 !kfreebsd-amd64 !hurd-i386], autoconf
Build-Conflicts: autoconf2.13
Standards-Version: 3.9.1
Vcs-Browser: http://svn.debian.org/wsvn/pkg-apache/trunk/apache2
Vcs-svn: svn://svn.debian.org/pkg-apache/trunk/apache2
Homepage: http://httpd.apache.org/

Package: apache2.2-common
Architecture: any
Depends: Depends: ${misc:Depends}, apache2.2-bin (= ${binary:Version}), apache2-utils, libmagic1, mime-support, lsb-base, procps [!hurd-i386], perl:Depends}, apache2.2-bin (= Depends: ${misc:Depends}, apache2.2-bin (= ${binary:Version}), apache2-utils, libmagic1, mime-support, lsb-base, procps [!hurd-i386], perl:Version}), apache2-utils, libmagic1, mime-support, lsb-base, procps [!hurd-i386], perl
Recommends: ssl-cert
Suggests: www-browser, apache2-doc, apache2-suexec | apache2-suexec-custom
Conflicts: apache2-common, apache
Replaces: apache2-common
Description: Apache HTTP Server common files
 The Apache Software Foundation's goal is to build a secure, efficient and
 extensible HTTP server as standards-compliant open source software. The
 result has long been the number one web server on the Internet.
 .
 This package contains the configuration and support scripts.
 However, it does *not* include the server itself; for this you need to
 install one of the apache2-mpm-* packages, such as worker or prefork.
 
 

パッケージの変更履歴を記述する

 続いてchangelogファイルだが、こちらはその名の通り、パッケージの変更履歴を格納するものだ。このファイルは、以下のような書式のブロックが1つ以上続く構成となっている。

<パッケージ名> (<バージョン番号>) <ディストリビューション> <緊急度>

 * 変更点1
 * 変更点2
 
 

-- <著者> <<メールアドレス>> <タイムスタンプ>

 パッケージに変更を加えた場合は、ここに必ず変更点を記述しておくようにする。たとえば、先に紹介したapache2の場合、changelogファイルは以下のようになっている。

apache2 (2.2.16-6+squeeze11) squeeze-security; urgency=high

  * CVE-2013-1048: Fix symlink vulnerability when creating /var/lock/apache2
  * CVE-2012-3499, CVE-2012-4558: Fix XSS flaws in various modules.

 -- Stefan Fritsch <sf@debian.org>  Sun, 03 Mar 2013 12:25:22 +0100

apache2 (2.2.16-6+squeeze10) squeeze-security; urgency=low

  [ Arno T<C3><B6>ll ]
  * Backport disable-ssl-compression.patch from Wheezy. This patch disabled
    SSL compression upon request by introducing a "Compression on|off"
    directive to mod_ssl. This is to mitigate impact of CRIME attacks to SSL -
    which is a browser issue, however.
    See also Debian bug #674142 and #689936.

  [ Stefan Fritsch ]
  * CVE-2012-4557: mod_proxy_ajp: Remote denial of service (temporary, until
    mod_proxy_ajp's retry timeout expired).

 -- Stefan Fritsch <sf@debian.org>  Fri, 30 Nov 2012 09:26:36 +0100
 
 

著作権やライセンスを記載するcopyrightファイル

 copyrightファイルには、パッケージの著作権やライセンスに関する情報が記載されている。このファイルについては、特に決まったフォーマットは定められていないものの、下記の情報を必ず含めることとされている。

  • 著作者名
  • 著作権の発生年
  • 使用しているライセンスの情報
  • アップストリームのソースコードの入手先URL

 もしパッケージに独自ライセンスのファイルやパッチなどを追加した場合は、ここにその旨を記述しておく必要がある。

 なお、パッケージをインストールすると/usr/share/doc/<パッケージ名>ディレクトリ以下にインストールされる。copyrightファイルの例としては、Debianの開発者向けメーリングリストに投稿されたHow (not) to write copyright files – take twoというメールが参考になるだろう。また、Machine-readable debian/copyright fileというのも提案されているようだが、まだあまり採用は進んでいないようだ。