无法在 Chef 客户端(节点)上安装 httpd 服务

Unable to install httpd service on chef client(node)

我是厨师新手,正在阅读 "O'Riely" 的 "Learning Chef" 书来学习厨师基础知识。 在第 07 章中,他们描述了使用 cookbook 从 Chef 主机在 Chef 客户端(节点)上安装 httpd 服务。

这是我的 .kitchen.yaml 文件的样子:

 ---
driver:
  name: vagrant

provisioner:
  name: chef_zero

platforms:
  - name: centos_apache
    driver:
     box: learningchef/centos65
     boxurl: learningchef/centos65

suites:
  - name: default
    run_list:
      - recipe[my_apache::default]
    attributes:

安装 httpd 服务的方法如下:

#
# Cookbook Name:: my_apache
# Recipe:: default
#
# Copyright (c) 2015 The Authors, All Rights Reserved.
#

yum_package 'httpd' do
  source "/home/vipul/Downloads/httpd-2.2.15-39.el6.centos.x86_64.rpm"
  action :install
end

这是我执行命令后得到的日志"kitchen converge"

-----> Starting Kitchen (v1.4.0)
-----> Converging <default-centos-apache>...
       Preparing files for transfer
       Preparing dna.json
       Preparing current project directory as a cookbook
       Removing non-cookbook files before transfer
       Preparing validation.pem
       Preparing client.rb
