Ubuntu 16.04のVagrantでpublic Vagrant boxにアクセスできなくなった問題

本日、普段使っているpublic Vagrant boxに対してvagrant box addを実行したところ、404 not foundになってしまいました。

$ vagrant --version
Vagrant 1.8.1
$ vagrant box add --provider libvirt elastic/ubuntu-16.04-x86_64
The box 'elastic/ubuntu-16.04-x86_64' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Atlas, please verify you're logged in via
`vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://atlas.hashicorp.com/elastic/ubuntu-16.04-x86_64"]
Error: The requested URL returned error: 404 Not Found
$ 

比較的マイナーなboxだったので、作者が提供を辞めてしまったのかなと思ったものの、ちゃんとサイトはありました。

Vagrant box elastic/ubuntu-16.04-x86_64 - Vagrant Cloud

もっとメジャーなUbuntu公式イメージをaddしようとしても同じ問題が発生しました。

$ vagrant box add --provider libvirt ubuntu/trusty64
The box 'ubuntu/trusty64' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Atlas, please verify you're logged in via
`vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://atlas.hashicorp.com/ubuntu/trusty64"]
Error: The requested URL returned error: 404 Not Found
$ 

先月同じコマンドを実行したときには動いていたはずなので、なんかおかしいなあと思って色々調べていたら、Vagrantgithubに、つい二日前に登録された怪しいissueを見つけました。

vagrant box update - Fails with 404 Not Found error · Issue #9442 · hashicorp/vagrant · GitHub

issueはvagrant box updateに関するものでしたが、わたしのケースとすごく似ています。斜め読みしたところ、問題はpublic Vagrant BoxのURLとしてatlas.hashicorp.comを受け付けなくなって、vagrantcloud.comを指定しなくてはならなくなった、ということのようです。どうやら、すくなくともUbuntu16.04は全部影響を受けるらしい。

issueの中に、次のようなworkarundを見つけたので、試してみることにしました。

vagrant box update - Fails with 404 Not Found error · Issue #9442 · hashicorp/vagrant · GitHub

とりあえず、自分の環境でこれと同じ問題が出るか、および、workaroundを使って問題が解決するかを確かめました。Vagrantfileの変更が必要なので、とりあえずは当該ファイルを使わないvagrant box addではなく、`vagrant initを使いました。

  • workaround適用前
$ vagrant init elastic/ubuntu-16.04-x86_64
$ vagrant up --provider=libvirt
Bringing machine 'default' up with 'libvirt' provider...
==> default: Box 'elastic/ubuntu-16.04-x86_64' could not be found. Attempting to find and install...
    default: Box Provider: libvirt
    default: Box Version: >= 0
The box 'elastic/ubuntu-16.04-x86_64' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Atlas, please verify you're logged in via
`vagrant login`. Also, please double-check the name. The expanded
URL and error message are shown below:

URL: ["https://atlas.hashicorp.com/elastic/ubuntu-16.04-x86_64"]
Error: The requested URL returned error: 404 Not Found
$

期待通り(?)失敗しました。

  • workaround適用後(initの後にVagrantfileを編集)
$ vagrant up --provider=libvirt
Bringing machine 'default' up with 'libvirt' provider...
==> default: Box 'elastic/ubuntu-16.04-x86_64' could not be found. Attempting to find and install...
    default: Box Provider: libvirt
    default: Box Version: >= 0
==> default: Loading metadata for box 'elastic/ubuntu-16.04-x86_64'
    default: URL: https://vagrantcloud.com/elastic/ubuntu-16.04-x86_64
==> default: Adding box 'elastic/ubuntu-16.04-x86_64' (v20171130.0.0) for provider: libvirt
    default: Downloading: https://vagrantcloud.com/elastic/boxes/ubuntu-16.04-x86_64/versions/20171130.0.0/providers/libvirt.box
...
$ 

成功しました。続いて、上記コマンドの実行結果から得たboxファイルをもとにvagrant box addが成功するかを試しました。

$ vagrant box add elastic/ubuntu-16.04-x86_64 https://vagrantcloud.com/elastic/boxes/ubuntu-16.04-x86_64/versions/201711
30.0.0/providers/libvirt.box
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'elastic/ubuntu-16.04-x86_64' (v0) for provider:
    box: Downloading: https://vagrantcloud.com/elastic/boxes/ubuntu-16.04-x86_64/versions/20171130.0.0/providers/libvirt.box
...
$ 

こちらも成功しました。私が遭遇した問題は上記issueと同根と見てよさそうです。

ここから最終的にはvagrant box add --provider libvirt elastic/ubuntu-16.04-x86_64を正しく動くようにしたいのですが、上記の方法が今のわたしにとってはworkaroundとして十分なので、とりあえずはこれで放置。後はUbuntuで修正されるのを待ちます。