在一个理想的世界里,configurationpuppet来安装open-vm-tools应该是这样简单的:
class vm-tools { package { 'open-vm-tools': ensure => installed } package { 'open-vm-dkms': ensure => installed } }
但是,这开辟了一个丑陋的依赖性蔓延的jar头; 它会安装X,这显然不属于服务器。 从Ubuntu 10.04开始,这些软件包最终推荐使用GUI工具的open-vm-toolbox软件包:
# 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
build议的软件包总是默认安装。 安装描述为“CLI工具”的软件包时,默认情况下安装X依赖关系显然是不可取的。
针对Debian的function请求立即被拒绝,但是在Ubuntu中没有冷静的头脑 。 看起来在上周内,人们已经认识到这是一个不明智的变化 ,但是直到下一个LTS发布之前,这是没有任何帮助的。
使用--no-install-recommends选项在命令行中很容易禁用安装推荐软件包的行为,但是通过puppet不支持这样做,而且要求这种支持的票据 混乱 不堪 3年。
另一种select是通过apt.conf在整个系统中禁用推荐的软件包,这是对软件包行为的巨大改变,其影响远远超出我的apt.conf 。
我已经放弃了这种懒惰的方式;
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', }
但这显然是“做错了” 。 我是否错过了一些可以使它们按照预期的方式工作的东西,或者这是这个问题最好的解决办法?
错误1766指出aptitude提供程序安装了推荐的软件包,而apt提供程序则没有。
如果这是正确的(我没有自己validation),那么以下可能会更干净地工作:
package { [ "open-vm-tools", "open-vm-dkms" ]: ensure => installed, provider => apt, }
改编自Puppet Type Reference,“package”部分 。
进一步调查后编辑:因为apt提供程序是Ubuntu和Debian的默认设置,请使用aptitude提供程序来为这些程序包添加合适的~/.aptitude/config 。
package { [ "open-vm-tools", "open-vm-dkms" ]: ensure => installed, provider => aptitude, require => File["/root/.aptitude/config"]; } file { "/root/.aptitude/config": ensure => present, content => 'APT::Install-Recommends "0";'; }
不完美,但比一个巨大的执行线更简洁。
看起来像12.04, apt-get install open-vm-tools不再安装X.
VMware Tools上的Ubuntu wiki