Ubuntu

通過 Puppet 在 Ubuntu 中安裝 open-vm-tools;什麼是較小的邪惡?

  • May 25, 2012

在理想的世界中,配置 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-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

預設情況下始終安裝推薦的軟體包。在安裝描述為“CLI 工具”的包時,預設安裝 X 依賴項顯然是不可取的。

出於這個原因,針對 Debian的功能請求立即被拒絕,但冷靜的頭腦並沒有在 Ubuntu 中佔上風。似乎在上週,人們認識到這是一個不明智的更改,但在下一個 LTS 版本推出之前,這無濟於事。

使用該選項在命令行上很容易禁用安裝推薦軟體包的行為,但是通過puppet--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',
}

但這顯然是*“做錯了”*。我是否遺漏了一些可以使這一切按預期方式工作的東西,或者這是解決此問題的最佳解決方法?

錯誤 1766表明 aptitude 提供程序安裝推薦的軟體包,而 apt 提供程序沒有。

如果這是正確的(我自己沒有驗證過),那麼以下內容可能會更乾淨:

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

改編自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";';
}

不完美,但比巨大的 exec 行更簡潔。

引用自:https://serverfault.com/questions/280405