on
nested kvmとvagrant-libvirt
概要
将来的に(個人的に)最近はやりの仮想マシンモニタ(VMM)を作成したいと思い始めました.そこで,開発環境として,ubuntu14.04 上に qemu-kvm をインストールし,仮想化支援機構(intel VT-x, EPT..)などが有効な仮想マシンを作成します.また,作成した仮想マシンを vagrant から操作できるようにします.
これによって,vagrant を用いてトライアンドエラーをしながら,仮想マシン上で VMM の開発ができるようになります.
はじめ,VirtualBox+vagrant で開発を進めようと思いましたが,VirtualBox は,作成した仮想マシン上で仮想化支援機構(Nested VM)を有効にできないことがわかりました.
VMware では Nested VM を有効にできるのですが,VMware に対応した Vagrant プラグインが有料であったので断念しました.
qemu-kvm と libvirt をインストール
パッケージのインストール
$ sudo apt install qemu-kvm libvirt0 libvirt-bin virt-manager bridge-utils
libvirt-bin を systemd に登録
$ sudo systemctl enable libvirt-bin
libvirtd グループに所属していると sudo なしで virt-manager や virsh を実行できる
$ sudo gpasswd libvirtd -a ユーザ名
kvm 上のゲスト OS の VT-X を有効にする
あらたに conf ファイルを作成する
$ sudo vim /etc/modprobe.d/kvm-nested.conf
# 新規作成 options kvm_intel nested=1
モジュールのアンロード
$ sudo modprobe -r kvm_intel
モジュールのロード再ロード
$ sudo modprobe kvm_intel
確認
$ sudo cat /sys/module/kvm_intel/parameters/nested Y # 有効になった
vagrant-libvirt のインストール
ここでは,VirtualBox 用の Box をダウンロードし,それを libvirt 用に変換して利用します.
vagrat-libvirt と vagrant-mutate のインストール
$ vagrant plugin install vagrant-libvirt vagrant-mutate
VritualBox の Box をダウンロード
$ vagrant box add ubuntu/trusty64
virtualbox の box を libvirt に変換する
$ vagrant mutate ubuntu/trusty64 --input-provider virtualbox libvirt
確認
$ vagrant box list ubuntu/trusty64 (libvirt) ubuntu/trusty64 (virtualbox)
初期化と起動
$ vagrant init ubuntu/trusty64
仮想化支援機構を有効にする Vagrantfile 以下を追加する.
config.vm.provider :libvirt do |v| # Customize the amount of memory on the VM: v.memory = "1024" # Virtualization v.nested = "true" v.cpu_mode = "host-passthrough" end
起動
vagrant up --provider=libvirt
確認
|
|
表示されない場合(intel VT-x が有効になっていない)
ホスト OS に戻り,以下のコマンドを実行し,仮想マシンの設定ファイルを編集する.
|
|
仮想マシン名は,virt-manager
コマンドとかで確認できます.
vagrant up 時に以下のエラーが表示される
|
|
プールをリフレッシュすることで解決できました
|
|