Vagrant 手册之 box - 创建基础 box
有一种特殊的 box 被称为“base box”。这些 box 包含 Vagrant 运作所需的最低限度,通常不是对现有的 Vagrant 环境(“base box”中的“base”)的重新包装。
例如,Vagrant 项目(例如“precise64”)提供的 Ubuntu box 就是基础 box。它们基于从 ISO 安装的最小 Ubuntu,而不是重新打包已有的环境。
基础 box 在创建用于未来开发环境的洁净平台时非常有用。Vagrant 项目希望未来能够为更多的操作系统提供基础 box。在此之前,此页面记录了如何创建自己的基础 box。
高级话题! 创建基础 box 可能是一个耗时且乏味的过程,不建议新 Vagrant 用户使用。如果你刚刚开始使用 Vagrant,建议先尝试查找现有的基础 box。
1. 什么是基础 box
基础 box 通常只包含支持 Vagrant 工作的最小的软件集。例如,Linux box 可能只包含下面内容:
- 包管理器
- SSH
- 用于 Vagrant 连接的 SSH 用户
- 也许有 Chef、Puppet等,但不是必须的
此外,每个 provider 可能需要额外的软件。例如,如果你创建用于 VirtualBox 的基础 box,需要添加 VirtualBox 的附加软件,以便共享目录可以正常工作。如果为 AWS 创建基础 box,则不需要。
2. 创建基础 box
每个基础 box 都关联一个 provider。根据你使用的是 VirtualBox、VMWare 或 AWS,会创建不同的基础 box。
本章只会讲创建基础 box 的统一文档,然而,跟 provider 相关的部分会链接到相关文档:
Packer 和 Vagrant Cloud
强烈建议通过 Packer 创建基础 box 的可重复性构建,并且使用 Atlas 自动化构建。更多资料参考 Atlas 文档的 用 Packers 创建 Vagrant box。
磁盘空间
当创建基础 box 时,确保有足够的磁盘空间来做有趣的事情,而不会感到烦恼。例如,在 VirtualBox 中,应该创建一个动态调整大小最大的驱动器。这会导致驱动器的实际占用空间最初很小,但需要磁盘空间时动态增加到最大容量,为最终用户提供最大的灵活性。
如果要创建 AWS 基本 box,则不要强制 AMI 分配 TB 字节的 EBS 存储,因为用户可以自行完成。但是你应该默认安装临时驱动器,因为它们是免费的并提供大量的磁盘空间。
内存
像磁盘空间一样,找到合适的默认内存非常重要。对于大多数 provider,用户可以使用 Vagrantfile 修改内存,所以默认情况下不要使用太多。如果一个基础 box 上的 vagrant 一下子就需要几千兆字节的 RAM,那么这将会是一种糟糕的用户体验(并且有点令人震惊)。相反,选择 512MB 通常足以在 Vagrant 机器上玩耍并做有趣的事情,且可以在需要时轻松增加。
外设(音频,USB 等)
关闭所有基础 box 中不需要的硬件,例如音频和 USB 控制器。Vagrant 通常不需要这些,如果需要可以很容易的通过 Vagrantfile 添加。
3. 默认用户设置
在 Vagrant 中,几乎所有特性都可以修改。但是,Vagrant 确实希望有一些默认设置能够让基础 box 可以工作。如果你打算公开发布 box,则应该将其创建为默认设置。
如果你正在创建一个私人使用的基础 box,你应该尽量不要创建默认设置,因为别人会打开你的基础 box,这样有安全风险(已知用户,密码,私钥等)。
“vagrant” 用户
默认情况下,Vagrant 期望有一个“vagrant”用户用于通过 SSH 连接到机器时使用。该用户应该使用 Vagrant 默认使用的不安全密钥对来尝试 SSH。此外,即使 Vagrant 默认使用基于密钥的身份验证,但将“vagrant”用户的密码设置为“vagrant”是通用惯例。这可以让用户在需要时手动以该用户的身份登录。
要使用不安全的密钥对配置 SSH 访问,请将公钥放入“vagrant”用户的 ~/.ssh/authorized_keys 文件中。请注意,OpenSSH 对文件权限非常挑剔。因此,请确保 ~/.ssh 具有 0700 权限并且授权密钥文件具有 0600 权限。
当 Vagrant 启动一个 box 并检测到不安全的密钥对时,它会自动用一个随机生成的密钥对代替它,以在 box 运行时提供额外的安全性。
root 密码:“vagrant”
Vagrant 实际上并不使用或期望任何 root 密码。但是,拥有众所周知的根密码可以让公众更容易地根据需要修改机器。
公开可用的基础 box 通常使用“vagrant”这个根密码。
不需密码的 Sudo
这个很重要!Vagrant 的许多特性都希望默认的 SSH 用户能够配置无密码的 sudo。这让 Vagran 可以t配置网络,挂载同步目录,安装软件等。
首先,一些精简版操作系统的安装默认不包括 sudo。确认你以某种方式安装了sudo。
安装了 sudo 之后,需要将“vagrant”用户配置为不需密码。可以在配置文件中添加下面一行的内容:
vagrant ALL=(ALL) NOPASSWD: ALL
此外,通过 SSH 连接时,Vagrant 默认不使用 pty 或 tty。需要确保没有连接要使用它。如果它存在则删除。这允许 sudo 在没有 tty 的情况下正常工作。注意,可以将 Vagrant 配置为请求一个 pty,这可让你保留此配置。但是,默认情况下,Vagrant 不会这样做。
SSH 调整
即使你的计算机或 Vagrant 机器未连接到互联网,为了保持 SSH 快速,请在 SSH 服务器配置中将 UseDNS 配置设置为 no。
这可以避免在连接 SSH 客户端上进行反向 DNS 查找,这可能需要几秒钟的时间。
4. Windows Boxes
Supported Windows guest operating systems: - Windows 7 - Windows 8 - Windows Server 2008 - Windows Server 2008 R2 - Windows Server 2012 - Windows Server 2012 R2
Windows Server 2003 and Windows XP are not supported, but if you are a die hard XP fan this may help you.
Base Windows Configuration
- Turn off UAC
- Disable complex passwords
- Disable “Shutdown Tracker”
- Disable “Server Manager” starting at login (for non-Core)
In addition to disabling UAC in the control panel, you also must disable UAC in the registry. This may vary from Windows version to Windows version, but Windows 8/8.1 use the command below. This will allow some things like automated Puppet installs to work within Vagrant Windows base boxes.
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /d 0 /t REG_DWORD /f /reg:64
Base WinRM Configuration
To enable and configure WinRM you will need to set the WinRM service to auto-start and allow unencrypted basic auth (obviously this is not secure). Run the following commands from a regular Windows command prompt:
winrm quickconfig -q
winrm set winrm/config/winrs @{MaxMemoryPerShellMB="512"}
winrm set winrm/config @{MaxTimeoutms="1800000"}
winrm set winrm/config/service @{AllowUnencrypted="true"}
winrm set winrm/config/service/auth @{Basic="true"}
sc config WinRM start= auto
Additional WinRM 1.1 Configuration
These additional configuration steps are specific to Windows Server 2008 (WinRM 1.1). For Windows Server 2008 R2, Windows 7 and later versions of Windows you can ignore this section.
- Ensure the Windows PowerShell feature is installed
- Change the WinRM port to 5985 or upgrade to WinRM 2.0
The following commands will change the WinRM 1.1 port to what’s expected by Vagrant:
netsh firewall add portopening TCP 5985 "Port 5985"
winrm set winrm/config/listener?Address=*+Transport=HTTP @{Port="5985"}
5. 其他软件
现在,你拥有所有用于基础 box 的必须的且可以与 Vagrant 共同使用的软件。但是,还可以安装一些其他软件。
虽然未来可能会不一样,但现在使用这些 provider 时,Vagrant 仍不会自动安装 Chef 或 Puppet。用户可以使用 shell 程序来执行此操作,但是如果希望 Chef/Puppet 开箱即用,则必须将其安装在基本 box 中。
安装这个不在本教程范围内,但应该相当简单。
除此之外,还可以随意安装和配置默认情况下可用于此基本 box 的任何其他软件。
6. 打包 Box
将 box 打包成 box 文件是特定于 provider 的。请参阅 provider 特定的文档以创建基准 box。部分 provider 特定的指南链接到此页面的顶部。
7. 发布 Box
可以分发 box 文件。但是,如果想支持版本控制、将多个 provider 放在一个 URL 中、推送更新、分析等,我们建议你将该 box 添加到 HashiCorp 的 Vagrant Cloud。
可以将公共和私人 box 上传到此服务。
8. 测试 Box
要测试这个 box,假装你是 Vagrant 的一个新用户:
$ vagrant box add --name my-box /path/to/the/new.box
...
$ vagrant init my-box
...
$ vagrant up
...
如果创建的是基于其他 provider 的 box,需要在使用 vagrant up 命令时添加 --provider 选项。如果启动成功,则表示 box 可以工作。
Vagrant 手册之 box - 创建基础 box的更多相关文章
- Vagrant 手册之 box - 版本
原文地址 从 Vagrant 1.5 版本起,box 开始支持版本.这运行创建 box 的人提交更新,使用 box 的人检查更新.更新 box 并查看变更记录. 对于 Vagrant 新手,box 版 ...
- Vagrant 手册之 box - 概述
原文地址 box 是 Vagrant 环境中使用的包格式.box 可以在 Vagrant 支持的所有平台上被任何人使用,从而提供相同的工作环境. vagrant box 工具提供了管理 box 的所有 ...
- Vagrant 手册之 box - box 的文件格式
原文地址 过去,box 只是 VirtualBox 导出的 tar 文件.由于 Vagrant 现在支持多个 provider 和版本控制,box 文件稍微复杂一些. 用于 Vagrant 1.0.x ...
- 利用vagrant打包系统--制作自己的box
前置条件1.安装VirtualBox 2.安装Vagrant 3.在VirtualBox中安装操作系统,例如 CentOS 1)把在virtualBox中安装的系统打包成box 1.我们需要知道虚拟机 ...
- virtualbox+vagrant学习-2(command cli)-1-vagrant box命令
vagrant box 这是用于管理(添加.删除等)boxes的命令. box 是一个打包好的操作系统,是一个后缀名为 .box 的文件,其实是一个压缩包,里面包含了 Vagrant 的配置信息和 V ...
- vagrant的box哪里下?镜像在哪儿找?教你在vagrant官网下载各种最新.box资源
原文:vagrant的box哪里下?镜像在哪儿找?教你在vagrant官网下载各种最新.box资源 一.进入vagrant官网 https://www.vagrantup.com/ 二.点击findb ...
- vagrant 入门案例 - 快速创建 Centos7
中文文档:http://tangbaoping.github.io/vagrant_doc_zh/v2/ 参考: https://blog.csdn.net/yjk13703623757/articl ...
- 指导手册03:Hadoop基础操作
指导手册03:Hadoop基础操作 Part 1:查看Hadoop集群的基本信息1.查询存储系统信息(1)在WEB浏览器的地址栏输入http://master:50070/ 请查看自己的Hadoop集 ...
- SQL Server 扩展事件(Extented Events)从入门到进阶(2)——在GUI中创建基础扩展事件
本文属于 SQL Server 扩展事件(Extented Events)从入门到进阶 系列 第一篇文章中提到了如何在Profiler中创建跟踪(trace),并以服务器端(server-side)跟 ...
随机推荐
- JAVA总结--分布式锁
1.概念 分布式锁出现的原因:单体应用单机部署环境下,为了解决多线程并发问题,我们会使用ReentrantLcok或synchronized来解决互斥问题:但业务的需求,单机部署演变成分布式系统后,在 ...
- 生日蛋糕 (poj1190) (dfs剪枝)
[题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为 ...
- Gradle打包问题Deprecated Gradle features were used in this build, making it incompatible with Gradle 5.0
前言 使用gradle打包react native的时候,出现了如下报错,下面和大家说一下解决的具体办法 Deprecated Gradle features were used in this bu ...
- [ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式
原文:[ASP.NET Core 3框架揭秘] 依赖注入:依赖注入模式 IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架之中以实现对流程的复用,并按照“好莱坞法则”实现应用 ...
- mysql安装,卸载; 库和表的基础操作
数据库 """ 1.什么是数据库:管理数据的系统 - 安装某种管理数据的系统 - 管理的对象本质是文件 2.存储数据的位置:内存.硬盘 3.什么是系统:运行在硬件基础上 ...
- 浅谈GC
关于Java中的GC,简单来说就是垃圾收集器自动回收生命周期结束的对象,释放内存. 那么怎样确定对象是否存活呢? 可达性分析算法 现在主流的Java虚拟机大多使用这种可达性分析算法来判断对象是否需要进 ...
- ACM-ICPC 2015 Changchun Preliminary Contest J. Unknown Treasure (卢卡斯定理+中国剩余定理)
题目链接:https://nanti.jisuanke.com/t/A1842 题目大意:给定整数n,m,k,其中1≤m≤n≤1018,k≤10, 然后给出k个素数,保证M=p[1]*p[2]……*p ...
- ShellExecute指定IE浏览器打开
ShellExecute(NULL,L"open", L"iexplore.exe", L"www.baidu.com", NULL, SW ...
- css 响应式(媒介查询)
1.CSS 来实现响应式 CSS实现响应式网站的布局要用到的就是CSS中的媒体查询接下来来简单介绍一下: @media 类型 and (条件1) and (条件二){css样式} <link r ...
- flask之注册功能
一:注册功能 1:前端准备表单 # 前端代码 <!DOCTYPE html> <html lang="en"> <head> <meta ...