git-builpackageを使う(Debian/Ubuntu JP Advent Calendar 2013)

Pocket

これはDebian/Ubuntu JP Advent Calendar 2013 11日目の記事です。

Debianではパッケージを管理する際に、オリジナルのソースコードの上にdebianというディレクトリを作成し、その下にDebian固有のパッケージングに関する情報を記録してゆくようになっています。

かつてはこのファイルの管理はそう大変なことではありませんでした。しかし現在のDebianはoldstable, stable, testing, unstableという4つ(場合によってはexperimentalを含めた5つ)のdistributionを同時に管理しなければなりません。こうなると、やはりバージョンコントロールシステムが使いたくなるところです。

そのためのパッケージのひとつがgit-buildpackageです。名前の通りSCMにgitを使います。この記事ではその解説を行います。他にもsvnやcvs, bzrに対応したものがありますが、それぞれ設計思想から異なるのでここでは触れません。個人的にはsvn-buildpackageも使ってはいます。

ソースコードのインポート

一番最初に行うのは、すでにあるdeb用ソースコード一式のインポートです。これにはgit-import-dscコマンド(あるいはgit-import-dscs)を使います。

$ dget http://ftp.jp.debian.org/debian/pool/main/h/hello/hello_2.6-1.dsc
$ t$ git-import-dsc hello_2.6-1.dsc
gbp:info: No git repository found, creating one.
Initialized empty Git repository in /home/knok/git/test/hello/.git/
gbp:info: Tag upstream/2.6 not found, importing Upstream tarball
gbp:info: Version '2.6-1' imported under 'hello'

これでパッケージ名(この場合hallo)のディレクトリが作成され、そこがgitリポジトリになります

$ cd hello
$ git tag
debian/2.6-1
upstream/2.6

このようにインポートされたdebianバージョンとupstreamのタグが作成されます。内容を更新し、新しいバージョンをリリースする際には同様に新しいdebianバージョンのtagを生成することになります。

変更

適当に変更をしてみます。このあたりは普通のgitリポジトリを扱うのと変わりはありません。

$ dch --nmu

テストビルド

修正をコミットする前にテストビルドをするには、git-buildpackage build –git-ignore-newを実行します。–git-ignore-newオプション以外はdebuildと同じです。

$ git-buildpackage --git-ignore-new -uc -us
(略)
$ ls ..
hello                        hello_2.6-1.1_amd64.build    hello_2.6-1.dsc
hello-2.6                    hello_2.6-1.1_amd64.changes  hello_2.6.orig.tar.gz
hello_2.6-1.1.debian.tar.gz  hello_2.6-1.1_amd64.deb
hello_2.6-1.1.dsc            hello_2.6-1.debian.tar.gz

問題がなければ、親ディレクトリにパッケージと各種ファイルが生成されます。これでよいと思ったら普通にgit commitしましょう。

リリース向けビルド

リリース用のビルドは–git-tagオプションを付けることでできます

$ git-buildpackage --git-tag -uc -us
(略)
$ git tag
debian/2.6-1
debian/2.6-1.1
upstream/2.6

新しく作ったdebian versionのタグができていることが確認できます。

参考

PackagingWithGit (Debian Wiki)