我在工作中使用 puppet 来管理一堆 Debian 服务器,其中一部分包括安装软件包。我在多个系统上安装的一个软件包是 nmap,它用于验证防火墙规则是否设置正确。在 Debian 7.0 上,如果您启用了 APT::Install-Recommends,您会得到一大堆垃圾以及 nmap(见下文)。
我不希望安装 nmap 时启用推荐的所有垃圾都包含在内。一种解决方案是使用 更新我的 apt 配置APT::Install-Recommends "0";
。但我不想将其作为默认配置。大多数时候我希望包含推荐。推荐的软件包大多很好,而且我没有得到大量我不需要的东西。但有几个软件包带来了我不想要/不需要的东西。
package { 'nmap':
ensure => installed,
require => Class['apt'],
}
当使用‘apt’包提供程序时,有没有什么方法可以控制是否通过puppet安装推荐? 我不想与 aptitude 提供商混在一起,因为 apt 和 aptitude 并不完全兼容。
推荐
root@fw-01:~# apt-get install nmap
Reading package lists... Done
Building dependency tree
Reading state information... Done
...
The following NEW packages will be installed:
fonts-droid fonts-liberation ghostscript gnuplot gnuplot-nox groff gsfonts
imagemagick imagemagick-common libblas3 libblas3gf libcroco3 libcupsimage2
libdjvulibre-text libdjvulibre21 libexiv2-12 libgfortran3 libgs9
libgs9-common libijs-0.35 libilmbase6 libjbig2dec0 liblcms1 liblcms2-2
liblensfun-data litesting firewall blensfun0 liblinear-tools liblinear1 liblqr-1-0
libmagickcore5 libmagickcore5-extra libmagickwand5 libnetpbm10 libopenexr6
libpaper-utils libpaper1 librsvg2-2 librsvg2-common libsvm-tools libwmf0.2-7
netpbm nmap poppler-data psutils ufraw-batch
0 upgraded, 45 newly installed, 0 to remove and 0 not upgraded.
Need to get 32.0 MB of archives.
After this operation, 93.8 MB of additional disk space will be used.
Do you want to continue [Y/n]?
无推荐
root@fw-01:~# apt-get --no-install-recommends install nmap
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
libblas3 libblas3gf libgfortran3 liblinear1
Suggested packages:
liblinear-dev
Recommended packages:
liblinear-tools
The following NEW packages will be installed:
libblas3 libblas3gf libgfortran3 liblinear1 nmap
0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,405 kB of archives.
After this operation, 17.4 MB of additional disk space will be used.
Do you want to continue [Y/n]?
答案1
现在可以通过 Puppet‘package’类型中的“install_options”设置来实现: https://puppet.com/docs/puppet/latest/types/package.html#package-attribute-install_options
例如:
package { 'nmap':
ensure => installed,
install_options => ['--no-install-recommends'],
}
上述操作确保“--no-install-recommends”选项传递给 apt-get,它会跳过本次安装的推荐软件包: http://manpages.ubuntu.com/manpages/precise/man8/apt-get.8.html
答案2
目前我发现了以下解决方案,但是它们并不理想。
等待最近添加的补丁使其成为发布版本并升级。
- 优点:这是正确的方法
- 缺点:我必须等待,或者在本地修补我的设置。
只需使用 exec 来安装而不是包,然后使用 exec。
- 优点:如果您不担心错误检查,则操作很简单。
- 缺点:需要相当复杂的命令行来安装,不能自动升级,也不能正常处理安装错误。
全局更新我的 apt 配置,花时间查找所有缺失的内容并调整我的清单以安装我想要的只有通过推荐才能安装的软件包。
- 优点:我的清单更具体,更准确地反映系统的状态
- 缺点:修复我的清单/配置以反映这一新现实将花费大量的时间/精力。
在运行 puppet 之前设置 APT_CONFIG 环境变量。
- 优点:如果你使用 cron 启动的 puppet,则设置起来很容易
- PRO:不会改变任何手动使用 apt 的行为
- 缺点:为了测试目的手动运行 APT 时很容易忘记设置它。
- 缺点:您必须修复所有清单,就像更新全局配置一样。