vagrant 添加带版本号的 box

前言

众所周知,vagrant 添加 box 须要访问国外的服务器,然而国外的服务器老是那么的慢慢慢.....可是那个速度真的是不想吐槽。因此就有了本地添加 box 的需求,因此就有了如下的内容。json

为何必定要强调版本号呢?若是使用过 Homestead 的朋友们,那么你就会知道其中的酸爽。centos

如下内容彻底从零开始的,若是只是特定问题,可直接跳过会的内容,从问题出看起。

目标

该文章最终的目标是添加一个带版本号的box,效果以下:服务器

准备工做

  • 初始化一个虚拟机
  • 获取对应的 box 下载地址
  • 使用下载工具下载该 box

初始化一个虚拟机app

https://app.vagrantup.com 中有不少的 box 可供咱们下载使用,你能够搜索你想要的 box,我这里使用的是 centos/7ide

centos/7

$ vagrant init centos/7

在执行上面的目录处会多如下文件:工具

vagrant init

Vagrantfile 就是 vagrant 的配置文件,咱们也能够直接配置该文件对虚拟机进行初始化。

获取对应的 box 下载地址url

$ vagrant up
以上命令用于启动虚拟机,若是你的PC上没有安装过 centos/7(能够经过 vagrant box list 命令查看是否安装过),就会从 https://vagrantcloud.com 去下载 centos/7 ,若是有 centos/7 就会从本机获取。

执行完上面的命令后,会出现如下内容:centos7

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的下载地址。spa

注意着的版本号为: v1809.01,下面咱们会用到。

使用下载工具下载该 box操作系统

做者这里使用的是: 迅雷极速版。固然大家也可使用其余的下载工具。

下载 centos/7

添加 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 会加载到这来,结果以下:

clipboard.png

这里的 centos-VAGRANTSLASH-7 就是咱们刚才添加的 box,打开目录:

clipboard.png

这里的 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 中不能有注释的内容,注意各个参数的准确性。
相关文章
相关标签/搜索