厨师执行过程中安装本地扩展包后,宝石
问题描述:
我试图安装雾灯的宝石在厨师的食谱,但这样的创业板安装失败厨师执行过程中安装本地扩展包后,宝石
package "libxslt-dev"
package "libxml2-dev"
chef_gem "fog"
出现这种情况的宝石安装正在安装本地软件包前是输出
[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
我知道厨师的资源的通知属性,但仍可以正常得到这个运行。
那么我怎么能真正强制执行命令先安装本地软件包,然后在同一运行中安装gem。
注意:手动安装软件包不是一种选择,因为我们希望对新节点进行完全自动化。
答
为什么不尝试在资源收集阶段的开始安装的依赖关系,这里提到:OPSCODE wiki: Run Resources from the Resource Collection
所以你的食谱看起来像:
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"
答
好像你已经做那。食谱按顺序执行,所以你应该很好。
在您的日志中,您只显示厨师尝试安装fog
时发生的情况。你是否证实lib包的安装在这之前不会出现?你可能已经弄错了包名,或者你以前需要更新包管理器的缓存。
+0
我不包括在此之前,日志,因为包命令尚未运行。对我来说,它看起来像是在资源收集阶段安装了gem,而在执行阶段安装了软件包之后,所以这就是问题出现在恕我直言的原因。 – vervas 2013-03-15 14:34:34
谢谢,这是诀窍! – vervas 2013-03-15 14:44:03
你也可以安装一个软件包列表: '%w {libxslt-dev libxml2-dev} .each do | pkg | P =包pkg做 行动:什么 结束 p.run_action(:安装) end' – Brett 2013-07-29 10:34:19