在生产服务器上运行“apt-get upgrade”(就稳定性而言)通常是安全的吗?

在生产服务器上运行“apt-get upgrade”(就稳定性而言)通常是安全的吗?

我经常登录到我的 Ubuntu 12.04.2 服务器(运行 Postgres 9.2.4 并运行实时生产数据)并看到类似以下内容:

4 packages can be updated.
4 updates are security updates.

当然,这种情况每隔几天就会发生一次。我对自动更新不感兴趣(我睡觉时更改的东西越少越好),但我对始终保持服务器最新状态感兴趣,所以我的问题是:当我看到这样的输出时,是否总是认为可以安全运行apt-get upgrade,或者有时它会破坏某些东西。我知道补丁并不总是完美的(因此标题中引用了“总是”),但作为一般规则,是否认为运行它是安全的(特别是考虑到这是一个数据库服务器,而不是仅通过 Nginx 提供 CSS 文件的东西)?

答案1

一般来说,这是安全的。但是对于关键软件包(Postgres、Nginx 等),我建议将这些软件包固定到特定版本,这样它们就不会被更新。例如,当 Postgres 更新时,它将重新启动数据库服务器,这是您希望能够在计划停机时间安排的事情。

也就是说,在将升级推广到生产环境之前,最好先在暂存服务器上测试升级,因此这是您需要考虑添加到部署过程中的事情。

答案2

是也不是。大多数应用程序都还可以,但有些应用程序可能不太愿意升级。

我见过使用 1.6.29 到 1.6.30 版本的 java 的应用程序崩溃的例子。还见过 mysql 在 5.0.X 和 5.0.X+1 之间崩溃的情况(我不记得这里的确切数字了)。

系统应用程序基本上应该没问题,但是您应该仔细阅读服务器实际提供的应用程序的发行说明。

阅读 nginx 的更改,尝试了解是否有任何更改可能会影响您的特定设置。您使用的应用程序越高级,就越容易被破坏。

答案3

Aptitude 有更容易记住的命令:aptitude safe-upgradevs. aptitude full-upgrade。安装仍然是一个好主意apt-listchanges,这样您将获得有关更新软件包中的更改的信息以及取消升级的选项。

答案4

不。如果这是您管理的生产实例,作为您工作的一部分,应该明确地将软件包固定、编码和封装在您的编排解决方案中(即 ansible、chef、容器镜像等)。如果您允许软件包管理器升级软件包,那么在软件包紧密耦合的生态系统中,您最终会破坏您的服务可用性。

其他提出相反建议的人根本不知道自己在说什么,而且出于某种原因,尽管对服务可用性缺乏专业关注,但仍信心十足。你的工作不是更新软件包 - 你的工作是管理服务可用性、编排和检测。

相关内容