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を送っても終了しなくなる。
- guestからshtudown/poweroff等のコマンドを実行。
- qemu-kvmのstatusがrunning -> paused へ変化。
- qemu shellから "cont" コマンドで再始動させる。resetされ再起動開始。
- 2度目 guestからshutdown操作を実行。
- qemuプロセスがお亡くなりになる。
原因は、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 -- 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