Debian和Gentoo包管理機制比較及延伸

2021-04-13 06:11:33 字數 3530 閱讀 1247

如果你現在想安裝一套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編譯的系統,要比debian要快。我覺得這不是乙個事實。因為大多數的gentoo的使用者不懂得如何去最優化自己的系統。因此,編譯出來的系統,優化也是有限的。這就給了debian很大的機會。另外,use引數設定的過多,也使得自己的系統多了好多自己不需要的功能。這也是乙個原因。

debian還有乙個缺點,就是雖然debian安裝之後很小。但是如果你需要編譯程式的時候,你就會發現debian還要安裝各種各樣的headers或source,這些,對於gentoo則是不需要的,因為gentoo本身就是從原始碼編譯過來的。不缺少那些東西。

debian包管理系統指南

最新版本 http wiki.ubuntu.org.cn e5 8c 85 e7 ae a1 e7 90 86 e7 b3 bb e7 bb 9f e6 8c 87 e5 8d 97 aptitude search n apt注 n 意思是搜尋軟體包名,是匹配最前面 aptitude 是更強大的安裝...

Debian 軟體包管理

dpkg i install 安裝 dbg 包 dpkg l listfiles 列出屬於指定軟體包的檔案 dpkg l list 簡明列出軟體包狀態 dpkg r remove 僅解除安裝軟體 dpkg p purge 解除安裝軟體清理配置 dpkg s search 查詢包中包含的檔案 dpkg...

Gentoo下折騰emerge包管理器

gentoo emerge如何使用use安裝額外的包擴充套件,vim如何安裝lua支援?ubuntu的apt get,arch的pacman,繼承自redhat的yum 安裝完gentoo之後也迅速開始學習它的包管理器 emerge!gentoo 的包管理工具稱為portage 類似於 yum 和 ...