Linux – 跨多个服务器的软件包版本维护

问题 :如果今天启动了服务器1,则所有已安装的软件包将基于当前的上游版本。 如果我明天启动server2,所有已安装的软件包将基于上游版本,除了这次,在server1和server2之间的24小时差异内,某些软件包的上游版本可能已经更改。 所以我们最终与server1和server2在安装包版本方面不同步。

我的目标是让整个基础架构中的所有服务器保持相同的“快照”版本,但仍支持定期更新过程。

例。 server1今天被抢购了。 作为捕捉过程的一部分,我运行以下命令:

yum update --downloadonly --downloaddir=/path/to/my/repo/base/v1 yum update --enablerepo=mybaserepo 

这将做什么是拉下所有基于当前上游版本(快照)的RPM。 这允许我从“mybaserepo”托pipeRPM,所以当我更新其他服务器时,他们可以从我的仓库直接获得RPM,而不必担心上游RPM不再可用。

我正在考虑实施一个月度升级周期,所以v1在5.1.2013上快照,现在是6.1.13。 我当时正在考虑的一个stream程是:

  • 将所有其他服务器更新为快照版本1
  • 使用上面给出的yum命令将快照服务器更新到版本2

这个循环每月重复一次。 我想这个策略解决了两个问题:

  1. 不断更新服务器以确保上游补丁一致
  2. 如果没有在快照服务器上进行第一次testing(30天),则不推出新的软件包版本

诚然, 没有绝对的单一答案,因为有很多方法来剥皮猫。 我正在寻找的是一种通用的,业界公认的做法,它直接回答了更新服务器的问题,同时还确保了企业环境中所有服务器的相同版本。

  1. 做你自己的repo(rsync官方的centos镜像)
  2. 只有当您想要为您的所有服务器提供新的更新时才更新回购
  3. 将您的服务器指向您当地的回购点。

你可以使用yum –downloadonly,但你仍然需要创build一个回购。 如果您只是简单地反映现有的公共回购协议,并且只在需要时进行更新,那么这项工作已经完成。

yoonix的回答是投资于主动更新的好方法,我们都知道这是我们应该做的。 但是,如何处理实际情况也是一件好事。 :)我可能会推荐的一件事是cronjob会做这样的代码草图(未经testing):

 #!/bin/bash email="[email protected]" sshuser="monitoringuser" servers=$(cat my-servers.txt) when=$(date '+%Y%m%d-%H%M%S') for server in servers; do ssh $sshuser@$server 'rpm -qa |sort' > server-$server-rpmqa-$when.txt done diffreport=diff-rpmqa-$when.txt diff -u server-*-rpmqa-$when.txt > $diffreport mail -a $diffreport -s "Package diff report for $when" $email 

你可以看到周期性地运行'rpm -Va'(也许每周一次)并发送这些信息,检查特洛伊木马,configuration漂移等等也是有用的。

当然,这些脚本会产生只有高度技术人员才能读懂的“报告”,所以你可以考虑使用一个工具。 正如您现在可能期待的那样,我的公司Metafor Software就是这样一个工具! 🙂