前言
众所周知,vagrant
添加 box
需要访问国外的服务器,然而国外的服务器总是那么的慢慢慢.....但是那个速度真的是不想吐槽。所以就有了本地添加 box
的需求,所以就有了以下的内容。
为什么一定要强调版本号呢?如果使用过 Homestead
的朋友们,那么你就会知道其中的酸爽。
以下内容完全从零开始的,如果只是特定问题,可直接跳过会的内容,从问题出看起。
目标
该文章最终的目标是添加一个带版本号的box
,效果如下:
准备工作
- 初始化一个虚拟机
- 获取对应的
box
下载地址 - 使用下载工具下载该
box
初始化一个虚拟机
在 https://app.vagrantup.com
中有很多的 box
可供我们下载使用,你可以搜索你想要的 box
,我这里使用的是 centos/7
。
$ vagrant init centos/7
在执行上面的目录处会多以下文件:
Vagrantfile
就是vagrant
的配置文件,我们也可以直接配置该文件对虚拟机进行初始化。
获取对应的 box
下载地址
$ vagrant up
以上命令用于启动虚拟机,如果你的PC上没有安装过centos/7
(可以通过vagrant box list
命令查看是否安装过),就会从https://vagrantcloud.com
去下载centos/7
,如果有centos/7
就会从本机获取。
执行完上面的命令后,会出现以下内容:
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'centos/7' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Loading metadata for box 'centos/7'
default: URL: https://vagrantcloud.com/centos/7
==> default: Adding box 'centos/7' (v1809.01) for provider: virtualbox
default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/1809.01/providers/virtualbox.box
default: Download redirected to host: cloud.centos.org
default:
注意上面的 default: Downloading ...
后面紧跟着有一个 url 地址,那个就是 centos/7
box的下载地址。
注意着的版本号为: v1809.01
,下面我们会用到。
使用下载工具下载该 box
作者这里使用的是:迅雷极速版。当然你们也可以使用其他的下载工具。
添加 vagrant
box
常规方案(不推荐)
在vagrant
的命令中,我们可以知道vagrant box add [options] <name, url, or path>
这个一个命令。我们
进入到 virtualbox.box
下载目录,并执行以下内容:
vagrant box add centos/7 ./virtualbox.box
然后我们使用以下命令查看:
$ vagrant box list
centos/7 (virtualbox, 0)
我们可以看到 centos/7
已经添加到了本地,那么这个有什么问题呢?
问题
注意到 (virtualbox, 0)
,这个 0
就是指的版本号,这跟它真是的版本号不符。
那么我们该怎么做才能添加正确的版本号呢?有两种方案:
- 从上面的基础上进行修改;
- 通过
metadata.json
方式(推荐)。
正确的添加方案
根据 常规方案
修改(不推荐)
作者使用的是win10
操作系统,对使用Mac OS
的朋友们的情况不是很清楚。
打开 资源管理器
(俗称我的电脑),在你的 C
盘下的用户名下有一个 .vagrant.d/boxes
目录,添加的 box
会加载到这来,结果如下:
这里的 centos-VAGRANTSLASH-7
就是我们刚才添加的 box
,打开目录:
这里的 0
就是版本号,我将它修改为: 1809.01
(上面有记载),然后使用命令查看:
$ vagrant box list
centos/7 (virtualbox, 1809.01)
注意到上面的版本号,就由原来的 0
变成了现在的 1809.01
。
通过 metadata.json
方式(推荐)
如果执行过
常规方案
的,使用以下方式清除box
:$ vagrant box remove centos/7
首先进入到 box
的下载目录,新建一个文件 metadata.json
:
{
"name": "centos/7",
"versions": [{
"version": "1809.01",
"providers": [{
"name": "virtualbox",
"url": "./virtualbox.box"
}]
}]
}
-
name
添加的box名字 -
version
:版本号 -
providers.name
:虚拟主机类型 -
providers.url
:box地址
metadata.json
准备完成后,执行以下命令添加:
$ vagrant box add metadata.json
输出以下结果:
==> box: Loading metadata for box 'metadata.json'
box: URL: file://D:/vagrant/box/metadata.json
==> box: Adding box 'centos/7' (v1809.01) for provider: virtualbox
box: Downloading: ./centos7.box
box:
==> box: Successfully added box 'centos/7' (v1809.01) for 'virtualbox'!
查看添加的 box
列表:
$ vagrant box list
centos/7 (virtualbox, 1809.01)
总结
就此,整篇文档就到此结束了,我们总结下要领:
- 使用常规方法添加时,需要正确的找到
.vagrant.d/boxes
,并确认刚才添加的box
,最后进行版本修改; - 使用
metadata.json
方式,注意整个metadata.json
中不能有注释的内容,注意各个参数的准确性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。