此文為在linux(我只試過debian和Ubuntu)下刪除meta-package的一部分包的方法。由於此文過於無趣,所以請未滿十八周歲的人士在父母陪同下閱讀。
可能很多同學都遇到過這種情況:
新裝了linux系統,發現系統自帶的有些軟件並不合自己的習慣,就想把那個軟件卸掉,裝自己熟悉的。
比如Y某本人相對於totem,就更喜歡mplayer,相對於evolution就更喜歡sylpheed。
然而真正敲命令去刪除的時候
aptitude remove totem
卻發現apt告訴你,因為你要刪除totem,而gnome依賴於totem,所以apt就要很體貼的幫你刪掉整個桌面系統……雲雲。
在罵娘之前(或者之後也可以),我們可能需要了解一下meta-package,這個詞可能對於很多童鞋都很陌生,它是很多linux包管理器(比如apt和pacman)使用的一種虛包(virtual package),它本身可以被看作一種“包的集合”概念,這種包中並不含有任何的程序或者鏈接庫信息,它僅僅是個外殼,依賴於集合中的所有包,具體定義請看這裡。
比如,方便面(instant-noodles)包含(依賴)了調料(flavoring)和干面條(dried-noodles),(也許還有libinstant-noodles),當你購買(安裝)這個包的時候,系統會自動給你一袋可以馬上吃的東西,這自然可以方便包管理,這比你單獨去買三樣或者更多的材料要方便。
然而,問題是,如果有人很變態的只要面或者只要調料怎麼辦?絕大多數超市都不會同意你只買一部分。包管理器也一樣。於是就出現了最開始出現的那種情況,由於現在empathy/evolution/rhythmbox/totem已經是gnome的核心組件,所以,要不就全裝,要不就全卸載……
好了,話費了這麼多,有沒有解決辦法?
有是有,不過:刪除meta-package的一部分可能會造成包管理系統的升級或維護錯誤,威脅到系統穩定性,所以請童鞋們三思而後行……另外這只是針對apt系統和gnome的方法,pacman和KDE之類的同理。
1.最簡單(粗暴)的辦法:忽略依賴,不用apt,而改用更底層的dpkg
dpkg -r packagename
或者更徹底的:
dpkg -r gnome gnome-core gnome-desktop-environment
(上面那三個都是meta-package,所以其實並沒有給系統帶來什麼影響。)
基本上是一種後患無窮的辦法,如果你有覺悟以後都自己手工管理包的話,就去試吧。憐我世人,憂患實多……
2.很無恥但是有用的辦法:欺騙apt。
請注意,在各個不同的發行版中,依賴關系是不一樣的,運行下面命令之前,建議你自己先運行一遍aptitude/apt-get remove packagename,看看到底牽扯到哪些meta-packages. 之後再照方抓藥。
aptitude unmarkauto ‘?reverse-depends(gnome)’
aptitude unmarkauto ‘?reverse-depends(gnome-core)’
aptitude unmarkauto ‘?reverse-depends(gnome-desktop-environment)’之後就可以去隨意卸載你想要卸的東西了。aptitude remove packagename
以上的命令實際上是把gnome/gnome-core等所依賴的包都標記成手動安裝(這樣apt就不會去糾纏它們的依賴問題),之後apt在執行的時候可能會把那幾個meta-pacakge一股腦卸掉。至少你的系統是安全的,以後系統更新也可以照常做。不過,也很難說會不會有什麼不良影響,總之,再說一遍:三思而後行。