Vagrant Boxs
来源:互联网 发布:苏打绿休团三年知乎 编辑:程序博客网 时间:2024/05/16 06:04
Vagrant Boxs
box是vagrant环境下打包的格式。box可以被用在任何需要用Vagrant创建独立工作环境的平台中。Vagrantbox命令集提供了所有管理box的功能。最简单使用box的方法是从box公共获取目录中添加一个box.当然也可以在这个网站上增加和共享你的box.它还支持版本控制,这样同一个团队的使用低版本的人,就很容易进行升级。同事创建box的人还可以修复问题并且可以对这些问题有效的沟通。
发现box
最简单的寻找box的方法,是到公共box目录中寻找你想要用的。这个目录中已经包含主要的操作系统,同时还有一些有特定功能的box比如包含LAMP,Ruby,python等其他软件的。
在公共box目录中的box可以有很多的提供者。不管你是用Virtualbox,VMware,还是AWS等。都可以找到你所需要的。
从公共目录中给本地添加box非常容易。每个box都给你展示了怎么添加box。但是基本的格式都是这样:
$ vagrant box add USER/BOX
比如:vagrant box add hashicorp/precise64.也可以快速的初始化vagrant环境用下面的命令:vagrant init hashicorp/precise64
正式Box
HashiCorp(类似于vagrant超市) 提供了一个基本的Ubuntu12.04(32和64位)box。这个box高度优化,非常小,包含了支持virtualbox和VMware。你可以用下面的命令来使用
$ vagrant init hashicorp/precise64
或者是更新你的vagrantfile这样
Vagrant.configure("2") do config.box = "hashicorp/precise64"end
对于其他人员来说,我们建议使用Bento box。这个box对很多提供者来说是开源的,比如说vmware、virtualbox,或者parallels。这里有很多的操作系统和版本可以提供。
BOX版本控制
从varant1.5开始,box支持版本控制。这就可以让发布box的人,更新box,那些使用box的人只要通过很简单流程,就可以更新,并且可以看到做了哪些改变。
如果你刚开始用vagrant,box的版本控制就不是那么重要。我们建议先去学习其他的内容。如果你用vagrant在一个工作组中,或者打算创建一个自己的box,版本控制就很重要了。幸运的是,vagrant的版本控制,使他非常简单使用和适用于vagrant的工作流。
查看和更新版本
vagrant box list 会列出所有安装box的版本。如果想查看所有可以获取的box版本,可以通过HashiCorp的册子来查看。一个简单的方式是通过https://atlas.hashicorp.com/$USER/$BOX.
例如,寻找hashicorp/precise64的信息可以在这个网址获取https://atlas.hashicorp.com/ hashicorp/precise64。
可以通过命令vagrant box outdated命令来查看你所采用的box是否过期。也可以通过vagrant
box update命令来更新box.这个命令会下载和更新box.对于一个正在运行的vagrant环境,这个命令是不会更新的。如果一个vagrant环境正在运行,必须注销或者重新创建才能获取更新。更新命令把这些更新下载到本地。
版本限制
可以通过在vagrantfile配置config.vm.box_version选项来控制vagrant环境一个指定的版本或者版本集合。如果这个选项没有配置,最新的版本就会被采用。相当于设置“>=0”.box的版本控制可以指定为某个版本或者版本集合。可以使用下来的这些来控制版本包括"=X,>X <X, >=X,<=X ~X"。可以用多个这些逻辑字符来限制,他们之间用逗号分割。上面的这些逻辑命令大部分都很常见,除了"~X",这个可以被理解为悲观约束。比如~>1.0相当于>=1.0,<2.0;~>1.1.5相当于>=1.1.5,<1.2.0
你可以选择你合适的方式处理版本。然而,许多公共目录中的box都遵循语法控制。基本上只有第一个数字会打破向后兼容。在vagrant box的集合中,版本为1.1.5的box后续版本可能为1.2或者1.4.5等等。但是2.0版本就可以以为着做了很大的改动,会破坏你的软件。在这种模式下,最好的限制版本方式是~>1.0,这样的话,你就知道不管怎么样,都是安全的。
自动更新检测
用vagrantfile,你也可以配置vagrant自动检查更新在运作vagrant up期间。这个默认是允许的。当然也可以用config.vm.box_check_update=false变量来禁用。当这个允许使用的时候,每次运行vagrantup都会检查更新。不仅仅当机器开始重新创建的时候,当从暂停中重启的时候也会执行。
当找到一个更新版本的时候,vagrant会显示出一个警告,告诉用户这里有个更新可以使用。用户可以选择暂时忽略警告或者是通过运行vagrant box update命令来更新经过。
vagrant不能自动下载和更新升级包,因为升级包很大并且需要把之前的删掉重建。这样会导致重要数据丢失。所以这个过程是手动的,需要在命令行模式中升级。
删除旧版本
vagrant不会自动删除旧的版本,因为他不知道旧的版本是否被别的环境采用。因为box都很大,你可以通过vagrant box remove命令来彻底删除。
BOX文件格式
过去,Box仅仅是virtualbox导出的tar文件。随着vagrant支持各种各样的提供者或者版本控制,box文件应该稍微有点复杂。
现在的box有2部分组成。
- box文件-这是个压缩文件对于每个提供者是不同的,这里面包含了所有的东西。vagrant不用这个文件的任何内容,他是传给提供者的。所以对于不同的提供者他的格式是不同的,比如virtualbox的文件和VMware的文件是不同的。
- box目录元数据--这是个JSON文件,在这个文件里面指定了,box的名字,简单的描述,可用的版本,可用的提供者,实际box文件的URL等等。如果这个文件不存在,box文件同样可以直接添加,但是不是支持版本控制和更新。
BOX文件
box文件是vagrant运行需要的。建议你用一个源文件当然,压缩文件因为历史原因也是支持的。
用tar,tar.gz,zip命令来压缩box文件。这个打包可以是任何一个,对于每个提供者,他是指定的。vagrant内核都会在后续过程中为用户解压。
在压缩文件中,vagrant需要一个文件:metadata.json。这是一个JSON文件,他和box目录中的元数据部分一点关系都没有。每个box都有一个metadata.json。然而每个元数据JSON文件可以描述同一个box的多个版本。潜在生成多个提供者。
metadata.json至少包含包含一个提供者的键。vagrant用这个来检测box的提供者。例如,你的提供者是Virtualbox,那么metadata.json应该是
{ "provider": "virtualbox"}
如果没有metadata.json文件或者是这个文件没有包含有效的提供者的json,添加box的时候,vagrant会报错,因为他没法检测提供者是什么。
其他增加的键值对就不会存在这个问题。这些数值会暗地里传到vagrant和相关插件。
BOX的元数据
元数据是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" } ] } ]}
就像你看到的,这个文件可以描述不同的版本,不同的提供者,可以对不同的版本添加或者删除提供者。
这个文件可以通过vagrant box add命令通过指定一个本地路径或者URL,Vagrant会安装合适的box.同时JSON文件中的URL可以是一个文件路径。如果支持多个提供者,vagrant会询问采用哪个提供者
创建一个基本的box
基本的box是一个特殊类别的box.他们包含vagrant运行的最基本的功能,并且是原始的box而不是在现有的box上修改而成的。例如,vagrant提供的Ubuntu的box,就是基本的box。他是从最小的ubuntu安装盘安装的而不是打包一个现有的系统。基本的盒子对于从一个干净的环境中创建一个开发环境非常有用。vagrant希望将来能够为更多的操作系统提供box.
基本的BOX是什么
基本的盒子仅仅是有让vagrant运行的简单的功能组成。举例来说:一个linux的box包含下列部分:
- 打包管理
- SSH
- SSH用户
- Chef或者Puppet,不是必须需要。
除此之外,每个提供者可能还需要额外的软件。例如,如果你创建了一个virtualbox的基本box,需要包含virtualbox客户插件,这样共享文件夹才能实现。但对于AWS的box来说,就不是必须的了。
创建一个基本的Box
创建一个基本的box完全依赖于提供者。也就是说根据你安装的提供者是VirtualBox、VMware、还是AWS等不同。创建一个基本box而不同。正因为如此,一片文章不可能包含所有的创建box
硬盘空间
当创建一个基本的盒子。需要确保用户能够有足够的空间来做一些事情。例如,在VirtualBox中,应当设置一个含有最大值的动态扩展的驱动器。这就使得驱动器开始的时候很小,但是可以随着需要动态增长。这就给用户提供了最大的便利性。
如果你创建了个AWS基本盒子,不需要强制分配几个T的空间。因为用户可以自己需要的时候,自己创建。但是默认应该是挂载上临时驱动器的,因为是免费并且提供足够空间的。
内存
和硬盘空间一样,找到挂载内存大小的平衡点非常重要。对于大多数的提供者来说,用户可以通过修改vagrantfile修改内存空间。所以默认不需要设置太多。如果设置几G的内存空间,启动的时候用户体验非常差。通常设置为512M对于大多数的应用来说,就已经足够了。
外设
在基本的box中,禁用任何不必须的硬件比如音频、USB控制器等。这些对于vagrant来说都不是必须的,这些也都可以通过vagrantfile简单的增加上。
默认用户设置
Vagrant几乎每个特性都可以修改。然而,vagrant并不希望你修改。如果你打算发布你创建的版本的话,就应当按照这些默认设置来。如果你打算创建一个自己用的box就不用遵循下面的这些规则了。
vagrant用户
默认情况下,vagrant有个vagrant用户可以通过SSH连接到虚拟机。这个用户应当被设置为一个不安全的密钥,这样vagrant就可以被当作一个默认的用户了。虽然,vagrant用户是基于密钥的认证,但是通常惯例是,密码也设置为vagrant。这样用户就可以手动登录.
为了配置SSH访问不安全的密钥对,把公钥放在~/.ssh/authorized_keys目录下。注意OpenSSH对于密钥的要求是非常严格的。确保~/.ssh有0700模式,授权密钥文件应该有0600模式。
当vagrant启动一个box的时候,如果发现一个不安全的密钥对,为了更加安全,他会自动用一个随机生成的密钥对替换之前的。
Root密码:vagrant
vagrant实际上并不需要设置任何的root密码。然而,如果知道root的密码,将会是发布的box进行修改更加简单。共用获取的box通常用vagrant作为root密码。
没有密码的Sudo
许多Vagrant应用期望默认SSH用户对于sudo用户没有配置密码。这样让Varant配置网络、挂载同步文件夹、安装软件。
对于一些最小的操作系统来说,他们甚至不包含sudo。检查一下你的系统是否安装sudo.安装完成后,把vagrant用户配置为没有用户。可以在配置文件中这么配置。
vagrant ALL=(ALL) NOPASSWD: ALL
默认情况下,通过SSH连接的时候,vagrant不是用putty或者tty来的。你还需要确保配置文件中没有requiretty。如果存在的话,就删除掉。这就让sudo运行时不需要tty。
SSH 调整
当你的机器或者vagrant创建的机器没有连接Internet的时候,可以把SSH服务配置中的UseDNS设置为no,来加速SSH。这样避免了反向DNS查找SSH客户机的时间。
Window的BOX
支持的window类型:win7,win8,win server2008,win server2008 r2,win server2012,winserver 2012 r2.win server 2003和winxp不支持。但是如果你是xp的忠实粉丝,这个可能有帮住。
基本的windows配置
- 关闭用户代理客户机
- 禁用复杂密码
- 禁用关闭跟踪程序
- 禁止开机启动服务管理
除了在控制面板关闭用户代理客户机外,还需要在注册表中关闭。对于不同的window版本可能不同,但是win8/8.1可以用下面的命令。这将允许类似于自动puppet安装到win的box中。
reg add HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /d 0 /t REG_DWORD /f /reg:64
基本的WinRM配置为了配置WinRM,需要设置WinRM服务自动启动并且允许非加密认证。从window基本的命令行窗口运行下面的命令。
winrm quickconfig -qwinrm 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
增加WinRM1.1配置
下面这些额外的配置主要针对Win server2008(WinRM 1.1),对于win server2008 r2,win7和后续的window版本这些配置可以忽略。
1、确认windows的powshell已经安装
2、更改winrm的端口到5985或者升级winrm到2.0
下面的命令将会更改winrm1.1的端口
netsh firewall add portopening TCP 5985 "Port 5985"winrm set winrm/config/listener?Address=*+Transport=HTTP @{Port="5985"}
- Vagrant Boxs
- Vagrant
- vagrant
- vagrant
- vagrant
- Vagrant
- vagrant
- vagrant
- vagrant
- vagrant
- vagrant
- vagrant
- vagrant
- poj1442blacks boxs【treap树】
- DP 练习 uva103 Stacking Boxs
- uva boxs in a line 12657
- vagrant --- vagrant部署环境
- Vagrant初探
- JVM -XX: 参数介绍
- js获取url参数
- iOS开发--- CocoaLumberjack 的简单使用
- EventBus使用详解(一)——初步使用EventBus
- 使用PullToRefresh实现下拉刷新和上拉加载
- Vagrant Boxs
- HEVC标准概览(一)引言
- Java性能调优
- 《文件传输基础----Java IO流---《三》》
- Vue.js学习笔记
- 解决htmlunit的webclient对象在多线程环境下的共享问题
- 神奇的题mexII--nkoj2691
- Android Studio导入第三方库
- 闲来无事,用Java的软引用写了一个山寨的缓存