在理想的世界中,配置puppet以安装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-recommended选项在命令行上很容易禁用安装推荐软件包的行为,但是通过puppet不支持这样做,并且07007 mess tickets请求支持并没有走得太远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",provider => aptitude,require => File["/root/.aptitude/config"]; } file { "/root/.aptitude/config": ensure => present,content => 'APT::Install-Recommends "0";'; }
不完美,但比一个巨大的执行线更简洁.