Linux, 工作, 生活, 家人

Gentoo, Linux, Software, UNIX

[Gentoo] Why I used Gentoo on my server. 我為什麼採用 Gentoo 當作我的系統.

最近有一篇很紅的文章
Why Gentoo Shouldn’t be on Your Serve Link
大致上是講 Gentoo 的好處和壞處.
其實講的還算是很有道理,若是要看反面的意見,我想也可以看 comment 的第三個留言, Anonymous 寫的.
我認為也寫的不錯. (原文超過 70+ 留言, 我沒力氣看完 ~_~)

今天來分享一下我使用 Gentoo 的心路歷程好了.

山寨剛成立的時候,我也是剛學 Linux ,選了很多套系統(包含 FreeBSD, 那時候不會燒光碟, 所以失敗)
Slackware (非常難裝的一套系統)
而當時最紅的應該是 CLE + Redhat 6.0 (我記得應該是 5.9, 後來才有 6.0), 有完整的中文介面. 而且安裝容易, 架設也很簡單. 所以就拿這個架站了.
剛開始方的時候的確沒有什麼問題, 而且也跑得很順, 要架什麼 Service 就上網抓抓 RPM 套件, 雖然有 Dependence 的問題, 不過只要相關的套件下載完,一個一個安裝上去,也沒有什麼大問題.

眾所皆知, 當年講 RPM 系統真的是講的跟神是一樣的, 安裝方便, 管理容易 blah blah. Red Hat 因為這樣才變成 Open Source 界第一把交椅的. 事實上, 在使用初期也是這樣, 不過缺點呢?
如果什麼要升級的, 那就是要等人家包好 RPM. 若是沒有 RPM , 除了抓回來自己裝, 要不然就要等人包了.
這些也還可以接受,畢竟就是這樣. 不過那個年代的 Security Hole 真是超級多,最知名的應該就是 Sendmail 4 系列了,多如牛毛的漏洞, Update 都 Update 不完.
另一個應該是 Bind , Bind 8 之前也是漏洞一大堆. 其他常見的還有 OpenSSH/OpenSSL/Aapche …… 一不小心就被人家寫的木馬捅得亂七八糟了.

而且這種機器都是 Open Service, 很怕被開洞, 所以三不五時就要升級, 若是 Redhat 有 Updated 的還好, 要是 Redhat 心情不好, 不出 Update. 那我不就是等死嗎? 所以上 RPMFIND 找 RPM 套件, 自己找 Source 自己上 patch , 再安裝到系統上變成維護的主要工作.
後來因為當時 Mandrake (現在改名叫 Mandriva)因為使用 KDE Interface. 重點是, Mandriva 有 urpmi 系列指令. 不用自己管 Dependence 的問題, 自然而然的就變成我的主力系統, 而這個想法也動到了 Server 的身上.

從 Redhat 6.2 升級到 Mandrake 8 是辛苦的(我忘了版本, 有記得再 Update 好了), 因為要從 glibc 一路升級上去, 而且我又是遠端 Update. 所以一定要確保系統不會有問題. 雖然 Redhat 和 Mandrake 都是 RPM Base 的 Distro . 不過 Dependence 的問題非常的嚴重呀, 要一個一個慢慢的解決. 每一次都確保 OpenSSH 可以連進去, 這樣爛了還有辦法救得回來.
這也養成我現在升級系統完成後, 就會再 ssh 連進去, 確保系統正常.

換到 Mandrake 之後,我就開始唾棄 Redhat 了. 畢竟 Redhat 沒有像 Urpmi 這麼好用的指令.
而且我和 Mandrake 也相處了好一陣子了, 直到 Mandrake 9.0.
中間如果有 Mandrake 大升級, 就要將 Update Information 換一次, 然後再 urpmi 升級整個系統.
循環了數次. 雖然沒有什麼大問題. 不過也是很麻煩的.

