Hello,Vagrant
原文: http://dreamhead.blogbus.com/tag/vagrant/在这个虚拟化当道的年代,作为一个程序员,你一定对VirtualBox不会陌生,是的,它就是个虚拟机。不过,这里要说的却是Vagrant,那Vagrant又是什么呢?
如果说VirtualBox是个芸芸众生的虚拟机,那Vagrant就是程序员的VirtualBox。你要知道,作为一个程序员,我们认为,什么东西都应该在命令行下控制。当然,对于程序员这个群体,要是面对一个可以在命令行下控制的虚拟机,我们要的可绝不是“打开虚拟机、上个网银”。
Vagrant是用Ruby写的,所以,安装之前,确保你装好了Ruby和RubyGems。一般来说,我会用RVM安装Ruby这套东西,仅供参考。再有既然是要控制VirtualBox,安装一个VirtualBox也是必然的。
准备好基本的东西,安装Vagrant就非常简单了:
gem install vagrant
接下来,就该是使用了。不过,在此之前,我们先要找一个虚拟机镜像来,就像使用一般的机器先要装机一样。此外,我们还要让vagrant知道这个镜像文件的存在,下面就是这样一个命令:
vagrant box add base http://files.vagrantup.com/lucid32.box
在vagrant里,这个概念叫做box,所以,这个命令的意思,我要添加一个box,我给它命名成base,它的地址是http://files.vagrantup.com/lucid32.box。
其实,这个如果你熟悉Ubuntu的命名规则,便不难发现,这个box是一个Ubuntu的镜像。事实上,这个box显然不是唯一的选择,如果我们想要其它版本的操作系统,我们的选择还有很多,在这里可以找到:
http://www.vagrantbox.es/
剩下的就是,选择我们想要的操作系统,给它命个名字,就可以用起来了。
找一个目录进去,是的,最好这么做,因为接下来,我们会生成文件,放在一个特定的路径里,不容易丢掉:
vagrant init base
从命令行的提示里,我们可以看到,vagrant为我们创建了一个Vagrantfile,里面有好多内容,不过,把细致查看留给你,让我们先体会一下成就感吧!启动我们的虚拟机。
vagrant up
一切正常的话,在打出一片提示之后,我们的虚拟机就运行起来了。怎么才能用上这个新“机器”呢?其实,这就是一台独立的机器,我们可以ssh上去。
vagrant ssh
好了,尽情折腾吧,这是我们程序员的虚拟机。
Hello,Vagrant (二)
好吧,我承认在第一部分介绍的那个虚拟机只是看上去很美,因为里面什么都没有,所以,我们必须动手给它装些东西,才能让它有点作用。别急别急,我知道,你会和最初的我一样,一听到装东西,立刻就要vagrant ssh上去,然后,apt-get install各种各样的东西。可我们是程序员,我们才不做这种普通用户才做的事情呢!
在这个年代,只说持续集成,我们都不好意思了,要说持续交付,而要达到持续交付,有一个叫做DevOps的概念是绕不过去,说白了,DevOps就是把配置环境的过程代码化,所谓infrastructure as code。在这个领域,有两个工具很好用,一个叫Chef,另一个叫Puppet。它们都可以极大程度上简化我们配置环境的过程。
谢天谢地,Vagrant二者都支持。
下面我们用Chef搭建一个CI,体验所谓的DevOps。
Chef支持两种运行模式,Chef Solo和Chef Server。所谓Solo就是一个人的工作,而Server自然是服务器的意思。之所以要有这样的区分,主要是考虑用来配置机器的脚本放在哪里,Solo就是放在自己的机器上,而Server则是放在一台特定的服务器上。在我们这个简单的例子里,就不麻烦Server了。
我们要配置机器,首先要有的就是配置文件,对应的配置文件在Chef中称为cookbook,这个社区里已经很多写好的Cookbook,让我们拿过来用。
http://community.opscode.com/cookbooks
就我们这个例子里,我们选用的CI软件是Jenkins,所以,我们需要jenkins的cookbook。在这个例子里,我们就在之前建立目录创建一个cookbooks的目录,用以存放我们的cookbook,进入到这个目录下,执行下面的命令:
git clone https://github.com/heavywater/chef-jenkins jenkins
先别急,事实上,仅有一个jenkins是不够的,它还要依赖于其它的程序包,以这个例子而言,我们采用Ubuntu操作系统,所以,我们需要安装apt,再有jenkins是一个Java编写的应用,所以,它还需要一个java:
git clone https://github.com/opscode-cookbooks/apt.git
git clone https://github.com/opscode-cookbooks/java.git
好,我们要用的cookbook都有了,下面该让Vagrant知道它们的存在了。上次说道,我们在init之后,会生成一个Vagrantfile。实际上,它就是Vagrant的配置文件。用你最喜欢的编辑器打开它。
实际上,关于如何配置Vagrant,主要内容都在里面了,只是大部分都注释掉了而已。既然我们要采用Chef Solo模式,那就找到相关的配置,搜索chef_solo,很容易定位到,将它改成下面的样子:
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "cookbooks"
chef.add_recipe "jenkins"
end
这个配置是告诉Vagrant,cookbook的路径在哪,以及我们要用的哪个配置。
这样,基本的配置就是这样了,但是,我们虽然启动了这个jenkins,却只能在虚拟机内部访问,为了让别人也能访问,我们需要配置转发端口,同样在Vagrantfile里:
config.vm.forward_port 8080, 7070
这个配置是说,虚拟机内部的8080端口会转发到宿主端口7070。
等了半天,启动我们的虚拟机吧,还记得命令吗?
vagrant up
如果你之前启动过,为了让新配置生效,我们可以:
vagrant reload
虽然是自动安装,但漫长的安装过程是无法避免的,可以先休息一下。
幸运的话,等待之后,我们就可以打开我们的浏览器,访问新CI了:
http://localhost:7070
好了,我们的CI就绪了,按照你的需求配置吧!
Vagrant初窥(一)
虚拟化技术已经飞入日常工作。很多人为了开发、测试,会在本地创建一个VirtualBox或者VMWare虚拟机,以模拟某个特定的目标环境(如Windows XP、IE7等)。为了实现这个目标,人们往往需要手工去安装所需的操作系统或者软件,手工配置一些环境变量,再手工将打好的部署包拷贝过去,并且手工部署应用程序。整个过程基本上都是手工操作,而且需要确保每个步骤都配置正确——耗时,且容易出错。有没有什么工具可以帮助我们将这些工作自动化,省去繁琐的手工操作,确保可靠地、可重复地执行这个过程?Vagrant就是这样一款非常优秀的工具,它很好地封装了虚拟文件镜像、VirtualBox API以及配置工具(如puppet、chef等)等成熟工具的使用,从而能够帮助开发人员很方便地、可复用地创建、配置和分发虚拟机的工具。借助于Vagrant,开发团队可以自动化应用环境的创建、配置以及应用程序的部署,甚至进一步将环境的集成纳入到构建流水线、持续集成。本文将介绍Vagrant的基本用法、概念模型、内部机制以及veewee插件,带着大家一窥Vagrant的神秘之处。
引子
在开始之前,首先请确保本地已经安装了VirtualBox,可以正常地创建、管理虚拟机,而且本地已经安装了Vagrant。您可以通过在命令行执行vagrant -v来查看当前安装的vagrant版本。
如果这两者都已准备妥当,下面就让我们看一个简单的例子:
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
$ vagrant init lucid32
$ vagrant up
http://mingjin.thoughtworkers.org/wp-content/uploads/2012/03/Screen-Shot-2012-03-08-at-6.19.06-PM1.png
在经过一系列的步骤之后,vagrant提示虚拟机已经完成了创建。让我们来试试这台刚创建的虚拟机,ssh登陆到虚拟机上面去:
$ vagrant ssh
http://mingjin.thoughtworkers.org/wp-content/uploads/2012/03/Screen-Shot-2012-03-08-at-6.21.39-PM1.png
可以看到,经过这样简单的几步,我们就拥有了一台完全可用的Linux机器。接下来,我们可以在虚拟机上面安装软件、配置环境——就象操作本地机器一样。这一切是怎么做到的呢?我们一步步来分析上面的步骤,看看Vagrant在其中做了些什么。
首先,我们是执行了box add命令:
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
这里,我们先执行vagrant box list,命令行控制台会输出如下的box列表:
centos-6.2-64bit_4.1.8
centos6-32
debian64_chef
lucid32
我们可以发现在执行完vagrant box add之后,本地的Vagrant box会增加一个名为lucid32的新box。这是我们接触的第一个概念——box。
Vagrant初窥(二)
Boxbox是Vagrant用以创建、分发虚拟机镜像的压缩文件。例如,对于本文例子中的lucid32.box,其内部结构如下:
data:image/png;base64,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
基本上,Vagrant的box文件是一个OVF压缩包(为什么说基本上呢?大家可以移步我的这篇博文,这里不深入探究)。OVF(Open Virtualization Format,开放虚拟化格式)是由HP、VMWare、XenSource等公司或团体组成的DMTF(Distributed Management Task Force)组织提出的虚拟化格式标准,于2008年9月发布v1.0,截至本文为止的最新版本是v1.1.0。OVF描述了虚拟机打包与分发的各种配置和扩展点,其目的在于提供一种开放、安全、可移植和可扩展的格式,而不需要依赖于特定的超管理程序(hypervisor)或者处理器架构。目前,OVF已经被业界广泛接受,主要的虚拟化厂商与组织,如VMWare、IBM或者VirtualBox都已经提供了支持。OVF的详细格式可参阅OVF规范,这里不多做分析。
OVF压缩包(OVF Archive,OVA)是OVF打包与分发的基本单元,由一个或者多个虚拟机镜像以及其他的一些元数据文件组成。一个OVA压缩包通常会包括一个OVF描述文件、一个或者多个虚拟机镜像文件、一组本地化文件、一个manifest文件和一个证书文件,其中只有OVF描述文件和虚拟机镜像文件是必须的,其他都是可选的。
对于本文例子中的lucid32.box,里面除了box.ovf文件,还包括了一个box-disk1.vmdk、一个box.mf文件以及一个Vagrantfile文件。box-disk1.vmdk是基于VMWare提出的vmdk虚拟镜像文件格式,它为VMWare和VirtualBox等工具支持。其中的box.ovf是对该虚拟机镜像文件的OVF描述。box.mf里面放的是box-disk1.vmdk和box.ovf的SHA1值。有时候,你可能需要修改虚拟机镜像的配置,你可以手工修改box.ovf的内容,再重新生成它们的SHA1值(如,最后用新的SHA1值替换box.mf里面的内容即可。
由于Vagrant box就是OVF压缩包,同时,vmdk也是一种较为通用的虚拟镜像文件格式。所以在原理上,所有兼容OVF格式的超管理程序(hypervisor)和虚拟工具(VirtualBox、Oracle VM或者VMWare等)都能很好的解析和支持Vagrant box。
Vagrant的子命令vagrant box提供了管理box的所有功能,如add、list、remove、repackage等。这些子命令都非常自解释,如list是列出本地的Vagrant box,remove是删除指定的Vagrant box,repackage是重新打包本地的Vagrant box等。Vagrant box add会将指定的box文件(同时支持http、file协议)添加到本地——即把该box文件下载到本地,并解压缩为~/.vagrant.d/boxes下的同名文件夹。比如,你可以在~/.vagrant.d/boxes/lucid32文件夹下面找到上面所有的文件。这样,Vagrant就将box添加到本地,接下来就可以基于Vagrant box创建、启动、配置虚拟机实例了。
接下来,让我们看第二条命令:
$ vagrant init lucid32
执行完这条命令之后,Vagrant会在当前目录创建一个Vagrantfile文件。这是我们要接触的第二个概念——Vagrantfile。
OVA(VMX)化Vagrant box
原文: http://mingjin.thoughtworkers.org/?p=176Vagrant是一款针对本地虚拟机的管理工具,使用起来非常方便。然而,虽然Vagrant是基于OVF与VMDK格式标准,但Vagrant box却并不是合法的OVF压缩包,而且本身也没有声明对VMWare的支持,所以,我们不能够直接将Vagrant box直接导入到VMWare产品如Fusion里面。但是,Vagrant box与VMWare VMX的鸿沟也并非那么大,我们可以通过修改Vagrant box的OVF描述文件以及压缩打包方式,将Vagrant box转为OVA或者VMX格式的压缩文件。
Vagrant box不是合法的OVF压缩包,主要的问题在于Vagrant box中文件的顺序不符合OVF压缩包(OVF Archive)规范。OVF压缩包对文件顺序的要求是:OVF必须是第一个,然后是虚拟机镜像文件(如VMDK),接着是MF文件,再接下来是其他的可选文件(如证书、I18N等)。但是,Vagrant box里面的顺序则是VMDK、MF、OVF、Vagrantfile,如下图。
http://mingjin.thoughtworkers.org/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-10.46.05-AM.png
我们可以用OVF工具去验证一下Vagrant box,比如VMWare的ovftool会提示如下的错误信息:
http://mingjin.thoughtworkers.org/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-10.42.46-AM.png
既然知道了问题的原因,那解决起来就好办多了。我们只需要将Vagrant box重新按照一定的顺序压缩即可。比如,我们可以直接用tar,如下图:
http://mingjin.thoughtworkers.org/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-11.14.28-AM.png
当然,我们也可以使用VMWare的ovftool来实现同样的目的:
ovftool box.ovf lucid32.ova
这样,我们就解决了Vagrant box不是合法OVF压缩包的问题。然而,通过上图可以看到,虽然Vagrant box里面是VMDK文件,而且VMDK同时被VirtualBox和VMWare支持,但是由于Vagrant box在box.ovf的Family里面只声明了virtualbox-2.2,故而也没有办法被VMWare打开。我们也可以使用VMWare的ovftool验证一番:
http://mingjin.thoughtworkers.org/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-11.19.18-AM.png
因此,为了Vagrant box也能够在VMWare里面打开和配置,我们需要修改Vagrant box里面box.ovf的一些配置,增加对VMWare的支持,并将其中一些VirtualBox特定的配置修改为VMWare兼容的。
为此,笔者开发了一个vagrant插件叫vagrant-ovf,可以很方便、自动地修改box.ovf以及box.mf(因为每次修改了box.ovf,都需要重新计算box.ovf文件的SHA1值)。
[*]为了使用该插件,首先安装vagrant-ovf,如gem install vagrant-ovf。
[*]然后,通过vagrant ovf 就会修改指定Vagrant box里面的box.ovf以及box.mf,使之增加对VMWare的支持。
[*]接着,我们可以通过上面的步骤将Vagrant box重新压缩为OVF压缩包,例如lucid32.ova
http://mingjin.thoughtworkers.org/wp-content/uploads/2012/03/Screen-Shot-2012-03-22-at-11.11.34-AM.png
[*]最后,我们可以用ovftool将刚才得到的lucid32.ova再转化为VMX文件,ovftool lucid32.ova lucid32.vmx
这样,我们刚才得到的OVF压缩包就转化为VMWare Fusion可以直接打开、导入的VMX文件。进一步,我们可以借助于VMWare提供的vapprun做一些深入的自动化工作。
页:
[1]