如果你想改變編譯指令,建議您編輯 ebuild 檔案中的 src_compile() 函式。然而,你也可以讓 Portage 以為 ebuild 程式已經完成編譯步驟了。自己執行所有必須的命令然後在工作目錄建立一個叫做 .compiled 的空檔案。
原始碼 6: 通知 Portage 編譯工作完成了 |
# touch .compiled
|
安裝暫存路徑中的檔案
下個步驟 Portage 將會安裝暫存目錄中的所有必要檔案。這個目錄將會包含所有要被 merge 到 Live 檔案系統的檔案。你可以跑 ebuild 的 install 功能來完成這個動作,他會執行 ebuild 檔案中的 src_install() 函式:
原始碼 7: 安裝檔案 |
# ebuild path/to/ebuild install
|
Merge 檔案到 Live 檔案系統
最後一個步驟是把所有檔案 merge 到 Live 檔案系統和登記他們到 Portage 後端。 ebuild 將這個步驟稱做 "qmerge",而且包含下列步驟:
- 若有指定,將會執行 pkg_preinst() 函式
- 複製所有檔案到 Live 檔案系統
- 登記檔案到 Portage 後端
- 若有指定,將會執行 pkg_postinst() 函式
執行 ebuild 的 qmerge 功能以達成這些步驟:
原始碼 8: Merge 檔案到 Live 檔案系統 |
# ebuild path/to/ebuild qmerge
|
清除暫存目錄
最後,你可以使用 ebuild 的 clean 功能清除暫存資料夾:
原始碼 9: 清除暫存目錄 |
# ebuild path/to/ebuild clean
|
6.c. 額外的 ebuild 特性
執行所有 Merge 相關命令
使用 ebuild 的 merge 功能,你可以一次執行 fetch、unpack、compile、install、qmerge 命令:
原始碼 10: 安裝軟體 |
# ebuild path/to/ebuild merge
|
執行設定動作
某些程式包含對你系統更進一步設定的指令。這些指令可以與人互動,也因此不會自動執行。使用 ebuild 的 config 功能來執行列在 ebuild 檔案裡(非必要)config() 函式中的設定步驟:
原始碼 11: 設定套件 |
# ebuild path/to/ebuild config
|
建立一個 (RPM) 套件
你可以叫 Portage 由 ebuild 檔案建立一個二進位的套件,即使是 RPM 檔案。使用 ebuild 的 package 或 rpm 功能去建立這些檔案。然而這兩個功能有些不同:
- package 功能與 merge 功能非常相像,在建立套件之前,會執行所有必備的動作 (fetch、unpack、compile、install)
- rpm 功能會把執行 ebuild 的 install 功能之後所建立的檔案 包成 RPM 套件。
原始碼 12: 建立套件 |
(建立 Portage 相容,已編譯好套件) # ebuild path/to/ebuild package (建立 RPM 套件) # ebuild path/to/ebuild rpm |
然而用此方式建立的 RPM 檔案並不包含 ebuild 的相依性相關訊息。
6.d. 更多資訊
要更多關於 Portage、ebuild 程式和 ebuild 檔案的資訊,請查閱下列 man page:
原始碼 13: Man pages |
$ man portage (Portage 本身) $ man emerge (emerge 命令) $ man ebuild (ebuild command) $ man 5 ebuild (The ebuild file syntax) |
你也可以在 開發者手冊 找到更多有關開發的資訊
D. Gentoo 網路設定
1. 新手上路
1.a. Getting started
注意: 這篇文件假設你已成功的設定核心,和它的網路設備模組並且知道介面名稱. 我們並且假設你現在在設定eth0,但是也可以是eth1,wlan0,或其他. |
注意: 這篇文章適用baselayout-1.11.11或更新的版本. |
要開始設定你的網路卡,你需要告訴Gentoo RC系統相關的資訊. 做一個符號連結從 net.lo 到 net.eth0 在 /etc/init.d 目錄以完成這項動作
原始碼 1: 做一個符號連結從 net.eth0 到 net.lo |
# cd /etc/init.d # ln -s net.lo net.eth0 |
Gentoo's RC 系統現在知道這個介面了.它一樣也需要知道如何設定這個介面.所有的網路介面設定都在 /etc/conf.d/net這個檔案完成.接下來是一個用dhcp和靜態ip的範例設定.
原始碼 2: /etc/conf.d/net範例 |
# 使用 DHCP config_eth0=( "dhcp" ) # 設定靜態 IP 使用 CIDR 標記法 config_eth0=( "192.168.0.7/24" ) routes_eth0=( "default via 192.168.0.1" ) # 設定靜態 IP 使用網路遮罩標記法 config_eth0=( "192.168.0.7 netmask 255.255.255.0" ) routes_eth0=( "default gw 192.168.0.1" ) |
注意: 如果你沒有為你的接面設定的話,我們會假定你使用dhcp取得ip. |
注意: CIDR 表示無階級跨網域路由 (Classless InterDomain Routing). 原來, IPv4 位址被分成 A, B, C三個等級. 早期的分類系統並沒有想像到 Internet 的巨大發展,就造成了獨立位址會被用光的危機. CIDR 是一個地址表示規格容許一個 IP 位址去表示很多 IP 位址. A CIDR IP 位址可以看起來很像一般的 IP 位址除了它結束的地方多了一個反斜線和一個數字; 一個範例,192.168.0.0/16. CIDR 的詳細描述在 RFC 1519. |
現在我們已經完成設定這個介面,我們可以使用以下的命令來啟動和停止它.
原始碼 3: 啟動和停止網路介面 |
# /etc/init.d/net.eth0 start # /etc/init.d/net.eth0 stop |
重要: 在我們想要對網路除錯時,我們建議設定 RC_VERBOSE="yes" 在 /etc/conf.d/rc 檔案,我們就可以得到關於發生什麼事情的更多資訊. |
.現在我們已經成功開始和停止我們的網路介面,你也許會想要讓它在Gentoo啟動的時候也啟動. 下面就是做法.最後一個"rc" 命令叫 Gentoo 去啟動任何的程式在當時的runlevel還沒有啟動的.
原始碼 4: 設定一個網路介面在開機時啟動 |
# rc-update add net.eth0 default # rc |