我应该使用(官方)存储库中的 CentOS 软件包版本,还是软件包的最新稳定版本?

Gig*_*uid 9 linux package-management centos

这是一个开放式问题,但我确实希望对这个话题进行建设性和有益的讨论。

所以澄清这个问题:在运行 CentOS 7(或任何其他 Linux 发行版/版本)的服务器上,最好坚持使用 Base/EPEL 存储库中的软件包版本,还是可以获得最新的稳定版本形成包裹站点?在这种情况下,我更具体地说是指 nginx、MariaDB 和 PHP 7 等软件包。例如,在 EPEL 1.6.3 版上安装 nginx 1.8.0 的优缺点是什么?这两种方式是否存在任何性能差异或安全风险?

欢迎所有讨论和经验,请尽量引用资源和事实。

sho*_*hok 9

通常,我非常努力地使用系统默认包。

然而,这有时是不可能的。要做出明智的选择,您必须回答以下问题:

  1. 发行版的软件包是否提供了您需要的功能?如果是这样,您甚至不需要搜索其他软件包;只需使用系统存储库提供的包即可。
  2. 您是否需要官方支持和/或必须遵守特定政策?如果是这样,您就不能使用非官方存储库。在这种情况下,您可能为您的软件项目使用了错误的发行版。
  3. 如果前面问题的答案是“否”,则必须搜索更新的软件版本。是否存在具有所需软件包的公认存储库?如果是这样,请使用它。
  4. 如果不存在特定的、信誉良好的存储库,则必须使用上游软件。在这种情况下,尽量使用打包软件(例如:RPM、DEB、ecc)而不是普通的 tar.gz(或类似的)。

  • 您可以添加的另一件事:缺点。您的*雇主*(如果适用)是否知道您正在使用公司系统执行此操作,尤其是在他们为支持付费的情况下?除其他外,公司使用受支持的发行版可能存在*法律* 原因,并且您自己的发行版很可能使公司面临责任问题,例如,如果必须保护用户数据。如果您的不受支持的家庭安装的软件包因​​为您错过了安全修复而泄露了用户数据,您就不能再指着 Red Hat 说:“我们在运行他们的操作系统,我们付钱让他们保持最新状态。” (3认同)

Mic*_*ton 6

Matthew Ife 和 shodanshok 的回答涵盖了一般问题,但我想通过将问题放在上下文中来解决您的具体问题,因为我管理的正是这类系统。

我当前用于部署 PHP/MySQL Web 应用程序的构建是:

首先,让我们考虑为什么选择特定的发行版或软件包集。要么我们看重稳定性胜过最新功能,要么我们看重最新功能胜过稳定性。通常不可能在同一个发行版中同时拥有两者,因为稳定软件需要时间来修复错误,而添加新功能会引入错误,从而导致不稳定。

作为一般规则,我希望运行应用程序的操作系统尽可能稳定,但具有相当现代的功能集。因此,我会选择 CentOS 7 而不是 CentOS 6,CentOS 6 在这一点上已经很老了,虽然它可以工作,但它的支持生命周期所剩时间不多,所以我不会将它用于新项目.

但是,我随后遇到了 CentOS 附带的 nginx 版本旧并且没有一些必需的功能和错误修复的问题。因此我去寻找替代包,并发现 nginx.org 分发他们自己的。我几乎立即切换到它们,并发现它们在长期内非常稳定。

然后是PHP。我从历史上知道 CentOS 附带的 PHP 版本将是它唯一获得的版本,并且只会获得安全更新;没有新功能或错误修复。因此,一旦上游不再支持,如果我使用这些包,我最终将无法运行现代 PHP Web 应用程序。因此,也有必要更换这些。

