![在生产服务器上运行“apt-get upgrade”(就稳定性而言)通常是安全的吗?](https://linux22.com/image/612909/%E5%9C%A8%E7%94%9F%E4%BA%A7%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E8%BF%90%E8%A1%8C%E2%80%9Capt-get%20upgrade%E2%80%9D%EF%BC%88%E5%B0%B1%E7%A8%B3%E5%AE%9A%E6%80%A7%E8%80%8C%E8%A8%80%EF%BC%89%E9%80%9A%E5%B8%B8%E6%98%AF%E5%AE%89%E5%85%A8%E7%9A%84%E5%90%97%EF%BC%9F.png)
我经常登录到我的 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-upgrade
vs. aptitude full-upgrade
。安装仍然是一个好主意apt-listchanges
,这样您将获得有关更新软件包中的更改的信息以及取消升级的选项。
答案4
不。如果这是您管理的生产实例,作为您工作的一部分,应该明确地将软件包固定、编码和封装在您的编排解决方案中(即 ansible、chef、容器镜像等)。如果您允许软件包管理器升级软件包,那么在软件包紧密耦合的生态系统中,您最终会破坏您的服务可用性。
其他提出相反建议的人根本不知道自己在说什么,而且出于某种原因,尽管对服务可用性缺乏专业关注,但仍信心十足。你的工作不是更新软件包 - 你的工作是管理服务可用性、编排和检测。