要取得更多關於相依性的討論。參考 寫 Init Scripts。
2.c. 變數名稱及設定值
變數名稱是動態的。他們的結構通常是 variable_${interface|mac|essid|apmac} 。例如說,dhcpcd_eth0 變數代表 eth0 的 dhcpcd 設定。而 dhcpcd_essid 則是任何介面連到這個 "essid" 時的 dhcpcd 設定。
然而,並沒有簡單的法則決定介面的名稱。實際上,許多無線網路介面除了 ethx 以外,也會用像 wlanx,rax 之類的名稱。而且一些使用者定義的介面,像橋接,可以給 foo 之類的自訂名稱。為了讓生活更加有趣,無線網路結點可以在名稱中有非英文,數字的字元 - 因為你要對每個 ESSID 設定參數,這一點相當重要。
Gentoo 在網路設定的缺點是使用 bash 變數 - 不能使用任何數字,英文字母以外的東西。為了突破這個限制,我們把所有非數字,英文字母的字元轉成 _ 字元。
另一個不方便的地方是變數的值 - 需要跳脫一些字元。這可以在需要跳脫的字元前加上 \ 字元來完成。底下是需要像這樣跳脫的字元列表:",' 和 \。
在範例中為了讓 ESSID 包含最多種的字元,我們使用這個 My "\ NET ESSID:
原始碼 3: 變數名稱範例 |
# 這可以運作,但是領域名稱是不合法的 dns_domain_My____NET="My \"\\ NET" # 上面的例子是當連到 ESSID 是 My "\ NET 的 AP 時, #把領域名稱設成 My "\ NET |
3. 網路模組
3.a. 網路模組
我們現在支援模組化的網路 script,這代表可以輕鬆的支援新的網路介面和設定模組,而且同時和原來的保持相容性。
如果模組需要的套件已經安裝,他就會自動載入。但是如果你指定一個還沒安裝套件的模組,那你會收到一個錯誤訊息,告訴你要安裝哪個套件。理想上,只有在你安裝兩個以上提供相同功能的套件,而且你比較喜歡某一個時,才需要用模組設定。
原始碼 1: 模組優先權 |
# 想用 iproute2 而不是 ifconfig modules=( "iproute2" ) # 你也可以為一個介面指定不同的模組 # 在底下的例子我們比較想用 udhcpc 而不是 dhcpcd modules_eth0=( "udhcpc" ) # 你也可以指定不要用哪個模組 - 例如說你可能想 # 使用 linux-wlan-ng 來控制無線網路設定 # 但是你仍然想對每一個 ESSID 做設定 modules=( "!iwconfig" ) |
3.b. 網路介面管理
我們目前提供兩種不同的網路管理程式:ifconfig 及 iproute2。你可以用這兩個其中之一來做任何種類的網路設定。
ifconfig 是目前 Gentoo 預設使用的,並且包含在系統 profile 之中。iproute2 是更有威力及彈性的套件,但是預設並不包含他。
原始碼 2: 安裝 iproute2 |
# emerge sys-apps/iproute2 # 如果兩個都安裝的話,使用 iproute2 modules=( "iproute2" ) |
因為 ifconfig 和 iproute2 都是做很類似的事,我們讓這兩個可以使用共同的基本設定。例如說底下兩段程式碼不管對那種都適用。
原始碼 3: ifconfig 和 iproute2 範例 |
config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
# 我們也可以指定廣播位址
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )
|
3.c. DHCP
DHCP 是一種從 DHCP 伺服器取得網路資訊(IP 位址,DNS 伺服器,閘道器等等)的方法。這代表如果網路上有一個 DHCP 伺服器,你只要告訴客戶端使用 DHCP 然後他們就會自己把網路設好。當然,如果在使用 DHCP 前必需要用無線網路,ppp 等其他事的話你必需要去設定。
DHCP 功能可以由 dhclient,dhcpcd,pump 或是 udhcpc 提供。每一種 DHCP模組都有他的好處和壞處 - 底下是快速的簡介。
| DHCP 模組 | 套件 | 優點 | 缺點 |
| dhclient | net-misc/dhcp | 由 ISC,和製作 BIND DNS 軟體的同一批人做的。設定非常有彈性。 | 設定相當複雜,軟體非常肥大,沒辦法從 DHCP 取得 NTP 伺服器,預設不送主機名稱。 |
| dhcpcd | net-misc/dhcpcd | Gentoo 一直以來的預設套件,不依賴任何其他工具 | 不再被上游維護,有些時候很慢,當租約無限久時不會變成系統服務 |
| pump | net-misc/pump | 輕巧,不依賴任何其他工具 | 不再被上游維護,不可靠,尤其是在透過數據機時,不能從 DHCP 取得 NIS 伺服器 |
| udhcpc | net-misc/udhcp | 輕巧 - 最小的 DHCP 客戶端,為嵌入式系統而做的軟體 | 未知 - 沒有任何套件預設使用他,不能定義三秒以上的 timeout |
如果你安裝一種以上的 DHCP 客戶端,你需要指定用那一個 - 否則預設是有 dhcpcd 可以用的話就用他。
要送給 DHCP 客戶端自訂的選項,使用 module_eth0="..." (把 module 改成你在用的 DHCP 模組,例如說 dhcpcd_eth0)
我們嘗試讓 DHCP 相對來說不可知 - 因此在 dhcp_eth0 變數中支援下列指令。預設是不用任何一個。
- release - 釋放 IP 讓他可以重複使用
- nodns - 不要複寫 /etc/resolv.conf
- nontp - 不要複寫 /etc/ntp.conf
- nonis - 不要複寫 /etc/yp.conf
原始碼 4: /etc/conf.d/net 的 DHCP 範例 |
# 只有在你安裝一種以上 DHCP 模組才需要 modules=( "dhcpcd" ) config_eth0=( "dhcp" ) dhcpcd_eth0="-t 10" # 十秒後 Timeout dhcp_eth0="release nodns nontp nonis" # 只取得位址 |
注意: dhcpcd,udhcpc 和 pump 預設會傳送目前的主機名稱給 DHCP 伺服器,所以你不用去指定他。 |
3.d. ADSL 連線
首先我們要安裝 ADSL 軟體。
原始碼 5: Install the rp-pppoe package |
# emerge net-dialup/rp-pppoe
|
警告: baselayout-1.11.x 目前只支援 PPPOE。我們希望以後的版本可以支援 PPPOA。 |
現在要設定 eth0 為 ADSL 連接的網路介面,並且輸入使用者名稱。
原始碼 6: 設定 eth0 使用 ADSL |
config_eth0=( "adsl" ) adsl_user_eth0="username" |
最後你要在 /etc/ppp/pap-secrets 定義使用者名稱及密碼。
原始碼 7: /etc/ppp/pap-secrets 範例 |
# * 非常重要
"username" * "password"
|
3.e. APIPA (自動取得虛擬 IP)
APIPA 藉由發送arp,詢問在 169.254.0.0-169.254.255.255 中隨機的一個位址來找到一個可以用的 IP。如果沒有收到就是可以用,接著就會把網路介面指定這個 IP。
這只有在沒有 DHCP 伺服器並且沒有連到網際網路,及其他電腦也用 APIPA 時才適用。
為了支援 APIPA,安裝 net-misc/iputils or net-analyzer/arping。
原始碼 8: /etc/conf.d/net 的 APIPA 設定 |
# 先試 DHCP - 失敗的話再用 APIPA config_eth0=( "dhcp" ) fallback_eth0=( "apipa" ) # 只使用 APIPA config_eth0=( "apipa" ) |
3.f. 頻寬合併
要使用頻寬合併,先安裝 net-misc/ifenslave
頻寬合併用來增加網路頻寬。如果你有兩個連到停一網路的網路介面,你可以把這兩個連結在一起,讓應用程式只看到一個網路介面,但實際上他們正同時使用兩個介面。
原始碼 9: /etc/conf.d/net 頻寬合併設定 |
把介面連在一起 slaves_bond0="eth0 eth1 eth2" # 你或許不想給連結的介面 IP config_bond0=( "null" ) # 因為 eth0,eth1 和 eth2 需要額外的設定,要在相依性中加入這三個 depend_bond0() { need net.eth0 net.eth1 net.eth2 } |