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


9

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

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

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


4
我会避免安装操作系统提供的软件包。首先,您真的不知道发行版提供程序可能进行了哪些自定义(配置文件位置等)。例如,如果您在发行版1.6.3上安装了Nginx 1.8.0,然后在发行版上进行了安装,会发生什么情况?跳到1.9.9?您的自定义安装有什么用?通常,除非您想在服务器的整个生命周期内维护自定义的OS安装否则不要与OS提供的任何东西搞混。对于更高版本的操作系统提供的应用程序,请以或类似方式安装它。/usr/local
Andrew Henle

很好,我对此反驳是:例如,以nginx为例,最新的稳定版本为1.8.0,最新的旧版本为1.6.3,如果在1.6.3的发行版中发现了安全性错误,该怎么办? ?
GiggleSquid '16

5
Red Hat发现安全漏洞后,必须更新受影响的软件,以限制任何潜在的安全风险。如果该软件是当前受支持的Red Hat Enterprise Linux发行版中软件包的一部分,则Red Hat,Inc.承诺会尽快发布可修复此漏洞的更新软件包。...(续)
安德鲁·亨利

5
通常,有关给定安全漏洞的公告会附带一个补丁(或解决该问题的源代码)。然后将该补丁应用于Red Hat Enterprise Linux软件包,由Red Hat质量保证团队进行测试,并作为勘误更新发布。... 您是否打算注册所有相关内容?
Andrew Henle

Answers:


9

通常,我会尽力使用系统默认软件包。

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

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

3
您可以添加的另一件事:缺点。您的雇主(如果适用)是否知道您正在使用公司系统执行此操作,尤其是在他们正在支付支持费用的情况下?除其他因素外,公司使用受支持的发行版可能有法律原因,如果例如必须保护用户数据,则自行滚动可能会给公司带来责任问题。如果您不支持的家庭安装软件包由于错过了安全修复程序而泄露了用户数据,那么您将无法再指向Red Hat并说:“我们正在运行他们的操作系统,并且向他们付费以保持最新。”
Andrew Henle

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的观点。Remi恰好是Red Hat的一名雇员,还负责RHEL / CentOS中的PHP软件包。因此,我知道他的包裹将是高质量的,而且过去一直如此。它们是系统软件包的直接替代品,并且运行良好。

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


总体而言,您需要基本系统的稳定性,但是Web应用程序的更改要比诸如业务软件之类的更改快得多,并且服务器需要跟上更新的速度。因此,我选择了针对性的点,在这些点上,升级软件包将获得明显的好处,而几乎没有额外的管理开销(又称工作)。


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存储库所推送的内容进行调整。相反,请评估您是否确实需要软件包的更新版本,尤其是您的特定要求是什么,应该解决的问题以及带来的风险。

通常,如果发现自己不断需要更新的软件和/或需要相同软件包的多个并行版本才能使事情正常运行,通常表明您做错了事。


1
如果打包者知道他在做什么,则可以安全地用较新版本替换某些系统软件包(例如用户应用程序),而不会造成不良影响。但是以这种方式升级并不安全。尝试这样做是导致您提到的ABI错误的原因。不幸的是,打包人员似乎并不了解如何可以安全升级以及如何进行升级。甚至红帽公司也偶尔会犯错。OTOH,软件集合是使用屁股的皇家痛苦……
Michael Hampton

1
nginx是这样的“多合一”软件包之一。但是,httpd(libapr依赖)和mysql(libmysqlclient依赖)尤其不是。这两个包的不良更新已经造成的错误pythonphp我过去。麻烦在于,除非您知道要查找的内容,否则不容易知道一个包如何与另一个包交互(翻译:之前已被其烧掉)。
马修·伊夫

2
您可以升级诸如MariaDB之类的东西而没有任何实际问题,因为它带有兼容性库,允许与较早系统版本链接的程序继续运行。您只需要记住安装该软件包即可(如果没有,yum应该会抱怨)。PHP更复杂,因为它具有许多依赖关系,还必须与之保持最新关系,并且如果打包程序没有这样做,则打包程序会变得无用。幸运的是,由于remi还是RHEL的PHP​​维护者,他知道所有这些都是什么,他的软件包还不错。
迈克尔·汉普顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.