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

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

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

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

儘管從源代碼開始構建軟件或服務有不少麻煩,可是有兩項重要的工做,即系統升級和維護必需要從源代碼編譯開始。性能

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

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

即便您想構建的是同一「版本」的軟件,可是由於構建時採用的源代碼來源不一樣、配置方案不一樣以及編譯器不一樣,因此,您最終也可能構建出的是不一樣的軟件。開發

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

可是,相比而言,安裝包功能更強大,使用更靈活。由於它的全部組件是做爲一個總體在運行,有預設的前提條件,可以用於系統升級,容易管理。可是,如上文所述,對於特定的Linux而言,可能已通過時了。編譯器

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

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

若是沒有合適的安裝包,您也能夠本身用源代碼本身建立包,這看起來彷佛相悖於上述建議:不要用源代碼構建軟件,但事實上,這是一種很好的折中的方法。您一次獲取源代碼,僅編譯一次,生成一個包,這個包可無數次的用於全部的服務器。這總比在每臺服務器上構建一個軟件要好的多,並且,隨着時間的推移,只對包進行管理真的是有不少的好處。

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

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

相關文章
相關標籤/搜索