Chef-Client пытается установить Java в Windows, но она уже установлена

Я новичок в Chef и хочу установить с его помощью Java на машину с Windows.

Существует готовая к использованию поваренная книга Java, которую я использую.

Поэтому я написал кулинарную книгу-оболочку, как указано в еще один вопрос здесь.

Я добавил зависимости java-cookbook и использовал следующие атрибуты в

атрибут /java.rb

normal['java']['jdk_version'] = '7'
normal['java']['install_flavor'] = 'windows'
normal['java']['windows']['url'] = 'http://myurl/java/jdk-7u75-windows-x64.exe'

Таким образом, после загрузки поваренной книги и добавления ее в список выполнения Java устанавливается и становится доступной. Но всякий раз, когда я запускаю шеф-клиент, он снова пытается установить JDK из файла.

Итак, мой вопрос:

Мне не хватает какой-то конфигурации для проверки уже установленной версии? Насколько я понимаю, это должно быть сделано в данной кулинарной книге, но я не уверен, что это .

Я также пытался объявить имя пакета, но это ничего не меняет.

normal['java']['windows']['package_name'] = 'OracleJDK7u75'

Вот (соответствующий) вывод после запуска клиента шеф-повара с ножом:

WindowsPC [2015-04-10T14:38:06+02:00] INFO: Processing remote_file[c:/chef/cache/jdk-7u75-windows-x64.exe]action create (java::windows line 45)
WindowsPC [2015-04-10T14:38:08+02:00] INFO: Processing windows_package[OracleJDK7u75] action install (java::windows line 71)
WindowsPC [2015-04-10T14:38:09+02:00] INFO: Installing windows_package[OracleJDK7u75] version latest
WindowsPC [2015-04-10T14:38:09+02:00] INFO: Starting installation...this could take awhile.
WindowsPC
WindowsPC ================================================================================
WindowsPC Error executing action `install` on resource 'windows_package[OracleJDK7u75]'
WindowsPC ================================================================================
WindowsPC
WindowsPC Mixlib::ShellOut::ShellCommandFailed
WindowsPC ------------------------------------
WindowsPC Expected process to exit with [0, 42, 127], but received '1603'
WindowsPC ---- Begin output of start "" /wait "c:\chef\cache\jdk-7u75-windows-x64.exe" /s  & exit %%ERRORLEVEL%% ----
WindowsPC STDOUT:
WindowsPC STDERR:
WindowsPC ---- End output of start "" /wait "c:\chef\cache\jdk-7u75-windows-x64.exe" /s  & exit %%ERRORLEVEL%% ----
WindowsPC Ran start "" /wait "c:\chef\cache\jdk-7u75-windows-x64.exe" /s  & exit %%ERRORLEVEL%% returned 1603
WindowsPC
WindowsPC Cookbook Trace:
WindowsPC ---------------
WindowsPC c:/chef/cache/cookbooks/windows/libraries/windows_package.rb:109:in `install_package'
WindowsPC c:/chef/cache/cookbooks/windows/libraries/windows_package.rb:31:in `block in <class:WindowsCookbookPackage>'
WindowsPC
WindowsPC Resource Declaration:
WindowsPC ---------------------
WindowsPC # In c:/chef/cache/cookbooks/java/recipes/windows.rb
WindowsPC
WindowsPC  71: windows_package node['java']['windows']['package_name'] do
WindowsPC  72:   source cache_file_path
WindowsPC  73:   checksum node['java']['windows']['checksum']
WindowsPC  74:   action :install
WindowsPC  75:   installer_type :custom
WindowsPC  76:   options "/s #{additional_options}"
WindowsPC  77: end
WindowsPC
WindowsPC Compiled Resource:
WindowsPC ------------------
WindowsPC # Declared in c:/chef/cache/cookbooks/java/recipes/windows.rb:71:in `from_file'
WindowsPC
WindowsPC windows_cookbook_package("OracleJDK7u75") do
WindowsPC   provider Chef::Provider::WindowsCookbookPackage
WindowsPC   action [:install]
WindowsPC   retries 0
WindowsPC   retry_delay 2
WindowsPC   default_guard_interpreter :default
WindowsPC   declared_type :windows_package
WindowsPC   cookbook_name "java"
WindowsPC   recipe_name "windows"
WindowsPC   source "c:/chef/cache/jdk-7u75-windows-x64.exe"
WindowsPC   installer_type :custom
WindowsPC   options "/s "
WindowsPC   package_name "OracleJDK7u75"
WindowsPC   timeout 600
WindowsPC   success_codes [0, 42, 127]
WindowsPC end
WindowsPC
WindowsPC [2015-04-10T14:38:14+02:00] INFO: Running queued delayed notifications before re-raising exception
WindowsPC [2015-04-10T14:38:14+02:00] ERROR: Running exception handlers
WindowsPC [2015-04-10T14:38:14+02:00] ERROR: Exception handlers complete
WindowsPC [2015-04-10T14:38:14+02:00] FATAL: Stacktrace dumped to c:/chef/cache/chef-stacktrace.out
WindowsPC [2015-04-10T14:38:14+02:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: windows_package[OracleJDK7u75] (java::windows line 71) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0, 42, 127], but received '1603'
WindowsPC ---- Begin output of start "" /wait "c:\chef\cache\jdk-7u75-windows-x64.exe" /s  & exit %%ERRORLEVEL%% ----
WindowsPC STDOUT:
WindowsPC STDERR:
WindowsPC ---- End output of start "" /wait "c:\chef\cache\jdk-7u75-windows-x64.exe" /s  & exit %%ERRORLEVEL%% ----
WindowsPC Ran start "" /wait "c:\chef\cache\jdk-7u75-windows-x64.exe" /s  & exit %%ERRORLEVEL%% returned 1603
ERROR: Failed to execute command on     WindowsPC return code 1   

