Шеф-повар: узел Windows 2008r2: невозможно установить Ruby с rubyinstaller

Вопрос:

Я новичок в поваре, поэтому мой вопрос может показаться несколько неосведомленным.

У меня работает сервер Chef (v11.4). На моей рабочей станции Chef работает MRI Ruby 1.9.3 и gems knife-ec2 (v0.6.4) и ножевые окна (v0.5.12).

Я пытаюсь настроить сервер Windows 2008r2 на Amazon AWS с установленным Ruby. Я могу сделать это тихо, без присмотра и вручную, запустив (в окне 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:

> 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’ed на сервер Windows, файл 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 не установлен.

Это приводит к нескольким вопросам:

  1. Я что-то упустил в синтаксисе windows_batch или windows_package, который мешает мне вручную, без присмотра, автоматически использовать Chevrolet Ruby?
  2. Есть ли способ увидеть, какая именно команда запускается в командной строке для установки Ruby? например, файлы журналов, подробные режимы и т.д.?
  3. Кто-нибудь установил Ruby на Windows с помощью Chef и rubyinstaller, и можете ли вы предоставить рецепт?
Лучший ответ:

Эта проблема была решена с помощью двух очень тонких настроек:

  1. Первая настройка была с названием. Когда вы устанавливаете Ruby вручную с помощью установщика, вам нужно перейти в панель управления Windows и найти программу Ruby для ее удаления. Когда вы его найдете, вы увидите очень специфическое имя для Ruby в списке установленных программ. (Это «Отображаемое имя», и оно также находится в реестре Windows для этой части установленного программного обеспечения). Я видел «Ruby 1.9.3-p448». Это то, что нужно делать после windows_package. И использование этого «Display Name» гарантирует, что если Chef снова запустится, он не будет повторно устанавливать тот же Ruby, если он уже присутствует.
  2. Вторая настройка заключалась в цитировании строк Ruby. Двойные кавычки создают проблемы, особенно если вы не полностью понимаете, какие символы должны быть экранированы. Когда вы используете одинарные кавычки, проблемы исчезают, потому что одинарное цитирование является очень буквальным.

Таким образом, это то, что рабочий код ресурса/поставщика Chef, который молча устанавливает 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 за помощь в этом.

Ответ №1

Вам нужно избегать «в ваших вариантах для windows_package

Текущий:

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

Сбежал

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

В противном случае он зависает, пытаясь разобрать параметры.

Оцените статью
TechArks.Ru
Добавить комментарий