5.c. 非 Portage 維護的軟體
使用 Portage 和自己維護的軟體
在某些情況你會想要自己設定,安裝,維護軟體而不要 Portage 自動完成這些過程,雖然是 Portage 已經提供這些軟體了。已知的例子是核心原始碼和 nvidia 驅動程式。你可以作一些設定讓 Portage 知道某個套件已經手動裝到系統上了。這個過程叫做 注入 而且透過 /etc/portage/profile/package.provided 檔案 Portage 支援這個功能。
舉例來說,如果你想要告訴 Portage vanilla-sources-2.6.11.6 你已經手動裝好了,把底下幾行加到 /etc/portage/profile/package.provided:
原始碼 2: package.provided 範例 |
sys-kernel/vanilla-sources-2.6.11.6 |
6. Ebuild的應用方式
6.a. Emerge 與 Ebuild
ebuild 程式是 Portage 系統較低層的操控介面。你可以透過給予 ebuild 檔案,使用這個程式去執行特定動作。例如,你可以單獨執行各個 merge 步驟。
使用 ebuild 大多是為了開發;更多關於 ebuild 的資訊因此可以在 開發者手冊中找到。然而,我們將解釋在 merge 一個確切的軟體名稱時,什麼 ebuild 動作會被 Portage 請求,還有如何執行一些 ebuilds 支援的後端配置。
6.b. 手動安裝軟體
抓取原始碼 & 驗證 checksum
當你使用 ebuild 程式且給他一個 ebuild 檔案,他將驗證所有內涵檔案的 checksums 是否與 Manifest 附帶的,或與 files/digest-<name>-<version> 檔案中的 checksums 相同。這會在下載原始碼之後執行。
使用 ebuild 抓取原始碼, 請執行:
原始碼 1: 抓取原始碼 |
# ebuild path/to/ebuild fetch
|
如果 ebuild 的 md5sum 不符合列在 Manifest 檔案裡面的那份,或是下載的原始碼不符合列在 files/digest-<package> 檔案中的那些 checksum,你將收到像是這樣的錯誤訊息:
原始碼 2: Ebuild checksum 錯誤 |
!!! File is corrupt or incomplete. (Digests do not match) >>> our recorded digest: db20421ce35e8e54346e3ef19e60e4ee >>> your file's digest: f10392b7c0b2bbc463ad09642606a7d6 |
接著會指出錯誤的檔案。
如果你確定你下載的原始碼和 ebuild 本身正確無誤,你可以使用 ebuild 的 digest 功能重新建立 Manifest 和 digest-<package>。
原始碼 3: 重新建立 Manifest and digest |
# ebuild path/to/ebuild digest
|
解開原始碼包裹
想解開 /var/tmp/portage(或你在 /etc/make.conf 指定的其他目錄路徑)中的原始碼檔案, 可以使用 ebuild 的 unpack 功能:
原始碼 4: 解開原始碼包裹 |
# ebuild path/to/ebuild unpack
|
這將執行 ebuild 的 src_unpack() 函式(如果沒有定義 src_unpack() 函式,預設會單純解壓縮)。在這個步驟也會套用所有必須的修補檔。
編譯原始碼
在 merge 程序中,下個步驟就是編譯原始碼。ebuild 的 compile 功能是去執行 ebuild 檔案中的 src_compile() 函式。如果有需要,這也包含著 configure 步驟。
原始碼 5: 編譯原始碼 |
# ebuild path/to/ebuild compile
|