заранее спасибо

Боне


person Bohne    schedule 10.04.2015    source источник


Ответы (3)


Итак, как мы уже выяснили, java была установлена ​​при первом запуске, и теперь мы получаем ошибку, когда пытаемся установить ее снова.

Возможность 1:

Ресурс пакета Windows взят из поваренной книги opscode для Windows, а в README написано:

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ. Для правильной идемпотентности имя пакета ресурса должно совпадать со значением реестра «DisplayName» в данных удаления, которые создаются во время установки пакета. Самый простой способ окончательно найти правильное значение «DisplayName» — установить пакет на компьютер и найти информацию об удалении в следующих разделах реестра:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
HKEY_LOCAL_MACHINE\Software\Wow6464Node\Microsoft\Windows\CurrentVersion\Uninstall

У меня установлена ​​java 7u72, и я нашел ключ реестра, где Windows хранит информацию об установке:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{64A3A4F4-B792-11D6-A78A-00B0D0170720}

Кулинарная книга Windows пытается сопоставить значение DisplayName в реестре с package_name ресурса. В моем случае это «Java SE Development Kit 7, обновление 72 (64-разрядная версия)». Я предполагаю, что в вашем случае это должно быть «Java SE Development Kit 7 Update 75 (64-bit)», а не «OracleJDK7u75». Таким образом, вы можете попытаться изменить свой

normal['java']['windows']['package_name'] = 'Java SE Development Kit 7 Update 75 (64-bit)'

Возможность 2:

У меня есть собственная кулинарная книга Java для установки Java в Windows, и я не следую соглашениям об именах windows_package. Моя Java переустанавливается при каждом запуске шеф-повара. Разница с вашим объявлением windows_package заключается в том, что у меня есть следующие параметры:

/qn

Что означает: «тихо, без пользовательского интерфейса». И "/s" похоже ничего не значит. Вы можете увидеть все доступные параметры, запустив в командной строке:

jdk-7u75-windows-x64.exe /?
person Draco Ater    schedule 14.04.2015
comment
Спасибо Драко! Вариант 1 был правильным предположением. Я также проверил реестр и исправил package_name на «Java SE Development Kit 7 Update 75 (64-разрядная версия)». - person Bohne; 15.04.2015
comment
Вариант 1 решил ту же проблему для меня - спасибо! - person imdibiji; 28.09.2017

Похоже на ошибку установки пакета Java, а не на проблему с шеф-поваром.

Видеть:

Я бы предложил воспроизвести проблему без шеф-повара, запустив пакет вручную. Посмотрите, что происходит.

Извините, я не специалист по Windows, возможно, другие знают больше об этой проблеме.

person Mark O'Connor    schedule 10.04.2015
comment
Первая установка проходит без проблем от повара. Код ошибки, очевидно, выдается, потому что java уже установлена ​​(при повторном запуске установочного файла вручную появляется сообщение, что java уже установлена, вы хотите ее удалить?). Итак, моя проблема в том, что этот шеф-повар не понимает, что java уже установлена ​​.... он не должен пытаться установить ее снова:/ - person Bohne; 13.04.2015

Из того, что я вижу в поваренной книге, кажется, что вы правы, и что в поваренной книге Java для этого нет проверки. Вот соответствующая часть поваренной книги, которую я нашел для установки в Windows:

windows_package node['java']['windows']['package_name'] do
  source cache_file_path
  checksum node['java']['windows']['checksum']
  action :install
  installer_type :custom
  options "/s #{additional_options}"
end

Чтобы предотвратить его выполнение, если оно уже было на месте, вам нужно будет добавить атрибут «only_if» или «not_if», чтобы проверить, не произошла ли установка уже.

person Josh Edwards    schedule 13.04.2015
comment
Звучит как ошибка с ресурсом windows_package для меня. package на других платформах не нужно проверять наличие пакета. - person Mark O'Connor; 14.04.2015