Puppet 在 Windows 上升级 msi

Puppet 在 Windows 上升级 msi

我在 Windows 上运行 Puppet,我想升级使用 msi 安装的包 (java)。我使用以下方式安装了该包

package { 'java':
  ensure => installed,
  provider => 'msi',
  source => 'S:\jdk1.6.0_30.msi',
  install_options => { 'INSTALLDIR' => 'C:\tools\java' },
}

现在我想升级到版本 31,因此我尝试运行

package { 'java':
  ensure => installed,
  provider => 'msi',
  source => 'S:\jdk1.6.0_31.msi',
  install_options => { 'INSTALLDIR' => 'C:\tools\java' },
}

这实际上并没有升级,因为包“java”已经安装。当我尝试将“ensure”值更改为最新时,puppet 说提供程序类型必须具有“可升级”功能。

这仅仅是 Windows 的限制吗?有没有办法使用 msi 包升级现有的 Java 安装?

答案1

这仅仅是 Windows 的限制吗?

MSI 提供商与其他软件包提供商相比,功能似乎相当有限。这当然不是 Windows/MSI 的限制。我相信 Windows 提供了使这些选项发挥作用所需的一切。

有没有办法使用 msi 包升级现有的 Java 安装?

一个选项可能是放弃包 msi 提供程序,而只需使用 Exec 语句即可完成所有操作。该msiexec命令有很多选项。

您可能还会想出一种安排方法,以便如果需要进行升级,则先清除旧版本。然后安装新版本,您可能必须在某个文件或注册表中跟踪该版本,因为 MSI 提供商不会向您提供有关该版本的任何信息。

答案2

Puppet 的 Windows MSI 插件无法理解版本。与 Linux 包管理系统不同,Puppet 无需查看元数据目录参考即可了解可用的版本。

以下内容是临时起意,未经测试,但可以为您提供一种启用升级的方法。每当您获得新版本时,请将其链接起来。当您确定所有内容都已升级时,可以从列表中删除旧版本。

package { 'java':
  ensure => absent,
  provider => 'msi',
  source => 'S:\jdk1.6.0_30.msi',
  install_options => { 'INSTALLDIR' => 'C:\tools\java' },
}

-> #chaining operator forces uninstall before install

package { 'java-1.6.0_31':
  ensure => installed,
  provider => 'msi',
  source => 'S:\jdk1.6.0_31.msi',
  install_options => { 'INSTALLDIR' => 'C:\tools\java' },
}

答案3

更新:该msi提供商已被取代视窗提供商,即versionable。现在应该可以按预期工作。

相关内容