Chef-Client尝试在Windows上安装Java,但它已经安装

Boh*_*hne 4 windows install cookbook chef-infra

我是Chef的新手,想要在Windows机器上安装Java.

我正在使用一个随时可用的Java手册.

所以我写了一个包装食谱,正如另一个问题所述.

我添加了java-cookbook-dependencies并使用了以下属性

属性/ java.rb

normal['java']['jdk_version'] = '7'
normal['java']['install_flavor'] = 'windows'
normal['java']['windows']['url'] = 'http://myurl/java/jdk-7u75-windows-x64.exe'
Run Code Online (Sandbox Code Playgroud)

因此,在上传食谱并将其添加到运行列表之后,Java已安装并可用.但每当我运行chef-client时,它都会尝试再次从文件中安装JDK.

所以我的问题:

我是否缺少一些配置来检查已安装的版本?根据我的理解,这应该在给定的食谱中完成,但我不确定是不是.

我也尝试声明一个包名,但这并没有改变任何东西.

normal['java']['windows']['package_name'] = 'OracleJDK7u75'
Run Code Online (Sandbox Code Playgroud)

这里用刀开始厨师客户后的(相关)输出:

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   
Run Code Online (Sandbox Code Playgroud)

先感谢您

Bohne

Dra*_*ter 6

因此,正如我们已经弄明白的那样,java在第一次运行时安装,现在我们得到错误,当我们再次尝试安装它时.

可能性1:

Windows软件包资源来自opscode windows cookbook,在README中写有:

请注意 - 为了正确的幂等性,资源的package_name应与在程序包安装期间创建的卸载数据中的"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
Run Code Online (Sandbox Code Playgroud)

我安装了java 7u72并找到了一个注册表项,Windows中存储了有关安装的信息:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{64A3A4F4-B792-11D6-A78A-00B0D0170720}
Run Code Online (Sandbox Code Playgroud)

Windows cookbook尝试将Registry 中的DisplayName值与资源的package_name 匹配.在我的例子中,它是"Java SE Development Kit 7 Update 72(64-bit)".我猜你的情况应该是" Java SE Development Kit 7 Update 75(64-bit) "而不是"OracleJDK7u75".所以你可能会尝试改变你的

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

可能性2:

我有自己的java食谱在Windows上安装java,我没有遵循windows_package命名约定.我的java重新安装每个厨师运行.与windows_package声明的区别在于我有以下选项:

/qn
Run Code Online (Sandbox Code Playgroud)

这意味着:"安静,没有用户界面".而"/ s"似乎没有任何意义.您可以通过在命令行中运行来查看所有可用参数:

jdk-7u75-windows-x64.exe /?
Run Code Online (Sandbox Code Playgroud)

  • 谢谢Draco!可能性1是正确的猜测.我还检查了注册表并将package_name修复为'Java SE Development Kit 7 Update 75(64-bit)'. (2认同)