我使用 puppet 管理大约 30 台 Ubuntu 服务器。我看到很多关于 cron-apt 和 apticron 的参考资料,它们可以保持软件包的更新,但我找不到集中管理该过程的方法。使用 cront-apt/apticron 时,我仍然需要登录到每台主机并运行aptitude update
以执行更新。更不用说每当核心软件包更新时,都要查看来自所有 30 台机器的通知。
一定有更好的方法。有什么建议吗?
答案1
景观您可能会感兴趣。这是用于管理大型 Ubuntu 部署的“官方”管理工具,Canonical 可能非常希望您为此付费。
重新编辑:
首先,免责声明;我没有使用过 Debian 或 Ubuntu 的镜像,所以我不熟悉该软件。
其次,apt-mirror 似乎是一个“太重”的解决方案,我很抱歉。最初的想法是,您将拥有一台单独的测试机器(或测试环境,可能是虚拟机?)来部署更新。一旦您对更新的性能感到满意,您就可以将包拉入/放入您的“部署”镜像中(将有来自官方来源的本地镜像,以及仅用于您希望部署的更新的辅助镜像)。然后,远程机器将在预设时间运行更新,并将其从您的“部署”镜像拉到每台机器上,这是一个 cron 作业,包括:
apt-get update && apt-get upgrade --quiet --assume-yes
不幸的是,当我开始阅读详细信息时,似乎apt-mirror
会拉出各种东西,而不仅仅是你想要的包。所以,我将放弃这个想法,尽管这个概念有一些优点。
答案2
一位同事发现并简单研究了 apt-dater,它是一个“基于终端的远程包更新管理器”。
您可以使用基于 curses 的界面来管理所有主机或主机组等的更新。支持记录完整的 apt 会话,包括可能遇到的任何错误等。
依赖于受管理机器上的 ssh 和 sudo。
看https://github.com/DE-IBH/apt-dater
我自己没有用过它,所以我不能认可它,但它听起来很接近你想要的。
答案3
由于您已经在使用 Puppet,因此最简单的方法(也是更改控制/跟踪目的的最佳方法)是在 Puppet 清单中指定要安装的软件包的所需版本。您密切关注安全公告列表,当您使用的东西通过时,您只需更新 Puppet 以说“安装此软件包的新版本”。假设您在清单上使用修订控制,那么您就会知道“策略”何时更改,并且 Puppet 的报告会向您准确显示更改的实际时间(因此您可以轻松地将其与任何后续日志事件相关联)。
答案4
之前并没有真正考虑过这个问题,我的第一个想法可能会与艾弗里所建议的类似,特别是如果你已经有测试环境的话。
基本上,您将生产机器设置为从您自己的本地存储库自动升级,并且仅在将测试环境升级到所运行的最新版本后才更新此存储库。
Apticron 的扩展性不佳,它被设计在非常小的环境中运行,但它确实有一些优点:
- 它不仅会向您发送列表,还会发送要升级的软件包的更改日志。
- 为了获取更改日志,它会下载软件包,因此当您升级时,您不必等待它们下载。