Ubuntu 16.04でのVagrant + libvirtの環境構築

はじめに

Ubuntu 16.04でのVagrant + libvirtの環境構築に苦労したので、手順を残しておく。 VagrantKVMを扱えるようにするには、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 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