久々にvagrantを使おうとしたところ、Virtual Boxのバージョンを上げた都合でvagrantもバージョンアップしないといけなくなり、その結果ぶっ壊れた環境を立て直したのでその話をします
要約
- 変な感じがした場合は
~/.vagrant.d/
を消してセットアップし直そう - pluginはちゃんとバックアップ取っておこうね
- Virtual Boxの仮想マシンは消さなくても多分動く
環境
- OS X 10.9.5
- 旧環境のvagrantのバージョンは覚えてないけど、セットアップ時期から想像すると1.5くらいだと思う
- VirtualBoxは気付いたら5.0.10になってた
経緯
vagrantで管理しているVirtualBox仮想マシンを久々に使おうとしてvagrant up
したところ、サポートしてないVirtual Boxのバージョンだよ、と怒られる。brew search vagrant
したところ特に見当たらなかったので普通にダウンロードしてきてインストールする。
この状態で改めてvagrant up
すると、rubyレベルでなんか死んで起動出来ない。バージョン番号を要求してるところに"virtualbox"って文字列が渡されてるっぽい。しらんがなという感じ。
$ vagrant up /opt/vagrant/embedded/lib/ruby/2.2.0/rubygems/version.rb:206:in `initialize': Malformed version number string virtualbox (ArgumentError) from /opt/vagrant/embedded/lib/ruby/2.2.0/rubygems/version.rb:198:in `new' from /opt/vagrant/embedded/lib/ruby/2.2.0/rubygems/version.rb:198:in `new' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/box_collection.rb:279:in `block (2 levels) in find' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/box_collection.rb:274:in `map' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/box_collection.rb:274:in `block in find' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/box_collection.rb:436:in `block in with_collection_lock' from /opt/vagrant/embedded/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/box_collection.rb:435:in `with_collection_lock' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/box_collection.rb:267:in `find' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/vagrantfile.rb:167:in `block in machine_config' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/vagrantfile.rb:200:in `call' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/vagrantfile.rb:200:in `machine_config' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/vagrantfile.rb:45:in `machine' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:663:in `machine' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/plugin/v2/command.rb:177:in `block in with_target_vms' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/plugin/v2/command.rb:201:in `call' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/plugin/v2/command.rb:201:in `block in with_target_vms' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/plugin/v2/command.rb:183:in `each' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/plugin/v2/command.rb:183:in `with_target_vms' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/commands/up/command.rb:89:in `block in execute' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:278:in `block (2 levels) in batch' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:276:in `tap' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:276:in `block in batch' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:275:in `synchronize' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:275:in `batch' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/plugins/commands/up/command.rb:88:in `execute' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/cli.rb:42:in `execute' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/lib/vagrant/environment.rb:302:in `cli' from /opt/vagrant/embedded/gems/gems/vagrant-1.8.1/bin/vagrant:174:in `<main>'
ここでvagrant init
で新しくセットアップしたboxは作れるのを確認する。既存のboxでのみ何かおかしいようだ。
このVagrantfileに対応する仮想マシンも一度消してみたけど復活しない。後述するけれど仮想マシン自体を消す必要は別に無かった
どこかにあるキャッシュがおかしいんだろうなーと思いながらVagrantfile中のvm名を新しい物に変えると、今度はセットアップできる *1
……と、ここまで試したところでだいたい想像が付いてきたので改めて確認したところ、Qiitaにいいエントリがあった。
qiita.com
vagrantの作業ディレクトリは~/.vagrant.d/
以下にある。前述のようにキャッシュされてるデータが非互換変更で壊れたっぽいので、このディレクトリを消す。消すんだけど、消すとプラグインも消えるので、事前にvagrant plugin list
を実行して、手で入れたプラグインがないか確認しておく。僕はあったので、~/.vagrant.d/
を消してからそのプラグインを入れ直す、ということをした。
[asato@magic01 ~]$ vagrant plugin list vagrant-share (1.1.5, system) vagrant-vbguest (0.10.0) [asato@magic01 ~]$ rm -rf ~/.vagrant.d/ [asato@magic01 ~]$ vagrant plugin install vagrant-vbguest Installing the 'vagrant-vbguest' plugin. This can take a few minutes... Installed the plugin 'vagrant-vbguest (0.11.0)'!
この後、前述のVagrantfileのbox名を元に戻してvagrant up
すると無事プロビジョニングが始まった。
追調査
上の対応ではVirtual Boxの仮想マシンを一度消したけど、本当に消す必要があるのだろうか、消さないでいけてほしい、ということで試した。
この環境で改めてvagrant up
すると普通にマシンが立ち上がったので、Virtual Boxの仮想マシンは消さなくてもよい、ということではありそうだった。(もしうまくいかなかったら消せばいいとは思う)
まとめ
要約のところに書いたけれど、プラグインのメモして~/.vagrant.d/
消したらよさそう、という結論になった。どこまで汎用的な話か分からないけど、ひとまずメモとして残したので必要に応じてご活用ください。