我负责管理我们的生产服务器(邮件,Web,数据库都在一台服务器上)和测试服务器。两者都是基于Debian构建的。但是,由于我对系统管理非常陌生,所以我只是在安装更新时遇到一些需要更新的内容,以便可以拥有更新的功能并修复错误。现在这是一个非常特殊的过程,我想减少它。您多久在服务器上执行一次升级?测试和生产之间的升级过程是否有所不同?您是否总是先升级任何测试服务器?您是对所有软件进行完整更新还是仅安装选定的更新?

#1 楼

我运行apt-get update -qq; apt-get升级-duyq每天。这样会检查更新,但不会自动执行。关于维护已打补丁系统的安全问题,我发现如果我在两次打补丁之间放置的时间过长,我最终会得到一堆想要升级的软件包,这不仅让我升级一到两个,更使我感到恐惧每个星期左右。因此,我倾向于每周执行一次升级,如果优先级较高,则每天进行一次。这样做还有一个好处,那就是知道哪个软件包破坏了系统(例如,一次只升级几个)。我也有一个“回滚计划”,以防万一我无法修复系统。 (由于我们的大多数服务器都是虚拟服务器,因此此回滚计划通常包括在升级之前拍摄快照,如有必要,我可以还原该快照)。或过去4年中的两次,而且这是在高度定制的系统上进行的-因此您不必过于偏执:)

评论


我非常努力地每隔30天就触摸每台服务器。我现在有80多台服务器。我按功能组或操作系统进行批量处理。

–托马斯·丹顿(Thomas Denton)
09年5月18日在17:13

我们有一个cron脚本,该脚本每天在我们的SLES / OpenSuSE盒中运行;当发现需要软件包时,它将故障单提交给我们的故障单系统中的系统管理队列。 (它跟踪/ tmp文件中之前提交过的文件,从而不会向队列发送垃圾邮件。)

–卡尔·凯茨克(Karl Katzke)
09年6月6日在22:23

Debian有两个软件包,apticron和cron-apt,它们做类似的事情,并在有可用更新的情况下向您发送电子邮件。 IME,apticron可以通过向您发送变更日志的方式来获得优势,因此您可以查看已更改的内容。

– David Pashley
09年6月6日在22:28

#2 楼

在先前的答案之上-还有一些更具体的Debian问题:您应该订阅debian-security-announce和debian-announce和/或查看Debian Security页面。

#3 楼

假设您正在运行Debian的稳定版本,那么大多数补丁将与安全性或漏洞相关,这意味着在任何给定软件包的版本之间不会有太多重大变化。根据debian补丁策略,补丁在被维护者转移到稳定分支之前也应该已经测试了一段时间。显然,这不会在打补丁时阻止破损,但在大多数情况下应该可以防止破损。应该保持最新。一旦知道补丁程序是稳定的,所有具有安全建议的软件包都应立即更新。

Debian通常是一种非常稳定的操作系统,不是一个您应该过分担心破坏性的操作系统,但请务必阅读在更新之前要更新的内容,并注意任何看起来很奇怪的内容。我也在/ etc /目录中使用VCS,以确保可以通过'git diff'命令看到任何配置文件更改。

#4 楼

我先进行试运行,看看将要更新什么。有时,库(在本示例中为libfoo)会更改其API,这会破坏我们自己编写/安装的程序。如果某些重要的库已更新,我将获取源代码并尝试在更新之前对其进行重新构建。例如apache等。我宁愿落后一年,也不要遇到随机损坏,除非更新很关键。 ,如果发行版要推送一些补丁,应该可以让您提前知道。

永远不要盲目升级/更新。不幸的是,知道发生了什么事情的任务落在了您身上,而不是您的发行版程序包管理器上,特别是如果您的系统支持程序员。

#5 楼

在我工作的地方,我们有一个相当广泛的过程,涉及使用称为PatchLink的软件来通知我们最重要的与安全相关的更新,并且我们会在测试后逐包应用这些更新。但是,我们有数千台服务器。

如果只有两台服务器,则过程应该简单得多。尽管我不认为“ apt-get更新/升级”是最好的选择。

我将监视正在运行的软件的补丁程序,并根据这些版本中的修补程序来决定何时升级。

