我使用 puppet 管理大约 30 台 Ubuntu 服务器。我已经看到很多关于 cron-apt 和 apticron 的参考资料作为保持其软件包最新的方法,但我一直无法找到一种方法来集中管理该过程。使用 cront-apt/apticron 我仍然需要登录到每个主机并运行aptitude update
以执行更新。更不用说更新核心包时来自所有 30 台机器的审查通知。
一定有更好的方法。有什么建议么?
我使用 puppet 管理大约 30 台 Ubuntu 服务器。我已经看到很多关于 cron-apt 和 apticron 的参考资料作为保持其软件包最新的方法,但我一直无法找到一种方法来集中管理该过程。使用 cront-apt/apticron 我仍然需要登录到每个主机并运行aptitude update
以执行更新。更不用说更新核心包时来自所有 30 台机器的审查通知。
一定有更好的方法。有什么建议么?
一位同事发现并简要研究了 apt-dater,它是一个“基于终端的远程包更新管理器”。
您使用基于 curses 的界面来管理所有主机或主机组等的更新。支持完整 apt 会话的日志记录,包括可能遇到的任何错误等。
依赖托管机器上的 ssh 和 sudo。
见https://github.com/DE-IBH/apt-dater
我自己没有使用它,所以我不能认可它,但它听起来接近你正在寻找的东西。
由于您已经在使用 Puppet,因此执行此操作的最简单方法(也是更改控制/跟踪目的的最佳方法)是在 puppet 清单中指定要安装的所需软件包版本。你密切关注安全公告列表,当你使用的东西通过时,你只需更新 Puppet 说“安装这个包的这个新版本”。假设您在清单上使用修订控制,那么您就会知道“策略”何时更改,并且 Puppet 的报告会准确显示更改的实际时间(因此您可以轻松地将其与任何以后的日志事件关联)。
你可能对风景感兴趣。这是用于管理大型 Ubuntu 部署的“官方”管理工具,Canonical 可能非常渴望获得您的资金来使用它。
重新编辑:
一、免责声明;我没有为 Debian 或 Ubuntu 使用镜像,所以我对软件不熟悉。
其次,很抱歉,apt-mirror 似乎是一个“太重”的解决方案。最初的想法是您将拥有一个单独的测试机器(或测试环境,可能是虚拟机?)来部署更新。一旦您对更新的性能感到满意,您可以将包拉入/放入您的“部署”镜像(将有来自官方来源的本地镜像,以及仅用于您希望部署的更新的辅助镜像)。然后,远程机器将在预设时间运行更新,并将其从您的“部署”镜像拉到每台机器上,一个 cron 作业包括:
不幸的是,当我开始阅读细节时,它似乎
apt-mirror
会拉出各种各样的东西,而不仅仅是你想要的包。所以,我将放弃这个想法,尽管这个概念有一些优点。看看 clusterssh (apt-get install clusterssh):
$ cssh server1 server2 server3 ...
之前没有真正考虑过,我的第一个想法将类似于 avery 的建议,特别是如果您已经有一个测试环境。
基本上,您将生产机器设置为从您自己的本地存储库自动升级,并且仅在将测试环境升级到您运行的任何内容的最新版本后才更新此存储库。
Apticron 不能很好地扩展,它被设计为在非常小的环境中运行,但它确实有一些优点:
有时我写了一个低级/肮脏的自动化Fabric脚本(fabfile)来满足类似的要求,你可以在以下位置查看:
https://gist.github.com/lgaggini/2be3c5bb47b8ce9267bd
shell脚本来做呢?您在哪里还为每个节点设置了单独的包?
这可以针对单个端点进行定制或使其完全自动运行。
这样我用它来更新一些云服务器的 web 和 db 服务器。有些人得到特殊的包裹,其他人没有,它可以扩展。
就像发布的@lgaggini