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 -- DevThu, 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,debughttp://www.netfort.gr.jp/~yabuki/diary/20040601.html
参考
- Debian 新メンテナーガイド: http://www.debian.org/doc/manuals/maint-guide/index.ja.html
- quilt 使い方 on debian パッケージ: http://blogs.yahoo.co.jp/mindrefugee307/44876488.html