0

使用 vagrant + Berkshelf,我正在尝试将我已经存在的 VM 更新到更新的git版本。

流浪文件

# -*- 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

伯克斯文件

cookbook 'git', '>= 1.9.0'

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

但是,在运行时vagrant reload --version,没有对该git版本进行任何软件更新。

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

为什么?

4

2 回答 2

1

您缺少供应商:

config.vm.provision :chef_solo do |chef|
  chef.add_recipe "git"
end
于 2014-03-07T22:10:49.680 回答
1

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

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

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

checksum 是下载文件的 sha256sum 来验证内容

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

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

于 2014-03-19T15:14:52.453 回答