VirtualboxのVM上でVagrantとKVMの連携をテストする

スポンサード リンク

Dockerの使い方は覚えたので,今度はVagrantの使い方を覚えて 仮想マシンを手軽に扱えるようになりたい。

そこで,今回はVirtualboxの仮想マシン上でVagrantとKVMの組み合わせを テストしてみることにした。

環境

ホスト:Windows 7 64bit 仮想化:Virtualbox 4.2.20 r90983 ゲスト:Ubuntu 16.04 Xenial

install kvm

KVMをインストールする。

sudo apt-get install kvm libvirt-bin virtinst bridge-utils

install vagrant

vagrantを公式サイトからダウンロードしてインストールする。

wget https://releases.hashicorp.com/vagrant/1.8.5/vagrant_1.8.5_x86_64.deb
sudo dpkg -i vagrant_1.8.5_x86_64.deb

install vagrant-libvibrt plugin

vagrant-libvibrtはKVMを操作できるようにするプラグインである。 これをインストールする。

sudo apt-get install libxslt-dev libxml2-dev libvirt-dev zlib1g-dev
vagrant plugin install vagrant-libvirt

install vagrant-mutate plugin

vagrant-mutateはVirtualbox用のBoxファイルを KVM用に変換してくれるプラグインである。 もともとKMV用に作られているboxファイルは少ないため,これを使う。

vagrant plugin install vagrant-mutate

kvm用のboxファイルを作成して起動する

Ubuntu14.04 trsutyのboxファイルを用意する。

vagrant box add ubuntu14.04 https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
vagrant mutate ubuntu14.04 --input-provider virtualbox libvirt
vagrant box list
# set libvirt as default provider
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'

Vagrant.configure("2") do |config|

  config.vm.define :my_vm_name do |machine|

    machine.vm.box = "ubuntu14.04"

    #machine.vm.network :public_network, ip: '192.168.48.193', :dev => "br0", :mode => 'bridge'
    machine.vm.provider :libvirt do |domain|
      domain.memory = 2048
      domain.cpus = 2
      domain.driver = 'qemu'
    end

  end
end

Can't get fedora 23 working with libvirt · Issue #539 · vagrant-libvirt/vagrant-libvirt に書いてあるように,Vagrantfileで domain.driver = 'qemu' としないと 以下のエラーが生じて vagrant up できない。

Error while creating domain: Error saving the server: Call to virDomainDefineXML failed: 無 効な引数: could not find capabilities for domaintype=kvm

これは,Virtualboxの下ではkvmによる仮想化支援機能が使えないからである。 他追撃しているかどうかは kvm-ok コマンドで簡単に確認できる。

$ sudo kvm-ok
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used

qemuでソフトウェアエミュレーションすることで, かなり遅くはなるが起動はできるようになるということだ。

Vagrantfileを作成できたら後は vagrant up するだけ。 vagrant up --provider=libvirt で明示的にプロバイダを指定することもできるが, Vagrantfile内部で指定しているのでその必要はない。

vagrant up

Comments !

social