はじめに
debパッケージを用意してDebianの公式リポジトリからインストールできるようにするために必要な作業については以前いくつか記事を書きました。
- Debianでパッケージをリリースできるようにしたい - WNPPへのバグ登録
- Debianでパッケージをリリースできるようにしたい - よりDebianらしく
- Debianでパッケージをリリースできるようにしたい - mentors.debian.netの使いかた
- Debianでパッケージをリリースできるようにしたい - そしてDebianへ
ただし、そこではパッケージのビルドそのものについては触れていませんでした。 普段Ubuntuを使っていて、sid(unstable)でのビルド環境をどうしようかというのはいくつか選択肢があります。定番のchroot環境を用意するとか、LXCのコンテナを使うとか、Vagrantを使うとか、はたまたdockerのイメージを利用するなどさまざまです。
今回はそのうちの1つとして、Ubuntuでdebパッケージのお手軽クリーンルーム(chroot)ビルド環境を構築するのに便利なcowbuilderを紹介します。
Cowbuilderとは
必要なパッケージが一式揃ったクリーンな環境でdebパッケージをビルドするためのツールです。 同様の目的のものとしてはpbuilderが有名ですが、後発だけあって
- pbuilderとは違ってベースイメージの展開がないので速い
というのが特徴です。
設定ファイルを書く
cowbuilderはpbuilderのラッパーなので、設定ファイルは.pbuilderrcと共通です。 パッケージに同梱されているpbuilderrc(/usr/share/doc/pbuilder/examples/pbuilderrc)がありますが、そちらは複数のベースイメージをとりあつかうのには都合がよくない1ので、PbuilderTricksのドキュメントの"How to build for different distributions"のセクションから設定2をコピーして$HOME/.pbuilderrcとして保存します。
ただし次の2つについては不足しているので追加します。
- BASEPATH
- HOOKDIR
BASEPATHはベースイメージを作成するパスを指定するのに必要です。
BASEPATH="/var/cache/pbuilder/$NAME-base.cow/"
この設定を追加すると、sid(unstable)の場合だとunstable-amd64-base.cowというようにベースイメージが作成されます。
HOOKDIRは後述するフックを置くためのパスを指定するのに必要です。
HOOKDIR="/var/cache/pbuilder/hooks"
フックスクリプトを配置する
パッケージをビルドするだけでなく、作成したパッケージに問題がないか同時に確認しておきたいというのは当然ですね。それを実現するにはフックスクリプトを使います。
先程のexamplesディレクトリにlintianを実行するためのフックスクリプトがあるので、それをHOOKDIRにコピーしましょう。
% sudo cp /usr/share/doc/pbuilder/examples/B90lintian /var/cache/pbuilder/hooks
examplesディレクトリにはほかにもいくつかフックスクリプトがあるので興味があれば覗いてみるとよいでしょう。
ベースイメージを作成する
さて、設定ファイルが用意できたので、実際にsid(unstable)のベースイメージを作成してみましょう。 ベースイメージを作成するのには次のコマンドを実行します。
% sudo DIST=sid cowbuilder --create --debootstrapopts --keyring=/usr/share/keyrings/debian-archive-keyring.gpg
パッケージのダウンロードとインストールがはじまるので、完了するまでしばらく待ちましょう。
Ubuntu上でDebian wheezy/jessie/sidのベースイメージを作成する際にエラーがでるようならkeyringをインストールし忘れていないか確認してください。 keyringパッケージは次のコマンドを実行することでインストールできます。
% sudo apt-get install debian-archive-keyring
ベースイメージを更新する
ベースイメージを作ったばかりのときは良いのですが、sid(unstable)は日々更新されています。 ベースイメージも最新の状態に追従するには次のコマンドを実行します。
% sudo DIST=sid cowbuilder --update
パッケージをビルドする
ベースイメージができたので、実際にパッケージをビルドしてみましょう。
sid(unstable)向けにGroongaのパッケージをcowbuilderでビルドするには次のコマンドを実行します。
% sudo DIST=sid cowbuilder --build groonga_4.0.7-1.dsc --basepath /var/cache/pbuilder/unstable-amd64-base.cow
これで、クリーンルームでのパッケージのビルドとlintianによるチェックが実行されます。 ビルドされたパッケージは/var/cache/pbuilder/unstable-amd64/result以下に保存されます。
まとめ
今回はUbuntuでdebパッケージのお手軽クリーンルーム(chroot)ビルド環境を構築するのに便利なcowbuilderの紹介をしました。 パッケージをビルドしたあとのインストールやアップグレードについては、また次の機会に紹介します。