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