我們爲何採用安裝包方式而不是編譯或二進制方式安裝新程序/軟件呢?

在服務器上安裝新服務或軟件,基本上有兩種方法可以實現。老式方法是獲得源代碼再經過編譯,新方法是採用安裝包的形式。當客戶詢問我們採用哪種方法更好時,我們的回答是,儘可能地使用安裝包的形式,即使您必須要用源代碼編譯來生成安裝包。

人們採用新的源代碼進行編譯的時候,是因爲想要獲得更新的軟件版本,而不想使用系統當時所分配的版本。若使用的是CentOS,人們更想採用更新的版本。這是因爲系統自帶版本主要考慮的是穩定性,CentOS尤爲如此,軟件包版本隨機封裝發佈,五年不變。

這種做法在許多方面有很好的表現,但是當今時代,一些關鍵軟件如PHP或MySQL,其源代碼開發速度快,導致很多系統跟不上時代,不安全,性能也不夠好。

儘管從源代碼開始構建軟件或服務有很多麻煩,但是有兩項重要的工作,即系統升級和維護必須要從源代碼編譯開始。

以源代碼爲基礎實現升級很難,因爲它受限於源代碼構建流程和安裝程序,而且升級的時候,思維不清晰、流程不明朗。但是,在現實世界中,必須要進行系統升級,以便解決與安全、穩定性及功能性有關的問題。很難對源系統進行升級,即使升級了,也會因爲構建環境不同,即源代碼來源不同和配置不同而問題百出。

要以源代碼爲基礎構建軟件/程序,必須首先獲得正確可靠的源代碼,而這些源代碼不是存放在同一位置。這意味着,如果您要構建相同版本的服務/程序,可能每臺服務器要使用不同的源代碼,因爲源代碼有時間差異及位置差異。

即使您想構建的是同一“版本”的軟件,但是因爲構建時採用的源代碼來源不同、配置方案不同以及編譯器不同,所以,您最終也可能構建出的是不同的軟件。

例如,由於使用編譯器時的特定場合,即源代碼、環境及構建選配項的共同原因,導致在MySQL中產生了一個重要的安全方面的bug。

但是,相比而言,安裝包功能更強大,使用更靈活。因爲它的所有組件是作爲一個整體在運行,有預設的前提條件,能夠用於系統升級,容易管理。但是,如上文所述,對於特定的Linux而言,可能已經過時了。

要解決此問題,有兩種解決方案,要麼獲取一個更好的安裝包庫,要麼從源代碼開始構建新的安裝包。

獲取更好的安裝包庫相比較而言是一種最簡單的解決方案,以CentOS爲例,使用最近的Fedora repo就可以輕易地獲取最新的包。同樣地,供應商和MySQL項目組也會定期發佈最新版的RPM和deb。

如果沒有合適的安裝包,您也可以自己用源代碼自己創建包,這看起來似乎相悖於上述建議:不要用源代碼構建軟件,但事實上,這是一種很好的折中的方法。您一次獲取源代碼,僅編譯一次,生成一個包,這個包可無數次的用於所有的服務器。這總比在每臺服務器上構建一個軟件要好的多,而且,隨着時間的推移,只對包進行管理真的是有很多的好處。

總的來說,您應該儘量避免使用源代碼構建軟件/服務,應依賴供應商或更新庫來獲取最好的安裝包。這樣您的系統會有更好的性能,更加安全,用起來更令人滿意。



(Authored  by  Steve  Mushero  /  ChinaNetCloud  CEO  &  CTO  本博客英文原文請點擊查看

發佈了65 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章