2011-03-17 64 views
15

我刚刚发现了Vagrant + Chef,我试图创建一个简单的配方在节点上安装多个软件包。我觉得这样的事情可以工作(我是全新TU红宝石):通过Vagrant + Chef安装多个软件包

# (From cookbooks/MY_COOCKBOOK/recipes/default.rb) 
# Install required packages 
%w{build-essential libncurses5-dev openssl libssl-dev}.each do |pkg| 
    package pkg do 
    action :install 
    end 
end 

但这种失败,出现以下错误:

[default] [Thu, 17 Mar 2011 06:24:27 -0700] INFO: Installing package[libssl-dev] version 0.9.8k-7ubuntu8.5 
: stdout 
[default] /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:184:in `handle_command_failures': stderr 
[default] : : stderr 
[default] apt-get -q -y install libssl-dev=0.9.8k-7ubuntu8.5 returned 100, expected 0: stderr 
[default] (: stderr 
[default] Chef::Exceptions::Exec: stderr 
[default]) 
: stderr 
[default] from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:131:in `run_command' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:199:in `run_command_with_systems_locale' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/provider/package/apt.rb:68:in `install_package' 
    from /usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/provider/package.rb:60:in `action_install' 
[...] 

: stderr 
[default] [Thu, 17 Mar 2011 06:24:34 -0700] ERROR: package[libssl-dev] (/tmp/vagrant-chef/cookbooks-0/erlang-src/recipes/default.rb:22:in `from_file') had an error: 
apt-get -q -y install libssl-dev=0.9.8k-7ubuntu8.5 returned 100, expected 0 
/usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:184:in `handle_command_failures' 
/usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:131:in `run_command' 
/usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/mixin/command.rb:199:in `run_command_with_systems_locale' 
/usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/provider/package/apt.rb:68:in `install_package' 
/usr/lib/ruby/gems/1.8/gems/chef-0.9.12/bin/../lib/chef/provider/package.rb:60:in `action_install' 

我的感觉,我失去了一些东西基本这里...

回答

17

事实证明,我简直想念我的Vagrantfile上的“apt”配方,它在安装所需的软件包之前运行apt-get更新。所以,以上是正确的。

4

只需在此添加此答案以供将来参考。如果你遇到,你必须调用一些package命令之前运行apt-get update的情况下,可以采取这个片段:

execute "update package index" do 
    command "apt-get update" 
    ignore_failure true 
    action :nothing 
end.run_action(:run) 

,它工作正常。

+0

这是不必要的,如果您通常不使用资源上的run_action来使用cookbooks,只需在使用任何软件包资源之前包含aptbook的默认配方,配方将[运行apt-get update](https:// github的.com/Opscode公司-食谱/公寓/斑点/主/配方/ default.rb#L29)。 – bschlueter 2014-03-03 21:32:27