6 バージョン管理ツールを使い Debian パッケージを管理する Git 編

岩松信 洋

PIC
____________________________________________________________________

6.1 はじめに

最近の Debian Package は、 VCS*4 を 使って管理することができるようになっており、 実際に利用しているメンテナも多くなりました。 VCS と言っても様々ですが、 Debian では代表的な VCS である CVS, Subversion や最近流行りの Git、 マイナーな VCS である darcs などを使うことが できます。 今回は、 今一番イケていると思われる Git を使い、 Debian Package をバージョン管理することによりどの ような利点があるのか、 どのようなツールを使ってメンテナンスを行えばいいのか、 などについてを説明し ます。

6.2 なぜパッケージも VCS で管理するのか

Debian Package を VCS で管理することによる良い点は以下が考えれます。

6.3 Debian で使用可能な VCS

現在、 Debian で利用可能な VCS は以下の通りです。 プロジェクト管理用サーバである Alioth でもこれらの VCS は利用可 能になっています。 また、 最近では Debian Package のタグに利用している VCS を付けることが可能になっており、 各 VCS の利用状況を見ることも可能です。 ここ数か月の VCS の利用状況を調べてグラフにしました。 Git と Subversion を採用して いる開発者が増えていることがわかります。

PIC

6.4 ソースパッケージを Git で管理するためのツール git-buildpackage

では、 実際に VCS を使って Debian Package を管理するためにはどのようにすればいいのでしょうか。 Debian パッケージを Git で管理するためのツールとして、 git-buildpackage があります。 これを使うことによって、 Git を使ってパッケージの ソースコードを管理することができるようになります。 インストールはいつものとおり、 apt-get or aptitude を使ってイン ストールすることが可能です。

$sudo apt-get install git-buildpackage
6.4.1 git-buildpackage で提供されるコマンド

git-buildpackage で提供されるコマンドは表 1の 4 つしかありません。 これらのコマンドと Git コマンドを使って、 パッケー ジのメンテナンスをすることになります。 Git の細かい知識は必要ありませんが、 基本的な使い方は知っておく必要があり ます。




提供されるコマンド 機能




/usr/bin/git-buildpackage パッケージを作成する
/usr/bin/git-dch Git のコミットログから Debian Changelog を作成する。
/usr/bin/git-import-dsc 既存の Debian Package を Git にインポートする。
/usr/bin/git-import-orig アップストリームからリリースされたソースコードを Git にインポートする。

表 1: git-buildpackage で提供されるコマンド

6.5 Git の簡単な使い方

表 2によくつかう Git コマンドを紹介します。 これだけ知っていれば、 Git を使った開発を行うことが可能なはずです。




Git コマンド(一部) 機能




git init ローカルリポジトリを作成する。
git add ローカルリポジトリのキャッシュ (index) に管理対象のファイルを追加する。
git commit ローカルリポジトリに変更を反映する。
git rm ローカルリポジトリから管理対象ファイルを削除する。
git diff 差分を取得する。
git branch ブランチを作成する。
git checkout 作成したブランチをチェックアウトする。
git format-patch パッチを作成する。

表 2: よく使う Git のコマンド

6.6 既にパッケージ化されているものを Git で管理する

Debian パッケージには 2 つの状態があると考えられます。 一つは既にパッケージ化されているもの、 もうひとつは今から Debian パッケージにしようとしているものです。 まずは、 既に Debian パッケージになっているものを Git で管理する方法を 説明します。

まず、 git-import-dsc コマンドを使い、 Git リポジトリに現在のソースコードの状態を取り込みます。 コマンドのオプションに、 パッケー ジの dsc ファイル*5 を 指定します。 実行すると、 パッケージ名でディレクトリが作成され、 Git リポジトリが作成されます。 また、 ブランチとして、 master ブランチと、 upstream ブランチが作成されます。 Debian 関係の コードは master ブランチ、 Upstream のソースコードは upstream ブランチで管理されるようになりま す*6 。

$ git-import-dsc ../isight-firmware-tools_1.0.2-1.dsc
Upstream version: 1.0.2
Debian version: 1
No git repository found, creating one.
Initialized empty Git repository in .git/
Everything imported under isight-firmware-tools
$ ls
isight-firmware-tools
$ cd isight-firmware-tools
$ git branch
* master
  upstream
6.6.1 インポート時のログ

パッケージをインポートしたときに、 Git のコミットログに現在のバージョンのコミットログが書き込まれます。 また、 Debian Version は Git のタグ機能を使い、 タグ名として保存されます。

$ git log
commit 9c3669a233afe69d7be2aa8ad1995e6b19c841aa
Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Date:   Sun Apr 6 21:48:40 2008 +0900

    Imported Debian patch 1.0.2-1
$ git tag
debian/1.0.2-1
upstream/1.0.2
6.6.2 ソースコードを変更し、 修正を管理する

ソースコードを修正し、 Debian Package で配布する部分を管理するには、 今までどおり、 dpatch などのパッチ管理システ ム を 使 う 必 要 が あ り ま す 。 作 成 し た パ ッチ を リ ポ ジ ト リ に コ ミ ット す る 時 に に 、 git add, git commit コマンドを使い、 リポ ジトリに反映させます。

