1.d. 當 Portage 在編譯時...
關於 SLOT,虛擬,分支,架構,和 Profile
如同我們前面說的,Portage 相當有威力,並且支援許多其他軟體管理工具缺乏的功能。為了了解這些功能,我們會從各角度解釋 Portage 而不會太深入。
借著 Portage 但依套件的不同版本可以共同存在系統上。而其他發行版通常是以套件的版本來命名(像 freetype 和 freetype2),Portage 使用一種叫做 SLOT 的技術。ebuild 使用它的版本來宣告特定的 SLOT。有著不同 SLOT 的套件可以共存在同一個系統上。例如說,freetype 有著包含 SLOT="1" 和 SLOT="2" 的 ebuild。
也有些套件提供相同的功能但透過不同方法實做。例如說,metalogd, sysklogd 和 syslog-ng 都是系統紀錄器。依賴 "系統紀錄器" 的軟體不能只相依一種紀錄軟體,像是 metalogd,因為其他的紀錄器也是一個不錯的選擇。Portage 允許 virtuals:每一種系統紀錄器提供 virtual/syslog 讓軟體可以相依 virtual/syslog。
Portage 樹中的軟體可以存放在不同的分支中。預設系統只接受 Gentoo 視為穩定的套件。大部份新的軟體剛提交時,先加到測試中的分支去,代表在他標示為穩定前需要更多的測試。雖然你可以在 Portage 樹中看到這個軟體的 ebuild,在他標示為穩定分支前 Portage 不會去做更新。
一些軟體只能在特定的硬體架構上使用。可能是在其他架構上不能工作,需要更多測試,或者是提交這個軟體到 Portage 的發展者不能確認這個套件能不能在不同平台工作。
Gentoo 的安裝包括特定的 profile,包含了在其他資訊之外,系統正常工作所需的套件列表。
阻擋的套件
原始碼 18: Portage 警告阻擋套件 (加上 --pretend) |
[blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1) |
原始碼 19: Portage 警告阻擋套件 (沒有 --pretend) |
!!! Error: the mail-mta/postfix package conflicts with another package. !!! both can't be installed on the same system together. !!! Please use 'emerge --pretend' to determine blockers. |
Ebuild 包含特殊的區域告訴 Portage 關於他的相依性。相依性關係有兩種:宣告在 DEPEND 以及執行期相依,宣告在 RDEPEND。當其中一個相依關係中標記一個套件或虛擬 不 相容,他就成為阻擋套件。
要修正阻擋,你可以選擇不要安裝這個套件,或是先移除衝突的套件。在上面的範例中,你可以選擇不要安裝 postfix 或是先移除 ssmtp。
也有可能是還沒安裝的兩個套件互相阻擋。在這種很少見的情況下,你應該先找出為什麼需要安裝這兩個套件。大部份的情況裝一個就足夠了。如果不是的話,請送一個錯誤到 Gentoo 錯誤追蹤系統。
封鎖的套件
原始碼 20: Portage 警告封鎖的套件 |
!!! all ebuilds that could satisfy "bootsplash" have been masked. |
原始碼 21: Portage 警告封鎖的套件 - 理由 |
!!! possible candidates are: - gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword) - lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword) - sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword) - dev-util/cvsd-1.0.2 (masked by: missing keyword) - media-video/ati-gatos-4.3.0 (masked by: package.mask) - sys-libs/glibc-2.3.2-r11 (masked by: profile) |
當你想要安裝在你系統上還不能使用的套件時,你會得到封鎖的錯誤。你應該嘗試安裝其他在你系統上可用的軟體,或是等這個軟體可以用時再安裝。這裡總是有封鎖的理由:
- ~arch keyword 代表這個軟體還沒經過足夠的測試,而不能放到穩定分支。等 幾天或幾個禮拜再試試看。
- -arch keyword 或 -* keyword 代表這個軟體在你的系統架構下不能工 作。如果你確定這個套件的確可以動作,送出一個 bug 到我們的 bugzilla 網站。
- missing keyword 代表這個程式還沒在你的系統架構下測試過。要求架構移植 團隊測試或是你幫他們測試,然後回報你的結果到我們的 bugzilla 網站。
- package.mask 代表這個套件已經被發現毀壞,不穩定或是更糟的情況。而且被 刻意標記成不可使用。
- profile 代表這個套件被發現不適合你的 profile。安裝這個套件可能毀了你 的系統,或是他就是不相容你用的 profile。
相依性遺失
原始碼 22: Portage 警告相依性遺失 |
emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4". !!! Problem with ebuild sys-devel/gcc-3.4.2-r2 !!! Possibly a DEPEND/*DEPEND problem. |
你輸入要安裝的套件相依在你的系統上不可取得的套件。請檢查 bugzilla 看看這件事被發現了沒,如果沒有的話,請回報他。除非你使用混合的分支這不應該發生,因此這是一個 bug。
模稜兩可的的 Ebuild 名稱
原始碼 23: Portage 警告模稜兩可的的 Ebuild 名稱 |
!!! The short ebuild name "aterm" is ambiguous. Please specify
!!! one of the following fully-qualified ebuild names instead:
dev-libs/aterm
x11-terms/aterm
|
你想要安裝的套件他的名稱符合超過一個套件。你要同時提供他的類別名稱。Portage 會告訴你可能符合的讓你選擇。
循環相依
原始碼 24: Portage 警告循環相依 |
!!! Error: circular dependencies: ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1 ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2 |
兩個(或更多)你想要安裝的套件互相依賴,因此不能被安裝。這通常是 Portage 樹中的 bug。請等一下重新作 sync 然後再試一次。你也可以檢查 bugzilla 看看這件事被發現了沒,如果沒有的話,請回報他。
下載失敗
原始碼 25: Portage 警告下載失敗 |
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered. Please see above for details.
|
Portage 不能下載指定程式的原始碼而會繼續安裝其他的程式(如果可用的話)。這個錯誤可能因為鏡像站還沒正確同步,或是 ebuild 指向錯誤的位置。原始碼存放的伺服器也可能因為一些理由關閉了。
一小時候在看看這個問題是否還存在。
系統 Profile 保護
原始碼 26: Portage warning about profile-protected package |
!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage' !!! This could be damaging to your system. |