岩松信
洋
|
最近の Debian Package は、 VCS*4 を 使って管理することができるようになっており、 実際に利用しているメンテナも多くなりました。 VCS と言っても様々ですが、 Debian では代表的な VCS である CVS, Subversion や最近流行りの Git、 マイナーな VCS である darcs などを使うことが できます。 今回は、 今一番イケていると思われる Git を使い、 Debian Package をバージョン管理することによりどの ような利点があるのか、 どのようなツールを使ってメンテナンスを行えばいいのか、 などについてを説明し ます。
Debian Package を VCS で管理することによる良い点は以下が考えれます。
Debian パッケージメンテナは、 stable, testing, unstable のソースコードを管理している事が多いです。 また、 多くの Debian バージョンのソースコードを管理することもあります。 VCS を使うことによって、 各バージョ ンの状態を管理しやすくなります。
Debian Package はチームでメンテナンスすることが多くなっています。 VCS を使うことによって、 チームで の開発が容易に行うことができるようになります。
アップストリームのソースコードを追従するために、 Debian 側で VCS を使い、 連携して開発を行うことがで きるようになります。 また、 Debian の独自パッチの管理、 トラッキングも容易になります。
現在、 Debian で利用可能な VCS は以下の通りです。 プロジェクト管理用サーバである Alioth でもこれらの VCS は利用可 能になっています。 また、 最近では Debian Package のタグに利用している VCS を付けることが可能になっており、 各 VCS の利用状況を見ることも可能です。 ここ数か月の VCS の利用状況を調べてグラフにしました。 Git と Subversion を採用して いる開発者が増えていることがわかります。
では、 実際に VCS を使って Debian Package を管理するためにはどのようにすればいいのでしょうか。 Debian パッケージを Git で管理するためのツールとして、 git-buildpackage があります。 これを使うことによって、 Git を使ってパッケージの ソースコードを管理することができるようになります。 インストールはいつものとおり、 apt-get or aptitude を使ってイン ストールすることが可能です。
$sudo apt-get install git-buildpackage
|
git-buildpackage で提供されるコマンドは表 1の 4 つしかありません。 これらのコマンドと Git コマンドを使って、 パッケー ジのメンテナンスをすることになります。 Git の細かい知識は必要ありませんが、 基本的な使い方は知っておく必要があり ます。
|
表 2によくつかう Git コマンドを紹介します。 これだけ知っていれば、 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 |
パッケージをインポートしたときに、 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 |
ソースコードを修正し、 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> |
Debian パッケージを作成するには、 git-buildpackage コマンドを使います。 –git-ignore-new オプションは Git に反映さ れていない修正を無視するためのオプションです。
$ git-buildpackage --git-ignore-new -us -uc
|
新しい 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 |
新しいバージョンにするには、 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 |
あたらしくにソフトウェアを 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 月
____________________________________________________________________________________________