如果你現在想安裝一套Linux,又不想隨著Linux發行版本的版本號,不停的格式化系統,重新安裝,或者升級安裝。那麼,最適合你的只有LFS、Debian和Gentoo。
本文嘗試對Debian、Gentoo的包管理機制進行比較,並由此得出了幾個有趣的結論。本文對於Debian、Gentoo的包管理,主要談缺陷和不足,並且嘗試提出解決方法。最後,本人水平有限,失誤、不足之處在所難免,還望大家批評指正。
Debian是老牌的發行版本,有人甚至認為Debian就是GNU/Linux本身,但是,據Debian自己的了解。它只是碰巧通過Linux實現了而已。(Debian,似乎是一種思想?一種生活方式?)
Gentoo是新生的,成長迅速的發行版本。說他成長迅速,不僅在於它提供了主流和非主流的基於各種硬件的Linux的實現,更在於,它還同時提供*bsd、MacOSX、Sun Solaris(就在Sun開放Solaris之後不久)版本的portage。(最初認識Gentoo,是在QQ上與OpenQ的創始人PuzzleBird聊天,他把Gentoo形容成是下一代的Debian。於是偶相信了,開始了艱難的安裝。 不過,還是感謝PuzzleBird,是他讓我看到rpm之外的世界,之前偶都是用基於rpm版本的發行版的)
典型的Debian提供一種基於i386編譯的二進制deb包,采用了一套完整有效的工具指令集來保證整個系統軟件包的完整、清潔和有效。
Gentoo的傳統上,雖然也提供二進制包,但是,大家意義上的Gentoo,更在於通過源碼編譯屬於自己的系統。通過USE的各個級別(配置文件級別、命令行級別)的設置,Gentoo能夠讓你輕松得到完全屬於自己的,獨一無二的Linux系統。
比較:由於軟件包提供的格式不同(一種是二進制文件,一種是源碼)。Debian與Gentoo相比,有著更快的系統安裝效率。同樣的網絡情況下,安裝Debian要比Gentoo節省更多的時間,通常只需要幾個小時,你就可以得到一套完成的Debian系統(包含KDE等等完整的桌面環境)。但是,在我看來,Debian的缺點在於,Debian基於deb的依賴性審查過於嚴格。也許是因為直接提供的二進制包的緣故。Debian對於同一套軟件的細微不同版,也認為是完全不同的。
ibqt3-mt-dev對下面兩個有依賴,可是下面兩個已經有firefly補丁的版本了。
提示:
libfreetype6-dev: Depends: libfreetype6 (= 2.1.7-2.3) but 2.1.7-2.3firefly is to be installed libxft-dev: Depends: libxft2 (= 2.1.2-6) but 2.1.2-6firefly is to be installed Depends: libfontconfig1-dev but it is not going to be installed
同樣的一個軟件包,只是由於編譯時的小補丁的不同,就完全不能滿足Debian要求的依賴關系。只能推倒,重建系統。
同樣的情況,在Gentoo中完全可以通過同一套源碼,配置不同USE來實現。也就是說,在Gentoo中,由於個人USE的設置的不同,上面的Debian的兩個包,在Gentoo看來就是一個包,只是配置時候的打了不同的補丁。因此,沒有所謂的因為依賴而不能安裝的問題。
舉例:假設該軟件包有兩個不同USE,一個是common,一個是firefly,那麼對於Gentoo,只要你設定了是采用USE="common"編譯,還是采用USE="common, firefly"編譯,系統在編譯軟件包的時候,就會自動決定究竟是否打上firefly的patch。也就是說,在Gentoo中,允許同時存在來自同一源碼的,編譯時配置不同的二進制文件的存在,而Gentoo在處理依賴時候,除非是的確找不到依賴的文件。否則,Gentoo不會提示出依賴錯誤(因為確實沒有錯誤)。而Debian在這一點上是過於嚴格了。
Gentoo的包管理的主要缺點在於采用源碼編譯,不能夠滿足快速安裝系統的需要。同時,一旦系統的基准USE發生了變化(這經常發生,尤其是你還是Gentoo新手的時候,你很可能因為不知道哪個軟件包采用那種USE才好,而在基准中加入了過多的USE),雖然可以采用emerge --new-use world進行對新USE的編譯,但是,這時的Gentoo的依賴的包的編譯順序有時會有問題,而導致編譯失敗。(這個其實是一個依賴的問題,明明正常是1、2、3的順序可以編譯成功的,但是--new-use之後,emerge可能會錯誤的安排成了2、1、3的順序,而導致編譯失敗)。
綜上,Debian的問題在於依賴的過於嚴格。對於依賴的問題,可以采用的方法主要有。
1 強制安裝。這是最下策,也是最麻煩的方法。(因為下次遇到同類的問題,還得強制安裝,尤其是升級的時候)。
2 修改依賴關系。雖然我不知道debian的依賴要在哪裡改,但是這的確是一條路。不過,這個也不輕松,因為每次都需要手工修改依賴關系。
3 欺騙Debian,直接將修改過的軟件包,以debian原名的形式發布,這樣可以解決依賴問題。但是,如果采用了debian的source.list中,如果開啟了安全站點檢驗,這一步就無法通過。
4 系統推倒重建,安裝Debian的官方版本。OK,如果你對中文顯示要求不高,可以采用這個辦法。不過,這樣的話,就沒有中文的粗體和斜體,同時,我覺得看起來也不怎麼舒服。
5 就用非官方的版本,不輕易升級。本著夠用就好的原則,期待別人解決問題。我,無語。(Hiweed用戶適用。向Hiweed致敬)。
6 構建一套大系統,包含了所有由於補丁的問題所造成的問題的補丁。也就是大量的非官方的補丁。例如構建一套超大的,可以解決所有依賴問題的中文Debian,不妨叫大Hiweed。費時,費力,難與官方發布同步。
7 為什麼不直接將中文補丁提交到Debian官方,或者對應軟件開發的官方,這樣軟件就是Native Chinese Support。豈不是很好?(強烈贊同這個觀點,這個應該是最終的解決之道)。
8 當然,也可以建議Debian修改它的依賴的檢測方式。提供一些的靈活的,tiny的版本號,認為也是同樣兼容的。
Gentoo的解決之道:
Gentoo雖然依賴的問題解決得很好,但是,Gentoo編譯時間太長。雖然,你可以采用某些方法(比如,設定最簡單的系統,設定復雜的USE,去除編譯多余的Locale)來確保系統不編譯多余的東西。也可以采用打開ccache的方法,建立數據庫來加速c程序的編譯。但是,Gentoo的安裝時間長(通常桌面是幾天,采用kde或gnome的情況),頻繁升級的話,更是費時費力。
雖然我們不能解決升級時的編譯問題。但是,我們至少可以解決安裝的時間過長的問題。我們的希望來自教主的homeking的ibox,ibox采用livecd的方式,提供給大家一套完整的Gentoo中文解決方案。新版本的ibox將采用kde做為默認,同時提供迅速的安裝到硬盤功能。
Gentoo的未來,在於隨著計算機系統性能的不斷提高,從源碼編譯軟件的時間成本將會原來越低。同時,如果你有多台電腦,gentoo支持多台電腦采用並行的方式為同一台電腦編譯軟件。這也可以大大加快編譯的時間。
有人認為Gentoo編譯的系統,要比Debian要快。我覺得這不是一個事實。因為大多數的Gentoo的用戶不懂得如何去最優化自己的系統。因此,編譯出來的系統,優化也是有限的。這就給了Debian很大的機會。另外,USE參數設置的過多,也使得自己的系統多了好多自己不需要的功能。這也是一個原因。
Debian還有一個缺點,就是雖然Debian安裝之後很小。但是如果你需要編譯程序的時候,你就會發現Debian還要安裝各種各樣的headers或source,這些,對於Gentoo則是不需要的,因為Gentoo本身就是從源碼編譯過來的。不缺少那些東西。