通过 Puppet 在 Ubuntu 中安装 open-vm-tools;什么是较小的邪恶?

Sha*_*den 9 package-management ubuntu puppet vmware-tools

在理想的世界中,配置 puppet 来安装open-vm-tools应该像这样简单:

class vm-tools {
    package { 'open-vm-tools':
        ensure => installed
    }
    package { 'open-vm-dkms':
        ensure => installed
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这开启了一个丑陋的依赖蠕变;它安装 X,这显然不属于服务器。从 Ubuntu 10.04 开始,这些包最终都推荐了open-vm-toolboxGUI 工具包:

# 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
Run Code Online (Sandbox Code Playgroud)

默认情况下始终安装推荐的软件包。在安装被描述为“CLI 工具”的包时,默认情况下安装 X 依赖项显然是不可取的。

由于这个原因,针对 Debian功能请求立即被拒绝,但冷静的头脑在 Ubuntu 中并没有占上风。似乎在上周,有人认识到这是一个不明智的更改,但这在下一个 LTS 版本推出之前没有帮助。

安装推荐的软件包的行为很轻松地用在命令行上禁用--no-install-recommends选项,而是通过木偶有这样做没有支持,以及纠结 混乱门票请求支持,并没有在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',
}
Run Code Online (Sandbox Code Playgroud)

但这显然是“做错了”。我是否遗漏了一些可以使这一切按预期方式工作的东西,或者这是解决此问题的最佳黑客解决方法?

Mik*_*fro 3

Bug 1766表明 aptitude 提供程序安装推荐的软件包,而 apt 提供程序则不安装。

如果这是正确的(我自己没有验证过),那么以下内容可能会更干净地工作:

package { [ "open-vm-tools", "open-vm-dkms" ]:
  ensure   => installed,
  provider => apt,
}
Run Code Online (Sandbox Code Playgroud)

改编自Puppet Type Reference,“package”部分


进一步调查后编辑:由于 apt 提供程序是 Ubuntu 和 Debian 上的默认提供程序,因此请使用这些软件包的 aptitude 提供程序,并添加适合~/.aptitude/configroot 的提供程序。

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";';
}
Run Code Online (Sandbox Code Playgroud)

并不完美,但比巨大的执行行更简洁。