2011/10/14

パッチを当てたdebパッケージを作る。

既存のdebを書き換えて自分用のパッケージを作ってみたかったのでやってみた。

まず、source packageを取ってくる必要がある。この他ににもpackage.ubuntu.comなどの一覧ページから手動で取ってくるとかもできる。というか、いつもだいたいそんな感じ。

% apt-get source qemu-kvm
% ls
qemu-kvm_0.14.1+noroms-0ubuntu6.diff.gz
qemu-kvm_0.14.1+noroms-0ubuntu6.dsc
qemu-kvm_0.14.1+noroms.orig.tar.gz
% dpkg-source -x qemu-kvm_0.14.1+noroms-0ubuntu6.dsc
% ls
qemu-kvm-0.14.1+noroms/
% cd qemu-kvm-0.14.1+noroms
% quilt new new-patch.patch
% quilt add vl.c
% vi vl.c

% quilt refresh
% quilt -e header

ここまでやると、debian/patches/new-patch.patch というファイルができて修正内容がpatchファイルとして保存される。

debian/changes へ変更内容の記録とパッケージ名の指定を行う。dch コマンドを使うと、エディタが起動する。

# -i (increment)で、新しいエントリとして追記。-a で既存の先頭のエントリへ追記する。
% dch -i

qemu-kvm (0.14.1+noroms-0ubuntu6backport1) lucid; urgency=low

  * new change

 --  Dev   Thu, 13 Oct 2011 13:38:05 +0900

この作業する前に、環境変数をきちんと指定しておくと、メールアドレス等がきちんと自動で入力される様子。めんどくさいので手で入力した。

先頭行の () の中が結構重要で、この文字列がそのままパッケージファイル名の一部となる。表記の仕方が細かく決まっている様子だったけれど、細かいことは無視してすすめる。注意が必要なのは、"-"をこれ以上増やしてはいけないとか、最後は数字にしておくとか。この場合だと、元の内容が "0.14.1+noroms-0ubuntu6" だったものを "0.14.1+noroms-0ubuntu6backport1"に変更した。

debuild使ってみたけれど、signをしない設定がわからなかったので結局dpkg-buildpackageした。

% dpkg-buildpackage -us -uc -rfakeroot

問題なく進むと、

% ls ../
kvm_84+dfsg-0ubuntu16+0.14.1+noroms+0ubuntu6backport1_amd64.deb
qemu_0.14.1+noroms-0ubuntu6backport1_amd64.deb
qemu-common_0.14.1+noroms-0ubuntu6backport1_all.deb
qemu-kvm_0.14.1+noroms-0ubuntu6backport1_amd64.deb
qemu-kvm_0.14.1+noroms-0ubuntu6backport1.dsc
qemu-kvm_0.14.1+noroms-0ubuntu6backport1.diff.gz

の様なファイル群が増えているはず。

これらの.debをdpkg -i してやるとインストールできる。

qemu-kvm_0.14.1+noroms.orig.tar.gz
qemu-kvm_0.14.1+noroms-0ubuntu6backport1.diff.gz
qemu-kvm_0.14.1+noroms-0ubuntu6backport1.dsc

の組み合わせで、変更後のsource packageとしての配布も出来るはず。

他によく有りそうなケースとしては、debug symbol付きのバイナリが欲しいので自分でpackageをbuildするとかいうのがありそう。普通にdpkg-buildpackage してしまうと、dh_stripという処理が走るせいでdebug symbolが失われてしまう。

dpkg-buildpackageするまえに、debian/rulesからdh_stripコマンドが走るところをコメントにする必要がある。

% vi debian/rules
       #dh_strip -s

この後buildpackageすると、debug symbol付きのバイナリが入ったpackageが出来上がる。release版を作るときにコメントを外すのを忘れそうなのが問題だけど。環境変数の指定で、dh_stripを一時的に動かなくする方法とかあるのかなぁ。

DEB_BUILD_OPTIONSを適切に設定すると、目的が達成できるそうだ。

DEB_BUILD_OPTIONS=nostrip,debug
http://www.netfort.gr.jp/~yabuki/diary/20040601.html

参考


Comments: コメントを投稿



<< Home

This page is powered by Blogger. Isn't yours?