我正在尝试通过厨师在CentOS VM上设置cassandra,但失败并显示以下错误。我尝试了clearing out bundle caches无济于事。该食谱可以在另一台机器上工作,但是主要的区别是我事先在那台机器上运行了其他食谱,所以我怀疑我缺少厨师依赖项(这就是为什么我没有尝试直接修复软件包的原因)。我对Ruby还是非常陌生的,如果这是一个明显的问题,对不起。

机器配置

  • 厨师:11.4.0
  • ruby 1.9.3p286(2012-10-12修订版37165)[x86_64-linux]
  • gem 1.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

  • 错误讯息
    厨师客户端输出:


     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 `<main>'
    
    
        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 `<main>'
    
    
        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 `<main>'</pre>
    
    
        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
    

    最佳答案



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

    您可以尝试在CentOS上安装类似的软件包,然后重新运行Chef吗?

    10-08 04:43