使用 Chef 删除包
Removing package with Chef
你能告诉我吗,这是否可能删除 Java JDK 包 Chef,使用 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支持静默卸载。
所以 - 我应该怎么做才能正确卸载软件包?这可能吗?
非常感谢您的帮助。
规格:
- 大厨 12.4.1
- Windows 7
- Java JDK 版本:6u35、7u79、8u45
如果您需要更多信息,请随时询问。
这看起来可能不是厨师的问题。由于某种原因,卸载程序遇到错误。尝试使用谷歌搜索 "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
你能告诉我吗,这是否可能删除 Java JDK 包 Chef,使用 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支持静默卸载。
所以 - 我应该怎么做才能正确卸载软件包?这可能吗?
非常感谢您的帮助。
规格:
- 大厨 12.4.1
- Windows 7
- Java JDK 版本:6u35、7u79、8u45
如果您需要更多信息,请随时询问。
这看起来可能不是厨师的问题。由于某种原因,卸载程序遇到错误。尝试使用谷歌搜索 "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