配置管理工具(Puppet、Chef)是否能够使安装的软件包保持最新?

daf*_*aff 28 ubuntu debian configuration-management puppet chef

对于那些已经在运行配置管理工具的人来说,这可能是一个简单的问题。诸如 Puppet 或 Chef 之类的配置管理工具是否是使已安装的软件包保持最新的正确方法?

假设我运行了许多服务器,主要基于 Debian 和 Ubuntu。当安全更新或错误修复出现时,配置管理工具是否可以更轻松地更新从存储库安装的包?

我目前运行“无人值守升级”以让系统自动安装安全更新,但我仍然需要连接到服务器并aptitude update && aptitude safe-upgrade经常运行。当然,服务器越多,这就会变得无聊、乏味且容易出错。

诸如 Puppet 或 Chef 之类的工具是否是使安装的软件包保持最新的正确方法?你们中有人使用这些工具来避免aptitude在 15 台服务器上手动运行或等效吗?我很确定这些问题的答案是“是的,当然!”

但是在哪里可以找到有关此特定用例的更多信息?我还没有时间深入研究 Puppet 或 Chef,示例食谱或课程仅展示了安装特定软件包(例如 ssh)的或多或少的琐碎示例。除了官方文档之外,您还有其他资源可以推荐吗(当然,一旦我知道哪些工具适合我,我就会研究文档)。

Tom*_*nor 22

你可以用 puppet 来做,你可以这样做:

ensure => latest,
Run Code Online (Sandbox Code Playgroud)

或者

ensure=> "1.0.2",
Run Code Online (Sandbox Code Playgroud)

指定最新/需要的版本。IE

package { apache2: ensure => "2.0.12-2" }
package { apache2: ensure => latest }
Run Code Online (Sandbox Code Playgroud)

这至少意味着您可以在所有系统中指定相同的版本,并防止服务器(可能存在危险)自动升级。我已经在许多站点的生产中使用了这种方法,并且效果很好。

运行无人值守升级让我有点害怕,尤其是当他们升级关键任务包、内核、mysql 库、apache 等时。尤其是如果安装脚本可能想要重新启动服务!

  • `ensure => latest` 将始终确保所有内容都是最新的,无论您的存储库集提供什么。 (2认同)

小智 18

我认为这可能是错误的问题。当然,使用 Puppet 和 Chef 等配置管理工具来维护您的基础设施是尝试手动完成所有工作的巨大飞跃。使您的软件包版本保持最新和同步的问题不是这些工具中的任何一个直接解决的问题。要正确地自动执行此操作,您需要将包存储库本身置于您的控制之下。

我这样做的方法是维护一个专用的 Yum 存储库(适用于 Redhat/Fedora/CentOS;适用于 Debian/Ubuntu 的 APT 存储库),其中包含我关心的特定站点的软件包。这些通常是应用程序本身(Ruby、PHP、Apache、Nginx、库等)和安全关键包的依赖项。

一旦你完成了这个设置(通常你可以从上游 repo 开始镜像所需的包),你可以使用 Puppet 的“确保 => 最新”语法来确保你的所有机器都与 repo 保持同步。

明智的做法是使用“暂存”存储库,让您能够在将软件包顺利推出生产之前测试更新版本的软件包。通过使用存储库模板,这可以通过 Puppet 轻松完成,无需任何重复代码。

自动化您的包版本控制强烈鼓励您将所有生产系统同步,因为为不同的操作系统发行版、版本和机器架构维护多个存储库和包非常耗时,并且可能导致各种晦涩的问题和不兼容性。

所有这些建议同样适用于 Ruby gem、Python 蛋和您可能使用的其他包系统。

我写了一个小Puppet 教程,它应该可以帮助您快速上手并运行 Puppet。您可以使用 Puppet 将自定义存储库定义部署到您的机器,作为控制包版本的第一步。


小智 9

Puppet(我很确定厨师也这样做)与您的apt-get / yum软件存储库相关联。因为他们做了大量的工作来确定哪些软件包可用,这意味着ensure => latest只适用于 Ubuntu/CentOS/Debian 之类的。只要您正确设置了适当的文件(/etc/apt/sources.list等)。


wom*_*ble 5

虽然 Puppet/Chef 可能是此功能的竞争者,但要使它们保持系统上的所有内容都是最新的,需要自定义类型或将每个包(包括像 libc6 这样的底层系统库)列为带有ensure => latest. 对于自动包更新的特定情况,您可能需要查看cron-apt包,它也可以满足您的需求。


小智 5

这个问题很旧,但我想我会以最新的方式回答,因为当时没有现有的答案。

如果您使用的是木偶或厨师,请查看 mcollective。这是 puppetlabs 人员的一个非常好的工具,允许您向服务器组发送命令。http://docs.puppetlabs.com/mcollective/

它还有一个 apt 插件,可用于在任意数量的服务器上进行 apt 更新:http : //projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentApt