【问题标题】:How do I uninstall DMG's with puppet?如何使用 puppet 卸载 DMG?
【发布时间】:2013-09-13 06:39:24
【问题描述】:

所以我有一个本地 DMG,我正在使用 puppet (VirtualBox-4.2.18-88780-OSX.dmg) 安装它,并使用

运行它

sudo puppet resource package virtualbox ensure=present provider=pkgdmg source=puppet:///virtualbox/VirtualBox-4.2.18-88780-OSX.dmg,

一切正常。但是当我尝试使用sudo puppet resource package virtualbox ensure=absent 删除它时,我得到一个错误

Error: Could not set 'absent' on ensure: undefined method 'uninstall' for #<Puppet::Type::Package::ProviderPkgdmg:0x107cb8218>

我对为什么会发生这种情况有一个模糊的想法,它看起来不像 puppet 正在识别 virtualbox 卸载工具。我该如何解决这个问题?

【问题讨论】:

  • OS X 没有“卸载程序”的概念,也许这就是标准命令不适用于 DMG 的原因。

标签: macos virtualbox uninstallation puppet dmg


【解决方案1】:

millmouse 是正确的 OS X 软件包无法卸载,至少通过这种方法。 Puppet 不支持 appdmg 或 apppkg 提供程序上的“缺席”。

但是,您可以通过删除它创建的用于跟踪软件包已安装的“cookie”类文件来欺骗 Puppet 重新安装软件包。 Puppet 在/var/db 中创建一个文件,其模式类似于 OS X 上的.puppet_<provider>_installed_<package_name>-<version>;例如,您将拥有一个类似 /var/db/.puppet_pkgdmg_installed_VirtualBox-4.2.18-88780

的文件

您可以执行以下操作,但实际上不会卸载该应用程序,只会诱使 Puppet 允许它再次安装:

exec {'rm -f .puppet_pkgdmg_installed_VirtualBox-4.2.18-88780':
  cwd => /var/db/',
  user => 'root',
  onlyif => 'test -f /var/db/.puppet_pkgdmg_installed_VirtualBox-4.2.18-88780',
}

或

file {'/var/db/.puppet_pkgdmg_installed_VirtualBox-4.2.18-88780':
  ensure => 'absent',
  force => true,
}

否则需要更改包的版本号或名称才能重新安装。

【讨论】:

    【解决方案2】:

    我会使用exec 资源而不是package 资源来执行卸载。

    exec { "uninstall_mypkg" :
      command => "uninstall mypkg",
      onlyif => "check if the package is installed",
      path => "/path/to/command/",
    }
    

    【讨论】:

    • 问题是 puppet 仍然认为包已安装,我无法再次可靠地使用系统包管理器。
    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2018-07-07
    • 2021-03-16
    • 2012-02-14
    相关资源
    最近更新 更多