$ dpatch-edit-patch 05_change_ift-load_install_dir
...  いろいろ修正 ...
$ exit
$ vi debian/patches/00list
$ git add debian/patches/05chage_ift-load_install_dir.dpatch
$ git commit -s debian/patches/00list debian/patches/05_chage_ift-load_install_dir.dpatch
/*  エディタが起動するので、 コミットログを記述 */

Change ift-load install dir.

Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>

$ git log
commit c9865153ae1949956fdfe3827c0da9b36c2f0ddb
Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Date:   Sun Apr 6 21:23:20 2008 +0900

    Change ift-load install dir.

    Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
6.6.3 git-buildpackage を使った Debian パッケージの作成

Debian パッケージを作成するには、 git-buildpackage コマンドを使います。 –git-ignore-new オプションは Git に反映さ れていない修正を無視するためのオプションです。

$ git-buildpackage --git-ignore-new -us -uc
6.6.4 パッケージをリリースする

新しい Debian バージョンのパッケージをリリースする場合は、 git-dch コマンドに–release オプションを付けます。 実行す ることにより、 エディタが立ち上がり、 Git のコミットログから、 Debian Changelog が作成されます。 Changelog を作成した ら、 git-buildpackage コマンドに –git-tag オプションを付けてパッケージを作成します。 –git-tag を付けると、 リポ ジトリに Debian バージョン用のタグが Debian changelog より作成され、 リリース情報が付加されます。

$ git-dch --release
$ git-buildpackage --git-ignore-new --git-tag
$ git tag
debian/1.0.2-1
debian/1.0.2-2
upstream/1.0.2
6.6.5 新しいバージョンにする

新しいバージョンにするには、 git-import-orig コマンドを使い、 リリースされた新しいバージョンの Tar ボールを指定しま す。 指定することにより、 ファイル名からバージョンを取得し、 新たに Upstream 用のタグが作成されます。 また、 アップスト リームのバージョンが上がるため、 自動的に Debian Changelog に次の Debian Package バージョンが追記されます。

$ git-import-orig /tmp/isight-firmware-tools-1.2.tar.gz
Upstream version is 1.2.0
Importing ’/tmp/isight-firmware-tools-1.2.tar.gz’ to branch ’upstream’...
Switched to branch "upstream"
rm ’isight.rules.in’
rm ’po/fr_FR.po’
Created commit f5c85da: Imported Upstream version 1.2.0
 33 files changed, 4434 insertions(+), 1332 deletions(-)

.......<snip>

 src/udev.c                             |  164 +++
 33 files changed, 4434 insertions(+), 1332 deletions(-)
 rename po/{fr_FR.po => fr.po} (66%)
 create mode 100644 src/50-isight-firmware.fdi
 create mode 100644 src/callout.c
 create mode 100644 src/isight-firmware.fdi
 rename isight.rules.in => src/isight.rules.in (100%)
 create mode 100644 src/load.h
 create mode 100644 src/udev.c
Succesfully merged version 1.2 of /home/iwamatsu/Desktop/isight-firmware-tools-1.2.tar.gz into .
$ git branch
debian/1.0.2-1
debian/1.0.2-2
upstream/1.0.2
upstream/1.2
$ cat debian/changelog
isight-firmware-tools (1.2-1) unstable; urgency=low

  * New Upstream Version

 -- Nobuhiro Iwamatsu <iwamatsu@nigauri.org>  Fri, 11 Apr 2008 17:18:23 +0900

6.7 新たにパッケージ化する場合

あたらしくにソフトウェアを Debian Package にして、 git-buildpackage で管理する場合は最初に Git の機能が必要です。 まず、 ローカル Git リポジトリを作成します。 次に作成したリポジトリに移動し、 git-import-orig コマンドに アップストリームのソースコードを指定し、 実行します。 ソースコードは、 gzip、 bzip2 などで圧縮された ものと、 展開されたソースコードディレクトリを指定することが可能です。 また、 実行する際に、 -u オプ ションで、 アップストリームのバージョンを指定する事が可能です。 リポジトリを作成した後は upstream ブ ランチに移動し、 dh_make 等を使ってパッケージの雛形作成し、 上で説明した流れでメンテナンスを行い ます。

$ mkdir isight-firmware-loader-1.2
$ cd isight-firmware-tools-1.2
$ git init /*  ローカル Git  リポジトリを作成する */
$ git-import-orig -u 1.2  /tmp/isight-firmware-tools-1.2.tar.gz /*  ソースコードをコミット */
Upstream version is 1.2
Initial import of ’/tmp/isight-firmware-tools-1.2.tar.gz’ ...
Succesfully merged version 1.2 of /tmp/isight-firmware-tools-1.2.tar.gz into .
$ git log
commit 9bf014aee2f834576f8f03d67ab66e8c85726832
Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
Date:   Tue Apr 8 21:42:55 2008 +0900

    Imported Upstream version 1.2
$ git branch
* master
  upstream
$ git tag
upstream/1.2
$ git branch upsteam
$ dh_make
$ git branch master

第 39 回東京エリア Debian 勉強会 2008 年 4 月
____________________________________________________________________________________________