这是一个开放式的问题,但我希望对此主题进行建设性和有益的讨论。
因此,需要澄清一个问题:在运行CentOS 7(或其他任何Linux发行版/版本)的服务器上,最好坚持使用Base / EPEL存储库中的软件包版本,还是可以得到最新的稳定版本?形成打包站点?在这种情况下,我更具体地指的是像nginx,MariaDB和PHP 7这样的软件包。例如,在EPEL 1.6.3上安装nginx 1.8.0的利弊是什么?两种方式之间是否存在性能差异或安全风险?
欢迎所有讨论和经验,请尝试引用资源和事实。
这是一个开放式的问题,但我希望对此主题进行建设性和有益的讨论。
因此,需要澄清一个问题:在运行CentOS 7(或其他任何Linux发行版/版本)的服务器上,最好坚持使用Base / EPEL存储库中的软件包版本,还是可以得到最新的稳定版本?形成打包站点?在这种情况下,我更具体地指的是像nginx,MariaDB和PHP 7这样的软件包。例如,在EPEL 1.6.3上安装nginx 1.8.0的利弊是什么?两种方式之间是否存在性能差异或安全风险?
欢迎所有讨论和经验,请尝试引用资源和事实。
Answers:
通常,我会尽力使用系统默认软件包。
但是,这有时是不可能的。要做出明智的选择,您必须回答以下问题:
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应用程序的更改要比诸如业务软件之类的更改快得多,并且服务器需要跟上更新的速度。因此,我选择了针对性的点,在这些点上,升级软件包将获得明显的好处,而几乎没有额外的管理开销(又称工作)。
简短的答案是,始终使用系统存储库提供的内容。要非常小心,您也要安装哪些存储库。有些只是很糟糕。
您不应该使用较新的版本来编写系统软件包,Redhat是经过精心设计和精心设计的,如果这样做,您最终可能会遇到奇怪的错误或问题。
需要考虑和注意哪些问题可能会引起问题。
php
系统上放置了一个软件包,但没有更新pear
引入问题的软件包。切勿从源代码构建软件包并将其安装在那里的软件包之上。这会破坏系统软件包的完整性,从而可能导致奇怪的ABI问题,例如接收unresolved symbol
或undefined reference
消息。对于在给定系统上已部署了什么软件,系统必须保持可靠且准确的索引,以确保它们都能正常工作,这非常关键,这就是我们首先使用RPM的原因。
解决此问题的可行方法(并受到Redhat的祝福)是使用软件集合。
它安装的是软件及其在其根目录中的“新”依赖项。这会使在您的环境中应用程序包变得稍微困难一些,但确实可以保护系统免受奇怪的错误或问题的影响。它还将软件包安装在它们自己的名称空间中,使您可以并行安装软件包的多个版本。
该网站提供了有关如何安装和激活这些软件包的说明,其中包含了人们在旧版本的CentOS和Redhat(尤其是EL6)上所错过的大多数内容。我已成功使用此网站上的某些内容。
请注意,您在此问题上的默认位置不应是根据Redhat存储库所推送的内容进行调整。相反,请评估您是否确实需要软件包的更新版本,尤其是您的特定要求是什么,应该解决的问题以及带来的风险。
通常,如果发现自己不断需要更新的软件和/或需要相同软件包的多个并行版本才能使事情正常运行,通常表明您做错了事。
nginx
是这样的“多合一”软件包之一。但是,httpd
(libapr依赖)和mysql
(libmysqlclient依赖)尤其不是。这两个包的不良更新已经造成的错误python
和php
我过去。麻烦在于,除非您知道要查找的内容,否则不容易知道一个包如何与另一个包交互(翻译:之前已被其烧掉)。
/usr/local