在服务器上安装新服务或软件,基本上有两种方法能够实现。老式方法是得到源代码再通过编译,新方法是采用安装包的形式。当客户询问咱们采用哪一种方法更好时,咱们的回答是,尽量地使用安装包的形式,即便您必需要用源代码编译来生成安装包。安全
人们采用新的源代码进行编译的时候,是由于想要得到更新的软件版本,而不想使用系统当时所分配的版本。若使用的是CentOS,人们更想采用更新的版本。这是由于系统自带版本主要考虑的是稳定性,CentOS尤其如此,软件包版本随机封装发布,五年不变。服务器
这种作法在许多方面有很好的表现,可是当今时代,一些关键软件如PHP或MySQL,其源代码开发速度快,致使不少系统跟不上时代,不安全,性能也不够好。ide
尽管从源代码开始构建软件或服务有不少麻烦,可是有两项重要的工做,即系统升级和维护必需要从源代码编译开始。性能
以源代码为基础实现升级很难,由于它受限于源代码构建流程和安装程序,并且升级的时候,思惟不清晰、流程不明朗。可是,在现实世界中,必需要进行系统升级,以便解决与安全、稳定性及功能性有关的问题。很难对源系统进行升级,即便升级了,也会由于构建环境不一样,即源代码来源不一样和配置不一样而问题百出。blog
要以源代码为基础构建软件/程序,必须首先得到正确可靠的源代码,而这些源代码不是存放在同一位置。这意味着,若是您要构建相同版本的服务/程序,可能每台服务器要使用不一样的源代码,由于源代码有时间差别及位置差别。ci
即便您想构建的是同一“版本”的软件,可是由于构建时采用的源代码来源不一样、配置方案不一样以及编译器不一样,因此,您最终也可能构建出的是不一样的软件。开发
例如,因为使用编译器时的特定场合,即源代码、环境及构建选配项的共同缘由,致使在MySQL中产生了一个重要的安全方面的bug。get
可是,相比而言,安装包功能更强大,使用更灵活。由于它的全部组件是做为一个总体在运行,有预设的前提条件,可以用于系统升级,容易管理。可是,如上文所述,对于特定的Linux而言,可能已通过时了。编译器
要解决此问题,有两种解决方案,要么获取一个更好的安装包库,要么从源代码开始构建新的安装包。博客
获取更好的安装包库相比较而言是一种最简单的解决方案,以CentOS为例,使用最近的Fedora repo就能够轻易地获取最新的包。一样地,供应商和MySQL项目组也会按期发布最新版的RPM和deb。
若是没有合适的安装包,您也能够本身用源代码本身建立包,这看起来彷佛相悖于上述建议:不要用源代码构建软件,但事实上,这是一种很好的折中的方法。您一次获取源代码,仅编译一次,生成一个包,这个包可无数次的用于全部的服务器。这总比在每台服务器上构建一个软件要好的多,并且,随着时间的推移,只对包进行管理真的是有不少的好处。
总的来讲,您应该尽可能避免使用源代码构建软件/服务,应依赖供应商或更新库来获取最好的安装包。这样您的系统会有更好的性能,更加安全,用起来更使人满意。
(Authored by Steve Mushero / ChinaNetCloud CEO & CTO 本博客英文原文请点击查看)