Debian/testing(squeeze)上でのKVM環境の構築

PCのOSをubuntu 9.10からDebian/testing(squeeze)に変えた。ついでにソースからKVM環境を作ってみたのでメモを残しておく。

コンパイルに必要となるパッケージの記述は省略した。必要に応じてapt-get installすること。

カーネルパッケージ作成

普通にmake installでもいいんだけど、複数のPC間で使い回したいし、せっかくなのでパッケージ化しておく。Debian勉強会「月刊Deb専 2010年5月号」の岩松さんの記事を参考にカーネルパッケージを作る。

まずはlinusのツリーをベースにdebパッケージ化する。カーネルのバージョンはv2.6.35-rcではなくv2.6.34にした。環境変数CONCURRENCY_LEVELはmakeの-jオプションの引数になる。この時点のカーネルコンフィグでパッケージ化されるようなので、make-kpkg実行前にコンフィグしておく。

$ cd linux-2.6
$ git pull
$ git checkout v2.6.34 -b v2.6.34
$ make oldconfig (&& make menuconfig)
$ 
$ make-kpkg clean
$ export CONCURRENCY_LEVEL=8
$ fakeroot make-kpkg --revision=1+`git log --pretty=format:%h -1` --initrd kernel_image

make-kpkgの実行が成功すればこれで親ディレクトリにdebパッケージが作られるので、インストールする。この際、(Grub2の)update-grubも実行されるが、デフォルトカーネルは変更されないので、/etc/default/grubGRUB_DEFAULTを編集してupdate-grubする。

$ sudo dpkg -i ../linux-image-2.6.34_1+e40152e_amd64.deb
$ sudo vi /etc/default/grub
$ sudo update-grub

再起動してカーネルが無事立ち上がってくることを祈る。

ちなみにDeb専の記事では、make-kpkgがinitrdを作らなくなったとあるけど、そんなことはないようだ(明示的に--initrdオプションが必要になったてことかな?)。/etc/kernel/postinst.d/initramfs-toolsってそれっぽいファイルがある。ちなみにmake-kpkgのバージョンは12.033。

KVMモジュール & QEMU

KVMのgitリポジトリには、カーネル込みのkvmとモジュール単体のkvm-kmodが存在するが後者を使う。

$ git clone git://git2.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
$ git clone git://git2.kernel.org/pub/scm/virt/kvm/kvm-kmod.git

KVMモジュールをコンパイルする前に、バージョンをカーネルに合わせておく。v2.6.34に対応するのは、kvm-kmod-2.6.34になる。カーネルのバージョンを変えたら、make syncを忘れないこと。

$ cd kvm-kmod
$ git tag -l
kvm-86
  :
$ git checkout kvm-kmod-2.6.34 -b kvm-kmod-2.6.34
$ ./configure
$ make sync LINUX=/lib/modules/2.6.34/source
$ make
$ sudo make install

続いてQEMUコンパイル。こちらは特にはまることはないと思う。

$ cd qemu-kvm
$ ./configure
$ make
$ sudo make install

あとはゲストOSとしてPlan 9を動かすなりなんなりお好きなように。