2013-07-05 75 views
1

我是Chef的新手,所以我的問題可能看起來有些不瞭解。廚師:Windows 2008r2節點:無法使用rubyinstaller安裝Ruby

我正在運行Chef服務器(v11.4)。我的廚師工作站運行MRI Ruby 1.9.3和gems knife-ec2(v0.6.4)和刀窗(v0.5.12)。

我想在安裝了Ruby的Amazon AWS上設置Windows 2008r2服務器。我可以通過運行手動爲此默默,無人值守,並(在命令行窗口中的Windows中):

C:\> C:/rubyinstaller-1.9.3-p429.exe /silent /dir='c:\Ruby193' /tasks=’modpath’ 

我想用廚師來自動完成這個。

我在下面的食譜片段使用windows_batch嘗試:

remote_file File.join("C:","rubyinstaller-1.9.3-p429.exe") do 
    source "http://mybucketxxx.s3-website-us-east-1.amazonaws.com/rubyinstaller-1.9.3-p429.exe" 
    not_if {::File.exists?(File.join("c:","rubyinstaller-1.9.3-p429.exe"))} 
end 

windows_batch "install_ruby" do 
    cwd "C:/" 
    code "C:/rubyinstaller-1.9.3-p429.exe /silent /dir=\'c:/Ruby193' /tasks=’modpath’" 
    only_if {::File.exists?(File.join("c:","rubyinstaller-1.9.3-p429.exe"))} 
    not_if {::File.exists?(File.join("c:", "Ruby193", "bin", "ruby.exe"))} 
end 

我上傳的配方廚師服務器,然後運行以下觸發廚師運行:

> knife winrm 'ec2-50-xx-xx-124.amazonaws.com' 'chef-client -c c:/chef/client.rb' -m -x Administrator -P 'password' 

在這種情況下,remote_file可以工作,並且ruby安裝程序會被下載。但是,windows_batch掛起並且安裝無處不在。我知道這一點,因爲當我將RDP裝入Windows服務器時,rubyinstaller-1.9.3-p429.exe文件就位於c :.而且我知道安裝程序會掛起,因爲我在刀片工作站上收到一條消息,說Ruby安裝程序已啓動,但最終超時。並且Windows服務器上沒有安裝任何軟件。

然後我試着用windows_package替換windows_batch片段。

windows_package "rubyinstaller-1.9.3-p429" do 
    #source "C:/rubyinstaller-1.9.3-p429.exe" 
    source "http://mybucketxxx.s3-website-us-east-1.amazonaws.com/rubyinstaller-1.9.3-p429.exe" 
    options "/silent /dir='C:/Ruby193' /tasks='modpath'" 
    installer_type :inno 
    action :install 
end 

我試圖部上面註釋本地源選項,然後用註釋掉遠程源選項再次嘗試。兩人都沒有工作。 Ruby安裝程序掛起。這是最後幾行的樣子:

ec2-50-xx-xx-124.amazonaws.com [2013-07-05T13:00:21+00:00] INFO: Processing windows_package[rubyinstaller-1.9.3-p429] action install (myrecipe::default line 53) 
DEBUG: :relay_output_from_backend => ["ec2-50-xx-xx-124.amazonaws.com", "[2013-07-05T13:00:21+00:00] INFO: Installing windows_package[rubyinstaller-1.9.3-p429] version latest\r\n"] 
ec2-50-xx-xx-124.amazonaws.com [2013-07-05T13:00:21+00:00] INFO: Installing windows_package[rubyinstaller-1.9.3-p429] version latest 
DEBUG: :relay_output_from_backend => ["ec2-50-xx-xx-124.amazonaws.com", "[2013-07-05T13:00:21+00:00] INFO: Starting installation...this could take awhile.\r\n"] 
ec2-50-xx-xx-124.amazonaws.com [2013-07-05T13:00:21+00:00] INFO: Starting installation...this could take awhile. 

它一直保持,直到請求超時。 Ruby未安裝。

這導致幾個問題:

  1. 我缺少的windows_batch或windows_package語法障礙,使得我從安裝Ruby默默,無人值守,自動用廚師的東西嗎?
  2. 有沒有一種方法可以查看命令行上正在運行哪個命令來安裝Ruby?例如日誌文件,詳細模式等?
  3. 是否有人使用Chef和rubyinstaller在Windows上安裝了Ruby,並且可以提供配方?

回答

1

這個問題解決了兩個非常微妙的調整:

  1. 第一TWEAK與標題。當您使用安裝程序手動安裝Ruby時,必須轉到Windows控制面板,然後找到要卸載它的Ruby程序。當你找到它的時候,你會在已安裝的程序列表中看到Ruby的一個非常具體的名字。 (這是「顯示名稱」,它也在Windows註冊表中用於該安裝軟件)。我看到「Ruby 1.9.3-p448」。這是windows_package之後的事情。並且使用「顯示名稱」可以確保如果Chef再次運行,它將不會重新安裝相同的Ruby(如果它已經存在)。
  2. 第二次調整是用Ruby字符串的引用。雙引號會產生問題,特別是如果您不完全理解哪些字符必須轉義。當你使用單引號時,問題會消失,因爲單引號是非常直接的。

因此,這是什麼工作的廚師資源/供應商代碼,使用Ruby安裝程序靜默安裝的Ruby,看起來像:

windows_package "Ruby 1.9.3-p448" do 
    source File.join("C:", "rubyinstaller-1.9.3-p448.exe") 
    options '/dir="C:/Ruby193" /tasks="modpath"' 
    installer_type :inno 
    action :install 
end 

非常感謝來自Opscode公司伊薩法爾尼克查找有關此一扶。

0

你需要逃避'在你的選項爲windows_package

電流:

options "/silent /dir='C:/Ruby193' /tasks='modpath'" 

逃逸

options "/silent /dir=\'C:/Ruby193\' /tasks=\'modpath\'" 

否則它掛試圖解析選項。