我前面好幾篇文章都有關arch linux,我本人也是虔誠的arch邪教教徒,但是有人經常會問:為什麼linux伺服器幾乎從不采用arch linux?我們見得多的linux伺服器系統一般都是什麼ubuntu server啊,什麼cent os啊,什麼fedora啊,或者企業采用的red hat啊,為什麼幾乎沒有arch linux呢?下面我将從若幹個方面指出arch linux在服務方面的劣勢。
1、過分激進的滾動更新
滾動更新是arch linux最大的優勢,但同時也是最大的劣勢之一。鑒于linux屬于一類完全開放的項目,技術人員的能力參差不齊,貢獻的代碼品質當然也是參差不齊的。對于其它的發行版來說,軟體包需要經過社群完善的測試才會被釋出至軟體源進而被使用者更新;然而,arch linux的滾動更新機制過分激進,而arch社群對軟體包的測試并非絕對完善(有多少人滾挂過?)。從某種意義上來講,arch這個發行版,相當依賴其使用者群體作為測試對象;它的使用者群體就是類似測試人員的存在。arch社群鼓勵使用者向上遊回報bug,也是這種特殊的體系的表現。下圖是arch官網時不時會釋出的、用以幫助技術人員手動解決更新問題的“臨時解決方案”:
假如一台arch伺服器在更新時滾挂了,技術人員頂着boss的壓力,不僅要一邊努力恢複伺服器,還要一邊向arch社群的上遊回報bug、提issue。這種事情誰都不願意幹的吧。
2、激進的核心更新機制
很多linux桌面使用者不止一次地問過我,為什麼他們的桌面linux在更新的時候不會像arch一樣立即删除舊的核心?這樣不是會浪費空間嗎?
這種立即删除舊核心的更新機制也是arch作為伺服器的劣勢之一。首先,新的核心不一定都能正常工作。萬一你的新核心造成崩潰,你沒有辦法立即加載舊的核心,而必須重新安裝舊的核心。這個過程是非常麻煩的,你不僅需要從安裝媒體啟動,還必須設法弄到舊版核心的軟體包。對于遠端伺服器來說,幾乎無解。下面是來自arch wiki的解決方案。可以看得出來這有多麼麻煩:
其次,立即删除舊的核心要求系統必須重新開機來加載新的核心,否則容易發生詭異的問題。這是因為linux所謂的“核心”包含有大量的動态加載子產品,如果在某次啟動後,某個子產品沒有被加載過,然後系統核心更新了,删除了舊的核心,那麼這些子產品将永遠不能被加載了——除非你重新開機系統完整切換到新的核心——因為它們随着舊核心被删掉了。
如果你手頭有arch系統,你可以嘗試一下在某次啟動之後不插任何usb裝置,然後更新核心。你會發現,如果你不重新開機系統,無論你怎麼努力,新插上去的usb裝置總是不會被加載——因為需要被加載的子產品已經随着舊核心删掉了。重新啟動系統能完整切換到新的核心,以使用新版的動态加載子產品。
但是對于伺服器來說,不可能三天兩頭重新開機;然而arch linux卻又是一個一周一小更,一月一大更的快速疊代的作業系統。這就使arch不适合作為伺服器作業系統。
3、軟體包管理體系
arch linux被推崇很大一部分的原因是便于使用的軟體包管理體系。不同于debian系列的apt/dpkg和red hat系列的dnf(yum)/rpm包管理體系,arch linux隻用了一個工具pacman就解決了擷取和安裝兩個功能。這降低了為arch linux制作軟體包的門檻,這也是aur幾乎能涵蓋整個linux軟體生态的主要原因。
既然一個工具就能完成工作,那為什麼另外兩個主流系列都依然存在兩個工具來管理軟體包體系?這是因為,這種兩個工具來管理軟體包的體系中,那個負責處理本地依賴和本地包的部分,不僅僅是為了管理依賴、安裝軟體包而存在的。它還有更有用的功能:提供“虛包”支援。提到“虛包”就不得不提到java這個平台,因為java的開放,常見的java運作時環境有兩種:一個是oracle官方的jre,另一個是開源社群建立的open jre。它們都對java提供很高程度的支援,但是依然存在微妙的差别。比如android studio使用open jre運作就會偶爾出現奇怪的bug,而另外有一小部分軟體則不能正常運作在oracle jre上。它們都提供jre的支援,但是對于debian或者red hat來說,二者是能共存的:dpkg或者yum可以決定對于哪些應用程式選取哪個jre為應用程式提供jre依賴。
但是對于pacman來說,虛包支援什麼的,不存在的。隻能有一個軟體包提供jre支援:安裝一個就必須删除另一個。對于伺服器來說這就相當尴尬了:并不能保證所有的程式都能找到完美的依賴。
4、打包粒度
雖然最近幾年有所改善,但是arch linux的打包粒度對于伺服器來說還是過分大了。我們也許隻會用到某軟體包的一部分,但是pacman會把整個軟體包給你裝上——你還沒得選。對于伺服器來說,為實作功能所安裝的軟體包越少越好——一來節省資源,二來可以減少由軟體體系帶來的漏洞。這也是arch不适合作為伺服器作業系統的原因之一。
就我目前的經驗,以上理由可以充分打消在伺服器上使用arch linux的想法。但是對于桌面系統,特别是對于開發人員,arch還是相當不錯的選擇。
汝等虔誠的arch教徒們,切勿忍耐;想安裝什麼的時候便裝,想做什麼研究的時候便做就好——因為明天并不見得還能正常運作。
本文轉自d1net(轉載)