我使用puppetpipe理大约30台Ubuntu服务器。 我已经看到很多cron-apt和apticron的参考,作为保持软件包最新的方法,但是我一直无法find集中pipe理这个过程的方法。 使用cront-apt / apticron,我仍然需要login到每台主机并运行aptitude update来执行更新。 更不用说核心软件包更新时,所有30台机器的审查通知。
必须有更好的方法。 有什么build议么?
景观可能是你感兴趣的。 这是用于pipe理大型Ubuntu部署的“官方”pipe理工具,Canonical可能非常热衷于为您使用它。
重新编辑:
首先,一个免责声明; 我没有使用Debian或Ubuntu的镜像,所以我不熟悉这个软件。
其次,看起来apt-mirror将是一个“太重”的解决scheme,我的道歉。 最初的想法是,你将有一个单独的testing机器(或testing环境,可能是一个虚拟机?)来部署更新。 一旦你对更新的性能感到满意,你可以把这个包放到你的“部署”镜像中(这里有来自官方的本地镜像,还有一个用于更新的次镜像)。 然后,远程机器将在预先设定的时间运行一次更新,并将其从“部署”镜像中拖到每台机器上,一个cron作业,包括:
apt-get update && apt-get upgrade --quiet --assume-yes
不幸的是,当我开始仔细阅读细节时, apt-mirror似乎会拉扯各种各样的东西,而不仅仅是你之后的包装。 所以,我会放弃这个想法,虽然这个概念有一些优点。
一名同事发现并简要介绍了apt-dater,这是一个“基于terminal的远程软件包更新pipe理器”。
您使用基于curses的界面来pipe理所有主机或主机组中的更新。支持完整的apt会话的logging,包括可能遇到的任何错误等。
依靠受pipe机器上的ssh和sudo。
没有用过我自己,所以我不能认可它,但它听起来接近你正在寻找。
由于您已经在使用Puppet,所以最简单的方法(以及更改控制/跟踪目的)是指定您希望安装在puppet清单中的软件包的所需版本。 你留意安全公告列表,当你使用的东西来自你,只需更新Puppet来说“安装这个包的新版本”。 假设你在你的清单上使用了版本控制,那么你就知道什么时候“策略”被改变了,并且来自Puppet的报告准确地显示了实际更改的时间(这样你就可以轻松地将它与任何后来的日志事件关联起来)。
看看clusterssh(apt-get install clusterssh):
$ cssh server1 server2 server3 …
以前没有真正想过,我的第一个想法是类似于艾利的build议,特别是如果你已经有了testing环境。
基本上,您将生产机器设置为从您自己的本地回购库自动升级,并且只有在将testing环境升级到所运行的最新版本后,才能更新此回购。
Apticron不能很好地扩展,它被devise成运行在非常小的环境中,但是它确实有一些好处:
有时候我写了一个低级/脏的自动化结构脚本(fabfile)以满足类似的要求,你可以在以下url查看: