為什么Arch Linux不適合作為服務(wù)器操作系統(tǒng)

責(zé)任編輯:editor006

作者:DotNet碼農(nóng)

2017-05-10 16:28:51

摘自:IT之家

這種立即刪除舊內(nèi)核的更新機(jī)制也是Arch作為服務(wù)器的劣勢(shì)之一。可以看得出來(lái)這有多么麻煩:  其次,立即刪除舊的內(nèi)核要求系統(tǒng)必須重啟來(lái)加載新的內(nèi)核

我前面好幾篇文章都有關(guān)Arch Linux,我本人也是虔誠(chéng)的Arch邪教教徒,但是有人經(jīng)常會(huì)問(wèn):為什么Linux服務(wù)器幾乎從不采用Arch Linux?我們見(jiàn)得多的Linux服務(wù)器系統(tǒng)一般都是什么Ubuntu Server啊,什么Cent OS啊,什么Fedora啊,或者企業(yè)采用的Red Hat啊,為什么幾乎沒(méi)有Arch Linux呢?下面我將從若干個(gè)方面指出Arch Linux在服務(wù)方面的劣勢(shì)。

1、過(guò)分激進(jìn)的滾動(dòng)更新

滾動(dòng)更新是Arch Linux最大的優(yōu)勢(shì),但同時(shí)也是最大的劣勢(shì)之一。鑒于Linux屬于一類完全開(kāi)放的項(xiàng)目,技術(shù)人員的能力參差不齊,貢獻(xiàn)的代碼質(zhì)量當(dāng)然也是參差不齊的。對(duì)于其它的發(fā)行版來(lái)說(shuō),軟件包需要經(jīng)過(guò)社區(qū)完善的測(cè)試才會(huì)被發(fā)布至軟件源從而被用戶更新;然而,Arch Linux的滾動(dòng)更新機(jī)制過(guò)分激進(jìn),而Arch社區(qū)對(duì)軟件包的測(cè)試并非絕對(duì)完善(有多少人滾掛過(guò)?)。從某種意義上來(lái)講,Arch這個(gè)發(fā)行版,相當(dāng)依賴其用戶群體作為測(cè)試對(duì)象;它的用戶群體就是類似測(cè)試人員的存在。Arch社區(qū)鼓勵(lì)用戶向上游反饋Bug,也是這種特殊的體系的表現(xiàn)。下圖是Arch官網(wǎng)時(shí)不時(shí)會(huì)發(fā)布的、用以幫助技術(shù)人員手動(dòng)解決更新問(wèn)題的“臨時(shí)解決方案”:

假如一臺(tái)Arch服務(wù)器在更新時(shí)滾掛了,技術(shù)人員頂著Boss的壓力,不僅要一邊努力恢復(fù)服務(wù)器,還要一邊向Arch社區(qū)的上游反饋Bug、提Issue。這種事情誰(shuí)都不愿意干的吧。

2、激進(jìn)的內(nèi)核更新機(jī)制

很多Linux桌面用戶不止一次地問(wèn)過(guò)我,為什么他們的桌面Linux在更新的時(shí)候不會(huì)像Arch一樣立即刪除舊的內(nèi)核?這樣不是會(huì)浪費(fèi)空間嗎?

這種立即刪除舊內(nèi)核的更新機(jī)制也是Arch作為服務(wù)器的劣勢(shì)之一。首先,新的內(nèi)核不一定都能正常工作。萬(wàn)一你的新內(nèi)核造成崩潰,你沒(méi)有辦法立即加載舊的內(nèi)核,而必須重新安裝舊的內(nèi)核。這個(gè)過(guò)程是非常麻煩的,你不僅需要從安裝介質(zhì)啟動(dòng),還必須設(shè)法弄到舊版內(nèi)核的軟件包。對(duì)于遠(yuǎn)程服務(wù)器來(lái)說(shuō),幾乎無(wú)解。下面是來(lái)自Arch Wiki的解決方案??梢钥吹贸鰜?lái)這有多么麻煩:

其次,立即刪除舊的內(nèi)核要求系統(tǒng)必須重啟來(lái)加載新的內(nèi)核,否則容易發(fā)生詭異的問(wèn)題。這是因?yàn)長(zhǎng)inux所謂的“內(nèi)核”包含有大量的動(dòng)態(tài)加載模塊,如果在某次啟動(dòng)后,某個(gè)模塊沒(méi)有被加載過(guò),然后系統(tǒng)內(nèi)核更新了,刪除了舊的內(nèi)核,那么這些模塊將永遠(yuǎn)不能被加載了——除非你重啟系統(tǒng)完整切換到新的內(nèi)核——因?yàn)樗鼈冸S著舊內(nèi)核被刪掉了。

