厨师:没有名为“httpd”的公式

时间:2015-12-12 13:09:24

标签: chef chef-recipe cookbook

我正在学习厨师,在尝试安装httpd包时我遇到了困难。我有一个简单的方法在Mac OS上安装httpd包。我安装了ChefDK。

webserver.rb

package 'httpd' 

当我运行chef-apply webserver.rb时,它会抛出错误:

    Mixlib::ShellOut::ShellCommandFailed
------------------------------------
Expected process to exit with [0], but received '1'
---- Begin output of brew info --json=v1 httpd ----
STDOUT: 
STDERR: Error: No available formula with the name "httpd"
---- End output of brew info --json=v1 httpd ----
Ran brew info --json=v1 httpd returned 1

Resource Declaration:
---------------------
# In webserver.rb

  1: package 'httpd'

Compiled Resource:
------------------
# Declared in webserver.rb:1:in `run_chef_recipe'

homebrew_package("httpd") do
  action [:install]
  retries 0
  retry_delay 2
  default_guard_interpreter :default
  package_name "httpd"
  declared_type :package
  cookbook_name "(chef-apply cookbook)"
  recipe_name "(chef-apply recipe)"
end

有人可以告诉我在这里错过了什么。感谢。

1 个答案:

答案 0 :(得分:5)

让我们来看看你正在做的每一件事:

chef-apply获取单个Chef配方并在本地运行它。这意味着发生的一切都在你的Mac笔记本电脑上。

此配方使用package资源来安装名为'httpd'的内容。 Chef包括一堆package资源的提供者,所以在Ubuntu上它使用APT,在CentOS上它使用YUM,而在OS X上它使用Homebrew(即brew install)。

在安装软件包之前,Chef会检查它是否已经安装并收集软件包上的其他详细信息。对于Homebrew,它使用brew info。因此,您最终得到命令brew info httpd,提供或获取JSON输出格式参数以使其更容易解析。 Homebrew没有名为'httpd'的包(公式),所以它返回一个错误,然后Chef会抬起链。

在更深层次上,Homebrew不打包Apache(我认为你试图安装),因为它默认出现在OS X中。即使它确实如此,大多数打包系统都称它为apache2。只有RHEL / CentOS衍生产品仍会调用包httpd