2009年4月13日月曜日

Ubuntu:はじめての ubuntu-vm-builder:生まれて初めてKVMでゲストからホストのUSBデバイスにアクセス!

最近環境が整ったので、学期はじめのドタバタの合間に仮想化をごにょごにょっとやってみました。
# 今回の題名、嘘ではありませんが、変。
# 具体的には……何だよ、「生まれて初めて」って。

↓ubuntu-vm-builderについてはこちら
http://gihyo.jp/admin/serial/01/ubuntu-recipe/0061

参考にしたサイト
http://www.nongnu.org/qemu/qemu-doc.html
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html
http://alien.slackbook.org/dokuwiki/doku.php?id=slackware:qemu
特にこの辺↓
http://www.nongnu.org/qemu/qemu-doc.html#SEC37
http://www.h7.dion.ne.jp/~qemu-win/qemu-doc-ja.html#SEC28
#↑/proc/bus/usb と /dev/bus/usb の typo ?(3.9.2 の 3 の手順のところ)

$ chown -R 自分のユーザー名 /dev/bus/usb
などとし /dev/bus/usb 以下のファイルのパーミッションを変更するか、仮想マシンを root 権限で実行することで、ホストからゲストにUSB機器の制御を移せました。そうではない場合(一般ユーザー権限でkvmを実行し/dev/bus/usb以下のパーミッションに手をつけない場合)は/dev/bus/usb/hoge/fuga にアクセス権が無い等のメッセージが出てゲストからはUSB機器を利用出来ませんでした。
lsusbで目的のデバイスのIDを確認後、「-usbdevice host:hoge:fuga」をkvmのオプションに指定しても上手く行きますが、「-usb」のみkvmに渡してゲストOSを起動後 Ctrl+Alt+2 (←F2ではない) でQEMUのコンソールに落ち、「info usbhost」を実行、目的のデバイスを見つけた後、「usb_add host:hoge:fuga」とし、 Ctrl+Alt+1 (←F1ではない) でゲストOSに帰って、とする方が僕には使いやすく感じられました。

↑この例ではフラッシュメモリを使っています。ホストから半ば強引にUSB機器の制御を奪う感じでしたので、ホストでデバイスを利用中にゲストに制御を渡すようなこと(例えばホストでデータを書き込み中のフラッシュメモリの制御をゲストで奪うような)はしないほうが無難に思えました。

それにしても、KVM(QEMU)でゲストからホストのUSBデバイスが使えるのは新鮮でした。



< はじめての ubuntu-vm-builder で、はまったところ >

「……何か重い」

理由1:
ユーザーをグループkvmに加え忘れていた。

↓そりゃ重くもなる。
$ ls -l /dev/kvm
crw-rw----+ 1 root kvm 10, 232 2009-04-13 08:02 /dev/kvm

理由2:
メモリ割り当てが少なかった。
$ cat ./run.sh
#!/bin/sh

exec kvm -m 128 -smp 1 -drive file=disk0.qcow2 "$@"

↑ ubuntu-vm-builder のつくる ./run.sh はデフォルトでメモリを128MBしか割り当ててくれませんでした。これはデスクトップ用途には少ない量。


「……なんか変なエラー。キーボードの認識も変。」

qemu: warning: unknown keycodes `evdev(jp106)_aliases(qwerty)'

理由:
オプションの不足。kvmに渡すのに -k ja を加えたら幸せになりました。

$ ./run.sh -k ja

↓こちらを参考にしました。多謝。
http://znz.s1.xrea.com/t/?date=20090108



< その他 >
設定次第でサウンドも問題なさげです(サウンド回りはいじっていないのでこの節は当てずっぽうです)。
$env QEMU_AUDIO_DRV=pa ./run.sh --soundhw all
とかでどうだろう。

詳細は
$ kvm -soundhw ?

$ kvm -audio-help
でどうぞ。

全体的なことは
$ kvm --help

$ man kvm
で。

また、以下も参考にしました。
http://www.h7.dion.ne.jp/~qemu-win/Audio-ja.html



< 妄想 >
/usr/share/xsessions/ 以下に適当なデスクトップエントリをこさえてkvmをフルスクリーンモードで起動すればちょっとしたドッキリ。kvm終了と同時にセッションが終了するから、ゲストOSのシャットダウン=ホストOSでのログアウト。「えっ!Jaunty なのに Hardy ?」とか、「ひえぇ!Windows3.1だよぅ!」とか、エイプリルフールの仕込みに使えるかな。



< ぐふぅっ >
がー!遊んでないで溜まったTODO減らさにゃならんのに……何やってんだ自分 orz

1 件のコメント:

風流塵 さんのコメント...

その後ネットを彷徨っているとこちら様に詳しい記事を発見。
http://www.geocities.jp/i_net_inoue2/index.htm?http://www.geocities.jp/i_net_inoue2/qvm_device.htm

やはり一番乗りは難しいですね :)