Gentooホストで仮想環境を動かした

以前(qemu-kvmqemuにマージされてない時代)はqemuを生で使っていたのだが、libvirtを介してみることにした。まともにサービスをする仮想サーバを建てるのではなく、試しにプログラム走らせるテストアンドスクラップ用途なので仮想環境からホストに直接接続できたらセキュリティ的にまずいとかそういった話は一切無視している。また、通常そのような用途ならカーネルとか触らない限り今ならlxcのようなコンテナで良いし、それならlibvertじゃなくdockerがある。あくまで趣味的な手順記録である。


app-emulation/libvirtqemuとvirt-networkのUSEフラグを立てる。ゲストの入れ方によってはlvmも付ける。

# emerge -av qemu libvirt virt-viewer

多分下のようにカーネル設定に文句を言われるのでコンフィグ変えてホストのカーネルコンパイル

 *   CONFIG_NETFILTER_XT_TARGET_CHECKSUM:	 is not set when it should be.
$ qemu-img create -f qcow2 init.img 10G

適当にディスクイメージを作る。qcow2からrawへのコンバートもできるので、初めは適当にqcow2でok。

# /etc/init.d/libvirtd start

USE="virt-network"をたてていればこれで勝手にブリッジとかを作ってくれている様子。libvirtdがネットをシャットダウンまで面倒見るかどうかについての設定が/etc/conf.d/libvirtdにあるので LIBVIRTD_KVM_NET_SHUTDOWN="yes" としておく? しなくてもきちんとネットを管理しているような気がする。

# virt-install --name "InitVM" --ram 1024 --disk init.img,format=qcow2 --cdrom [debianのnetinstとか適当な.iso] --network network=default

libvirtが準備してくれたnetを使う時はroot権限じゃないとnetまわりで文句を言われる。
USE="virt-network"を立てていなかったら適当に手動でブリッジを作って使う。
sshdとかはこの段階で入れておけるなら入れておく。改めて言うがセキュリティ面は無視しているので便利なら余計なデーモンも入れているし、パッケージも精査しない。適当だ。

# virt-clone --original InitVM --name someVM --file=./someVM.img

これで毎回まっさらな環境をクローンしてきて使う。

# virsh start someVM
# virt-viewer someVM

これでゲストOSの内側から好きにできる。

[guest]# ifconfig | ip addr

で調べたipにsshで入ったりscpでファイルを送ったりして楽しむ。

# virsh undefine someVM

壊しすぎたらこれでさよならする。新しいクローンはうまくやってくれるでしょう……