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

Modified on: Sat, 13 Apr 2019 15:40:02 +0800

在理想的世界中,配置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工具”的软件包时,默认情况下安装X依赖项显然是不可取的。

针对Debian的功能请求被立即拒绝这个原因,但是在hbuntu中没有冷静的头脑/ A>。似乎在上周,有一些认可这是一个不明智的改变,但在下一个LTS发布之前,这没有任何帮助。

使用--no-install-recommends选项可以轻松地在命令行上禁用安装推荐软件包的行为,但是通过puppet,不支持这样做,并且纠结 门票的nofollow noreferrer“>一塌糊涂要求提供的支持并没有走得太远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',
}

但这显然“做错了”。我错过了一些可以使这一切按预期方式工作的东西,或者这是这个问题最好的解决办法吗?

作者:Shane Madden

最佳答案

错误1766表明aptitude提供商安装了​​推荐的软件包,而apt提供商则没有

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

package { [ "open-vm-tools", "open-vm-dkms" ]:
  ensure   => installed,
  provider => apt,
}

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


进一步调查后编辑:由于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";';
}

不完美,但比一个巨大的执行线更简洁。

作者:,Mike Renfro

相关问答

添加新评论