我正在学习厨师,在尝试安装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
有人可以告诉我在这里错过了什么。感谢。
答案 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
。