2014-03-07 17 views
0

使用vagrant + Berkshelf,我試圖將我現有的虛擬機更新到更新的git版本。通過Berksfile版本約束更新軟件

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'

請注意,我說的版本約束虛擬機創建後。

但是,在運行vagrant reload --version時,沒有對git版本進行軟件更新。

此外,銷燬VM,然後運行vagrant up --provision不會導致安裝v 1.9.0(或更好版本)的git版本。

這是爲什麼?

+0

這個問題被問及作爲項目的問題。 https://github.com/berkshelf/vagrant-berkshelf/issues/154 – sethvargo

+0

對不起,我沒有指定,塞思 –

回答

1

如果你想安裝版本的git的1.9.1,你需要有這樣的事情在你的流浪漢文件:

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,但如果您已將git安裝在/ usr/bin中,那麼您可能需要首先卸載它。

+0

嗨mwalton - 得到這個異常時,添加上面,然後運行'流浪漢條款:'[vagrant @ vagrant-centos65 vagrant] $ sudo cat /var/chef/cache/chef-stacktrace.out 產生於2014-03-19 15:19:11 +0000 廚師::例外::軟件包:package [kernel-devel](build-essential :: rhel line 35)有一個錯誤:Chef :: Exceptions :: Package:沒有指定版本,沒有可用於kernel-devel的候選版本。 –

+0

嘗試在chef.add_recipe「git :: source」之上放置chef.add_recipe「yum」。問題似乎是,您正在使用的yum repo中不可用的構建版本的重要程序包(需要從源代碼構建git)不可用。這可能是因爲yum緩存已過時或清除。首先運行yum配方應該更新yum緩存框。 – mwalton

1

你缺少一個供應方:

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

沒有爲我工作。我添加了這個並運行'vagrant reload --provision',但是我的'git'仍然在運行'git --version'時顯示1.7.1。 –

+0

git cookbook的版本與git的版本不同。默認配方會安裝最新的git軟件包。您已經配置了哪些RPM軟件包存儲庫,以及最新版本可用?我懷疑它是1.7.1 ....(見:https://github.com/jssjr/git/blob/master/recipes/default.rb) –