既然您拥有测试服务器,显然,请始终先测试更新,然后再应用它们。

#6 楼

如此处所述,手动更新最好,因为您可以看到正在发生的事情。但是,对于大量服务器而言,这可能变得不切实际。空运行是一种标准做法,实际上,大多数程序包经理会在进行操作之前询问您。频繁的更新意味着一次就更少,一次出错也就更少。如果事情确实出错了,那么检查的候选人就更少了。软件包在较小的步骤中更新也稍好一些,通常,当程序员进行更新时,他们正在考虑从上一个版本升级到下一个版本,它们是否会在最后一个版本之外给予其他关注可能会有所不同,尽管这往往很重要主要是针对快速发展的软件。

并非所有更新都是无中断的。您需要注意这一点。有些服务器会重新启动服务,从而导致停机。滴答滴答)。这意味着您可以在工作台上更新一个,然后将流量从当前的交换到新的。对于数据库等服务而言,这可能更为复杂。
测试更新的能力。您应该拥有实际上是生产克隆的测试服务器(但不连接任何生产服务)。这些可以让您先测试更新。
一个好的备份策略,增量备份是理想的选择。你永远不会知道。始终比后悔要好。
要知道哪个时间活动最多,可以容忍的停机时间是什么级别。
知道如何回滚更新或特定程序包。
具有自己的软件包镜像,因此更新在服务器之间是一致且可预测的。这是迈向可信赖的体面无人值守系统的第一步。这意味着您可以更新镜像,在一台或多台测试计算机上运行更新,然后再让它自动退出。我度过了非常愉快的时光,可以适当地管理大约800台EPOS机器。
具有很高的一致性,这样您就可以知道,如果某些东西可以在这里工作,它将在那儿工作。

对于小型安装程序,这些可能在不同程度上具有过大的杀伤力,但应牢记。

通常来说,对于服务器发行版而言,更新通常相对容易。这是因为它们几乎总是只坚持错误修复和安全更新。但是,如果人们对系统做了一些奇怪的事情,或者您添加了其他软件包资源,则可能会遇到问题。

尽管这种情况相当少见,但他们有时还是会犯错并破坏次要软件包版本之间的兼容性。

#7 楼

我喜欢cron-apt来自动执行此过程,但是正如@dinomite在有关更新的另一个问题上指出的那样,专门配置它以自动执行与安全性相关的更新是一个非常聪明的想法-然后可以手动更新所需的内容。我一直在使用cron-apt进行所有更新,但实际上根据他的回答对此进行了更改。如果喜欢,您可能应该投票赞成他的答案,而不是这个答案。

#8 楼

在debian上,我安装了cron-apt并编辑其配置文件以将任何更改发送给我。这样,我会收到系统是否有更新的通知,并手动进行更新

#9 楼

与cron-apt一样,您应该查看无人值守升级软件包http://packages.debian.org/lenny/unattended-upgrades。

它非常易于配置,使您能够自动下载和应用安全更新,但保留其他更新以进行手动升级(或自行决定升级所有内容!)。

《 Ubuntu Server官方指南》有相当详细的部分,涵盖了无人值守升级包https://help.ubuntu.com/9.04/serverguide/C/automatic-updates.html

注意:根据您的谨慎/偏执程度,您可以首先对一组测试服务器进行滚动升级,然后如果没有问题,请让您的生产包装更新,尽管我个人没有到目前为止,遇到安全更新遇到的任何麻烦都会破坏(敲木头)...

还有一个配置选项,可在每次应用安全更新后将结果邮寄给您。另外,如果在更新过程中出现任何对话框或交互式提示,则需要系统管理员手动进行调整,它也会提及这些。

#10 楼

我个人关闭自动更新,并且不定期在我的环境中的服务器上对软件包进行任何形式的更新,除非:(a)我的系统中的一个软件包有重要的CERT咨询; (b)由于特定原因,我需要升级单个软件包; (c)操作系统或程序包即将终止,不再受支持,我们需要继续获得支持。我的理由是,升级时不知道要更改的内容,也不知道为什么会留有太大的破损空间。我已经做了14年这样的事情,而且效果很好。

#11 楼

除了提到的内容外,您还应该使用某种监视工具(Nagios或任何漂浮在您船上的东西)来向您发出更新警报。 !