環境
ホスト
Fedora17
virt-manager 0.9.4
virsh 0.9.11.5
qemu-kvm 1.0.1
ゲスト
Fedora17(LXDEバージョン)
ホストでコンパイルしたカーネルをゲストに持って行ってわざわざインストールするのは面倒臭いし時間がかかる。
Qemuにカーネル指定して起動するオプションがあるのは知ってたがうまくできなかったので放置していた。
しかし今回試してみたところうまくできたのでやり方をメモしておく。
仮想マシンの作成や設定にはvirt-managerを使用した。
まず、ゲストマシンを作成するとき。
インストール前に仮想マシンをカスタマイズするとこにチェックを入れ、仮想ディスクの設定でDisk busをVirtioではないものにする。
私はIDEにしたがこれでうまくいった。
マシンをブートし、インストール時の設定でLVMを使用しないようにする。
インストールが終了したら、ゲストマシンでdfコマンドでルートファイルシステムを確認する。
私は /dev/sda2 が / だった。
続いて仮想マシンを終了させ、virt-managerの仮想マシンの設定でBoot Optionsタブ開く。
畳まれてるDirect kernel bootという項目開く。
Kernel pathにホストマシンでコンパイルしたカーネルイメージ指定する。
/home/user/linux-3.6/arch/x86_64/boot/bzImage
みたいな感じ。
Initrd pathは空欄にしとく。
Kernel argumentsは
root=/dev/sda2 rootfstype=ext4
というようにゲストマシンのdfコマンドで確認したやつを入れる。
これでホストマシンでコンパイルしたカーネルが起動可能だった。
しかしこの方法だとカーネルモジュールをインストールできないので、カーネルモジュールを使う場合は組み込みでコンパイルする必要がある。
追記:
Virtioのモジュールをカーネルに組み込んでコンパイルすれば仮想ディスクをVirtioにしても問題なく起動できた。
カーネルにモジュールを組み込んでコンパイルするには make localyesconfig が便利。
これをするとローカルで使用しているモジュールだけをカーネルに組み込んでくれる。
まずディストリのデフォのコンフィグを持ってきて、.configとして保存。
そのあと make localyesconfigする。
ただし、そのままだとホストマシンのモジュールを組み込んでしまうので、ゲストマシンのモジュールのみ組み込みたい場合はまずゲストマシンでlsmodした結果をテキストファイルに保存する。
$ lsmod > lsmod.txt
これをホストマシンにコピー。
ホストマシンで
$ make LSMOD=/hogehoge/lsmod.txt localyesconfig
というようにlsmod.txtの場所を指定すればゲストマシンのモジュールのみを組み込むように.configが作成される。