如果你手頭有Arch系統(tǒng),你可以嘗試一下在某次啟動(dòng)之后不插任何USB設(shè)備,然后更新內(nèi)核。你會(huì)發(fā)現(xiàn),如果你不重啟系統(tǒng),無(wú)論你怎么努力,新插上去的USB設(shè)備總是不會(huì)被加載——因?yàn)樾枰患虞d的模塊已經(jīng)隨著舊內(nèi)核刪掉了。重新啟動(dòng)系統(tǒng)能完整切換到新的內(nèi)核,以使用新版的動(dòng)態(tài)加載模塊。

但是對(duì)于服務(wù)器來(lái)說(shuō),不可能三天兩頭重啟;然而Arch Linux卻又是一個(gè)一周一小更,一月一大更的快速迭代的操作系統(tǒng)。這就使Arch不適合作為服務(wù)器操作系統(tǒng)。

3、軟件包管理體系

Arch Linux被推崇很大一部分的原因是便于使用的軟件包管理體系。不同于Debian系列的apt/dpkg和Red Hat系列的dnf(yum)/rpm包管理體系,Arch Linux只用了一個(gè)工具pacman就解決了獲取和安裝兩個(gè)功能。這降低了為Arch Linux制作軟件包的門檻,這也是AUR幾乎能涵蓋整個(gè)Linux軟件生態(tài)的主要原因。

既然一個(gè)工具就能完成工作,那為什么另外兩個(gè)主流系列都依然存在兩個(gè)工具來(lái)管理軟件包體系?這是因?yàn)?,這種兩個(gè)工具來(lái)管理軟件包的體系中,那個(gè)負(fù)責(zé)處理本地依賴和本地包的部分,不僅僅是為了管理依賴、安裝軟件包而存在的。它還有更有用的功能:提供“虛包”支持。提到“虛包”就不得不提到Java這個(gè)平臺(tái),因?yàn)镴ava的開(kāi)放,常見(jiàn)的Java運(yùn)行時(shí)環(huán)境有兩種:一個(gè)是Oracle官方的JRE,另一個(gè)是開(kāi)源社區(qū)創(chuàng)建的Open JRE。它們都對(duì)Java提供很高程度的支持,但是依然存在微妙的差別。比如Android Studio使用Open JRE運(yùn)行就會(huì)偶爾出現(xiàn)奇怪的Bug,而另外有一小部分軟件則不能正常運(yùn)行在Oracle JRE上。它們都提供JRE的支持,但是對(duì)于Debian或者Red Hat來(lái)說(shuō),二者是能共存的:dpkg或者yum可以決定對(duì)于哪些應(yīng)用程序選取哪個(gè)JRE為應(yīng)用程序提供JRE依賴。

但是對(duì)于pacman來(lái)說(shuō),虛包支持什么的,不存在的。只能有一個(gè)軟件包提供JRE支持:安裝一個(gè)就必須刪除另一個(gè)。對(duì)于服務(wù)器來(lái)說(shuō)這就相當(dāng)尷尬了:并不能保證所有的程序都能找到完美的依賴。

4、打包粒度

雖然最近幾年有所改善,但是Arch Linux的打包粒度對(duì)于服務(wù)器來(lái)說(shuō)還是過(guò)分大了。我們也許只會(huì)用到某軟件包的一部分,但是pacman會(huì)把整個(gè)軟件包給你裝上——你還沒(méi)得選。對(duì)于服務(wù)器來(lái)說(shuō),為實(shí)現(xiàn)功能所安裝的軟件包越少越好——一來(lái)節(jié)省資源,二來(lái)可以減少由軟件體系帶來(lái)的漏洞。這也是Arch不適合作為服務(wù)器操作系統(tǒng)的原因之一。

就我目前的經(jīng)驗(yàn),以上理由可以充分打消在服務(wù)器上使用Arch Linux的想法。但是對(duì)于桌面系統(tǒng),特別是對(duì)于開(kāi)發(fā)人員,Arch還是相當(dāng)不錯(cuò)的選擇。

汝等虔誠(chéng)的Arch教徒們,切勿忍耐;想安裝什么的時(shí)候便裝,想做什么研究的時(shí)候便做就好——因?yàn)槊魈觳⒉灰?jiàn)得還能正常運(yùn)行。

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號(hào)-6京公網(wǎng)安備 11010502049343號(hào)