vagrant-libvirtで高速検証環境の構築

chefやansibleのテストの際にvagrant+VirtualBoxを使用していたが如何せん`vagrant up`が遅い、遅すぎる。ストレイト・クーガーに合わせる顔がない。というわけで、vagrant-libvirtで高速検証環境の構築を行った際のメモ。historyからの掘り起こし、なので所々動かない所があるかもしれないけどあくまでメモ。

# 想定環境

- Centos7 x86_64
- libvirt 1.2.17
- vagrant 1.8.3

# 必要なパッケージのインストール

libvirt関連

```bash
sudo yum install -y qemu-kvm libvirt libvirt-devel
```

vagrantを使う際に必要になるもの

```bash
sudo yum install -y nfs-utils
```

vagrant

```bash
sudo yum install -y https://releases.hashicorp.com/vagrant/1.8.3/vagrant_1.8.3_x86_64.rpm
```

vagrant plugins

```bash
vagrant plugin install vagrant-libvirt vagrant-mutate sahara 
```

# libvirtdの設定

/etc/libvirt/libvirtd.conf で下記4行をコメントイン

```:/etc/libvirt/libvirtd.conf
unix_sock_group = "libvirt"
unix_sock_ro_perms = "0777"
auth_unix_ro = "none"
auth_unix_rw = "none"
```

libvirt groupを作成して自分を追加する

```bash
sudo groupadd libvirt
sudo gpasswd -a shunkou libvirt
```

sysctlの設定

```bash
sudo echo 'net.ipv4.ip_forward = 1' > /etc/sysctl.d/00-libvirt.conf
sudo sysctl -p
```

起動する

```bash
sudo systemctl enable libvirtd.service
sudo systemctl start libvirtd.service
```

管理用ネットワークの作成

```:/tmp/vagrant_libvirt.xml
<network>
  <name>vagrant_libvirt</name>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <ip address='10.114.51.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='10.114.51.4' end='10.114.51.254'/>
    </dhcp>
  </ip>
</network>
```

```bash
sudo virsh
virsh# net-define /tmp/vagrant_libvirt.xml
virsh# net-autostart vagrant_libvirt
virsh# net-start vagrant_libvirt
```

# vagrant関連の設定

host-guest間のファイル共有のためにnfs-serverを起動

```bash
sudo systemctl enable nfs-server
sudo systemctl start nfs-server
```

# 実行準備

適当にboxをdownload or 作ったboxを入れる
[ここ](http://www.vagrantbox.es/)とかから取ってくる

```bash
vagrant box add https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box --name ubuntu14.04
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'ubuntu14.04' (v0) for provider:
    box: Downloading: https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box
==> box: Successfully added box 'ubuntu14.04' (v0) for 'virtualbox'!
vagrant box list
ubuntu14.04     (virtualbox, 0)
```

libvirtで使えるように対応providerを変換する

```bash
vagrant mutate ubuntu14.04 --input-provider virtualbox libvirt
Converting ubuntu14.04 from virtualbox to libvirt.
    (100.00/100%)
The box ubuntu14.04 (libvirt) is now ready to use.
vagrant box list
ubuntu14.04     (libvirt, 0)
ubuntu14.04     (virtualbox, 0)
```

不要なboxを削除する

```bash
vagrant box remove ubuntu14.04 --provider virtualbox
```

# VMを起動する

Vagrantfileの作成

```bash
vagrant init ubuntu14.04
```

Vagrantfileの編集

```rb
# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu14.04"
  config.vm.hostname = "anchovy"

  # 管理用N/Wの設定
  config.vm.provider :libvirt do |lv|
    lv.management_network_name = "vagrant_libvirt"
    lv.management_network_address = "10.114.51.0/24"
  end
end
```

VMの起動　

```
vagrant up
Bringing machine 'default' up with 'libvirt' provider...
==> default: Creating image (snapshot of base box volume).
==> default: Creating domain with the following settings...
...
==> default: Exporting NFS shared folders...
==> default: Preparing to edit /etc/exports. Administrator privileges will be required...
...
```

速い

# 引っかかったこと・メモ

##### iptable/firewalld
vagrantがnatする際に`firewalld`を使うため、停止していると`vagrant up`時にssh出来ずに刺さる

##### 管理用ネットワーク
独自のboxを使っているとデフォルトで`iptable`等の制限がキツイものがる。そこで管理用ネットワークからのアクセスが許可されていないと`vagrant up`時にssh出来ずに刺さる

##### sahara
使うとimageのsnapshotが取れてrollbackが出来て便利
vagrant-libvirtにも対応している模様

# そして何よりも
速さが足りない