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

我是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' 

因此,在上传食谱并将其添加到运行列表中Java被安装并可用。 但是,每当我运行主厨客户端,它都会尝试从文件中再次安装JDK。

所以我的问题是:

我是否缺less一些configuration来检查已经安装的版本? 据我的理解,这应该在给定的食谱 ,但林不知道是否是。

我也尝试声明一个包名,但是这不会改变任何东西。

 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 

先谢谢你

Bohne

所以正如我们已经知道的那样,java在第一次运行时被安装了,现在我们得到了错误,当我们再次尝试安装时。

可能性1:

Windows软件包资源来自opscode Windows Cookbook,并在自述文件中写有:

请注意 – 为了正确的幂等性,资源的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 

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

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

Windows Cookbook尝试将Registry中的DisplayName值与资源的package_name相匹配。 在我的情况下,它是“Java SE开发工具包7更新72(64位)”。 我想你的情况应该是“ Java SE开发工具包7更新75(64位) ”,而不是“OracleJDK7u75”。 所以你可以尝试改变你的

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

可能性2:

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

 /qn 

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

 jdk-7u75-windows-x64.exe /? 

看起来像Java软件包安装错误,而不是厨师的问题。

看到:

我会建议通过手动运行软件包来重现没有厨师的问题。 走着瞧吧。

对不起,不是一个Windows的家伙,也许别人知道更多关于这个问题。

根据我在食谱中看到的,看起来你是正确的,而且在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”属性来检查安装是否已经发生。