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"}

0 0
原创粉丝点击