9
votes

I'm trying to learn Vagrant by going through the getting started tutorial. But only a few steps into the tutorial things are already not working as explained in the tutorial. Specifically, it looks like Vagrant doesn't know how to download the box used in the tutorial. Here is what I've done so far:

See if vagrant is installed:

$ which vagrant

Install Vagrant:

$ sudo aptitude install vagrant
The following NEW packages will be installed:
  bsdtar{a} libruby1.9.1{a} libyaml-0-2{a} ruby{a} ruby-childprocess{a} ruby-erubis{a} ruby-ffi{a} ruby-i18n{a} ruby-log4r{a} ruby-net-scp{a} ruby-net-ssh{a} ruby1.9.1{a} vagrant 
0 packages upgraded, 13 newly installed, 0 to remove and 5 not upgraded.
Need to get 0 B/3,451 kB of archives. After unpacking 17.9 MB will be used.
Do you want to continue? [Y/n/?] y
Selecting previously unselected package libyaml-0-2:amd64.
(Reading database ... 171235 files and directories currently installed.)
Preparing to unpack .../libyaml-0-2_0.1.4-3ubuntu3.1_amd64.deb ...
Unpacking libyaml-0-2:amd64 (0.1.4-3ubuntu3.1) ...
Selecting previously unselected package bsdtar.
Preparing to unpack .../bsdtar_3.1.2-7ubuntu2_amd64.deb ...
Unpacking bsdtar (3.1.2-7ubuntu2) ...
Selecting previously unselected package ruby.
Preparing to unpack .../ruby_1%3a1.9.3.4_all.deb ...
Unpacking ruby (1:1.9.3.4) ...
Selecting previously unselected package ruby1.9.1.
Preparing to unpack .../ruby1.9.1_1.9.3.484-2ubuntu1.2_amd64.deb ...
Unpacking ruby1.9.1 (1.9.3.484-2ubuntu1.2) ...
Selecting previously unselected package libruby1.9.1.
Preparing to unpack .../libruby1.9.1_1.9.3.484-2ubuntu1.2_amd64.deb ...
Unpacking libruby1.9.1 (1.9.3.484-2ubuntu1.2) ...
Selecting previously unselected package ruby-ffi.
Preparing to unpack .../ruby-ffi_1.9.3debian-1ubuntu2_amd64.deb ...
Unpacking ruby-ffi (1.9.3debian-1ubuntu2) ...
Selecting previously unselected package ruby-childprocess.
Preparing to unpack .../ruby-childprocess_0.3.9-2_all.deb ...
Unpacking ruby-childprocess (0.3.9-2) ...
Selecting previously unselected package ruby-erubis.
Preparing to unpack .../ruby-erubis_2.7.0-2_all.deb ...
Unpacking ruby-erubis (2.7.0-2) ...
Selecting previously unselected package ruby-i18n.
Preparing to unpack .../ruby-i18n_0.6.9-1_all.deb ...
Unpacking ruby-i18n (0.6.9-1) ...
Selecting previously unselected package ruby-log4r.
Preparing to unpack .../ruby-log4r_1.1.10-3_all.deb ...
Unpacking ruby-log4r (1.1.10-3) ...
Selecting previously unselected package ruby-net-ssh.
Preparing to unpack .../ruby-net-ssh_1%3a2.6.8-1_all.deb ...
Unpacking ruby-net-ssh (1:2.6.8-1) ...
Selecting previously unselected package ruby-net-scp.
Preparing to unpack .../ruby-net-scp_1.1.1-1_all.deb ...
Unpacking ruby-net-scp (1.1.1-1) ...
Selecting previously unselected package vagrant.
Preparing to unpack .../vagrant_1.4.3-1_all.deb ...
Unpacking vagrant (1.4.3-1) ...
Processing triggers for man-db (2.6.7.1-1ubuntu1) ...
Processing triggers for doc-base (0.10.5) ...
Processing 1 added doc-base file...
Registering documents with scrollkeeper...
Setting up libyaml-0-2:amd64 (0.1.4-3ubuntu3.1) ...
Setting up bsdtar (3.1.2-7ubuntu2) ...
Setting up ruby (1:1.9.3.4) ...
Setting up ruby1.9.1 (1.9.3.484-2ubuntu1.2) ...
Setting up libruby1.9.1 (1.9.3.484-2ubuntu1.2) ...
Setting up ruby-ffi (1.9.3debian-1ubuntu2) ...
Setting up ruby-childprocess (0.3.9-2) ...
Setting up ruby-erubis (2.7.0-2) ...
Setting up ruby-i18n (0.6.9-1) ...
Setting up ruby-log4r (1.1.10-3) ...
Setting up ruby-net-ssh (1:2.6.8-1) ...
Setting up ruby-net-scp (1.1.1-1) ...
Setting up vagrant (1.4.3-1) ...
Processing triggers for libc-bin (2.19-0ubuntu6.5) ...

Try the vagrant getting started tutorial:

$ mkdir vagrant_getting_started && cd $_

$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

$ vagrant box add hashicorp/precise32
This command was not invoked properly. The help for this command is
available below.

Usage: vagrant box add <name> <url> [--provider provider] [-h]
    --checksum VALUE             Checksum
    --checksum-type VALUE        Checksum type
-c, --clean                      Remove old temporary download if it exists.
-f, --force                      Overwrite an existing box if it exists.
    --insecure                   If set, SSL certs will not be validated.
    --cacert certfile            CA certificate
    --cert certfile              The client SSL cert
    --provider provider          The provider that backs the box.
