11 dpatch をつかってみよう

上川純一      
___________________________________________________________________________________________________________________________

11.1 dpatch とは

Debian のソースパッチを管理するツールです. Debian パッケージでは, ソースパッケージは以下の構成に な って い ま す .

この中で, .diff.gz は一つの大きな差分ファイルとして管理されるため, どの部分がどういうパ ッチ で あ る か , と い う こ と を 管 理 し て は く れ ま せ ん . そ の 部 分 を 実 装 す る の が dpatchで す .

通常の.diff.gz であると, debian/ディレクトリ以下の Debian パッケージング用の情報と そ れ 以 外 の ソ フ ト ウ ェア 自 体 へ の 修 正 が 混 合 し て い ま す . そ れ を 整 理 す る と い う も の です.

11.2 ファイル構成

dpatch では, それぞれの小さな変更をそれぞれ独立したパッチとして扱います. それぞれの パ ッチ を debian/patches/xx patchname.dpatch という名前で管理します. 例えば, debian/patches/01 configure.dpatch という名前になります. そして, パッチの一覧を debian/patches/00listに適用する順番に記述します. そこでは, 01 configureというような形式で記 述 で き ま す .

こ の 形 式 を 採 用 し て い る た め , Debian においての変更点が debian/ディレクトリ以下に集ま り, また変更点を debian/patches ディレクトリで分類して管理できる, という利点があり ます.

dpatch でのファイル名が数字ではじまるのは昔はその番号で適用順序を決定していたなごりです. 今は あまり数字を利用する必要性はありません. debian/patches/00list ファイルに指定した順番でパッチ は適用されます.

11.3 道具

dpatch を利用するための道具を紹介します.

11.3.1 dpatch

dpatch コマンドは, パッチの適用とパッチをはずすという処理を実施してくれるコマンドです. 従来は, makefile から include する Make スクリプトとして実装されていましたが, dpatch 2.0 からは実体が /usr/bin/dpatch シェルスクリプトになっています.

古いdebian/rulesでは下記の内容を記述しています.

include /usr/share/dpatch/dpatch.make

最近の dpatch を利用するソースでは, dpatch コマンドを呼ぶように実装すればよいこ とになっています. (/usr/share/doc/dpatch/examples/rules/rules.new.dh.gz から 抜粋)

#!/usr/bin/make -f
#
# Sample dpatch rules file. Only example. Nothing else. :)
# This one uses the new way with dpatch from dpatch 2.x

export DH_COMPAT = 4

CFLAGS = -Wall -g
ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
CFLAGS += -O0
else
CFLAGS += -O2
endif

build: build-stamp
build-stamp: patch
@echo "--- Compiling"
dh_testdir
# Do something to build your package here
touch build-stamp

clean: clean1 unpatch
clean1:
@echo "--- Cleaning"
dh_testdir
dh_testroot
dh_clean -k
# Clean your build tree

install: build-stamp
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Install it here

# Build architecture-independent files here.
binary-indep: build install

# Build architecture-dependent files here.
binary-arch: build install
dh_testdir
dh_testroot
dh_installdocs
# And all the other dh_* stuff you need for your package.

# And now the simple things for dpatch. Here we only apply/unapply the patches.
# You can do more things with dpatch, like having patches only applied on
# a special architecture - see the non-dh version of the sample for this!
patch: patch-stamp
patch-stamp:
dpatch apply-all
#dpatch call-all -a=pkg-info >patch-stamp

unpatch:
dpatch deapply-all
rm -rf patch-stamp debian/patched

binary: binary-indep binary-arch
.PHONY: binary clean binary-indep binary-arch build install patch unpatch \
clean1
11.3.2 dpatch-edit-patch

dpatch で利用するためのパッチを作成するコマンドです.

基本的な使い方は dpatch 管理下にあるソースコードのディレクトリで,

dpatch-edit-patch -d ’ 説明文 03_patchname 02_patchname

のように入力すると, 二つ目のパラメータに指定したパッチまでのパッチを適用した状態で, 一時ディ レクトリにソースを展開してくれ, シェルが起動します. パッチ名には.dpatch 拡張子をつける必要はあ りません.

編集したのち, シェルから出ると, 一つ目のオプションに指定した名前のパッチを作成してくれ ます.

debian/patches/00list ファイルは編集してくれるわけではないので, 自分で編集する事になります. debian/patches/00list ファイルを編集してパッチの名前 (.dpatch 拡張子をぬいたもの) を追加したら そのパッチが適用されるようになります.

11.3.3 dpatch.el

emacs 上で dpatch を使うために必要な, 00list ファイルや, .dpatch ファイルの編集用のモード です.

まだまだ未完成です.

目標は dpatch-edit-patch の実装ですが, そこに至る前のコアの dpatch の部分の変更をしているだけで 現在は時間が過ぎていってます.

11.4 作業フロー

作業のフローについては, これよりよい方法がある, などありましたら教えてください.

11.4.1 あたらしい upstream が出た時

Debian パッケージとして管理しているソフトウェアで, もととなっているパッケージ (upstream package) の新しいバージョンが出た場合の対応です.

11.4.2 あたらしく package をつくる時

新規にパッケージを作成する手順です.

11.4.3 あたらしく patch を作成
11.4.4 すでにあるパッチを編集

11.5 今後の開発

がんばれ. といいたいところですが, とりあえず現状の仕様をあらいだして, テストを作成して, 全部の 機能が動作することを確認するところからやろうと考えています. 今は謎の機能が多すぎておいそれと触 れません.

東 京 エ リ ア Debian 勉強会 2005 _________________________________________________________

PIC