使用 Chef 删除包

Removing package with Chef

你能告诉我吗,这是否可能删除 Java JDKChef,使用 windows_package,或者我必须执行静默卸载命令?最好是第一个选项。

我试过这种方法:

windows_package node['name']['JDK1.6'] do
      action            :remove  
end  

甚至添加了选项 installer_type :custom,仍然出现此错误:

FATAL: Mixlib::ShellOut::ShellCommandFailed: windows_package[Java(TM) SE Development Kit 6 Update 35] (line 4) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0, 42, 127], but received '1603'
---- Begin output of MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160350} /qn ----
STDOUT: 
STDERR: 
---- End output of MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160350} /qn ----
Ran MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160350} /qn returned 1603

好吧,我没主意了。我在 official Opscode site 上找到了以下信息:

:remove: remove a package. The remove action is completely hit or miss as many application uninstallers do not support a full silent/quiet mode.

不过据我所知,JDK支持静默卸载。

所以 - 我应该怎么做才能正确卸载软件包?这可能吗?

非常感谢您的帮助。


规格:


如果您需要更多信息,请随时询问。

这看起来可能不是厨师的问题。由于某种原因,卸载程序遇到错误。尝试使用谷歌搜索 "java install error 1603",您会看到一堆帖子,包括一个显然是目前正在调查的错误 https://www.java.com/en/download/help/error_1603.xml - 虽然听起来可能是安装而不是卸载。

尝试手动删除它并调试它,然后一旦你理解它就可以烹饪了。

好吧,我已经完成了自己的实现。对于那些也需要这个的人:

# variable 'code' is for JDK version code from registry.
# Uninstall comand: MsiExec.exe /quiet /X[CODE]
# Codes are in regkey HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall. Be aware to check key for JDK, not JRE!

remove_command = "MsiExec.exe /quiet /X#{code}"

execute "Remove JDK from system" do
        command         remove_command
        returns         [0,1605]  # 1605 for non-existing product error
end

例如,对于 JDK 1.6.35(问题中提到的)代码应该是

code = '{32A3A4F4-B792-11D6-A78A-00B0D0160350}'

所以这似乎与 Chef 使用的命令不同:

  • 厨师使用

MsiExec.exe /I{32A3A4F4-B792-11D6-A78A-00B0D0160350} /qn

  • 这个命令

MsiExec.exe /quiet /X{32A3A4F4-B792-11D6-A78A-00B0D0160350}

也许有人会觉得这很有用。

我做了与您的回答类似的事情,但它只需要包名称而不是注册表中的代码。

execute 'uninstall_jdk8u72' do
  command "wmic product where name=\"#{node[:java8u72][:package_name]}\" call uninstall"
end

我的想法来自 https://github.com/chef-cookbooks/windows/issues/89