-h, --help                       Print this help

Based on this output, it looks like I need to specify a URL from which the box can be downloaded. So, based on the tutorial, I searched Hashicorp's Atlas box catalog. I think I found the right resource located https://atlas.hashicorp.com/hashicorp/boxes/precise32 but this resource does not provide a URL from which the box can be fetched. Instead it just says vagrant up hashicorp/precise32 --provider virtualbox. So I tried that command and got this error:

$ vagrant up hashicorp/precise32 --provider virtualbox
The machine with the name 'hashicorp/precise32' was not found configured for
this Vagrant environment.

Where does one find the URL that should be used in the vagrant box add <name> <url> command? I thought it would be easy to find this in Hashicorp's box catalog, but I'm not seeing it anywhere.

Just in case this is helpful information about my current environment:

$ vagrant box list -i
There are no installed boxes! Use `vagrant box add` to add some.
3

3 Answers

9
votes

I think the problem is you ended up with a pretty old version of Vagrant - 1.4.3-1 whereas the latest is 1.7.2. It's possible the repository you installed from is no longer being kept up to date.

I recommend uninstalling what you currently have, then re-installing the latest from Vagrant downloads.

Update: If you're installing Vagrant on Linux, (either Debian or RPM format packaging), you will definitely want to download from Vagrant downloads because the packages in repositories are not being kept up to date and will be quite old.

For Vagrant 1.7.2, the box add help says in part:

$ vagrant box add -h
Usage: vagrant box add [options] <name, url, or path>

The box descriptor can be the name of a box on HashiCorp's Atlas,
or a URL, or a local .box file, or a local .json file containing
the catalog metadata.

Then you can resume following along the Getting Started guide, and can read a bit more on the Boxes documentation.

Update 2: To the original question "how do I find the URL for a Box file?", there are two cases:

  1. Boxes from HashiCorp which are now hosted on their Atlas service: these are identified by the shorthand codes like "hashicorp/precise32" or "ubuntu/trusty64". I imagine there is a webservice or convention where the vagrant command line can query Atlas cloud to then find the actual download URL. They don't seem to make this public, but you could probably figure it out by watching network traffic or looking at the vagrant source.

  2. Boxes from other projects which could be public or internal (company): these would normally come with a normal URL pointing directly to the .box file. You can see some examples of these on Vagrantbox.es. In fact, if you search there for 'vagrantup', you'll see many of the original standard boxes and their URLs.

7
votes

It's not clear to me why you wouldn't just run vagrant init hashicorp/precise32 since that handles the both finding and adding the box to your box registry.

However, if you really want to see where the box comes from, even with older versions of vagrant, you can take advantage of the --debug flag and you will see under-the-hood in the output that this box's URL is currently https://atlas.hashicorp.com/hashicorp/boxes/precise32/versions/1.0.0/providers/virtualbox.box.

To answer the question (although not recommended this way):

vagrant box add hashicorp/precise32 https://atlas.hashicorp.com/hashicorp/boxes/precise32/versions/1.0.0/providers/virtualbox.box

1
votes

With:

~ » vagrant version
Installed Version: 2.0.1
Latest Version: 2.0.1

You're running an up-to-date version of Vagrant!

you can simply issue a curl request to get the data back. See below:

~ » curl -i -L https://vagrantcloud.com/sakhan/ubuntu1404-contrail-devstack1
HTTP/1.1 301 Moved Permanently
Server: Cowboy
Date: Fri, 19 Jan 2018 18:08:40 GMT
Connection: keep-alive
Location: https://vagrantcloud.com/sakhan/boxes/ubuntu1404-contrail-devstack1
Content-Type: text/html
Cache-Control: no-cache
X-Request-Id: cfcc4360-34f5-41d2-91ce-1eb82e5a6b7c
X-Runtime: 0.004783
Content-Length: 133
Via: 1.1 vegur

HTTP/1.1 302 Found
Server: Cowboy
Date: Fri, 19 Jan 2018 18:08:40 GMT
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Location: https://app.vagrantup.com/sakhan/boxes/ubuntu1404-contrail-devstack1
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
X-Request-Id: 1383ab1f-8ed8-4e81-9762-d5ffacdda9f3
X-Runtime: 0.008575
Transfer-Encoding: chunked
Via: 1.1 vegur

HTTP/1.1 200 OK
Server: Cowboy
Date: Fri, 19 Jan 2018 18:08:41 GMT
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-Xss-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Content-Type: application/json; charset=utf-8
Etag: W/"af57ca8e837f7cdd4c3047e2752a506f"
Cache-Control: max-age=0, private, must-revalidate
X-Request-Id: b0296c54-8ffc-408b-89e5-e361df1bb6c8
X-Runtime: 0.051198
Transfer-Encoding: chunked
Via: 1.1 vegur

{"description":"Vagrant box having Opencontail + Devstack environment","short_description":"Vagrant box having Opencontail + Devstack environment","name":"sakhan/ubuntu1404-contrail-devstack1","versions":[{"version":"0.0.2","status":"active","description_html":"<p>Vagrant box with opencontrail_devstack version 0.0.2</p>\n","description_markdown":"Vagrant box with opencontrail_devstack version 0.0.2","providers":[{"name":"virtualbox","url":"https://vagrantcloud.com/sakhan/boxes/ubuntu1404-contrail-devstack1/versions/0.0.2/providers/virtualbox.box"}]}]}

so at the end, you have the following json info:

providers:
    name: virtualbox
    url: https://vagrantcloud.com/sakh...ons/0.0.2/providers/virtualbox.box

HTH