Ubuntu 16.04でのVagrant + libvirtの環境構築
はじめに
Ubuntu 16.04でのVagrant + libvirtの環境構築に苦労したので、手順を残しておく。 VagrantでKVMを扱えるようにするには、vagrant-libvirtというサードパーティ製のプラグインが必要になる。
以下の手順は、KVMの環境は構築済みであることが前提。
Vagrantインストール
$ sudo apt-get install vagrant
apt-getでインストールされるVagrantは1.8.1と若干古い(現時点での最新は1.9.1)が、後述のvagrant-libvirtのインストールに影響があるかもしれないので、これを利用する。
vagrant-libvirtのインストールの事前準備
/etc/apt/sources.listのdeb-srcのコメントアウトを外しておく。 コメントアウトを外しておかないと、後述のapt-get build-depの実行に失敗する。
$ sudo sed -i 's/^# deb-src/deb-src/g' /etc/apt/sources.list
$ sudo apt-get update
また、Vagrant 1.8.1にはプラグインのインストールに失敗するバグがあるため、(正式な対処ではないが)以下のように修正する。
$ sudo sed -i'' "s/Specification.all = nil/Specification.reset/" /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb
vagrant-libvirtのインストール
まず、必要な依存物のインストールなどを行う。
$ sudo apt-get build-dep vagrant ruby-libvirt
$ sudo apt-get install qemu libvirt-bin ebtables dnsmasq
$ sudo apt-get install libxslt-dev libxml2-dev libvirt-dev zlib1g-dev ruby-dev
そして、vagrant-libvirtのインストールを行う。
$ vagrant plugin install vagrant-libvirt
動作確認
boxのホスティングサイトのAtlasから適当なboxを選ぶ。 数は少ないが、キーワード「libvirt」で検索すると、いくつかヒットする。 ここでは、willyhu/ubuntu-16.04-server-amd64を利用することにする。
適当にvagrant-testという作業ディレクトリを作成し、そのディレクトリの中で以下のようにboxを起動する。
$ mkdir vagrant-test
$ cd vagrant-test
$ vagrant init willyhu/ubuntu-16.04-server-amd64
$ vagrant up --provider libvirt
$ vagrant ssh
参考
vagrant-libのREADME.md
https://github.com/vagrant-libvirt/vagrant-libvirt
Vagrantのバグで出力されるエラー
$ vagrant plugin install vagrant-libvirt
Installing the 'vagrant-libvirt' plugin. This can take a few minutes...
/usr/lib/ruby/2.3.0/rubygems/specification.rb:946:in `all=': undefined method `group_by' for nil:NilClass (NoMethodError)
from /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb:275:in `with_isolated_gem'
from /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb:231:in `internal_install'
from /usr/lib/ruby/vendor_ruby/vagrant/bundler.rb:102:in `install'
from /usr/lib/ruby/vendor_ruby/vagrant/plugin/manager.rb:62:in `block in install_plugin'
from /usr/lib/ruby/vendor_ruby/vagrant/plugin/manager.rb:72:in `install_plugin'
from /usr/share/vagrant/plugins/commands/plugin/action/install_gem.rb:37:in `call'
from /usr/lib/ruby/vendor_ruby/vagrant/action/warden.rb:34:in `call'
from /usr/lib/ruby/vendor_ruby/vagrant/action/builder.rb:116:in `call'
from /usr/lib/ruby/vendor_ruby/vagrant/action/runner.rb:66:in `block in run'
from /usr/lib/ruby/vendor_ruby/vagrant/util/busy.rb:19:in `busy'
from /usr/lib/ruby/vendor_ruby/vagrant/action/runner.rb:66:in `run'
from /usr/share/vagrant/plugins/commands/plugin/command/base.rb:14:in `action'
from /usr/share/vagrant/plugins/commands/plugin/command/install.rb:32:in `block in execute'
from /usr/share/vagrant/plugins/commands/plugin/command/install.rb:31:in `each'
from /usr/share/vagrant/plugins/commands/plugin/command/install.rb:31:in `execute'
from /usr/share/vagrant/plugins/commands/plugin/command/root.rb:56:in `execute'
from /usr/lib/ruby/vendor_ruby/vagrant/cli.rb:42:in `execute'
from /usr/lib/ruby/vendor_ruby/vagrant/environment.rb:268:in `cli'
from /usr/bin/vagrant:173:in `<main>'
プラグインインストール不可のバグの報告
https://github.com/mitchellh/vagrant/issues/6911
プラグインインストール不可のバグの対処法など
http://stackoverflow.com/questions/36811863/cant-install-vagrant-plugins-in-ubuntu-16-04