I am trying to install the fog gem in a chef recipe though the gem installation occurs before the native packages are being installed so the gem installation fails
package "libxslt-dev"
package "libxml2-dev"
chef_gem "fog"
This is the output
[Thu, 14 Mar 2013 13:04:30 +0000] INFO: Processing chef_gem[fog] action install (ebs4000::update_volumes line 23)
[Thu, 14 Mar 2013 13:04:52 +0000] ERROR: Running exception handlers
[Thu, 14 Mar 2013 13:04:52 +0000] FATAL: Saving node information to /var/cache/chef/failed-run-data.json
[Thu, 14 Mar 2013 13:04:52 +0000] ERROR: Exception handlers complete
[Thu, 14 Mar 2013 13:04:52 +0000] ERROR: Gem::Installer::ExtensionBuildError: chef_gem[fog] (cookbook::recipe line 4) had an error: Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/usr/bin/ruby1.8 extconf.rb
checking for libxml/parser.h... no
-----
libxml2 is missing. please visit http://nokogiri.org/tutorials/installing_nokogiri.html for help with installing dependencies.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
...
--with-pkg-config
--without-pkg-config
Gem files will remain installed in /var/lib/gems/1.8/gems/nokogiri-1.5.6 for inspection.
Results logged to /var/lib/gems/1.8/gems/nokogiri-1.5.6/ext/nokogiri/gem_make.out
I am aware of the notifies attribute of the chef resources but still can get this run properly.
So how can I actually force the execution order to first install the native packages and then the gem in the same run.
Note: Manual installation of the packages is not an option, since we want that to be fully automated for new nodes.
Why not try installing the dependencies at the start of the resource collection phase, as mentioned here: OPSCODE wiki: Run Resources from the Resource Collection
So your recipe would look like:
xsltdev = package "libxslt-dev" do
action :nothing
end
xmldev = package "libxml2-dev" do
action :nothing
end
xsltdev.run_action(:install)
xmldev.run_action(:install)
chef_gem "fog"