Ubuntu
通過 Puppet 在 Ubuntu 中安裝 open-vm-tools;什麼是較小的邪惡?
在理想的世界中,配置 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 版本推出之前,這無濟於事。
使用該選項在命令行上很容易禁用安裝推薦軟體包的行為,但是通過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/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";'; }
不完美,但比巨大的 exec 行更簡潔。