我正在考虑使用 Puppet 进行大规模补丁管理。
根据一些研究,解决这个问题的方法是创建一个类并将其应用于任何需要的地方,例如以下情况:
class mypack_update {
package { 'mypack':
# ensure => '1.0.1d-15.el6',
ensure => '1.0.1g-16.el6_5.7',
}
}
然而这似乎不太实际特别是当你在许多机器上拥有数百个可用的补丁(从内核到 ssl、bash 等等)时。
有没有什么最佳实践可以让我让这变得更容易?
我们最常用的 Linux 发行版是 SLES 11.3。
答案1
我们这样做的方法是使用“ensure => 'latest'”,但是,这是针对受控的已经测试过的 repo 完成的。如果您的环境具有具有不同要求的不同角色,情况会变得更加复杂,那么您需要使用事实作为传感机制来确定哪个补丁适用于哪个角色,我们在 hiera 中执行此操作。经过一年左右的努力,我相信正确的答案是将 puppet 与诸如 papers 之类的 repo 管理系统集成,这正是 Satellite 6 正在做的事情。
答案2
假设你提到的不切实际是生成这样一个类,这可以通过一些脚本来实现。结合希拉然后,您将获得一个.yaml
带有版本 ID 的软件包列表,并且您的 Puppet 设置可能如下所示:
hieradata/补丁列表.yaml:
---
packages:
mypack:
ensure: 1.0.1g-16.el6_5.7
otherpack:
ensure: latest
otherpacktwo:
ensure: 2.0.1
你的班级.pp
class patchset {
create_resources('packages')
}
至于脚本部分,在rpm -qa
您知道具有正确补丁的服务器上应用一些 awk/perl-fu 到命令应该可以完成这项工作。