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