【问题标题】:Installing a gem after native extension packages during chef execution在厨师执行期间在本机扩展包之后安装gem
【发布时间】:2013-03-02 20:54:37
【问题描述】:

我正在尝试在厨师食谱中安装雾 gem,尽管 gem 安装发生在安装本机软件包之前,因此 gem 安装失败

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。

注意:手动安装包不是一个选项,因为我们希望新节点完全自动化。

【问题讨论】:

    标签: ruby gem chef-infra recipe cookbook


    【解决方案1】:

    为什么不尝试在资源收集阶段开始时安装依赖项,如下所述: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"
    

    【讨论】:

    • 你也可以安装一个包列表:%w{libxslt-dev libxml2-dev}.each do |pkg| p = package pkg do action :nothing end p.run_action(:install) end
    【解决方案2】:

    看来您已经在这样做了。菜谱是按顺序执行的,所以你应该很好。

    在您的日志中,您仅显示从 Chef 尝试安装 fog 时发生的情况。您是否验证过 lib 包的安装在此之前没有出现?你可能把包名弄错了,或者你之前需要更新包管理器的缓存。

    【讨论】:

    • 我没有在此之前包含日志,因为包命令尚未运行。对我来说,看起来 gem 是在资源收集阶段安装的,而包安装是在之后的执行阶段,所以这就是问题发生的原因,恕我直言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多