在這個中間,我因為工作的關係,管理了一陣子的 FreeBSD Ports. 那時就覺得, 這真是好物呀…. 為什麼 Linux 上沒有這麼好的系統.
而在一次偶然的機會,在 CIA 看到 Gentoo 很多人用? 我就很好奇了, 怎麼有一套 Open Source 的 Distro 成長率比 Debain 還快 (那時沒有 ubuntu 吧 XD)
我就去看一下, 不看還好, 一看之下, 哇~ 原來 Gentoo = Linux + Ports 呀(至少我心中是這麼想的啦).

接下來的故事就是將手上的 Linux 都慢慢的換成 Gentoo 了. 連 Notebook 都換了(我真的是重度使用者, 要是現在再重灌,我 Notebook 會改灌 Ubuntu)

其實這邊還下要講重點
Gentoo 裝在 Server 上到底有什麼好處? 又有什麼壞處?
優點:
1. 不用大升級了: Gentoo 採 Ports 系統, 基本上下指令 “#emerge -u [package]” 就可以升級相關的套件, 若是不想升級相關的套件, 就用 “#emerge –oneshot [package]” 就可以了.

2. 安裝套件方便: 裝個 eix , 只要 “#eix -s keyword” 查詢名稱, “#eix -S keyword” 查詢描述, 就可以方便的找到套件. 接下來用 “#emerge [package]” 就會自動將相關的套件安裝完成.

3. USE Flag 系統: 可以自定 Flag . 使用指令 “#emerge -pv [package]” or “eix -s [package]” 都可以查詢到該套件相關的 Flags, 以 Apache 為例

net-www/apache
Available versions:
(1) 1.3.34-r14 (~)1.3.37
(2) 2.0.58-r2 (~)2.0.59-r2 [M](~)2.2.3-r2 [M](~)2.2.4
Installed: 2.0.59-r2(2)(13時40分20秒 西元2006年11月13日)(apache2 -debug -doc -ldap -mpm-itk -mpm-leader -mpm-peruser -mpm-prefork -mpm-threadpool mpm-worker -selinux ssl -static-modules threads)
Homepage: http://httpd.apache.org/
Description: The Apache Web Server.

可以自訂 MPM 的種類, 隨自己爽~~~~
像是 Server 都用不到 X , 就可以用 USE Flags 將 X .gnome, qt 等等 library 排除在外, 自然就不會編進來.

4. Package Mask/Unmask/Advance Masking(Enable Unstable Package) Flag : 系統提供 Mask/Unmask 及 Advance Masking 系統. 可以讓使用者自由的設定套件是不是要安裝. 例如像第三點講到的 Apache, 2.2 的版本是Masked 的, 這時若是我想玩新東西, 我就可以考慮打開 Mask Flags.
而有些套件是在 stability testing, 尚未開放, 也可以打開 ACCEPT_KEYWORD=”~x86″ 啟動之.
若是 Server 要用的, 我不會建議打開 Advance Masking Keyword.
這個功能有很大的好處, 像是 MySQL 4.1 支援 Encoding 系統, 不過資料若是從 MySQL 4.0 搬上去, 可能除了 Database Encoding 有問題以外, 連 Password 可能都要改掉. 這時就可以用 Mask 限制在 4.0 不要升級上去. 以避掉這個問題.

缺點:
1. 安裝不容易: 即使到了 Gentoo 2006.1 , 有了 GUI 界面的安裝系統, 我還是常常失敗, 最後都是輪落到手動 Install .

2. 安裝過程太久: 以我這麼有經驗的人, 安裝這個問題也常常花掉我半天的時間,大部份都是在 Compile, 其實並不是很有效率.

3. 對 Linux 要很熟: Gentoo 並沒有像是 Ubuntu or Mandriva 那樣的中央管理界面, 很多東西要自己去 /etc/conf.d/ 或是 /etc/env.d/ 下修改,若是對系統不夠熟悉的人,那是完全無法上手. 不過若是可以自己管理. 那小小修改一下,系統可以用很久呢(我 Notebook 的 Gentoo 用了二年都沒有重灌 XD)

