vagrant box add命令中使用的URL是什么?

时间:2015-01-17 21:42:16

标签: vagrant

我通过完成入门教程尝试学习Vagrant。但是,只有教程中的几个步骤已经无法正常工作,如教程中所述。具体来说,看起来Vagrant并不知道如何下载教程中使用的框。这是我到目前为止所做的:

查看是否安装了vagrant:

$ which vagrant

安装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) ...

试试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

根据此输出,我看起来需要指定一个可以从中下载框的URL。因此,根据教程,我搜索了Hashicorp's Atlas box catalog。我认为我找到了正确的资源https://atlas.hashicorp.com/hashicorp/boxes/precise32,但是这个资源没有提供可以从中获取框的URL。相反,它只是说vagrant up hashicorp/precise32 --provider virtualbox。所以我尝试了这个命令并得到了这个错误:

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

在哪里找到应该在vagrant box add <name> <url>命令中使用的URL?我认为在Hashicorp的盒子目录中很容易找到它,但我没有在任何地方看到它。

以防这是有关我当前环境的有用信息:

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

3 个答案:

答案 0 :(得分:9)

我认为问题是你最终得到了一个相当旧版本的Vagrant - 1.4.3-1,而最新版本是1.7.2。您安装的存储库可能不再保持最新状态。

我建议您卸载当前的内容,然后重新安装Vagrant downloads中的最新内容。

更新:如果您在Linux上安装Vagrant(Debian或RPM格式打包),您肯定希望从Vagrant downloads下载,因为存储库中的软件包不是保持最新,并将很老。

对于Vagrant 1.7.2,框中添加帮助部分说明:

$ 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.

然后,您可以继续按照“使用入门”指南进行操作,并可以在Boxes documentation上阅读更多内容。

更新2 :对于原始问题“我如何找到Box文件的URL?”,有两种情况:

  1. 来自HashiCorp的盒子现在托管在他们的Atlas service上:这些是用“hashicorp / precise32”或“ubuntu / trusty64”等简写代码识别的。我想有一个webservice或约定,其中vagrant命令行可以查询Atlas云,然后找到实际的下载URL。它们似乎并不公开,但您可以通过观察网络流量或查看流浪源来解决这个问题。

  2. 来自其他可能是公共或内部(公司)的项目的框:这些框通常带有直接指向.box文件的普通URL。您可以在Vagrantbox.es上看到这些示例。事实上,如果你在那里搜索'vagrantup',你会看到很多原始的标准盒子及其URL。

答案 1 :(得分:7)

我不清楚为什么你不会只运行vagrant init hashicorp/precise32,因为它会处理这两个发现并将盒子添加到你的盒子注册表中。

但是,如果你真的想看看这个盒子来自何处,即使使用旧版本的vagrant,你也可以利用--debug标志,你会看到引擎盖下的此框的网址当前 https://atlas.hashicorp.com/hashicorp/boxes/precise32/versions/1.0.0/providers/virtualbox.box的输出。

回答这个问题(虽然不是这样推荐的):

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

答案 2 :(得分:1)

使用:

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

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

您只需发出一个curl请求即可获取数据。见下文:

~ » 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"}]}]}

所以最后,你有以下json信息:

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

HTH