首先,我想請各位玩家,你們不要自己最近新玩上什么就覺(jué)得什么好,然后大肆的推薦什么好不好!負點(diǎn)責任好不好!人家是服務(wù)器,有些時(shí)候選錯一個(gè)發(fā)行版本會(huì )痛苦死一批人!
是,你現在終于發(fā)現有個(gè)版本叫 Ubuntu 了,好爽啊,那么多包,隨便 apt-get , 3萬(wàn)個(gè)包躺在倉庫里面不用編譯。好爽??!幾乎所有軟件都有最新版本用!唉?過(guò)兩天你發(fā)現 Ubuntu 原來(lái)是從 Debian 來(lái)的,Debian 才叫牛啊,完全社區運作,包的數量一點(diǎn)都不少啊。再過(guò)兩天發(fā)現 Gentoo 啦,哇塞,牛??!性能的極致優(yōu)化,編譯編譯再編譯,configure , configure 再 configure ,精簡(jiǎn)到極致。再過(guò)兩天 Gentoo 玩膩了,不就是編譯么~ 唉? 原來(lái)還有 Arch 啊,這個(gè)不錯啊,想編譯的編譯,不想編譯的也有默認包。然后2個(gè)月沒(méi) pacman 更新過(guò)的系統,更新一下全掛了。
你的意識形態(tài),走在任何一個(gè)階段都認為這個(gè)階段是最好的選擇。但事實(shí)并不是這樣的,這只是你的興趣而已。
要討論這個(gè)問(wèn)題,先要知道兩大發(fā)行版本的區別在哪里。RedHat 和 Debian。
一、版本定義
RedHat 是由紅帽公司維護的發(fā)行版本。其 RedHat 9 是最后一個(gè)以 RedHat 為名的發(fā)行版本。在 RH9 之后,版本開(kāi)始分為社區維護的 Fedora 和 企業(yè)使用的 EL。而我們所說(shuō)的 CentOS X 就是從 RHEL X 編譯過(guò)來(lái)的。所以本質(zhì)上,CentOS 的目標用戶(hù),就是企業(yè)的服務(wù)器。
CentOS 是有 release 概念的,何為 release 概念?當某個(gè)版本定下時(shí),其絕大多數軟件包,包括 Kernel 在內,都已經(jīng)確定了版本。在該 release 下,沒(méi)有特殊情況,大版本號不發(fā)生變化。
舉例,CentOS 6 某個(gè) Kernel 版本:
2.6.32-358.el6.x86_64
2.6.32 為 kernel 版本號,358 為打包版本號,打包版本表示該包第幾次打包。對于 RHEL 來(lái)說(shuō),一個(gè) kernel 打包個(gè) 500 700 次是很正常的事情。
再比如一些軟件,1.1.3 是版本,如果該軟件自身的定義,最后一位是 bugfix 版本,倒數第二位是功能版本,那么你在 RHEL 里面,很少會(huì )看到功能更新!通常只會(huì )看到 bugfix 更新!也就是只會(huì )看到小版本號更新。
Debian 是由社區維護、貢獻的發(fā)行版本,其從選包、打包、都是由社區組織,分散行動(dòng)的。
Debian 是沒(méi)有真正意義的 release 概念的。Debian 有眾多倉庫,stable,testing,unstable ,experimental. Debian 組織系統的方式是,一個(gè)軟件先進(jìn)入 experimental, 放一段時(shí)間,有 bug 修 bug,沒(méi) bug 了,過(guò)段時(shí)間挪入 unstable ,如此循環(huán)最終挪到 stable 里面。所以在這種情況下,Debian 的系統中,是沒(méi)有一個(gè)穩定版本的概念。今天你用 kernel 3.2.1-87 , 明天就給你更新到 kernel 3.3.2-5 。
-------- 補充內容 -------
我覺(jué)得我已經(jīng)把我所謂的 release 概念解釋的很清楚了,但是評論里面還有人在和我說(shuō) Debian 是有 release。我說(shuō)的 release 不是那種自己劃個(gè)時(shí)間線(xiàn),叫個(gè)名字的概念。而是版本維護的概念。
@劉世偉 說(shuō) Debian 也是這樣的,那好吧,我證明給你看一下。
你從這里 Debian -- 在 wheezy 中的 linux-image-3.2.0-4-amd64 軟件包詳細信息 可以拿到現在 Debian stable 的 Linux kernel 打包,下載下來(lái),解壓縮,在
usr/share/doc/linux-image-3.2.0-4-amd64 目錄下面有一個(gè) changelog.Debian ,grep 一下:
- grep wheezy changelog.Debian
- linux (3.2.57-3) wheezy; urgency=medium
- linux (3.2.57-2) wheezy; urgency=medium
- linux (3.2.57-1) wheezy; urgency=medium
- linux (3.2.54-2) wheezy; urgency=high
- linux (3.2.54-1) wheezy; urgency=high
- linux (3.2.53-2) wheezy; urgency=high
- linux (3.2.53-1) wheezy; urgency=medium
- linux (3.2.51-1) wheezy; urgency=low
- linux (3.2.46-1+deb7u1) wheezy-security; urgency=low
- linux (3.2.46-1) wheezy; urgency=low
- linux (3.2.41-2+deb7u2) wheezy-security; urgency=high
- linux (3.2.41-2+deb7u1) wheezy-security; urgency=high
起碼在 wheezy 里面(stable) 里面,他從 3.2.41 走到了 3.2.57 , 同時(shí)…… 你們可以看到 每個(gè)版本也就打包 1-2 次,1-2次??!而且 Debian 的 unstable 走到 stable 真的就是隨便走走的。
linux (3.2.41-2+deb7u1) 是第一個(gè) stable 版本,他的上一個(gè)版本是
linux (3.2.41-2) unstable ,好,3.2.41 第二次打包,加了一次 patch 就變成 stable 了
linux (3.2.41-1) unstable , 得,41 就打了一次
linux (3.2.39-2) unstable , 39 也就打兩次。
從這個(gè)過(guò)程,你可以看出,Debian 總體上,還是在跟著(zhù) Kernel Source 的,為啥?沒(méi)人??!靠零散的人打 patch 還不如依賴(lài) Kernel 本身的小版本更新。
RedHat 呢?
放一個(gè) RHEL 6.4 的 Release Note
RHEL , 是不跟 kernel source 的小版本號的,自己整合 bugfix ,主要是安全相關(guān)的補丁。
為什么不跟 kernel source 呢?
主要還是目標用戶(hù)的不同,就像我下面驅動(dòng)這塊要解釋的。RHEL 的目標用戶(hù),是企業(yè)的 Server 的,他的 Kernel 里面,已經(jīng)太多的東西被替換掉了。磁盤(pán)、網(wǎng)卡、各種各樣的驅動(dòng)。而 Kernel source 盡管只走小版本號,還是不太靠譜的。頻繁的拿過(guò)來(lái)風(fēng)險也大。
kernel 其實(shí)走到 2.6 以后,就沒(méi)有一個(gè)真正穩定的概念了。反正就是一路往前走。當然 2.6.32.xx 的確是以 bugfix 為主的。但是這個(gè)量太大了,各種各樣雞毛蒜皮,RHEL 不是全都拿進(jìn)來(lái)的。
你們一定要和我爭論版本的問(wèn)題,行,我不和你們爭,Debian Stable 是有版本的~ 你們滿(mǎn)意了?這種一個(gè) kernel 打包 2次的狀態(tài),你們愛(ài)用就用好了。無(wú)所謂的。
但是有 版本的也只是 stable,testing 我可從來(lái)沒(méi)見(jiàn)過(guò)。
說(shuō)實(shí)話(huà),我真的花了心思想多找一點(diǎn) Debian 的信息,
11年進(jìn)入 stable 的 6.0 , 最近確實(shí)還有一個(gè)更新,在 08 Apr 2014 。
09年發(fā)布的 lenny 也就是 5.0 ,根本已經(jīng)連信息都很難找了。如果誰(shuí)能找到 lenny 麻煩給一個(gè) kernel 的 changelog
----- 補充結束 -------
而其繼承者 Ubuntu,他是有 release 概念的,比如 9.04 ,10.06 等等,當他確定了 release 之后,他也不會(huì )在這個(gè)版本中做太大的版本變化。
但是問(wèn)題是,他學(xué)到了 CentOS 的形,沒(méi)有學(xué)到 CentOS 的精華。為什么?因為他又想追求新(一年兩個(gè)版本),又想學(xué)人家吃服務(wù)器市場(chǎng)。這是完全相互矛盾的一件事情。
新,好辦,只要跟著(zhù) Debian 走,experimental 倉庫里面永遠是最新的東西。拿過(guò)來(lái),測試測試,重打包,發(fā)布!
穩定?(Ubuntu-Server) 這就難了,這需要不斷的人力投入,Debian 自然不會(huì )幫你做這件事。自己做?Ubuntu 嘗試了幾次,目前我沒(méi)看到成功。幾乎都是草草放棄。
二、維護的力量
你們知道什么叫維護一個(gè)服務(wù)器用的發(fā)行版本么?
CentOS 4.0 2005-03-09
CentOS 4.9 2011-03-02
6年
Ubuntu 8.04 LTS April 24, 2008
Ubuntu 8.04.4 LTS January 28, 2010
1年9個(gè)月
你說(shuō)好的 LTS 呢???
Ubuntu 10.04 LTS April 29, 2010
Ubuntu 10.04.4 LTS February 16, 2012
說(shuō)好的 LTS 呢?
說(shuō) End of the Date 是3年整就是一個(gè)笑話(huà),只要下個(gè) release 一出,上個(gè) release 收到的更新數量就可憐。
這才是 RedHat 的實(shí)力!你只要用我的發(fā)行版本,你不用有后顧之憂(yōu)!Ubuntu 呢?開(kāi)玩笑,即使是 LTS,在新版本出來(lái)以后 LTS 幾乎不更新好么。補???從來(lái)沒(méi)見(jiàn)過(guò)!也就是 LTS 的真正壽命也就 6個(gè)月-1年。你敢用?你敢給你們公司用?
某天某個(gè)軟件爆出類(lèi)似最近 openssl 的漏洞,用 CentOS 5 的用戶(hù)第二天拿到了升級的 rpm。用 Debian 的用戶(hù)收到了一個(gè)大版本更新,同時(shí)由于依賴(lài)關(guān)系必須更新 glibc, kernel 等等包。用 Ubuntu 的用戶(hù)收到官方回復:“apt-get dist-upgrade”
這就是這幾種發(fā)行版本在維護上的區別。
我們再說(shuō)回 RHEL,很多人不懂,以為 Ubuntu “新”,RHEL “老” 。
你的服務(wù)器上有一塊 Broadcom 的網(wǎng)卡,CentOS 6(2.6.32-358.el6.x86_64) 用戶(hù) modinfo 了一下
- filename: /lib/modules/2.6.32-358.6.1.el6.x86_64/kernel/drivers/net/tg3.ko
- firmware: tigon/tg3_tso5.bin
- firmware: tigon/tg3_tso.bin
- firmware: tigon/tg3.bin
- version: 3.124
Debian testing(3.12-1) 用戶(hù) modinfo 了一下
- filename: /lib/modules/3.12-1-amd64/kernel/drivers/net/ethernet/broadcom/tg3.ko
- firmware: tigon/tg3_tso5.bin
- firmware: tigon/tg3_tso.bin
- firmware: tigon/tg3.bin
- version: 3.133
你知道 http://kernel.org 的最新的 2.6.32 帶的是哪個(gè)版本的 tg3 驅動(dòng)么?
- #define DRV_MODULE_VERSION "3.102"
- #define DRV_MODULE_RELDATE "September 1, 2009"
CentOS “老”么?誰(shuí)在將最新的驅動(dòng)打入老的 kernel?誰(shuí)在測試新驅動(dòng)與老 kernel 的兼容性?RH?。?!這些都是人力啊,這些都是財力啊。
RH 在保證穩定、兼容的同時(shí),盡可能的給服務(wù)器用戶(hù)最全的設備匹配,最新的驅動(dòng)支持。而這一切!你都不用擔心穩定性、兼容性,因為 RH 沒(méi)有更新大版本,沒(méi)有帶來(lái) 龐大 feature 的更新。
還有一個(gè)例子:
google RFS patch in linux kernel Linux 2.6.35 中的 RPS 功能。
這簡(jiǎn)直就是 Linux 服務(wù)器用戶(hù)夢(mèng)寐以求的功能好不好,你不用再擔心多核CPU被浪費,你不用花很多錢(qián)買(mǎi)昂貴的多 irq 網(wǎng)卡。但是要 2.6.35 才有哦~
但是你不用擔心,CentOS 6 (2.6.32) 已經(jīng)將RPS整合進(jìn) 2.6.32 的內核中了。
你看到Ubuntu做這種事情了?Ubuntu 在忙什么?在忙著(zhù)今年再發(fā)一個(gè)版本??!
RHEL 為什么做?因為他的用戶(hù)是服務(wù)器!RPS 這種事情PC根本就用不到好不好。
我回到最開(kāi)頭。我也用 Ubuntu 做過(guò)產(chǎn)品,雖然不是服務(wù)器。但是最后的結果并不好。我聽(tīng)說(shuō)過(guò)一個(gè)同事的上家公司用 Ubuntu 做服務(wù)器,千級別的量。聊了一下發(fā)現和我預測的差不多,痛苦不堪。
基本的痛苦流程是這樣的
遇到一個(gè)問(wèn)題->發(fā)現只有更新軟件版本才能解決->這個(gè)自己當前的版本已經(jīng)不提供該軟件版本->發(fā)現自己編譯不過(guò),依賴(lài)太重->決定 dist-upgrade -> 發(fā)現需要跨度N個(gè) release -> 測試 dist-upgrade -> 10臺機器,2臺成功,8臺失敗,失敗的現象不同 -> 痛苦的解決各種問(wèn)題-> 成功 dist-upgrade -> 發(fā)現公司業(yè)務(wù)程序需要重新編譯->與開(kāi)發(fā)人員溝通 解釋升級的重要性 -> 開(kāi)發(fā)人員重新調試、測試一些列用到的庫的新版本->交付新版本
CentOS 用戶(hù)基本是這樣的:以下是最近真實(shí)對話(huà)
“xxx,新聞你看到了么 openssl 爆漏洞了”
“???不知道啊,我看看去”
----
puppet 操作一下 10分鐘以后
“老板,補丁已經(jīng)出來(lái)了,更新了,有 ssl 的 apache 都已經(jīng)自動(dòng)重啟過(guò)了”
結束~
本文來(lái)自:http://www.zhihu.com/question/19599986
聯(lián)系客服