これは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のタグができていることが確認できます。
参考