Vagrant 手册之 box - box 的文件格式
过去,box 只是 VirtualBox 导出的 tar 文件。由于 Vagrant 现在支持多个 provider 和版本控制,box 文件稍微复杂一些。
用于 Vagrant 1.0.x 的 Box 文件(VirtualBox 导出的 tar 文件)可以继续与新版本的 Vagrant 一起使用。当 Vagrant 遇到旧 box 时,会自动将其更新为新格式。
今天,有三个不同的组件:
- Box 文件:这是个特定于某个 provider 的压缩文件(tar、tar.gz、zip),可以包含任何东西。Vagrant 内核并不会使用这个文件的内容。相反,文件内容会被传输给 provider。因此,用于 VirtualBox 的 box 文件跟用于 VMware 的 box 文件内容是不同的。
- Box 目录元数据(Catalog Metadata):JSON 文档(通常用于跟 HashiCorp 的 Vagrant Cloud 交互),指定了 box 的名字、描述、可用版本、可用 provider 以及 指向不同 provider 和不同版本的真实 box 文件的 URL。如果目录元数据不存在,也可以直接添加 box 文件,但是不支持版本控制且无法更新。
- Box 信息:JSON 文档,在用户运行
vagrant box list -i时提供关于 box 的额外信息。更多信息参考 这里。
1. Box 文件
真实的 box 文件是 Vagrant 的必需部分。建议始终在使用 box 文件时使用元数据文件,但由于历史遗留问题,在 Vagrant 中可以直接使用 box 文件。
Box 文件使用 tar,tar.gz 或 zip 进行压缩。文档中可以放特定于 provider 的任何东西。Vagrant 核心只会解压缩 box。
在文档中,Vagrant 期待一个文件:metadata.json。这是一个与上面的 box 目录元数据组件完全无关的 JSON 文件; 每个 box 文件(box 文件内)只有一个metadata.json,而一个目录元数据 JSON 文档可以描述同一个 box 的多个版本,可能跨越多个 provider。
metadata.json 必须至少包含 provider 的“provider”关键字。Vagrant 用这个来验证 box 的 provider。例如,如果 box 是用于 VirtualBox 的,则 metadata.json 将如下所示:
{
"provider": "virtualbox"
}
如果没有 metadata.json 文件或文件不包含有效的且至少有一个“provider”键的 JSON 文件,则添加该 box 时,Vagrant 将会出错,因为它无法验证 provider。
其他的键/值对也可以被添加到元数据。元数据文件的值被不透明地传递给 Vagrant,插件也可以使用。此时,Vagrant 内核不会在此文件中使用任何其他键。
2. Box 元数据
元数据是一个 box 的可选组件(但强烈推荐),支持从一个文件进行版本控制、更新、多个 provider 等。
不需要手动创建元数据。如果你有 HashiCorp 的 Vagrant Cloud 账户,可以在那里创建 box,而 HashiCorp 的 Vagrant Cloud 会自动创建元数据。格式仍然记录在这里。
box 元数据是 JSON 文档,组织如下:
{
"name": "hashicorp/precise64",
"description": "This box contains Ubuntu 12.04 LTS 64-bit.",
"versions": [
{
"version": "0.1.0",
"providers": [
{
"name": "virtualbox",
"url": "http://somewhere.com/precise64_010_virtualbox.box",
"checksum_type": "sha1",
"checksum": "foo"
}
]
}
]
}
如上所示,JSON 文档可以描述多个版本的 box,多个 provider,并且可以添加/删除不同版本的 provider。
这个 JSON 文件可以使用本地文件系统的文件路径或通过 URL 直接传递到 vagrant box add,Vagrant 将安装正确版本的 box。这种情况下,JSON 中的 url 键值也可以是文件路径。如果有多个 provider 可用,Vagrant 会询问要使用哪个provider。
Vagrant 手册之 box - box 的文件格式的更多相关文章
- Vagrant 手册之 box - 创建基础 box
原文地址 有一种特殊的 box 被称为"base box".这些 box 包含 Vagrant 运作所需的最低限度,通常不是对现有的 Vagrant 环境("base b ...
- Vagrant 手册之 box - 版本
原文地址 从 Vagrant 1.5 版本起,box 开始支持版本.这运行创建 box 的人提交更新,使用 box 的人检查更新.更新 box 并查看变更记录. 对于 Vagrant 新手,box 版 ...
- Vagrant 手册之 Vagrantfile - 机器设置 config.vm
原文地址 配置的命名空间:config.vm config.vm 中的设置修改 Vagrant 管理的机器的配置. 1. 可用的设置项 config.vm.boot_timeout Vagrant 等 ...
- Vagrant 手册之 box - box 的信息格式
原文地址 创建 Vagrant 的 box 时,可以提供在运行 vagrant box list -i 时展示的与用户相关的其他信息.例如,可以打包 box,以包含有关该 box 的作者和网站信息: ...
- Vagrant 手册之 box - 概述
原文地址 box 是 Vagrant 环境中使用的包格式.box 可以在 Vagrant 支持的所有平台上被任何人使用,从而提供相同的工作环境. vagrant box 工具提供了管理 box 的所有 ...
- vagrant package制作一个box镜像
1.进入virtualbox安装目录,查看虚拟机的名称(第一列为虚拟机名称) # vboxmanage list vms 2. vagrant package 打包命令 vagrant packag ...
- [vagrant]第一次安装添加box出现问题汇总
1.本地文件要加全文件名和协议file:/// 2.The box failed to unpackage properly. Please verify that the box file you' ...
- Vagrant 手册之 Multi-machine 多机器
原文地址 Vagrant 可以在一个 Vagrantfile 中定义并控制多个虚拟机.这就是"multi-machine"环境. 这些机器可以协同工作或互相关联.multi-mac ...
- Vagrant 手册之 Provisioning - 概述
原文地址 通过 Vagrant 中的 provisioner 配置程序,可以在使用 vagrant up 启动虚拟机时,在虚拟机上执行安装软件.更改配置等操作. box 通常是通用的,而每个项目总有自 ...
随机推荐
- flume 进阶
一.flume事务 put事务流程: 1.doPut:将批量数据先写入临时缓冲区putList 2.doCommit:检查Channel内存队列是否足够, (1)达到一定时间没有数据写入到putLis ...
- 【CF321E】+【bzoj5311】
决策单调性 + WQS二分 贴个代码先... //by Judge #pragma GCC optimize("Ofast") #include<bits/stdc++.h& ...
- 【数据库运维】数据库(server)的时区设置及世界主要地区的时区
[时区设置不当会有什么问题] 当进行海外项目运维的时候,常常会遇到时区设置的问题.假设时区设置不当 或者 同样项目的server之间的时区不一致,都会有导致项目的数据异常的风险. 假设数据表的字段使用 ...
- asp.net中的<% %>,<%= %>,<%# %><%$ %>的使用
原文:https://www.cnblogs.com/Hackerman/p/3857630.html 首先我们来看一下<% %>的使用 在aspx的页面中只能使用服务器控件和一般的控件, ...
- AppDomain (转)
AppDomain是CLR的运行单元,它可以加载Assembly.创建对象以及执行程序.AppDomain是CLR实现代码隔离的基本机制. 每一个AppDomain可以单独运行.停止:每个AppDom ...
- js—input框中输入数字,动态生成内容的方法
项目中需要在前端实现: 用户输入数字n,动态生成n个元素,删除n,自动清空n个元素(如图一): 用户输入数字n,失焦生成n个元素,再聚焦修改n,自动清空n个元素(如图二): 图一: 图二: 需求一实现 ...
- Spark2.0基于广播变量broadcast实现实时数据按天统计
package com.gm.hive.SparkHive; import java.text.SimpleDateFormat; import java.util.Arrays; import ja ...
- python 数据分析 Numpy(Numerical Python Basic)
a = np.random.random((2,4)) a Out[5]: array([[0.20974732, 0.73822026, 0.82760722, 0.050551 ], [0.773 ...
- 一、C++类库与C#类库相互调用
1.C++调用C#类库 1.准备C#类库(dll文件) 1.1.创建C#类库: 右击项目类库生成即可, 出现.dll(类库)与.pdb(pdb文件包含了编译后程序指向源代码的位置信息, 用于调试的时候 ...
- python3.7爬取墨菲定律保存在本地txt
#!/usr/local/bin/python3.7 # -*- coding: utf-8 -*- # @Time: 2019/07/15 # @Function 获取在线文本内容 import r ...