Ubuntu 14.04上でKVM + Vagrantの構成で動かそうとしたときにはまったポイントを残しておきます。
注意 : 新しいバージョンでは解決しているか、違う手法に代わっている場合があります。適用前に、記載事項と状況が合致しているか確認してからお試しください。
前提条件
- 利用しているソフトウェアのバージョンは併記の通り
- 起動するBoxはCentOS 6.5 (x86_64)
- VirtualBox用のディスクイメージ
- 初期インストールパッケージはcoreグループのみ
- その上にchef-soloが実行できる環境が入っている
- ホスト上でKVMのセットアップは完了している
- ホストはNFSサーバがインストールされている
ディスクイメージの変換
vagrant-mutateを使うと楽に変換できる。
$ vagrant plugin install vagrant-mutate
$ vagrant box add [Box名] [ファイルパス or URL]
$ vagrant mutate [Box名] kvm
$ vagrant box list
[Box名] (kvm, 0)
[Box名] (virtualbox, 0)
最後にリストアップできれいれば無事完了。ぱちぱち。
VMが起動しない
Ubunutだと、AppArmorの影響でBoxファイルを参照できない(permission denied)問題が発生し、VMが起動しないことがあります。これは、vagrant-kvmのREADMEに回避方法が記載されています。
以下、回避方法を一部引用+追加したコマンドを記載します。
$ sudo apt-get install apparmor-profiles apparmor-utils
$ sudo aa-complain /usr/lib/libvirt/virt-aa-helper
これで、boxファイルが参照できるようになり、VMが起動します。ぱちぱち。
NFSマウントできない
ゲスト上のCentOS 6.5から、ホスト側のNFSサーバのディレクトリをマウントできないエラーが出る場合があります。
mount -o 'vers=3,udp' 192.168.123.1:'/home/yourname/work/vagrant/centos6' /vagrant (sudo=true)
mount.nfs: rpc.statd is not running but is required for remote locking.
(以下略)
これは、Vagrant本体でnfsクライアントのパッケージをインストールしているものの、rpcbindを起動していないばかりに正常にマウントできない症状が発生することがあります。
こちらは、ワークアラウンドの対処として、rpcbindを起動するよう、Vagrantのプログラムを書き換えます。
def self.nfs_client_install(machine)
machine.communicate.tap do |comm|
comm.sudo("yum -y install nfs-utils nfs-utils-lib")
+ comm.sudo("service rpcbind start")
end
end
これで、NFSマウントが正常に完了します。ぱちぱち。
(これ、僕だけじゃなかったらPRした方がいいかな。)
Jenkins で走らない
Jenkinsを実行しているユーザ"例:jenkins"を、libvirtdグループに追加して下さい。
追加後、適用のためにJenkinsの再起動をお忘れなく。
VMが起動しなくなった
これまで問題なくVMが起動していたのに、ある日起動しなくなったことがありました。例えば、以下のメッセージから進まない場合です。
==> default: Destroying VM and associated drives...
Bringing machine 'default' up with 'kvm' provider...
==> default: Importing base box 'centos6_hb-agent'...
==> default: Assigning a new mac address to the VM.
==> default: Preparing network interfaces based on configuration...
(ここから先に進まない)
これは、libvirtdを再起動すると回復する場合があります。
$ sudo service virtualbox stop
$ sudo service libvirt-bin restart
$ sudo service virtualbox start
私はCIでデイリービルドができなくなったことでハマりました。
おまけ: KVM を使った vagrant up
VirtualBoxに強く依存した設定でなければ、Vagrantfileは特に書き換えずに次のコマンドで起動する事ができます。
vagrant up --provider=kvm
参考文献
-
Plamo Linux 5.1 で vagrant は vagrant-kvm の方が楽だった - TenForwardの日記
- そもそもの環境構築方法はここが参考になります
- https://github.com/mitchellh/vagrant
-
https://github.com/adrahon/vagrant-kvm
- [https://github.com/adrahon/vagrant-kvm/issues/163](Permission denied (Libvirt::Error) on the disk image · Issue #163)
- https://github.com/sciurus/vagrant-mutate