目次
これでパッケージをビルドする準備が整いました。
完全なパッケージの(再)ビルドを行うには、以下を確実にインストールして下さい。
ソースディレクトリーで以下のコマンドを実行してください:
$ dpkg-buildpackage -us -uc
このコマンドはバイナリーパッケージとソースパッケージをビルドする作業をすべて行ってくれます。これには以下の作業が含まれます:
ソースツリーのクリーン (debian/rules clean
)
ソースパッケージのビルド (dpkg-source -b
)
プログラムのビルド (debian/rules build
)
バイナリーパッケージのビルド (fakeroot debian/rules binary
)
.dsc
ファイルの作成
dpkg-genchanges を使用し .changes
ファイルを作成
If the build result is satisfactory, sign the .dsc
and
.changes
files with your private GPG key using the
debsign command. You need to enter your secret pass
phrase, twice. [63]
ノンネイティブパッケージの場合、パッケージビルド後の親ディレクトリー (~/gentoo
)
に以下のファイルが生成されているはずです:
gentoo_0.9.12.orig.tar.gz
This is the original upstream source code tarball, merely renamed to the
above so that it adheres to the Debian standard. Note that this was created
initially by the command dh_make -f
../gentoo-0.9.12.tar.gz
.
gentoo_0.9.12-1.dsc
これはソースコードの内容の概要です。このファイルはあなたのcontrol
ファイルから生成され、dpkg-source(1)によってソースを展開する際に使われます。
gentoo_0.9.12-1.debian.tar.gz
この圧縮された tar
アーカイブには、あなたのdebian
ディレクトリーの中身が含まれています。オリジナルのソースコードに行った変更や追加などの情報は全て
debian/patches
内に、quilt
パッチとして保存されます。
上記 3 つのファイルを使えば誰でも簡単にあなたのパッケージをスクラッチからビルドすることができます。3
つのファイルを任意の場所にコピーし、dpkg-source -x
gentoo_0.9.12-1.dsc
を実行するだけです。[64]
gentoo_0.9.12-1_i386.deb
これは、あなたが生成した完全なバイナリーパッケージです。他の全てのパッケージと同じく、dpkgを使ってインストールしたり削除したりできます。
gentoo_0.9.12-1_i386.changes
このファイルは現在のリビジョンパッケージにおける変更点をすべて記載したもので、Debian FTP
アーカイブ管理プログラムによって、バイナリーおよびソースパッケージを FTP
アーカイブにインストールするために利用されます。このファイルの一部は、changelog
ファイルと
.dsc
をもとに生成されます。
パッケージの保守管理を続けていくと、挙動の変更や新機能の追加をすることがあります。あなたのパッケージをダウンロードする人は、このファイルを見れば何が変わったのか、一目でわかります。また、このファイルの中身は Debian アーカイブ管理プログラムによって、debian-devel-changes@lists.debian.org メーリングリストへ流されます。
The gentoo_0.9.12-1.dsc
and
gentoo_0.9.12-1_i386.changes
files must be signed using
the debsign command with your private GPG key in the
~/.gnupg/
directory, before uploading them to the
Debian FTP archive. The GPG signature provides the proof that these files
are really yours, using your public GPG key.
The debsign command can be made to sign with your
specified secret GPG key ID (good for sponsoring packages) with the
following in the ~/.devscripts
file:
DEBSIGN_KEYID=Your_GPG_keyID
.dsc
と .changes
ファイルに記載されている長い数字の羅列は各ファイルの MD5/SHA1/SHA256
チェックサムです。パッケージをダウンロードした人は、sha1sum(1)、sha256sum(1)を使って整合性をテストすることができます。もし、数字が一致しない場合には、ファイルが壊れているか、あるいは何者かによって改ざんされていると分かるわけです。
Debian は、様々なアーキテクチャー上で buildd デーモンを走らせているオートビルダーネットワークによって、色々な 移植版 をサポートしています。あなたがそれらを明示的に使う必要はありませんが、パッケージがどうなるのかを知っておくと良いでしょう。それでは、あなたのパッケージがどのように異なるアーキテクチャー向けに再ビルドされるのかを見ていきましょう。[65]
Architecture: any
のパッケージは、オートビルダーシステムによって再ビルドされます。それは、以下を確実にインストールします。
build-essential
パッケージ
Build-Depends
に挙げられているパッケージ (参照 「control
」)
そして、ソースディレクトリーで次のコマンドを実行します:
$ dpkg-buildpackage -B
これは、別のアーキテクチャー上で、アーキテクチャー依存のバイナリーパッケージを生成する作業をすべて行ってくれます。これには以下の作業が含まれます:
ソースツリーのクリーン (debian/rules clean
)
プログラムのビルド (debian/rules build
)
アーキテクチャー依存のバイナリーパッケージをビルド(fakeroot debian/rules
binary-arch
)
gpg を使用したソース.dsc
ファイルへの署名
dpkg-genchangesおよびgpgを使用したアップロード用.changes
ファイルの生成と署名
あなたのパッケージが他のアーキテクチャー用にも存在するのは、このためです。
Build-Depends-indep
フィールドのパッケージは、通常のパッケージの場合はインストールを要求されますが
(参照 「完全な(再)ビルド」)、オートビルダーシステムでは、アーキテクチャー依存のパッケージのみをビルドするのでこれらのインストールは必須ではありません。[66]
オートビルダーを使用した場合と普通のパッケージングとのこの違いにより、debian/control
ファイルの
Build-Depends
か Build-Depends-indep
のどちらにパッケージを記載するかが決定されます。(参照 「control
」)
dpkg-buildpackageによるビルドプロセス周辺は、debuildによりさらに自動化できます。debuild(1)を参照してください。
The debuild command executes the
lintian command to make a static check after building the
Debian package. The lintian command can be customized
with the following in the ~/.devscripts
file:
DEBUILD_DPKG_BUILDPACKAGE_OPTS="-us -uc -I -i" DEBUILD_LINTIAN_OPTS="-i -I --show-overrides"
以下のようにすれば一般ユーザーアカウントから、簡単にソースをクリーンしパッケージを再ビルドできます:
$ debuild
ソースツリーのクリーンも簡単です:
$ debuild -- clean
ビルド依存を確認するためのクリーンルーム (chroot) ビルド環境として、pbuilder
パッケージが非常に便利です。[67] これを使うことで、異なるアーキテクチャー向けに sid
環境オートビルダーの下でのソースからのクリーンなビルドが保証され、常に RC (リリースクリティカル) に分類される重要度が serious
(深刻)の FTBFS (Fails To Build From Source、ソースからのビルド失敗) バグを防ぎます。[68]
それでは、pbuilder
をカスタマイズしてみましょう:
/var/cache/pbuilder/result
ディレクトリーを、ユーザーアカウントから書き込めるように設定してください。
フックスクリプトを置くために、ユーザーからの書き込みが可能なディレクトリーを作成してください。例)
/var/cache/pbuilder/hooks
~/.pbuilderrc
か /etc/pbuilderrc
に以下のように設定します。
AUTO_DEBSIGN=${AUTO_DEBSIGN:-no}
HOOKDIR=/var/cache/pbuilder/hooks
それでは、ローカルpbuilder
の
chroot システムを以下のようにして初期化しましょう:
$ sudo pbuilder create
既に完全なソースパッケージがあれば、
ファイル、foo
.orig.tar.gz
ファイル、foo
.debian.tar.gz
ファイルが存在するディレクトリーで、ローカルの
foo
.dscpbuilder
の
chrootシステムをアップデートし、バイナリーパッケージをその中でビルドしましょう:
$ sudo pbuilder --update
$ sudo pbuilder --build foo_version
.dsc
新しくビルドした GPG 署名の無いパッケージは非ルート所有権で
/var/cache/pbuilder/result/
に置かれます。
.dsc
ファイルや .changes
ファイルへのGPG
署名は次のようにするとできます:
$ cd /var/cache/pbuilder/result/
$ debsign foo_version_arch
.changes
更新されたソースツリーが既にあるが一致するソースパッケージを生成していない場合は、この代わりに、debian
ディレクトリーが存在するディレクトリーで、以下のコマンドを発行します:
$ sudo pbuilder --update $ pdebuild
pbuilder --login
--save-after-login
コマンドで、chroot環境にログインし、好きに設定することができます。シェルプロンプトから^D
(Control-D)で抜けると、その環境を保存しておくことができます。
最新のlintianコマンドはchroot
環境から次のように設定されたフックスクリプト
を使用して実行することができます:
[69]
/var/cache/pbuilder/hooks
/B90lintian
#!/bin/sh set -e install_packages() { apt-get -y --allow-downgrades install "$@" } install_packages lintian echo "+++ lintian output +++" su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes" - pbuilder # use this version if you don't want lintian to fail the build #su -c "lintian -i -I --show-overrides /tmp/buildd/*.changes; :" - pbuilder echo "+++ end of lintian output +++"
sid
環境向けのパッケージを正しくビルドするには最新の sid
環境が必要です。sid
にはあなたの環境全てを移行するには望ましくない問題を抱えていることが少なくありません。pbuilder
パッケージはそのような状況への対処の助けとなります。
You may need to update your stable
packages after their
release for stable-proposed-updates
,
stable/updates
, etc. [70] For such occasions, the fact that you may be running a
sid
system is not a good enough excuse for failing to
update them promptly. The pbuilder
package can help you to access environments of almost any Debian derivative
distribution of the same architecture.
http://www.netfort.gr.jp/~dancer/software/pbuilder.html と pdebuild(1) と pbuilderrc(5) と pbuilder(8) を参照下さい。
アップストリームがソースコード管理システム (VCS) [71] を使っているのであれば、同様に使用することを考えるべきです。それによって、マージとアップストリームパッチの取捨選択がより簡単になります。各 VCS 毎に Debian パッケージをビルドするための特別なラッパースクリプトのパッケージもいくつかあります。
git-buildpackage
: Git リポジトリ内の Debian
パッケージの支援プログラム群です。
svn-buildpackage
: Debian パッケージを
Subversion で管理するための支援プログラム群です。
cvs-buildpackage
: CVS ソースツリーのための
Debian パッケージスクリプト群です。
Debian デベロッパーが alioth.debian.org 上の Git
サーバーを用い Debian パッケージを管理するのに git-buildpackage
を使うことがよくあります。[72]
このパッケージはパッケージ活動を自動化する多くのコマンドを提供します。
git-import-dsc(1): 過去の Debian パッケージを Git レポジトリーにインポートする。
git-import-orig(1): 新アップストリーム tar を Git レポジトリーにインポートします。
git-dch(1): Debian changelog を Git のコミットメッセージから生成します。
git-buildpackage(1): Debian パッケージを Git レポジトリーからビルドします。
git-pbuilder(1): Debian パッケージを Git レポジトリーから pbuilder/cowbuilder を持ちいてビルドします。
これらのコマンドはパッケージング活動を追跡する 3 つのブランチを使用します:
Debian パッケージのソースツリーは、main
。
アップストリームのソースツリーは、upstream
。
--pristine-tar
オプションにより生成されるアップストリームtar
アーカイブは、pristine-tar
。[73]
git-buildpackage
は
~/.gbp.conf
で設定できます。gbp.conf(5) を参照下さい。 [74]
大規模なパッケージの場合には、debian/rules
をちょっといじるたびに、毎回最初からパッケージの再ビルドをやりなおすのは手間です。テスト目的であれば、以下の方法でアップストリームソースを再ビルドをせずに
.deb
ファイルを生成することができます。 [75]:
$ fakeroot debian/rules binary
また、以下の方法を使えば生成可能かどうかをチェックすることができます:
$ fakeroot debian/rules build
最終的にきちんとテストが完了したら、正しい手順に従ってパッケージを最初から再ビルドすることを忘れないでください。この方法でビルドした
.deb
ファイルをアップロードしようとしても、おそらくうまくアップロードできないでしょう。
パッケージ作成に用いる多くのコマンドが、コマンド階層の中でお互いいかなる関係にあるかの簡単なまとめを以下に記します。同じ事をするのに多くの方法があります。
debian/rules
= パッケージビルド用のメンテナースクリプト
dpkg-buildpackage = パッケージビルドツールの核
debuild = dpkg-buildpackage + lintian (サニタイズした環境変数下でのビルド)
pbuilder = Debian の chroot 環境ツールの核
pdebuild = pbuilder + dpkg-buildpackage (chroot 中でビルド)
cowbuilder = pbuilder 実行の加速
git-pbuilder = pdebuild の使いやすいコマンドラインシンタックス (gbp buildpackge が使用)
gbp = Debian ソースを git レポ下で管理
gbp buildpackge = pbuilder + dpkg-buildpackage + gbp
gbp buildpackge や pbuilder
等のよりハイレベルなコマンドを用いることは完全なパッケージビルド環境を保証しますが、debian/rules
や dpkg-buildpackage
等のよりローレベルのコマンドがそれらの下で実行されるかを理解することは必須です。
[63] GPG キーは信頼の網に連結するように Debian デベロッパーによって署名され、the Debian keyring に登録されていなければいけません。こうすることで Debian アーカイブにパッケージをアップロードして受け付けられるようになります。Creating a new GPG key と Debian Wiki on Keysigning を参照下さい。
[64] 3.0
(quilt)
ソースフォーマットでquiltパッチを当てないようにするには、上記コマンドに--skip-patches
オプションをつけて実行します。または、通常の操作の後に、quilt
pop -a
を実行する方法もあります。
[65] 実際のオートビルダーシステムは、本稿の説明よりもかなり複雑なスキームによって実現しています。それらの詳細は、本稿の範囲を超えるため割愛します。
[66] pbuilder
パッケージとは違い、オートビルダーによって使用されるsbuild
パッケージ下でのchroot環境では、最小システムを強制しないので、多くのパッケージがインストールされたままになるかもしれません。
[67] pbuilder
パッケージはまだ進化の過程なので、実際の構成は、最新の公式ドキュメントで確認して下さい。
[68] Debian パッケージのオートビルドに関しては http://buildd.debian.org/ を参照下さい。
[69] HOOKDIR=/var/cache/pbuilder/hooks
をここで仮定しています。フックスクリプトのサンプルは
/usr/share/doc/pbuilder/examples
ディレクトリーににあります。
[70] stable
パッケージのそのようなアップデートには制限が課せられます。
[71] 詳しくは Version control systems を参照下さい。
[72] alioth.debian.org サービスの使い方は、Debian wiki Alioth に記載されています。
[73] The --pristine-tar
option invokes the
pristine-tar command, which can regenerate an exact copy
of a pristine upstream tarball using only a small binary delta file and the
contents of the tarball that are typically kept in an
upstream
branch in the VCS.
[74] 以下は、上級者のみなさんの参考になるウェブ上で閲覧できる資料です。
git-buildpackage を使っての Debian パッケージ作成
(/usr/share/doc/git-buildpackage/manual-html/gbp.html
)
[75] Environment variables that are normally configured to proper values are not set by this method. Never create real packages to be uploaded using this quick method.