久しぶりに vagrant を使うので、 box を update しようとしたら変なエラーが出た。
$ vagrant box outdated --global
* 'ubuntu/xenial64': Error loading metadata: The requested URL returned error: 404 Not Found
* 'ubuntu/trusty64': Error loading metadata: The requested URL returned error: 404 Not Found
* 'centos/6': Error loading metadata: The requested URL returned error: 404 Not Found
* 'centos/7': Error loading metadata: The requested URL returned error: 404 Not Found
vagrant のバージョンが古いことが原因かもしれないと思って、 vagrant をアップデートしてみることにした。
ちなみにアップデート前はこんなバージョン:
$ vagrant --version
Vagrant 1.8.6
最新の 2.0.2 を入れたところプラグインがロードできなくてエラーが出た。プラグインのリストすら出せない。 vagrant plugin コマンドで修復を試みるもどれもうまく行かず。
$ vagrant plugin update
$ vagrant plugin repair
$ vagrant plugin expunge --reinstall
結局、心当たりのあるプラグインを個別に再インストールしたらエラーが出なくなった。
しかし、ここまでやっても元々のエラーは変わらず。
どの URL で 404 になっているか知りたい。これには vagrant を --debug オプション付きで実行すれば良さそう。 その結果、以下のような URL にアクセスしようとしてエラーになっていることが分かった。
https://atlas.hashicorp.com/centos/7
どうやら box をホスティングしているドメインが atlas.hashicorp.com から vagrantcloud.com に変わったらしい。 hashicorp/vagrant#9442
box のダウンロード先の URL は ~/.vagrant.d/boxes/<BOX_NAME>/metadata_url に書いてあるみたいなので、このファイルを書き換えてみた。 すると今度はまた別のエラーが出た。
$ vagrant box outdated --global
* 'ubuntu/xenial64' for 'virtualbox': Error loading metadata: Illegal characters found in URL
* 'ubuntu/trusty64' for 'virtualbox': Error loading metadata: Illegal characters found in URL
* 'centos/7' for 'virtualbox': Error loading metadata: Illegal characters found in URL
* 'centos/6' for 'virtualbox': Error loading metadata: Illegal characters found in URL
別におかしな文字は入ってなさそうなんだけど、原因が分からないので再度 --debug オプション付きで実行してみた。 最後に改行文字が入っていることが問題らしい。
vi で最後の改行を付けない方法を調べて以下のページを見つけた。 vim-jp/issues#152
ファイルを開いた後に、
:set binary noeol
:wq
これで最初のエラーが出なくなって、無事 vagrant box update できるようになった。