2011/10/25

qemu ゆるふわリスト

qemu-kvmがいまだにゆるふわな作りなので、遭遇した問題を書いておく。

pci_delの入力値

v0.12.3 で遭遇。

qemu monitor shell(qemu shell)で、pci_add によるPCI device hotplugを行う。成功時には、以下のような内容になる。

(qemu) pci_add xxx .....
OK domain 0, bus 0, slot 4, function 0

戻り値として表示されているPCIのdevice addressはdecimal。例えば、17番目のslotにdeviceが挿入されるとすると、

(qemu) pci_add xxx .....
OK domain 0, bus 0, slot 17, function 0

になる。

問題は、pci表示系の出力は全部decimalになっているのに、pci_add/pci_delの変更系のコマンドに対してはhexで入力しないといけないこと。

-no-shutdown 問題(UNIX signal問題含む)

v0.14.0で確認。

-no-shutdown を入れると、guestからshutdownしてもqemuプロセスが死なないとmanには書いてあるが、2度目にqemuプロセスが死んでしまう。 または、UNIX signalを送っても終了しなくなる。

原因は、no_shutdownグローバル変数一個だけで制御を行おうとしていること。v0.15.0かそれを超えた辺りで、この問題の修正を見つけたので、v0.16.0が出れば修正されているはず。


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

参考


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