Vagrantのボックスは動作を確認してから利用しよう

# はじめに
先日、Vagrantのボックスが原因で問題が発生したため、ボックスを使用する際はあらかじめきちんと動作するかどうかを確かめてから使おうという個人的な注意書きです。

もちろん、一概にボックスが原因とは言えませんが、先日のケースではいくら設定を確認してもおかしな点は存在せず、別のボックスで試したら問題なく動作したので、ボックスを変更すると、もしかしたら原因不明の問題が解決するかもしれない、といった程度で捉えていただけると幸いです。

# 体験談
自分はボックスの入手先として[Vagrantbox.es](http://www.vagrantbox.es)を利用しています。OSの種類やバージョンが豊富なので重宝しています。

ところが、先日ダウンロードした Ubuntu Server 16.04 LTS のボックスでサーバを作成したところ、`$ vagrant ssh`によるログインはできますが、FTPクライアント(Cyberduck)によるログインができませんでした。

ユーザ名やパスワードは何回確認しても間違っておらず、ポートも閉じていませんし、ネットワークの設定も問題ありませんでした。パスワード認証も鍵認証も許可している状態で、両方とも試しましたがダメでした。新しいサーバを作り直しても結果は同じでした。

ネットの情報も一通り漁って気になる内容はすべて試しましたが一向に解決しないので、仕方なく別のボックスをダウンロードすることに。ところが今度はそもそも`$ vagrant up`ができない状況でした。GUIによるログインはできたのでおそらくVagrantの問題ではありますが、全く同じ現象についての解決方法をネットで見つけて試しても原因は解決しませんでした。

3度目の正直、3つめにダウンロードしたボックスではちゃんとVagrant側からも起動でき、FTPクライアントによるログインもできました。

# 使用の前に確認を
結局原因が不明、というのが腑に落ちないですが、もしこれがボックスによるものだとしたら、あるいはそうでなくともボックスを変更したことにより問題なく動作したことから、Vagrantのボックスは**問題なく動作するかを確かめてから使用する**ことが重要であることを強く思いました。

というのは、FTPクライアントでのログインができなかったボックスで作成したテストサーバに、すでに諸々の環境構築とセッティングを済ませた後にようやく問題に気づいたので、再び環境構築をし直すはめになりました。

もちろんこれは自分の責任ですし、そもそも[Vagrantbox.es](http://www.vagrantbox.es)は自己責任ということを承知した上で使用することになっているので、誰にも文句は言えない（むしろ感謝ですね🙏）のですが、ちゃんと確認しておかないと後で痛い目を見ることになるよ、という自分に対する警告であります。

# 信頼できるボックス
これだけで終わってしまうとただの注意書きなので、自分が使用して問題なく動作したボックスのソースをここに載せておきます。ただし、これはあくまでぼくの環境で問題なかっただけなので、**全環境で問題なく動作することを保証するものではない**ことをご了承ください。

## CentOS
https://github.com/CommanderK5/packer-centos-template

❗️ [Vagrantbox.es](http://www.vagrantbox.es)のURLではないことに注意してください。Vagrantbox.esのURLはアップデートされることがあるので、このURLをVagrantbox.es内で検索してヒットした際のURLをご使用ください。また検索してもヒットしない場合は削除された可能性があります。ご了承ください。

## Ubuntu
https://atlas.hashicorp.com/gbarbieru/boxes/xenial

❗️ CentOSと同様に削除される可能性があります。ご了承ください。

## 環境
問題なく動作した環境は以下の通りです。繰り返しになりますが、この環境なら絶対に問題がないという保証はできませんのでご了承ください。

* macOS Sierra バージョン 10.12
* Vagrant 1.8.6
* VirtualBox バージョン 5.0.22 r108108

# 公式が配布するボックス
Vagrantbox.esは非公式ですが、どうやら公式が配布するボックスがあるらしいです。こちらを使用すれば少なくともボックスによる問題は減らせると思います。

https://atlas.hashicorp.com からダウンロードします。`https://atlas.hashicorp.com/ダウンロードしたいOS` にアクセスします。今回はUbuntuを例に取り、https://atlas.hashicorp.com/ubuntu にアクセスします。CentOSの場合は`ubuntu`の箇所を`centos`とします。

![ubuntu_box.png](https://qiita-image-store.s3.amazonaws.com/0/113895/59cbe74a-8311-7185-16db-4d43f2ef8056.png)

するとUbuntuのボックス一覧が表示されます。ここからダウンロードしたいOSのバージョンを選択します。今回は Ubuntu 16 をインストールしたいので`ubuntu/xenial64`を選択します。ちなみに`xenial`は Ubuntu 16 のコードネーム、`64`は64bit用を意味します。

![ubuntu_xenial.png](https://qiita-image-store.s3.amazonaws.com/0/113895/20320974-30f8-c2f2-2570-77e34d064322.png)

するとバージョン一覧が表示されます。とりあえず最新バージョンをインストールしたい場合は一番上に表示されたバージョンを選択します。

![ubuntu_versions.png](https://qiita-image-store.s3.amazonaws.com/0/113895/ca54fafb-3ac2-5d59-79e2-0c00e7cb3521.png)

このようなページが表示されたらこのページのURLをコピーします。ボックスのダウンロードURLは、このページのURLに`/providers/virtualbox.box`をつけたURLになります。例えば、`https://atlas.hashicorp.com/ubuntu/boxes/xenial64/versions/xxxxxxxx.x.x/providers/virtualbox.box` のような形式になります。
参考: [VagrantでUbuntu Server 16.04 LTS "Xenial Xerus"の仮想マシンの構築（未完）](http://qiita.com/__mi_mo/items/0d23b555ce19c3992757#ubuntu-1604%E3%81%AEbox%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)

あとはこのURLを使用してボックスをダウンロードすれば公式のボックスが利用できるようになります。
`$ vagrant box add ボックス名 ボックスのURL`

# さいごに
この記事を書いた時点では解決策が見つかりませんでしたが、後日、FTPクライアントからログインできない問題の解決策が見つかりました。[Vagrantで作成したローカルサーバにFTPクライアント(Cyberduck)からログインできないときの解決法](https://ja.developers.noraworld.blog/how-to-login-to-vagrant-via-cyberduck) を参照してください。

しかし、この解決策を見つけたときにはすでにボックスを削除してしまったので、同様の解決法で解決できたかどうかはわかりません。また、ボックスによってパスワード認証ができたりできなかったりする原因や、`$ vagrant ssh` ができない問題の原因は結局わかりませんでした。

いずれにしてもVagrantのボックスをダウンロードするときは動作を確認してから利用したほうが無難です。