web-dev-qa-db-ja.com

WindowsでのPuppetアップグレード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インストールをアップグレードする方法はありますか?

4
Jeff Storey

これは単なるWindowsの制限ですか?

MSIプロバイダー は他のパッケージプロバイダーに比べてかなり制限されているようです。これは確かにWindows/MSIの制限ではありません。 Windowsは、これらのオプションを機能させるために必要なものを提供していると思います。

Msiパッケージを使用して既存のJavaインストールをアップグレードする方法はありますか?

1つのオプションは、パッケージmsiプロバイダーをあきらめて、Execステートメントですべてを実行することです。 msiexecコマンドには多くのオプションがあります。

アップグレードを行う必要がある場合は、古いバージョンが最初にパージされるように調整する方法を考え出すこともできます。次に、新しいバージョンがインストールされます。MSIプロバイダーはバージョンに関する情報を提供しないため、ファイルまたはレジストリのどこかにバージョンを追跡する必要があります。

3
Zoredache

Puppet用のWindowsMSIプラグインは、バージョンを理解できません。 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' },
}
4
Jeff Ferland

更新:msiプロバイダーは windows プロバイダー(versionable)に置き換えられました。期待どおりに動作するはずです。

0
Felix Frank