上川純一
___________________________________________________________________________________________________________________________
Debian のソースパッチを管理するツールです. Debian パッケージでは, ソースパッケージは以下の構成に な って い ま す .
この中で, .diff.gz は一つの大きな差分ファイルとして管理されるため, どの部分がどういうパ ッチ で あ る か , と い う こ と を 管 理 し て は く れ ま せ ん . そ の 部 分 を 実 装 す る の が dpatchで す .
通常の.diff.gz であると, debian/ディレクトリ以下の Debian パッケージング用の情報と そ れ 以 外 の ソ フ ト ウ ェア 自 体 へ の 修 正 が 混 合 し て い ま す . そ れ を 整 理 す る と い う も の です.
dpatch では, それぞれの小さな変更をそれぞれ独立したパッチとして扱います. それぞれの パ ッチ を debian/patches/xx patchname.dpatch という名前で管理します. 例えば, debian/patches/01 configure.dpatch という名前になります. そして, パッチの一覧を debian/patches/00listに適用する順番に記述します. そこでは, 01 configureというような形式で記 述 で き ま す .
こ の 形 式 を 採 用 し て い る た め , Debian においての変更点が debian/ディレクトリ以下に集ま り, また変更点を debian/patches ディレクトリで分類して管理できる, という利点があり ます.
dpatch でのファイル名が数字ではじまるのは昔はその番号で適用順序を決定していたなごりです. 今は あまり数字を利用する必要性はありません. debian/patches/00list ファイルに指定した順番でパッチ は適用されます.
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 |
dpatch で利用するためのパッチを作成するコマンドです.
基本的な使い方は dpatch 管理下にあるソースコードのディレクトリで,
dpatch-edit-patch -d ’ 説明文’ 03_patchname 02_patchname
|
のように入力すると, 二つ目のパラメータに指定したパッチまでのパッチを適用した状態で, 一時ディ レクトリにソースを展開してくれ, シェルが起動します. パッチ名には.dpatch 拡張子をつける必要はあ りません.
編集したのち, シェルから出ると, 一つ目のオプションに指定した名前のパッチを作成してくれ ます.
debian/patches/00list ファイルは編集してくれるわけではないので, 自分で編集する事になります. debian/patches/00list ファイルを編集してパッチの名前 (.dpatch 拡張子をぬいたもの) を追加したら そのパッチが適用されるようになります.
emacs 上で dpatch を使うために必要な, 00list ファイルや, .dpatch ファイルの編集用のモード です.
まだまだ未完成です.
目標は dpatch-edit-patch の実装ですが, そこに至る前のコアの dpatch の部分の変更をしているだけで 現在は時間が過ぎていってます.
作業のフローについては, これよりよい方法がある, などありましたら教えてください.
Debian パッケージとして管理しているソフトウェアで, もととなっているパッケージ (upstream package) の新しいバージョンが出た場合の対応です.
新規にパッケージを作成する手順です.
がんばれ. といいたいところですが, とりあえず現状の仕様をあらいだして, テストを作成して, 全部の 機能が動作することを確認するところからやろうと考えています. 今は謎の機能が多すぎておいそれと触 れません.
東 京 エ リ ア Debian 勉強会 2005 夏_________________________________________________________