如何使用Chef运行安全更新?

14

当我登录到服务器(Ubuntu 12.04)时,会出现以下消息:

12 packages can be updated.
10 updates are security updates.

当然,通过手动方式解决它很容易(apt-get update && apt-get upgrade),但由于服务器部分地由Chef配置,我想知道是否有一种好的方法将其程序化地包含到配方中?

"apt" cookbook似乎没有提供相关内容 :(

干杯。

4个回答

8

自动化软件包更新/升级通常是不明智的,因为如果没有经过充分测试,这显然会破坏应用程序。

解决此问题的一种方法是使用食谱锁定或将仓库保留在指定版本,并在推出到生产环境之前进行彻底的开发测试。

在Amazon Linux上,您可以检索当前状态下yum存储库的唯一网址。因此,您可以在开发中运行更新/升级,找出唯一的网址,然后将其推送到生产环境。这将防止Chef更新到任何比您测试的新软件包更高版本的软件包。

我对Ubuntu和apt-get不太熟悉,但似乎可以通过Pinning或Holding来实现我所说的内容: https://help.ubuntu.com/community/PinningHowto

因此,总结一下,您想要升级/更新一个开发机器,您测试它,找出仓库状态并将所有软件包冻结到这些版本。然后将生产环境的仓库也冻结到这些状态。然后,只需像Draco提到的那样运行'apt-get -y upgrade'即可。


1
我同意没有先进行验证就不断应用更新是个坏主意。但是假设你已经在开发环境中测试了更新,那么如何将其传播到生产环境呢?我考虑创建一种菜谱,可以对所有软件包进行更新/升级,并且仓库版本维护在 data_bag 中。您可以修改 data_bag 上的版本号,下次执行菜谱时,它将运行更新/升级。你觉得怎么样? - JoseOlcese

2
一方面,我同意“自动化软件包更新/升级通常是一个坏主意,因为如果没有经过适当的测试,这显然会破坏应用程序。” 我相信这是学术上的答案。
然而,我的经验是自动加载安全更新很少会引起问题,这应该与错过或延迟关键安全修复的可能性相比较。 (我们从未允许自动重新启动,我想那就是我们划定的界限。)是否执行自动安全更新的决定应基于您所处情况的现实情况。 没有一种适合所有情况的答案。
如果您想运行自动更新,则有几个食谱可用(至少适用于Ubuntu),但不幸的是,似乎没有一个特别更新,这有点讽刺。 这里是一个例子: unattended_upgrades

2

我只是在自己的配方中执行了execute 'apt-get -y upgrade'


对,但这真的是“常识”或“最佳实践”吗? - pagid
但这有什么问题呢?它简单易懂,易于管理,并且能够满足需求。 - Draco Ater
但它并没有回答这是否是最佳实践的问题 - 由于这不是任何官方手册的一部分,所以似乎并不是最佳实践 ;) - pagid
这是一个非常糟糕的事情。 - cpuguy83
1
@DracoAter 为什么盲目升级软件包是不好的?因为软件包的新版本可能会有破坏性的更改,这将对在该服务器上运行的服务产生不利影响。通常情况下,您只应在必须更新时才更新服务器,而不是因为有可用的更新,即使是安全更新也可以通过其他方式来缓解。 - cpuguy83
7
如果你问我,我认为那样做有些过分了。仅在必要时进行更新会导致反应式管理而带来头痛。更新应该定期进行,并应纳入系统管理和开发中。使用Chef可以在实时环境的阴影副本上运行干运行测试,并测试您能想到的所有内容。拥抱这一方法,并自行尝试每周更新管理和回滚方案。在包定义中使用版本自动化整个过程,使用Chef。 - Jaap Haagmans

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接