厨师rubygem安装程序失败

我正在尝试通过厨师在CentOS VM上设置cassandra,但它失败并出现以下错误。 我已经尝试清除捆绑缓存无济于事。 配方适用于另一台机器,但关键的区别是我事先在那台机器上运行了其他配方,所以我怀疑我缺少一个厨师依赖(这就是为什么我没有尝试直接修复包)。 如果这是一个显而易见的问题,我对ruby也非常陌生。

机器配置

  • 厨师:11.4.0
  • ruby 1.9.3p286(2012-10-12修订版37165)[x86_64-linux]
  • gem1.8.24
  • Linux somehost 2.6.32-276.el6.x86_64#1 SMP Tue May 29 17:38:19 EDT 2012 x86_64 x86_64 x86_64 GNU / Linux

错误消息chef-client输出:

 启动Chef Client,版本11.4.0
    解决运行清单的食谱:[“chef-client”,“cassandra”]
    同步Cookbook:
       -  minitest-handler
       -  chef_handler
       - 百胜
       -  cron
       -  selinux
       -  sysctl
       -  openssh
       -  iptables
       - 厨师 - 客户
       - 卡桑德拉
       -  apt
       -  java
       - 窗户
       -  aws
    编辑Cookbook ......
    食谱:cassandra ::包
       * chef_gem [cassandra-cql]动作安装
     ================================================== ==============================
    在资源'chef_gem [cassandra-cql]'上执行动作`install`时出错
     ================================================== ============================== 
Gem::Installer::ExtensionBuildError ----------------------------------- ERROR: Failed to build gem native extension. /opt/chef/embedded/bin/ruby extconf.rb extconf.rb:25: Use RbConfig instead of obsolete and deprecated Config. checking for strlcpy() in string.h... *** 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 --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/opt/chef/embedded/bin/ruby /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first. from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:461:in `try_link0' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:476:in `try_link' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:619:in `try_func' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:894:in `block in have_func' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:254:in `open' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:254:in `open' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:280:in `postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:893:in `have_func' from extconf.rb:29:in `' Gem files will remain installed in /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/thrift-0.9.1 for inspection. Results logged to /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/thrift-0.9.1/ext/gem_make.out Cookbook Trace: --------------- /var/chef/cache/cookbooks/cassandra/recipes/packages.rb:30:in `block in from_file' /var/chef/cache/cookbooks/cassandra/recipes/packages.rb:29:in `each' /var/chef/cache/cookbooks/cassandra/recipes/packages.rb:29:in `from_file' /var/chef/cache/cookbooks/cassandra/recipes/default.rb:23:in `from_file' Resource Declaration: --------------------- # In /var/chef/cache/cookbooks/cassandra/recipes/packages.rb 30: chef_gem pkg do 31: action :install 32: version attrs["version"] if attrs["version"] 33: end 34: end Compiled Resource: ------------------ # Declared in /var/chef/cache/cookbooks/cassandra/recipes/packages.rb:30:in `block in from_file' chef_gem("cassandra-cql") do provider Chef::Provider::Package::Rubygems action [:install] retries 0 retry_delay 2 package_name "cassandra-cql" version "1.1.4" cookbook_name "cassandra" recipe_name "packages" end ================================================================================ Recipe Compile Error in /var/chef/cache/cookbooks/cassandra/recipes/default.rb ================================================================================ Gem::Installer::ExtensionBuildError ----------------------------------- chef_gem[cassandra-cql] (cassandra::packages line 30) had an error: Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /opt/chef/embedded/bin/ruby extconf.rb extconf.rb:25: Use RbConfig instead of obsolete and deprecated Config. checking for strlcpy() in string.h... *** 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 --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/opt/chef/embedded/bin/ruby /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first. from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:461:in `try_link0' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:476:in `try_link' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:619:in `try_func' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:894:in `block in have_func' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:254:in `open' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:254:in `open' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:280:in `postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:893:in `have_func' from extconf.rb:29:in `' Gem files will remain installed in /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/thrift-0.9.1 for inspection. Results logged to /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/thrift-0.9.1/ext/gem_make.out Cookbook Trace: --------------- /var/chef/cache/cookbooks/cassandra/recipes/packages.rb:30:in `block in from_file' /var/chef/cache/cookbooks/cassandra/recipes/packages.rb:29:in `each' /var/chef/cache/cookbooks/cassandra/recipes/packages.rb:29:in `from_file' /var/chef/cache/cookbooks/cassandra/recipes/default.rb:23:in `from_file' Relevant File Content: ---------------------- /var/chef/cache/cookbooks/cassandra/recipes/packages.rb: 23: package pkg do 24: action :install 25: version attrs["version"] if attrs["version"] 26: end 27: end 28: 29: node["cassandra"]["chef_gems"].each do |pkg, attrs| 30>> chef_gem pkg do 31: action :install 32: version attrs["version"] if attrs["version"] 33: end 34: end 35: 36: # Some distributed packages of Cassandra start the service in their 37: # postinstall; keep them all equal and a restart can be done after the configs 38: # are written on the first run. Added difficulty: they also come with init 39: # scripts that always exit 0. [2013-10-11T13:13:42-04:00] ERROR: Running exception handlers [2013-10-11T13:13:42-04:00] FATAL: Saving node information to /var/chef/cache/failed-run-data.json [2013-10-11T13:13:42-04:00] ERROR: Exception handlers complete Chef Client failed. 0 resources updated [2013-10-11T13:13:42-04:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out [2013-10-11T13:13:42-04:00] FATAL: Gem::Installer::ExtensionBuildError: chef_gem[cassandra-cql] (cassandra::packages line 30) had an error: Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /opt/chef/embedded/bin/ruby extconf.rb extconf.rb:25: Use RbConfig instead of obsolete and deprecated Config. checking for strlcpy() in string.h... *** 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 --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/opt/chef/embedded/bin/ruby /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an executable file. (RuntimeError) You have to install development tools first. from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:461:in `try_link0' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:476:in `try_link' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:619:in `try_func' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:894:in `block in have_func' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:790:in `block in checking_for' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:284:in `block (2 levels) in postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:254:in `open' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:284:in `block in postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:254:in `open' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:280:in `postpone' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:789:in `checking_for' from /opt/chef/embedded/lib/ruby/1.9.1/mkmf.rb:893:in `have_func' from extconf.rb:29:in `'

Gem files will remain installed in /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/thrift-0.9.1 for inspection. Results logged to /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/thrift-0.9.1/ext/gem_make.out

编译器无法生成可执行文件。 (RuntimeError)
您必须首先安装开发工具。

以上错误让我相信您需要在CentOS上安装ruby-devgcc软件包。 在我的ubuntu 10.04上,我安装了以下软件包: ruby1.9.1-devgcc-4.4

您可以尝试在CentOS上安装类似的软件包,然后重新运行大厨。