在理想情况下,配置 puppet 来安装open-vm-tools
应该像这样简单:
class vm-tools {
package { 'open-vm-tools':
ensure => installed
}
package { 'open-vm-dkms':
ensure => installed
}
}
但是,这会导致依赖性蔓延;它会安装 X,而这显然不属于服务器。从 Ubuntu 10.04 开始,这两个软件包都推荐使用open-vm-toolbox
GUI 工具包:
# 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 工具”的软件包时,默认安装 X 依赖项显然是不可取的。
这针对 Debian 的功能请求由于这个原因立即被拒绝,但是Ubuntu 中缺乏冷静的头脑似乎在过去一周内,认识到这是一次不明智的改变,但在下一个 LTS 版本发布之前这毫无帮助。
在命令行上,使用选项可以很容易地禁用安装推荐软件包的行为--no-install-recommends
,但通过 puppet 不支持这样做,并且纠结 混乱的票请求的支持三年来一直没有取得任何进展。
另一个选择是通过 禁用整个系统中推荐的软件包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',
}
但这显然“做错了”。我是否遗漏了某些可以让这一切按预期运行的东西,或者这是解决此问题的最佳方法?
答案1
错误 1766表示 aptitude 提供商会安装推荐的软件包,而 apt 提供商则不会。
如果这是正确的(我自己还没有验证过),那么下面的方法可能会更干净:
package { [ "open-vm-tools", "open-vm-dkms" ]:
ensure => installed,
provider => apt,
}
经过进一步调查后进行编辑:由于 apt 提供程序是 Ubuntu 和 Debian 上的默认提供程序,因此请使用 aptitude 提供程序来提供这些包,并添加适合~/.aptitude/config
root 的包。
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";';
}
虽然不完美,但比冗长的执行线更简洁。
答案2
看起来在 12.04 上apt-get install open-vm-tools
不再安装 X。