The Puppet Labs Issue Tracker has Moved: https://tickets.puppetlabs.com

Feature #11870

Support other types of windows packages

Added by Josh Cooper over 2 years ago. Updated almost 2 years ago.

Status:ClosedStart date:01/10/2012
Priority:NormalDue date:
Assignee:Josh Cooper% Done:

0%

Category:windows
Target version:3.0.0
Affected Puppet version: Branch:https://github.com/puppetlabs/puppet/pull/1008
Keywords:windows msi installshield nullsoft wise innosetup

We've Moved!

Ticket tracking is now hosted in JIRA: https://tickets.puppetlabs.com

This issue is currently not available for export. If you are experiencing the issue described below, please file a new ticket in JIRA. Once a new ticket has been created, please add a link to it that points back to this Redmine ticket.


Description

Puppet only support MSI packages on Windows that can be installed via msiexec We should support other types of packages created from:

  • InstallShield
  • Wise
  • MS Hotfixes
  • NullSoft
  • InnoSetup

One issue is that many of these are self-extracting executables. Another issue is that we would need to introspect the package to determine what set of command line options are required to perform a silent install and supress reboots. See http://unattended.sourceforge.net/installers.php


Related issues

Related to Puppet - Bug #11868: msi package provider can only manage packages it installed Closed 01/10/2012
Related to Puppet - Feature #15541: Chocolatey package provider on Windows Accepted 07/16/2012

History

#1 Updated by Lance A over 2 years ago

Note that the Windows Installer automation interface is not be capable of managing non-MSI installs. Though the installation will appear under Programs and Features, it will not be listed in the Installer.Products collection.

Example: WANdisco Subersion 1.7.2-2 is an executable installer that creates a Programs and Features entry, but does not show up in the Installer automation Products collection.

#2 Updated by Josh Cooper over 2 years ago

  • Parent task set to #8268

#3 Updated by Josh Cooper over 2 years ago

  • Parent task deleted (#8268)

#4 Updated by Josh Cooper over 2 years ago

  • Keywords set to windows msi installshield nullsoft wise innosetup

#5 Updated by Josh Cooper about 2 years ago

Reverse engineering Add/Remove Programs http://community.spiceworks.com/how_to/show/2238

#6 Updated by Josh Cooper almost 2 years ago

I have a version for managing non-MSI packages here https://github.com/joshcooper/puppet/tree/ticket/3.x/11870-other-package-types. In order to perform silent installs, you will need to specify the appropriate set of arguments in the install_options parameter. The same parameter is also used for silent uninstalls. This page http://unattended.sourceforge.net/installers.php describes options for various types of Windows installers.

The code is not ready to merge, until we resolve the issue that the msi provider expects a hash of install_options, whereas, we need to be able to specify a single argument (or array). For example, install_options => '/S' for silent install. Trying to do '/S' => '', doesn’t work, because that gets turned into /S=

#7 Updated by Josh Cooper almost 2 years ago

  • Target version set to 3.x

This is a new feature, targeted for 3.x

#8 Updated by Josh Cooper almost 2 years ago

  • Status changed from Accepted to In Topic Branch Pending Review
  • Branch set to https://github.com/puppetlabs/puppet/pull/1008

#9 Updated by Anonymous almost 2 years ago

  • Status changed from In Topic Branch Pending Review to Merged - Pending Release

#10 Updated by Anonymous almost 2 years ago

  • Target version changed from 3.x to 3.0.0

#11 Updated by Josh Cooper almost 2 years ago

This was merged in to 3.x in https://github.com/puppetlabs/puppet/commit/b273c77087dc16371d7f67f53d5c570162bc0559 Additional fixes were merged in 33c671, 167f34, and c1ac7c

    Previously, puppet could only manage MSI packages on Windows. This commit
    extends the `:windows` package provider so that it can query, install, and
    uninstall executable packages. The logic for this is borrowed from[1].
    
    Basically, puppet will only manage executable packages that have the
    following attributes:
    
        Non-empty DisplayName
        Non-empty UninstallString
        Are not SystemComponents
        Are not WindowsInstaller
        Names don't start with KBXXXXXX
        Are not part of another product (ParentKeyName)
        Are not Security Update, Update Rollup or Hotfix
    
    For example, to install Java silently:
    
        package { 'Java(TM) 7 Update 5':
          ensure          => installed,
          source          => '...\jre-7u5-windows-i586.exe',
          install_options => [
            '/s', '/v/qn" ADDLOCAL=jrecore REBOOT=Suppress JAVAUPDATE=0"'
          ]
        }
    
    [1] http://community.spiceworks.com/how_to/show/2238

The windows package provider supports both single argument and key-value arguments for install_options:

    Previously, the MSI provider contained logic for accepting a hash of
    `install_options`. The provider's install method flattened the hash pairs
    as:
    
        "key1=value1 key2=value2"
    
    and passed that to msiexec.exe. This worked fine for MSI public
    properties, but does not account for passing single arguments.
    
    This commit refactors the provider to use the more generic version of
    `install_options`, which expects an array of values. For example, if a
    manifest contains:
    
        [ '/S', { 'INSTALLDIR' => 'C:\Program Files' } ]
    
    then msiexec will be invoked with:
    
        "/S INSTALLDIR=\"C:\\Program Files\""
    
    The only change in behavior is that the MSI provider will now accept
    single arguments and pass those onto msiexec.

The windows package provider now supports uninstall_options using the same format as install_options:

    Previously, the MSI provider was unable to specify uninstall_options.
    This isn't typically an issue, since Windows stores the command and
    arguments necessary to uninstall the package in the `UninstallString`
    registry value associated with the package.
    
    But there are some MSI packages that require this functionality, e.g. to
    specify VMware Tools modules to uninstall:
    
       msiexec.exe /x  REMOVE=Sync,VSS,...
    
    This commit adds an `uninstall_options` parameter to the package type and
    updates the MSI provider to use it. It has the same format as
    `install_options`.

In addition the msi provider is deprecated on windows

    The `:msi` package provider is being deprecated and replaced with the
    `:windows` provider. Attempting to install or uninstall a package using
    the msi provider will cause puppet to issue a deprecation warning.

#12 Updated by Matthaus Owens almost 2 years ago

  • Status changed from Merged - Pending Release to Closed

Released in Puppet 3.0.0-rc4

Also available in: Atom PDF