-----> Chef Omnibus installation detected (install only if missing)
       Transferring files to <default-centos-apache>
       Starting Chef Client, version 12.4.0
       [2015-07-08T12:56:06+00:00] WARN: Child with name 'dna.json' found in multiple directories: /tmp/kitchen/dna.json and /tmp/kitchen/dna.json
       resolving cookbooks for run list: ["my_apache::default"]
       Synchronizing Cookbooks:
         - my_apache
       Compiling Cookbooks...
       Converging 1 resources
       Recipe: my_apache::default


           ================================================================================
           Error executing action `install` on resource 'yum_package[httpd]'
           ================================================================================

           Mixlib::ShellOut::ShellCommandFailed
           ------------------------------------
           Expected process to exit with [0], but received '1'
           ---- Begin output of /usr/bin/python /opt/chef/embedded/apps/chef/lib/chef/provider/package/yum-dump.py --options --installed-provides --yum-lock-timeout 30 ----
           STDOUT: [option installonlypkgs] kernel kernel-bigmem installonlypkg(kernel-module) installonlypkg(vm) kernel-enterprise kernel-smp kernel-debug kernel-unsupported kernel-source kernel-devel kernel-PAE kernel-PAE-debug
           Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was
           14: PYCURL ERROR 7 - "Failed to connect to 2a02:2498:1:3d:5054:ff:fed3:e91a: Network is unreachable"
           STDERR: yum-dump Repository Error: Cannot find a valid baseurl for repo: base
           ---- End output of /usr/bin/python /opt/chef/embedded/apps/chef/lib/chef/provider/package/yum-dump.py --options --installed-provides --yum-lock-timeout 30 ----
           Ran /usr/bin/python /opt/chef/embedded/apps/chef/lib/chef/provider/package/yum-dump.py --options --installed-provides --yum-lock-timeout 30 returned 1

           Resource Declaration:
           ---------------------
           # In /tmp/kitchen/cache/cookbooks/my_apache/recipes/default.rb

             8: yum_package 'httpd' do
             9:   source "/home/vipul/Downloads/httpd-2.2.15-39.el6.centos.x86_64.rpm"
            10:   action :install
            11: end

           Compiled Resource:
           ------------------
           # Declared in /tmp/kitchen/cache/cookbooks/my_apache/recipes/default.rb:8:in `from_file'

           yum_package("httpd") do
             action :install
             retries 0
             retry_delay 2
             default_guard_interpreter :default
             package_name "httpd"
             source "/home/vipul/Downloads/httpd-2.2.15-39.el6.centos.x86_64.rpm"
             flush_cache {:before=>false, :after=>false}
             declared_type :yum_package
             cookbook_name "my_apache"
             recipe_name "default"
           end


       Running handlers:
       [2015-07-08T12:56:14+00:00] ERROR: Running exception handlers
       Running handlers complete
       [2015-07-08T12:56:14+00:00] ERROR: Exception handlers complete
       Chef Client failed. 0 resources updated in 11.596431753 seconds
       [2015-07-08T12:56:14+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
       [2015-07-08T12:56:14+00:00] ERROR: yum_package[httpd] (my_apache::default line 8) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
       ---- Begin output of /usr/bin/python /opt/chef/embedded/apps/chef/lib/chef/provider/package/yum-dump.py --options --installed-provides --yum-lock-timeout 30 ----
       STDOUT: [option installonlypkgs] kernel kernel-bigmem installonlypkg(kernel-module) installonlypkg(vm) kernel-enterprise kernel-smp kernel-debug kernel-unsupported kernel-source kernel-devel kernel-PAE kernel-PAE-debug
       Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=x86_64&repo=os error was
       14: PYCURL ERROR 7 - "Failed to connect to 2a02:2498:1:3d:5054:ff:fed3:e91a: Network is unreachable"
       STDERR: yum-dump Repository Error: Cannot find a valid baseurl for repo: base
       ---- End output of /usr/bin/python /opt/chef/embedded/apps/chef/lib/chef/provider/package/yum-dump.py --options --installed-provides --yum-lock-timeout 30 ----
       Ran /usr/bin/python /opt/chef/embedded/apps/chef/lib/chef/provider/package/yum-dump.py --options --installed-provides --yum-lock-timeout 30 returned 1
       [2015-07-08T12:56:14+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
>>>>>> Converge failed on instance <default-centos-apache>.
>>>>>> Please see .kitchen/logs/default-centos-apache.log for more details
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: SSH exited (1) for command: [sh -c '

sudo -E /opt/chef/bin/chef-client --local-mode --config /tmp/kitchen/client.rb --log_level auto --force-formatter --no-color --json-attributes /tmp/kitchen/dna.json --chef-zero-port 8889
']
>>>>>> ----------------------

我想使用本地rpm 包安装httpd 服务。 Chef 客户端已安装在虚拟机上。 我尝试了各种步骤,但总是得到相同的输出。


更新:所以我在我的主机和客户端都进行了 yum 更新。 在那之后,输出日志发生了变化。我说它无法在定义的源中找到包,而它存在于那里。请建议::

-----> Starting Kitchen (v1.4.0)
-----> Converging <default-centos-apache>...
       Preparing files for transfer
       Preparing dna.json
       Preparing current project directory as a cookbook
       Removing non-cookbook files before transfer
       Preparing validation.pem
       Preparing client.rb
-----> Chef Omnibus installation detected (install only if missing)
       Transferring files to <default-centos-apache>
       Starting Chef Client, version 12.4.0
       [2015-07-09T14:16:57+00:00] WARN: Child with name 'dna.json' found in multiple directories: /tmp/kitchen/dna.json and /tmp/kitchen/dna.json
       resolving cookbooks for run list: ["my_apache::default"]
       Synchronizing Cookbooks:
         - my_apache
       Compiling Cookbooks...
       Converging 1 resources
       Recipe: my_apache::default


           ================================================================================
           Error executing action `install` on resource 'yum_package[httpd]'
           ================================================================================

           Chef::Exceptions::Package
           -------------------------
           Package httpd not found: /home/vipul/Downloads/httpd-2.2.15-39.el6.centos.x86_64.rpm

           Resource Declaration:
           ---------------------
           # In /tmp/kitchen/cache/cookbooks/my_apache/recipes/default.rb

             8: package "httpd" do
             9:   source "/home/vipul/Downloads/httpd-2.2.15-39.el6.centos.x86_64.rpm"
            10:   action :install
            11: end

           Compiled Resource:
           ------------------
           # Declared in /tmp/kitchen/cache/cookbooks/my_apache/recipes/default.rb:8:in `from_file'

           yum_package("httpd") do
             action :install
             retries 0
             retry_delay 2
             default_guard_interpreter :default
             package_name "httpd"
             source "/home/vipul/Downloads/httpd-2.2.15-39.el6.centos.x86_64.rpm"
             flush_cache {:before=>false, :after=>false}
             declared_type :package
             cookbook_name "my_apache"
             recipe_name "default"
           end


       Running handlers:
       [2015-07-09T14:17:01+00:00] ERROR: Running exception handlers
       Running handlers complete
       [2015-07-09T14:17:01+00:00] ERROR: Exception handlers complete
       Chef Client failed. 0 resources updated in 6.822340816 seconds
       [2015-07-09T14:17:01+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
       [2015-07-09T14:17:01+00:00] ERROR: yum_package[httpd] (my_apache::default line 8) had an error: Chef::Exceptions::Package: Package httpd not found: /home/vipul/Downloads/httpd-2.2.15-39.el6.centos.x86_64.rpm
       [2015-07-09T14:17:01+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
>>>>>> Converge failed on instance <default-centos-apache>.
>>>>>> Please see .kitchen/logs/default-centos-apache.log for more details
>>>>>> ------Exception-------
>>>>>> Class: Kitchen::ActionFailed
>>>>>> Message: SSH exited (1) for command: [sh -c '

sudo -E /opt/chef/bin/chef-client --local-mode --config /tmp/kitchen/client.rb --log_level auto --force-formatter --no-color --json-attributes /tmp/kitchen/dna.json --chef-zero-port 8889
']
>>>>>> ----------------------

如果您无法解决 proxy/network 问题,不妨尝试按照此处列出的步骤操作。 http://xmodulo.com/how-to-fix-yum-errors-on-centos-rhel-or-fedora.html

此致,

问题的答案在马克的问题评论中。 因此就把它贴在这里。

终端代理还不够。 Kitchen 是虚拟机中的 运行 厨师客户端。参见:docs.chef.io/config_yml_kitchen.html#work-with-proxies