一直很想玩玩 Gentoo 的 Portage,所以期末考爆炸期間,就把 windows 砍掉試灌 Gentoo,等到一切 ok,再把 Debian 灌成 windows,反正還有一大堆 Debian 可以玩。
結果前天吧,把 ACCEPT_KEYWORDS 改成 ~x86(本來是 x86),結果今天早上 update system 時 expat 更新到 2.0,而且他沒留 1.0 的 library,然後 expat 又是一大堆人要用到的東西,結果整個系統就炸了 Orz
還有一點很倒楣,一開始我裝了我目前最喜歡的 wm: e17,在 portage tree 裡面是 x11-wm/e。裝好之後一切都很棒,除了 CVS HEAD 多少有雷 ... XD 然後呢,今天早上 rsync portage tree 之後,x11-wm/e 就不見了! 一開始還懷疑是我的問題,結果到幾個 mirror 站看都是一樣,而且其他像 x11-libs/ecore, x11-libs/evas 等大概有十個吧,也不見了好幾個(不確定是不是全不見,因為我全沒檢查)。
所以既然系統這麼髒,就重灌吧。第一次灌(好像也不是第一次了..),就當成是 tune USE 參數吧,所以就重裝了。正在 make world 時就來寫一寫東西吧,先講從 Debian 換過來遇到的第一個問題。
在 Gentoo 裡面,因為 dependancy 是「動態」的(例如改了某個 USE flag),所以他很難做到像 Debian 那樣,直接移除所有相依的 package,換句話說,那些 package 很有可能就這樣炸掉了。
所以如果系統上有這些可能會炸掉的 package,看是要重編或是直接移除。但是那些是可能炸掉的 pacakge 就要間接得知了。Gentoo Portage 介紹裡面是建議這麼做:
# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild
Package compile 時用的 USE flag 可能跟目前的不一樣,所以第一行就是用最新的 USE 把改過的那些重編,原因是 USE 改變可能導致 dependancy 的異動。
接下來的 depclean 是把那些不應該存在的 package 拿掉(根據 manpage,應該只是把被用到的 package 跟用到它的全列出來,然後看看實際上裝的有那一些不在這個列表裡面)。
最後剩下的可能還是有問題,例如我遇到的 expat 的例子,USE 沒變(就算變了還是有可能出問題),但是 expat 升級導致用他的人也要重編。這時候就得跑 revdep-rebuild,這其實是還滿噁心的一個步驟。參考 gentoolkit,首先,他會去 scan 所有 ebuild,看看那些 library, elf 執行檔是不是用了不存在的 library,如果是的話,就得把這個 package 更新到比較新的版本(或只是重編)。
很累人地做了這三個步驟,package 間的 dependancy 應該就修好了吧,好累,不想驗證 XD
現在正在編 gcc,不知道編到 stage 幾了...
[/lang_zh]
[lang_en]
I'm too lazy to translate this long post. Sorry about that.
[/lang_en]
1 則留言:
This is really vital and helpful details that I and other readers found to be extremely helpful. Appreciate you for constantly offering readers with insightful and helpful content; your blog is going great, congrats! In between posts, you can check out this
張貼留言