Gentoo + KVM で Windows XP を起動してみる
一連の作業を GNU Screen でログってたのですが、ログファイルのフォーマットが何か od の出力みたいになってて解読するのがめんどうくさいので、以下うろ覚えですが一連の作業を復元して掲載します。
ちなみに環境はこんな感じ。
% uname -a Linux gentoo 2.6.18-r6 #10 SMP Sun Jan 14 22:55:06 JST 2007 x86_64 AMD Athlon(tm) 64 X2 Dual Core Processor 4600+ AuthenticAMD GNU/Linux
-mm kernel のインストール
現在、 portage にある gentoo-sources の最新は KVM を含んでいないので、 mm-sources の最新版 (sys-kernel/mm-sources-2.6.20_rc4-r1) を使ってカーネルを構築します。
% USE="symlink" emerge '=sys-kernel/mm-sources-2.6.20_rc4-r1' % cd /usr/src/linux % cp /boot/<oldconfig> .config % make oldconfig
CONFIG_KVM=y 、 Intel の CPU を使っている場合は CONFIG_KVM_INTEL=y 、 AMD の CPU を使っている場合は CONFIG_KVM_AMD=y に設定しておいて、
% make && make modules_install
します。 mm/mempolicy.c:885 でエラーが出る場合は、以下のように修正してから再コンパイル。
#ifdef CONFIG_CPUSETS nodes_and(nodes, nodes, current->mems_allowed); #endif
完成したカーネルはインストールして起動できるようにしておいてください。ちなみに 2.6.20 の少し前ぐらいから make menuconfig の ESC が ESC ESC とツーストロークになっており、また Device Drivers のセクションには Serial ATA (prod) and Parallel ATA (experimental) drivers というセクションが新設されており、自分が用いている ATA ドライバを適切に設定しておく必要があります。
KVM qemu のインストール
KVM qemu は 32 ビット環境でしかうまくコンパイルできないようですが(いろいろ奮闘しました)、めんどいくさいというか 64 ビット環境で無理やりコンパイルしたやつも一応動いているようなのでそちらの方法を紹介しておきます。ちなみにちゃんとやるなら chroot で 32 ビット環境つくらないといけないと思います(あるいは各種ライブラリを 32 ビット用にコンパイルするか)。
準備:
% gcc-config -l [1] x86_64-pc-linux-gnu-3.4.6 [2] x86_64-pc-linux-gnu-3.4.6-hardened [3] x86_64-pc-linux-gnu-3.4.6-hardenednopie [4] x86_64-pc-linux-gnu-3.4.6-hardenednopiessp [5] x86_64-pc-linux-gnu-3.4.6-hardenednossp [6] x86_64-pc-linux-gnu-4.1.1 * % gcc-config 1 % source /etc/profile
んで http://kvm.sourceforge.net/ から kvm-<release>.tar.gz を取ってきて、
% tar zxf kvm-<release>.tar.gz % cd kvm-<release>.tar.gz
qemu/configure が意味不明な処理をしているので無理やり
qemu/configure(around 456):
-sdl=no +sdl=yes
としてから、
% ./configure --prefix=/usr/local/kvm --with-patched-kernel --qemu-cc=gcc % make && make install
インストールができたので gcc-config を元に戻しておきます。
% gcc-config 6 % source /etc/profile
Windows XP を起動してみる
まずはディスクイメージを作ります。
% /usr/local/kvm/bin/qemu-img create -f qcow /var/vm/winxp/disk.img 10G
Windows XP の CD を挿入して起動します。
% /usr/local/kvm/bin/qemu-system-x86_64 -hda /var/vm/winxp/disk.img -cdrom /dev/cdrom -boot d -m 256 -no-acpi
何も問題がなければ普通にインストールが完了するはずなので、それ以降は、
% /usr/local/kvm/bin/qemu-system-x86_64 -hda /var/vm/winxp/disk.img -cdrom /dev/cdrom -boot -c -m 256 -no-acpi
で起動できます。ついでにいろいろな機能を有効にしてスクリプト化しておきましょう。
/var/vm/winxp/run:
#!/bin/sh /usr/local/kvm/bin/qemu-system-x86_64 -hda /var/vm/winxp/disk.img -cdrom /dev/cdrom -soundhw all -usb -boot c -m 256 -no-acpi > /dev/null 2> /dev/null &
% chmod a+x /var/vm/winxp/run
これで必要なときに /var/vm/winxp/run をすれば Windows XP が起動してくれます。
備考
lsmod | grep -i kvm が空なのでおそらくカーネルの KVM を利用して動作していると思います。んでもってスクリーンショットにもあるように、単なる qemu のエミュレーションではなく KVM を利用した仮想化がちゃんと動作しているように思われます。ただ、マウスやキーボードのレスポンスはひどく悪く、 VM 内から HDD にフルアクセスしたりすると、 qemu client から抜けだせなくなったりと、かなり不安定です。それに加えて時計の針の進みも異常です。実用するにはまだまだ改善が必要なようです。ちなみに tick に関しては以下のようなパッチが投げられていて tick による無駄な計算を省くことができるらしいです。
http://kerneltrap.org/node/7568
最後になりましたが、次の stable リリースがこれほど待ち遠しいのは初めてです。 lkml を ROM るだけじゃなく、いつかは自分も Linux 開発に参加してやろうと機会を伺っているのですが、 lkml を読むかぎりではまだまだ自分では道が遠いようです。まあそれよか健康管理をもっと頑張って、この死にかけた精神を何とか再構築して、普通に仕事できるようにするのが先決なのですが。
- Category(s)
- linux
- The URL to Trackback this entry is:
- http://dev.ariel-networks.com/Members/matsuyama/booting-windows-xp-with-gentoo-kvm/tbping