今回は、KVM(Kernel Based Machine)を使ってみた。
発端は、久しぶりにPCを組んだこと。
なにかといじくるのに、今、性能の良いマシンが手元になかったので、一台、2年ぶりくらいに作ってみた。
構成は以下の通り。
- CPU: Phenom X4 9950BE (x15に倍率変更して、3GHzで駆動)
- Memory: DDR2-800 2GB x 4 = 8GB(UMAXの安いの)
- MotherBoard: GIGABYTE GA-MA78GPM-DS2H
- 電源:剛力プラグイン 450W
- DISK: とりあえず、HGSTの500GB 5400rpmのやすいやつ。
- ケース: DC-ACPCD/R(いわゆる、まな板)
まな板 に組んでるので、家に普通に設置するには向きませんが、うちの会社の足下に今は放置されてます。
ちなみに、まな板とマザーは、マザー裏側につけられているファン固定用のプラスチックが干渉して、
ねじ止めできないことが発覚。なので、まな板の上に、置いているだけです。
また、5インチベイにマウントするなにかがあったほうがいいです。
まな板は、構造上、DVD-ROMドライブなどで、アクリル板を支えるようになっているようです。
とりあえず、私は、適当な雑誌で代替してます。
これくらいの性能のマシンだと、そのまま使っても性能使い切れないだろうなぁ、とおもったのが発端。
それで、ちょうどUPnPとかDLNAといった単語が飛び交う仕事もあったりしたので、
この手の環境つくるのに、物理的に複数マシンを用意するのは無駄だな、ってことで、
KVMをいれてみようということになりましたとさ。
んで、調べてると、CPUだけじゃなく、メモリ、ディスク、NIC、RTC?も準仮想かされているって記述があり。
そのへんをvirtioという形ですでに、kernelにマージされているらしいということで使ってみた。
virtioは、基本的に、ゲスト側もドライバが必要です。Windows向けも配布されてます。
まず、このマシンにGentoo 2008.0のinstall CDをもってきてインストールします。
ちなみに、インストールは、SD+USBのリーダーから行いました。このへん見れば、簡単にできます。
あ、メモリ8GBもつんでるし、ってことで、x86_64をインストールしてること前提。
まあ、i386でも、それほど差はないかも。amd64は、Portageで、MASKされまくってるので、むしろそっちのほうが楽?
こちらは、おそらく特に問題なく入るはず。
カーネルの設定は、
- DISKは、BIOS設定で、とりあえず、全部AHCIにしとけば、カーネルもAHCI有効にしておけばOK。
- TIMER関係は、virtioの性能向上のために、高精度、高頻度にしとくのが吉らしい。
- Soundは、SB700は、Intel HD Audioで動く。
- NICは、r8169なので、とくに問題なく動く。
- Virtualizationから、KVMを有効にしとく。
肝心のKVM。
なんか今の環境は、いろいろ試行錯誤したので、結局、素でソース持ってきて、最新版(KVM-79)を使った。
でも、たぶん、Virtioとかはうごくので、PortageのKVM-78でいいかも。
ここからは、一応、Portage使うの前提で。
あ、手でKVMをコンパイルすると、
何故かKVMのconfigureスクリプトがフィルタ(enable/disableが含まれているものしか出さないようにしている?)して、
qemuのac97が有効にするオプション(--audio-cardlist)が./configure --helpで出てこないので、
$ ./qemu/configure --help
も実行してみて、KVMのconfigure実行時にほしいオプションは付け加えるが吉。
kqemuはたぶん、有効にしないほうが安全っぽい。
■Portageからのインストール
GentooのPortageから入れようとすると、~amd64は、Maskされている。
ので、Overlayを作る。
まず、/etc/make.confに
PORTDIR_OVERLAY=/usr/local/overlays
を追加。
# mkdir /usr/local/overlays
# mkdir /usr/local/overlays/app-emulation
# cp -a /usr/portage/app-emulation/kvm /usr/local/overlays/app-emulation/
で、KVMをコピーしてくる。
んで、kvm-78.ebuildのKEYWORDS="~amd64"となってるところを"amd64"(チルダを外す)だけ。
Digest作り直し。
# ebuild kvm-78.ebuild digest
そして、インストール。といきたいけど、道連れ(依存関係)でインストールされるqemuがこのままだとインストールできない。
gcc3系が必要だとのこと。
(ちなみに、KVM-79を手で落としてきて、x86_64なものだけをコンパイルするなら、gcc4.1.2でもいけた。)
なので、まず、
# emerge -av sys-devel/gcc:3.4
として、gcc3を入れる。gcc-3.4.6が入った。
んで、gccを変更。
# gcc-config -l
で、今使えるgccのリストが出る。gccって、こんな機能あったんだね、とひとりで感心。
余談ですが、crossdevで、クロスコンパイラ入れてると、それも出てきた。
左の添え字を指定すると切り替えれる。2がgcc-3.4.6だったら、
# gcc-config 2
んで、/etc/profileを読み直せ、と言われるので、
# source /etc/profile
この状態で、
# emerge qemu
とすると、インストールできるはず。
そして、gccをもとに戻す。
# gcc-config -l
# gcc-config 7
そして、
# emerge kvm
でインストールできるはず。
この後、kvmをロードする。AMD Phenomなので、
# modprobe kvm_amd
でいけた。
そして、Gentoo用のHDDイメージ作成とインストール
ここでも、試行錯誤の結果、virtio_blkを有効にして起動しちゃうと、ゲスト側のkernelが2.6.25以上じゃないと、
ディスクが認識されないので、だめぽ。
まあ、model=scsiとかを指定して、インストールすればいけるんですが、
それはちょっとカコワルイとか、意味のないことをおもったので、手順を軽く変更しました。
とりあえず、Gentooのインストール作業は、Linuxが動いていればそれなりにどうにかなるので、
Ubunto 8.10のインストールCDで起動してインストールしちゃいます。
てことで、適当に、ubuntuのインストールCDのISOイメージをダウンロードしてきます。
それに先だって、まずは、インストール先のHDDイメージ作成。
# kvm-img create -f qcow2 gentoo.img 60GB
で、qcow2という伸縮するimgができるみたい。とりあえず、60GBで作った。
そして、インストール用に以下のようなオプションで起動。(オプションの意味は、man qemuとかで。)
$ export QEMU_AUDIO_DRV=alsa
$ sudo kvm \
-m 2048m -monitor stdio -curses -vnc :0 \
-vga vmware \
-soundhw ac97 \
-drive file=hdd_image/gentoo.img,if=virtio,boot=on \
-localtime -k ja \
-net nic,vlan=0,model=virtio,macaddr=52:54:00:12:34:00 \
-net tap,vlan=0,ifname=tap0,script=scripts/ifup \
-cdrom install_image/ubuntu-ja-8.10-desktop-i386.iso \
-boot d
あ、ネットワークは、NATでなく、ブリッジで動かしてます。
なので、modprobe tunは実行しておく必要ありです。
また、ホスト側のマシンで、あらかじめブリッジを構築しておく必要があります。
それで、/dev/net/tunは、groupにrwの権限あたえたのですが、うまく動かなかったので、
sudoして、rootで動かしてます。これはどうにかしたい。
script/ifupは以下のような内容。
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
sudo /sbin/brctl addif br0 $1
たしかこれは、どっかからぱくってきただけ。
んで、起動すると、Ubuntuがあがってくるはず。最悪、Xは起動しなくてもOK。コンソールだけでもインストールはできる。
そして、VNCクライアントを用意します。
これは、Windowsだと、UltraVNC、Macだと、Vine Viewerを使っています。(Chiken of VNCはうまく動かんかった。)
そして、通常と同じ手順でインストールをしていきます。
ただし、ディスクは、/dev/vdaとして認識されているので、注意。
カーネル構築時には、virtio関連を、Mではなく、yでカーネルに組み込みます。
はじめは、genkernelでinitramfsで起動しようとがんばってみたけど、
/usr/share/genkernel/x86/modules_load
に、virtio_blkを書いても、どうもうまくいかんかったので、挫折。なんでかはわからずじまい。
Grubインストールは、Gentooのstage3 tarball付属のでは、どうも/dev/vd*に対してのインストールは対応してない模様。
なので、苦肉の策で、Ubuntuのほうに、chrootな環境から抜けて、Ubuntuに付属のgrubでインストールをする。
そこでも、grub-installコマンドでは、どうもうまくいかんかったので、
# grub
で、とりあえず、コンソールにはいって、
# root (hd0, 0)
# setup (hd0,0)
なら、うまくいった。謎。
あ、あと、/boot/grub/device.mapもたぶん、(hd0,0) /dev/vdaとか手で書き加えた。
これで、一回、シャットダウンします。
そして、もう一回、qemu起動。
$ export QEMU_AUDIO_DRV=alsa
$ sudo kvm \
-m 2048m -monitor stdio -curses -vnc :0 \
-vga vmware \
-soundhw ac97 \
-drive file=hdd_image/gentoo.img,if=virtio,boot=on \
-localtime -k ja \
-net nic,vlan=0,model=virtio,macaddr=52:54:00:12:34:00 \
-net tap,vlan=0,ifname=tap0,script=scripts/ifup
cdrom関連のオプションを外して、起動します。
これで、うまく起動できたら、成功。
あとは、通常のGentooとして使えます。
うちの環境だと、
ディスクは、90MB/s前後出ています。快適。
ネットワークも、100Mbps前後は出ているようです。
ちなみに、Ubuntuだとこんな苦労なしに、さくっと入ります。
でも、Gentooをがんばっていれてみたかったので、楽しかったです。
次回があれば、このVM上で、CoherenceというDLNAサーバを動かしてみる話を書くかも。
0 件のコメント:
コメントを投稿