In an ideal world, configuring puppet to install the open-vm-tools
should be as simple as this:
class vm-tools {
package { 'open-vm-tools':
ensure => installed
}
package { 'open-vm-dkms':
ensure => installed
}
}
But, that opens up an ugly can of dependency creep; it installs X, which obviously doesn't belong on servers. As of Ubuntu 10.04, these packages both end up recommending the open-vm-toolbox
package of GUI tools:
# apt-cache depends open-vm-dkms
open-vm-dkms
Depends: dkms
Depends: make
Suggests: open-vm-toolbox
Recommends: open-vm-tools
# apt-cache depends open-vm-tools
open-vm-tools
Depends: libc6
Depends: libfuse2
Depends: libgcc1
Depends: libglib2.0-0
Depends: libicu44
Depends: libstdc++6
Recommends: open-vm-source
Recommends: open-vm-toolbox
Recommends: ethtool
Recommends: zerofree
Recommended packages are always installed by default. It's clearly not desirable to install X dependencies by default when installing a package that is described as "CLI Tools".
The feature request against Debian was immediately rejected for this reason, but cooler heads did not prevail in Ubuntu. It seems that within the last week, there's some recognition that this was an ill-advised change, but that's of no help until the next LTS release rolls around.
The behavior to install recommended packages is easily enough disabled on the command line with the --no-install-recommends
option, but through puppet there's no support for doing this, and a tangled mess of tickets requesting that support haven't gone far in 3 years.
The other option is to just disable recommended packages throughout the whole system via apt.conf
, which is a massive change to package behavior with impacts reaching further than I'd like.
I've resigned myself to doing it the lazy way;
exec { 'open-vm-tools install':
command => '/usr/bin/apt-get install -y --no-install-recommends open-vm-dkms open-vm-tools',
creates => '/usr/lib/open-vm-tools',
}
But this is clearly "doing it wrong". Am I missing something that would make this all work the way it's supposed to, or is this the best hackish workaround to this issue?