Instalación de múltiples paquetes a través de Vagrant + Chef
Pregunta
Acabo de descubrir Vagrant + Chef y estoy tratando de crear una receta simple para instalar múltiples paquetes en el nodo. Pensé que algo como esto podría funcionar (soy completamente nuevo 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
Pero esto falla con el siguiente error:
[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'
Tengo la impresión que me falta algo básico aquí ...
Solución
Resultó que simplemente me estaba perdiendo la receta "Apt" en mi Vagrantfile, que ejecuta una actualización de apt-get antes de instalar los paquetes requeridos. Entonces, lo anterior era correcto.
Otros consejos
Simplemente agregue esta respuesta aquí para referencia futura. Si alguna vez te encuentras con una situación en la que debes correr apt-get update
antes de llamar a algunos package
Comandos, puede recurrir a este fragmento:
execute "update package index" do
command "apt-get update"
ignore_failure true
action :nothing
end.run_action(:run)
Y funciona bien.