独自のDebパッケージやaptリポジトリを作ってみよう 2ページ
ビルド設定や設定ファイルなどをカスタマイズする
ソースディレクトリ内にあるdebianディレクトリには、ビルドの際のconfigure設定や独自に追加するファイル、パッチファイルなどが格納されている。パッケージをカスタマイズしたい場合は、ここにある設定ファイルを編集したり、ファイルを追加することで対応できる。
ビルドの設定については、debianディレクトリ内にある「rules」ファイルに記述されている。このファイルはmake(GNU make)で使われるMakefileと同じ書式の設定ファイルとなっており、configureの際のオプションやビルドルールなどが記述されている。
rulesファイルにはいくつかのターゲットが記載されており、debuildコマンドやdpkg-buildpackageコマンド(debuildコマンドが内部的に利用するコマンド)などは指定されたオプションに応じてこれらのターゲットを適宜実行する(表2)。
ターゲット名 | 説明 | 必須かどうか |
---|---|---|
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つの設定ファイルだ。
ファイル名 | 記述される内容 |
---|---|
control | パッケージの説明や各種情報 |
changelog | パッケージの変更履歴 |
copyright | パッケージの著作権関連情報 |
まずcontrolファイルには、パッケージの説明や各種情報が含まれている。ここでは、以下のような形式で情報が記述されている。
<項目名>: <値>
controlファイルは空行で区切られた複数のブロックで構成されており、1つ目のブロックにはパッケージやその作成者に関する情報を記述する。このブロックには、表4で示すような項目を記述するようになっており、その一部は必須となっている。
項目名 | 説明 | 必須/推奨 |
---|---|---|
Source | ソースパッケージの名称 | 必須 |
Maintainer | メンテナの名前とメールアドレス(「名前<メールアドレス>」の形式で表記) | 必須 |
Section | パッケージの分類 | 推奨 |
Priority | パッケージの重要度 | 推奨 |
Standards-Version | 対応するDebian Policyのバージョン | 推奨 |
Build-Depends | ビルドに必要なパッケージ | 任意 |
なお、「Standards-Version」で指定するDebian Policyのバージョン番号はDebian Policy Manualの末尾に記載されている。本記事執筆時のバージョンは3.9.5.0だ。
また、2つめ以降のブロックには作成するバイナリパッケージに関する情報を記述する。1つのソースパッケージからは複数のバイナリパッケージがビルド可能であるため、このブロックは複数置くことが可能だ。ここで記述できる主な項目は表5のものがある。
項目名 | 説明 | 必須/推奨 |
---|---|---|
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というのも提案されているようだが、まだあまり採用は進んでいないようだ。