4. 安裝套件過程太久: 若是用 genkernel 編 kernel 大概要 30mins+ 跑不掉. 每一個套件要編也是很久, 像是 glibc, 或是 gcc , 若是電腦 Power 不夠, 這個過程可是會等死人的. 更不要提 KDE/Gnome 這類大型的 Desktop Environment, 以 KDE 3.4 系列來說, 用 X31 大概要編個 12 小時吧. 不過如果是 Server 的話, 應該是可以接受的時間之內, 曾經用 Xeon 2.4G *2 + 2G Ram 的 Server 編 Apache 2, 不到一分鐘就編完了…. (Flag 要設對呀, 沒有 -j6 可沒這麼快)

5. 地雷很多, 像是 D-bus 就是一顆大地雷………. 其他會發生的地雷也不少, 所以 Server 要升級不能太快

注意事項:
1. 除非是 Gentooist , 否則並不建議隨時隨地 follow 最新版走, 一不小心[Gentoo] 地雷 D-Bus 1.0 和 vmware 5 不相容.這種事就發生了.

2. 重要的 Library , 像是 glibc 升級之後, 記得用 “# revdep-rebuild” 重新 compile 有 library dependency 的 library/Software.

3. 升級 GCC 記得也要處理 Library 相關事宜.

4. Security Update 用 “#glsa-check -l | grep \\\[N\\\]” 就可以得到所有必需升級的套件, 升級這些套件就可以了,不需要常常 “#emerge -u world” 升級所有的套件, 或是 #emerge -De world” 整個系統重來一次, 那太變態了.

5. 對於修改 cflags 和 USES 等不需太期待, 我個人認為不會帶來很多好處, 那個 10-20% 的差異是感覺不到的. 若是你覺得 10-20% 有差的話, 應該這種事業己經大到有錢換新的 Hardware 了.

6. etc-update 時, 不要隨便換掉自己的 configure file. 那是災難的開始. 若是可以, 記得備份相關的 configure file.

7. 用 Distcc 將其他台 Gentoo 拉進來, 可以減少不少的 Compile 時間, 但是別用 ccache , 除非是正在開發套件, 否則這個東西只會浪費硬碟空間而己.

整體而言, 我認為 Gentoo 是一個好系統, 對於 Server 來說, 只要設定得宜, 是可長可久的系統.
短時間可能沒有什麼好處, 但是時間拉長一看, Gentoo 可以減輕管理 Server 的難度.
基本上我的 Gentoo Server 的存活期都大於 2 年, 這個可比許多套件的 Support 時間還長了(像是 Fedora Project). 二年可以升級好多次了, 不過我也只安裝過一次.

至於 Desktop/Notebook 我就完全不建議了, 那很辛苦的, 什麼東西都要自己來, 除非是
“自己的 Desktop 自己做” 的忠誠信徒, 要不然我會建議用 Ubuntu 之類的 Linux Distro , 那好搞多了.

Updates 延伸閱讀:
Josh’s Blog Why Gentoo is a Great Server Distribution (a Rebuttal)

[Tags] Gentoo, Linux , Server, FreeBSD, Ports, portage, Ubuntu, Debian, Slackware, Fedora, Mandrave, RedHat , Mandrake , Distcc, Ccache [/Tags]

