2015-12-12 18 views
2

我正在學習廚師,並且在嘗試安裝httpd軟件包時卡在這裏。我有一個簡單的配方在Mac OS上安裝httpd軟件包。我安裝了ChefDK。廚師:沒有可用的名稱爲「httpd」的公式

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 

有人能告訴我什麼,我錯過了這裏。謝謝。

回答

5

因此,讓我們走過每一件你在做什麼:

chef-apply接受一個廚師配方和本地運行它。這意味着所發生的一切都在您的Mac筆記本電腦上。

此配方使用package資源來安裝一個名爲'httpd'的東西。 Chef包括一些package資源的提供者,所以在Ubuntu上使用APT,在CentOS上使用YUM,在OS X上使用Homebrew(即brew install)。

在安裝軟件包之前,Chef會檢查它是否已經安裝並收集軟件包上的其他詳細信息。對於家釀,它使用brew info這個。因此,最終使用命令brew info httpd,給出或採用JSON輸出格式參數以使其更易於解析。 Homebrew沒有名爲'httpd'的包(公式),所以它會返回一個錯誤,然後Chef再提起鏈。

在更深層次上,Homebrew不會打包Apache(我假設您正在嘗試安裝),因爲它默認在OS X中。即使這樣做,大多數打包系統都會將其命名爲apache2。只有RHEL/CentOS衍生產品仍然會調用httpd包。

+0

謝謝@coderanger,廚師教程不清楚。我認爲這是抽象的所有平臺。 – imechemi

+0

抽象級別只是使用哪個底層包系統,而不是一般包的名稱/用法。有一個可以使用的'httpd'社區菜譜,它提供了一個更完整的抽象,用於「在我的系統上安裝Apache2」。 – coderanger

相關問題