问题描述
在理想情况下,配置人偶以安装open-vm-tools
应该很简单:
class vm-tools {
package { 'open-vm-tools':
ensure => installed
}
package { 'open-vm-dkms':
ensure => installed
}
}
但是,这打开了一个丑陋的依赖依赖罐。它安装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
推荐的软件包始终默认安装。显然,在安装描述为”CLI Tools”的软件包时,默认情况下不希望安装X依赖项。
由于这个原因,feature request against Debian立即被拒绝,但是cooler heads did not prevail in Ubuntu却被拒绝了。似乎在上个星期内,有一些recognition that this was an ill-advised change,但这对下一个LTS发行版没有帮助。
使用--no-install-recommends
选项可以很容易地在命令行上禁用安装推荐软件包的行为,但是通过puppet不支持这样做,并且混乱的票证要求支持已经3年了。
另一个选择是仅通过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',
}
但这显然是“做错了”。我是否缺少某种可以按预期方式工作的东西,或者这是解决此问题的最佳方法?
最佳办法
Bug 1766指示aptitude提供程序安装了推荐的软件包,而apt提供程序未安装。
如果正确(我自己尚未验证),则以下操作可能会更干净:
package { [ "open-vm-tools", "open-vm-dkms" ]:
ensure => installed,
provider => apt,
}
改编自Puppet Type Reference, “package” section。
经过进一步研究后进行编辑:由于apt提供程序是Ubuntu和Debian上的默认提供程序,因此请对这些软件包使用aptitude提供程序,并为root添加合适的~/.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。