从长期的经验中,我了解到最好使用 PHP 来跟踪错误修复版本,而不是简单地冻结某个版本并仅进行安全修复,因为我运行的 Web 应用程序也将更新并需要这些错误修复。所以在评估了许多不同的 PHP 包之后,我决定使用 remi 的 pacakges。Remi 恰好是 Red Hat 员工,同时还负责 RHEL/CentOS 中的 PHP 包。所以我知道他的包裹质量很高,而且一直如此。它们是系统包的直接替代品,工作完美。

最后我们来到了 MariaDB。您可以选择将系统包保留在此处而不会受到不良影响。我选择切换到 MariaDB 的 10.0 软件包(很快将转到 10.1)以利用 TokuDB 和其他一些在 CentOS 附带的 5.5 版本中不可用的其他性能增强,并且它永远不会获得重大升级。


总体而言,您需要基本系统的稳定性,但 Web 应用程序的变化速度比业务线软件快得多,而且您的服务器需要跟上。因此,我选择了目标点,在这些点升级包将获得明显的好处,而几乎没有额外的管理开销(也就是工作)。


Mat*_*Ife 5

简短的回答是,始终使用系统存储库提供的内容。要非常小心的软件仓库你就安装了。有些只是很糟糕。

您不应该用较新的版本覆盖系统包,Redhat 的设计和编排非常仔细,如果这样做,您最终可能会遇到奇怪的错误或问题。

一些需要考虑和注意的可能导致问题的事情包括。

  1. 一些存储库只是维护不善。他们不更新包的安全修复程序。
  2. 人们倾向于编写错误的 RPM,他们不会将配置文件标记为配置文件,这会在您每次更新时覆盖您的配置,这可能会导致问题。我以前见过这个问题。
  3. 他们没有充分正确地声明他们的依赖关系。我以前也见过这种情况,其中一个php包被放在系统上,但没有更新pear引入问题的包。
  4. 安装多个提供相同包名的存储库可能会导致系统出现无法预料的依赖性问题。
  5. 某些软件包会覆盖或重写其他软件包所依赖或期望存在的系统配置文件。这会导致您可能意想不到的其他软件包出现问题。

永远不要从源代码构建包并将它们安装在现有包的顶部。这会破坏您的系统包完整性,从而导致奇怪的 ABI 问题,例如接收unresolved symbolundefined reference消息。对于在给定系统上部署了哪些软件,系统维护可靠且准确的索引以确保它们彼此正常工作非常重要,这就是我们首先使用 RPM 的原因。

解决这个问题的可行(和 Redhat 祝福)方法是使用软件集合。

www.softwarecollections.org

它在自己的根目录中安装软件及其“新”依赖项。这可能会使在您的环境中应用程序包稍微困难一些,但确实可以保护您的系统免受奇怪的错误或问题的影响。它还在它们自己的命名空间中安装包,让您可以并行安装包的多个版本。

该网站提供了如何安装和激活这些软件包的说明,它包含了人们在旧版 CentOS 和 Redhat(尤其是 EL6)上错过的大部分内容。我从这个网站成功使用了一些东西。

  • MySQL 5.6 和 MySQL 5.7,MariaDB。
  • PHP 5.5 和 PHP 5.6
  • 阿帕奇 2.4

请注意,您在此问题上的默认立场不应该根据 Redhat 存储库推送的内容进行调整。相反,请评估您是否真的需要更新版本的软件包,特别是您的具体要求是什么、它应该修复哪些问题以及它引入了哪些风险。

作为一般规则,如果您发现自己不断需要更新软件和/或需要相同软件包的多个并行版本才能使工作正常进行,这通常表明您做错了什么。

  • 你可以毫无问题地升级像 MariaDB 这样的东西,因为它带有一个兼容性库,允许链接到旧系统版本的程序继续工作。您只需要记住安装该软件包(如果不安装,yum 应该会抱怨)。PHP 更复杂,因为它有很多依赖项,也必须与它一起保持最新,如果打包者不这样做,这些包比没用更糟糕。幸运的是,由于 remi 也是 RHEL 的 PHP 维护者,他知道所有这些是什么,而且他的包很好。 (2认同)