恢复失败的UNIX软件包升级的最佳做法?

  • 当通过像Aptitude这样的软件包pipe理器来升级或安装一个软件包时,你会怎样确保一切正常?

  • 如果软件包pipe理器在运行后会破坏某些东西,是否有清单或计划从中恢复?

  • 有什么方法可以最大限度地减less更新包pipe理器时发生中断的风险,如果是这样的话:你是怎么做到的?

升级后确保一切正常

  • 升级前仔细检查软件包列表中的更改。 我在这个部门看到的很多问题都是人们盲目地信任这些工具,然后却没有注意到apache因为其他漏洞而离开了。

  • 升级时检查apt的输出。 如果事情再次发生,这可以立即提供反馈。

  • 有一个适当和深入的监测解决schemeconfiguration。 Nagios将是一个开始。

紧急计划

  • 准备好当前备份。

  • 知道你在做什么。 不要因为闪光灯而按下button。

  • 切换到热备份服务器。

最大限度地降低风险

  • 只使用您的发行版中的软件包。

  • 只使用来自同一版本的软件包。

  • 不要安装非打包软件。

  • 不要安装外部软件包。

  • 先在您的QA服务器上尝试升级。

监测和testing。 监控确保它仍然正常运行(包pipe理器是否支出),如果您正在进行重大升级,则事先进行testing。 虚拟化可以帮助您轻松复制生产环境,自动化可以帮助您构build生产副本,并且拥有永久的临时环境可以为您提供尝试的地方。

当您进行升级或任何非平凡的维护时,您应该将整个过程完全脚本化,包括回滚和升级后testing。

“系统和networkingpipe理的实践”是系统pipe理员的一本好书,描述了这些过程以及如何把清单等放在一起。

我与rpmyum / yumex ,但它翻译。

对于正在升级的关键软件包,我只是正常使用软件包,以确保其正常工作。 如果我升级bind ,那么我会做一些我希望成功的DNS请求。 如果我升级Apache httpd然后我打开一些网页。 如果我升级open-office那么我打开一两个文件。

极less数情况下,当软件包升级离开东西时,我的恢复过程是:

  1. 卸载失败的软件包(有时我必须“强制”卸载)
  2. 手动删除卸载后留下的任何临时或configuration文件
  3. 重新安装失败的升级包
  4. testing

如果在上面的步骤#4之后再次失败,那么我重复一次,但是回到以前的版本。

在任何重大升级之前,我会确保我的备份是最新的。 当我进行升级时,这只保留了一次,以便发现新版本与我的video卡不兼容,并被logging在案。 (我没有完全阅读发行说明,对我感到羞耻。)在升级过程中,当硬盘发生故障时,它也救了我一次。

因此,要回答关于最小化风险的第三个问题:

  • 备份!
  • 始终阅读发行说明
  • 如果你不是第一个升级,而且你对此感到紧张,请查看互联网,看看别人是否在抱怨问题
  • 准备好恢复盘 – 对于大多数现代Linux发行版,安装盘也是一个恢复盘。 找出你的分配提供了什么恢复机制。 如果可能的话,通过CDRom启动进入恢复模式,以便了解它是如何工作的,以便了解如何从恢复模式切换到安装。