这是一个开放式的问题,但我希望对这个主题进行build设性的,有益的讨论。
因此,为了澄清这个问题:在运行CentOS 7(或任何其他Linux发行版/版本)的服务器上,最好是坚持使用Base / EPEL回购软件包的版本,还是可以获得最新的稳定版本形成包网站? 在这种情况下,我更具体地指像nginx,MariaDB和PHP 7这样的软件包。例如,在EPEL版本1.6.3上安装nginx 1.8.0有什么优点和缺点? 这两种方式是否存在性能差异或安全风险?
欢迎所有的讨论和经验,请尝试引用资源和事实。
一般来说,我很努力地使用系统默认的软件包。
但是,这是不可能的。 做一个有教养的select,你必须回答这些问题:
Matthew Ife和Shodanshok的答案总的来说涵盖了这些问题,但是我想通过将问题放在上下文中来解决您的具体问题,因为这正是我pipe理的这些types的系统。
我目前用于部署PHP / MySQL Web应用程序的版本是:
首先,我们来考虑一下为什么我们select一个特定的发行版或套件。 要么我们重视最新function的稳定性,要么我们重视稳定性的最新function。 一般情况下都不可能有同样的分布,因为稳定软件需要时间修复错误,添加新function会引入错误,从而导致不稳定。
作为一般规则,我希望运行该应用程序的操作系统尽可能地稳定,但是具有相当现代的function集。 因此,我会selectCentOS 7而不是CentOS 6,虽然现在已经很老了,但它仍然可以工作 ,但是在支持生命周期中没有太多的时间,所以我不会把它用于新的项目。
但是,后来我遇到了CentOS中包含的nginx版本太旧,没有一些必要的function和bug修复的问题。 因此,我去寻找替代软件包,发现nginx.org分布自己的。 我几乎立即转向他们,并发现他们长期以来非常稳定。
然后是PHP。 我从历史上知道,随CentOS一起发行的PHP版本将成为它唯一获得的版本,只会获得安全更新; 没有新function或错误修复。 因此,如果我使用这些软件包,一旦它不在上游支持范围内,我将最终无法运行现代PHP Web应用程序。 因此有必要replace这些。
从长期的经验中,我了解到最好用PHP追踪bugfix版本,而不是简单地冻结一个版本,只采取安全修复,因为我运行的web应用程序也将被更新,并将需要这些bug修复。 所以在评估了许多不同的PHP包之后,我决定了remi的pacakges。 Remi恰好是Red Hat的员工,同时也负责RHEL / CentOS中的PHP软件包。 所以我知道他的包装是高质量的,而且他们一直都是。 他们是系统软件包的替代品,并且完美地工作。
最后我们来到MariaDB。 您可以select在这里保留系统软件包,不会受到任何不良影响。 我select切换到MariaDB的10.0软件包(很快会转到10.1),以便利用TokuDB和CentOS 5.5版本中没有的其他一些性能增强function,并且永远不会获得重大升级。
总体而言,您需要基础系统的稳定性,但是networking应用程序的变化要比业务线软件快得多,而您的服务器需要跟上。 因此,我select了一些有针对性的点,升级软件包将获得明显的好处,但额外的pipe理开销(又名工作)。
简短的回答是,总是使用系统存储库提供的内容。 要非常小心你所安装的软件库。 有些只是很糟糕。
你不应该用更新的版本来覆盖系统软件包,Redhat是非常仔细地devise和编排的,如果你这样做的话你可能会遇到一些奇怪的错误或问题。
有些事情要考虑和注意哪些可能会导致问题包括。
php包,但没有更新引入问题的pear包。 永远不要从源代码构build软件包,并将它们安装在那些软件包的顶部。 这会破坏您的系统包的完整性,导致奇怪的ABI问题,如接收unresolved symbol或undefined reference消息。 系统保持一个可靠和准确的索引,以确定在给定的系统上部署了哪些软件,以确保它们能够正常工作,这就是我们首先使用RPM的原因。
可行的(和Redhat祝福的)解决这个问题的方法是使用软件集合。
http://www.softwarecollections.org
它安装的是软件及其“新”依赖关系。 这可能会使您的环境中应用软件包变得稍微困难一点,但是可以保护您的系统免受奇怪的错误或问题的困扰。 它还将软件包安装在自己的名称空间中,让您可以并行安装软件包的多个版本。
该网站提供了如何安装和激活这些软件包的说明,其中包含大部分人们在CentOS和Redhat(特别是EL6)旧版本中所错过的内容。 我已经成功地从这个网站使用了一些东西。
请注意,您在这个问题上的默认位置不应该从Redhat存储库推送的位置进行调整。 相反,要评估一下你是否确实需要一个软件包的更新版本,特别是你的具体要求是什么,它应该修复哪些问题以及它引入了哪些风险。
作为一般规则,如果你发现自己经常需要更新的软件和/或需要同一个软件包的多个并行版本才能使其工作,通常是一个指标,你做错了什么。