Installieren mehrerer Pakete über Vagrant + Chef
Frage
Ich habe gerade Vagrant + Chef entdeckt und versuche, ein einfaches Rezept zu erstellen, um mehrere Pakete auf dem Knoten zu installieren. Ich dachte, so etwas könnte funktionieren (ich bin völlig neu Tu Ruby):
# (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
Dies schlägt jedoch mit dem folgenden Fehler fehl:
[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'
Ich habe den Eindruck, dass ich hier etwas Grundlegendes fehlt ...
Lösung
Es stellte sich heraus, dass mir einfach das Rezept "APT" auf meiner VagrantFile fehlte, in der ein APT-Get-Update vor dem Installieren der erforderlichen Pakete ausgeführt wurde. Das oben oben war also korrekt.
Andere Tipps
Fügen Sie hier diese Antwort hier als zukünftige Referenz hinzu. Wenn Sie jemals auf eine Situation stoßen, in der Sie laufen müssen apt-get update
Bevor Sie einige anrufen package
Befehle, Sie können auf diesen Snippet zurückgreifen:
execute "update package index" do
command "apt-get update"
ignore_failure true
action :nothing
end.run_action(:run)
Und es funktioniert gut.