私はChefを初めて使用するので、私の質問はやや情報が不足しているように見えるかもしれません.
Chef サーバー (v11.4) を実行しています。私の Chef ワークステーションは、MRI Ruby 1.9.3 と gems knife-ec2 (v0.6.4) および knife-windows (v0.5.12) を実行しています。
Ruby がインストールされた Amazon AWS で Windows 2008r2 サーバーをセットアップしようとしています。(コマンド ライン ウィンドウの Windows ボックスで) 次のコマンドを実行することで、これをサイレント モードで無人で手動で実行できます。
C:\> C:/rubyinstaller-1.9.3-p429.exe /silent /dir='c:\Ruby193' /tasks=’modpath’
これを自動化するためにChefを使用したいと思います。
次のレシピフラグメントで 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
レシピを Chef サーバーにアップロードし、次のコマンドを実行して Chef の実行をトリガーしました。
> 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 がハングし、インストールがどこにも進みません。WindowsサーバーにRDPしたとき、rubyinstaller-1.9.3-p429.exeファイルがc:にあったので、これを知っています。そして、Ruby インストーラーが開始されたというメッセージがナイフ ワークステーションに表示されたため、インストーラーがハングしたことはわかっていましたが、最終的にはタイムアウトしました。また、Windows サーバーには何もインストールされていません。
次に、windows_batch フラグメントを windows_package に置き換えてみました。
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 がインストールされていません。
これにより、いくつかの疑問が生じます。
- Ruby をサイレント インストール、無人インストール、Chef を使用した自動インストールを妨げている、windows_batch または windows_package 構文の何かが欠けていますか?
- Rubyをインストールするためにコマンドラインで実行されているコマンドを正確に確認する方法はありますか? 例: ログ ファイル、詳細モードなど?
- Chef と rubyinstaller を使用して Ruby を Windows にインストールした人はいますか? レシピを教えてもらえますか?