通过Berksfile版本约束更新软件

时间:2014-03-07 04:15:07

标签: chef vagrant berkshelf

使用vagrant + Berkshelf,我正在尝试将现有的VM更新为较新的git版本。

Vagrantfile

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  # Every Vagrant virtual environment requires a box to build off of.
  config.vm.box = "centos_64" # CentOS 6.5 box

  config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box"        # URL of the `centos_64` box

  config.berkshelf.enabled = true  # use Berkshelf
  config.omnibus.chef_version = :latest     # install chef

  config.vm.provider "virtualbox" do |vb|
     vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"] # speed up networking on guest
     vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]        # ditto
       vb.memory = 1024                                              # 1 GB RAM for guest VM
       vb.customize ["modifyvm", :id, "--cpuexecutioncap", "75"]     # 75% of CPU goes to host VM.
  end
end

Berksfile

cookbook 'git', '>= 1.9.0'

请注意,我在创建VM后添加了版本约束。

但是,在运行vagrant reload --version时,未对git版本进行软件更新。

此外,销毁VM,然后运行vagrant up --provision不会导致安装v 1.9.0(或更好)版本的git。

为什么?

2 个答案:

答案 0 :(得分:1)

你错过了一个供应商:

config.vm.provision :chef_solo do |chef|
  chef.add_recipe "git"
end

答案 1 :(得分:1)

如果你想安装git版本1.9.1,你需要在你的vagrant文​​件中有这样的东西:

config.vm.provision :chef_solo do |chef|
    chef.json = {
      "git" => {
        "version" => "1.9.1",
        "checksum" => "8e300c0b72c2738ca273c38ea9566d5326d554f8bb5f4d6aa40c87783edcd153"
      }
    }
    chef.add_recipe "git::source"
end

版本是您要下载的git版本(这将变为“https://nodeload.github.com/git/git/tar.gz/v1.9.1”)

校验和是下载文件的sha256sum以验证内容

chef.add_recipe“git :: source”将从源代码(上面的下载文件)安装git,而不是从yum或apt或者你的发行版使用的任何软件包管理器获取它。

Git 1.9.1将安装到/ usr / local但是如果你已经在/ usr / bin中安装了git,那么你可能需要先卸载它。