18 留言

  1. 後面有些字型都變成斜體,看得有點吃力..

  2. 現在手上的Server不是solaris就是gentoo
    可是我覺得gentoo的package和FreeBSD的ports比起來真是有夠難用的

    這種省力氣的白癡用工具最重要的要求就是要可靠
    可是gentoo的package的地雷實在是太多了
    而且還會給我亂裝,裝apache 1.3不管怎樣都會把apache2裝上去再回頭裝1.3 orz
    除非自己再去改設定
    每裝個東西都得這樣再check一次,那我不如自己抓tarball 自己編算了

    結果就是只要是我裝的,凡是mysqld php apache這種比較大的東西都是自己編
    只有一些常用的系統工具是下emerge裝

  3. Ada

    咦?裝 apache 1.3 時會把 apache 2 也順手裝上去?

    我… 沒裝過不清楚,雖然 emerge -pv 時並未見到 apache2 有被列入安裝清單中。

    基本上就 Server 維護的角度來看,Gentoo 是比 Fedora (最近對 yum 抱怨甚多… XD) 之類的要方便甚多,但是沒用過 Ubuntu 所以無法加以比較。

    另外,雖然 D-Bus 1.0 和 vmware 5 不相容,不過和 vmware server 1.0 卻沒有相互打架的問題。

  4. Ada

    另外,package 目前地雷多的原因似乎是因為官方目前在大翻修 package 分類,這也連帶造成 revdep-build 時有些套件會因為找不到原來的完整名稱而陣亡…

  5. 文章作者的留言

    richliu

    給 acman.

    我早期也有碰到類似的狀況.
    emerge apache 會將 apache-1.3 放進去.
    記得在 USE Flags 加上 “apache2” .

    Gentoo 就是難搞, 不過會搞之後就很好處理了.

  6. JLS

    我也是使用 Gentoo, 期間也有考慮過要轉使用 Redhat Enterprise Server 或是 CentOS, 不過後來都沒有.

    因為我真的還沒辦法學好掌握如何讓自己的系統精簡一點, 或許我就是喜歡 Gentoo 那種從頭到尾自己來的感覺吧!

    說 Bug 的話是也真的不少(上週才因為 portage update 害我不能用 pppoe), 不過藉此可以自己學著怎麼樣修正, 也是一種樂趣…

  7. To richliu

    我已經吃了秤陀鐵了心了
    全部自己make比較乾脆, configure的參數還可以帶到其它平台上面用
    一招半式闖天下!!
    不用換個OS就要再摸半天

  8. JLS

    推 acman

    我大概就是把 make.conf 備分一下

    重裝或換台時就帶過去 make -De world 時就去睡覺覺了

  9. 文章作者的留言

    richliu

    如果考慮換平台的問題, 那就很累啦~~~
    還好目前無此需求 :p

    我盡量都是統一平台, 這樣才不會搞死自己呀~

  10. 文章作者的留言

    richliu

    斜體的問題改好了, 用 [ I ] 就會變斜體, 怪事…

  11. 我的Desktop就是用Ubuntu,真的很簡單,好之後只要稍作修改就很好用了,不像以前剛接觸EH 6.0 CLE 0.8的時代,痛苦。

  12. Van Hazard

    恩,Gentoo 用了一陣子,也是某人說好用,
    就被陷害了…(之前也被陷害 FreeBSD)….
    不過 Port 真的是好用,好久沒去動我的 Server,
    今天想說來升級一下 clamav ,打個
    #emerge -u clamav
    哇咧,有 40 個套件需要升級,啥情形…= =
    不過放一個晚上,隔天早上就驗收成果,升級完成了…
    所以沒有 Port 的系統大概我都不會用了吧…= =

  13. 文章作者的留言

    richliu

    小心地雷呀, 之前踩到 cyrus-sasl , 升級了以後, 都沒有辦法認證了, 還好機器多, 可以交互測試.

    重要的機器還是跑 emerge clamav 就好.
    我現在的原則都是, 沒有 security update, 就不 update.

    不過自己常在碰的還是亂升級就是了 XD

  14. Van Hazard

    真的假的,不早講,
    昨天下午才升級 cyrus-sasl …XD
    還沒重新開機…..= =!

  15. plan

    说的很在理,同好gentoo
    不过貌似向其他人推销gentoo都没怎么成功过:P

  16. Canovol

    非Gentoo狂热推荐不安装…虽然是一劳永逸的事情,但是这个“劳”太曲折了。

  17. Frank

    謝謝你
    目前正在學習管理一套gentoo system
    對 update 的rule 我想我可以先從用你的方式開始… 🙂

1 則自動引用通知

  1. Gentoo当服务器的优劣 | 不喝酒

發佈留言