LoginSignup
24
27

More than 5 years have passed since last update.

vagrant-kvm プロバイダを使おうとしてはまった点

Last updated at Posted at 2014-06-12

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のプログラムを書き換えます。

/opt/vagrant/embedded/gems/gems/vagrant-1.5.4/plugins/guests/redhat/cap/nfs_client.rb
         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

参考文献

24
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
27