免責聲明:
這份手冊已經被更新的版本取代,不再被維護。
|
Gentoo Linux 2005.1 PPC 手冊
內容:
-
安裝 Gentoo
您可以使用多種方式安裝 Gentoo。在這個指南內我們將解釋如何安裝 Gentoo。
-
關於 Gentoo Linux 安裝步驟。
不熟悉 Gentoo 的使用者並不了解 Gentoo 的選擇。
-
使用 Universal 安裝光碟開機
使用 Universal 安裝光碟你可以開機並進入讓你安裝 Gentoo 的執行環境。
-
設定網路
如果你需要網路,這篇就是教你設定網路(包括網際網路)的地方。
-
準備磁碟
為了要安裝 Gentoo,您一定要建立一些所需的分割區。這章的內容將為您解釋如何設定磁
碟分割。
-
Gentoo 安裝檔案
這一章說明如何解壓縮 stage3 檔案及設定 Portage。
-
安裝 Gentoo 基礎系統
現在 stage3 檔案已經解壓縮好了,我們 chroot 到新的系統及修改 USE 設定。
-
設定核心
Linux kernel 是每個版本的核心。這章將解釋如何編譯您的核心。
-
設定您的系統
您將需要編輯一些重要的設定檔。這章將解釋這些重要設定檔的功能以及設定。
-
安裝必要的系統工具
就如之前所提的,Gentoo 的哲學是選擇。這章將帶領您選擇並且安裝一些重要的工具。
-
設定開機程式
目前有多個開機程式。每個都有個別的設定。這章將解釋所有需要的設定,安裝,並且完成
設定您想使用的開機程式。
-
最終化您的 Gentoo 安裝
到這個步驟時,您已經差不多要完成安裝過程了。我們只需要建立一個(或多個)系統使用
者,以及安裝預編套件(自由選擇)。
-
然後呢?
現在您的 Gentoo 系統已經完成安裝了,然後呢?
-
使用 Gentoo
學習如何使用 Gentoo:安裝軟體,變數,Portage 的行為等等。
-
Portage 介紹
這一章在簡介一些使用者在維護自己系統上的軟體的一些簡單的步驟
-
USE 參數
USE 參數對於 Gentoo 非常的重要。在這章內,您將會學習如何使用 USE 參數和了解 USE
參數如何跟您的系統互動。
-
Portage 功能
包括了Portage擁有的特色,就像是軟體的編譯和快取等等。
-
起始程序(Initscripts)
Gentoo 使用一份非常特別的起始程序,包含著其他功能如相依性和虛擬起始程序。這章將
解釋所有的概念和如何使用它們。
-
環境變數
使用 Gentoo,您可以很簡單的管理系統上的環境變數。這章將解釋如何管理的方法,
也解釋著一些常用的變數。
-
使用Portage
"使用Portage"提供一些較深入的Portage功能介紹,Gentoo的軟體管理工具。
-
檔案和資料夾
一旦您想進一步知道Portage,您必須先知道他是怎樣和在哪裡存取他的檔案。
-
經由變數來設定
Portage完全由一堆變數來設定,因此您可以設定這些變數在設定檔或是在環
境變數中。
-
混用不同分支的軟體
Gentoo 提供一些已經依據穩定性和架構來分類的軟體在不同的分支中。
在"混用不同分支的軟體"中將會教您如何設定這些分支並且如何讓您可
以個別的使用這些軟體。
-
附加的Portage工具
Portage另外提供一些工具讓您在使用Gentoo時有更好的經驗。閱讀他
您將會學到更多快速的設定方式和其他的工具。
-
愉悅的使用官方的Portage Tree
在這章中會提供您一些小技巧和小方法來使用您自己的Portage Tree,
如何同步您需要的目錄,增加目錄等等。
-
Ebuild的應用方式
在這章中會告訴您一些有關於當Portage安裝軟體時的步驟和您自己要
如何利用ebuild的資訊。
-
Gentoo 網路設定
廣泛的 Gentoo 網路設定指南
-
新手上路
在大部份的環境下設定及啟動網路介面的指南。
-
進階設定
這裡學習這些設定如何工作 - 在學習網路模組前你需要先了解這一章。
-
網路模組
Gentoo 提供你有彈性的網路設定 - 這篇告訴你如何選擇不同的 DHCP 客戶端程式,設定
頻寬合併,橋接,VLAN 等等。
-
無線網路
無線網路的設定並不很直觀。希望這篇能幫你設定!
-
新增功能
如果你想要探險,你可以加上你自己的網路函數。
-
網路管理
給筆記電腦或是移動電腦到不同網路的人參考。
A. 安裝 Gentoo
1. 關於 Gentoo Linux 安裝步驟。
1.a. 介紹
歡迎!
首先,歡迎 使用 Gentoo。您將會進入一個關於選擇和效能的世界。 Gentoo 是代
表著選擇。當您安裝 Gentoo 時,我們會清楚地解釋您可用的軟體選擇,安裝的方式,
選擇您想要的系統記錄器,等等。
Gentoo 是一個快速,現代化,乾淨,高彈性設計的版本。 Gentoo 基於免費的軟體和絕對
不會隱瞞問題。Portage,為 Gentoo 所使用套件維護系統,編寫於 Python 也代表著您可
以簡單的查看以及更改原始嗎。 Gentoo 的套件系統使用原始碼 (也支援已編譯的套件)
和設定檔都是普通的文字檔。換句話說,到處都是開放性的。
了解您自己的 選擇 是非常重要的,這也是 Gentoo 的哲學。我們將盡力不強迫您
安裝任何您不想安裝的軟體。如果您還是覺得我們強迫您安裝了某些您不想要的東西,請
申報錯誤。
安裝程序的規劃?
Gentoo 安裝可以分為 10 個步驟,從第二章到第十一章。每個步驟都會完成以下的目的:
-
第一個步驟後,您就在安裝 Gentoo 的工作環境內
-
第二個步驟後,如果你需要的話,你的網路連線已經準備好了(這是自由選擇的)。
-
第三個步驟後,您的硬碟已起始完成,並且可以放置您的 Gentoo 安裝
-
第四個步驟後,您的安裝環境已經準備完成並且以 chroot 進入了新了環境
-
第五個步驟後,核心套件,和所有 Gentoo 安裝的一樣都會被安裝
-
第六個步驟後,您的 Linux 核心已經編譯完成了
-
第七個步驟後,您已經編寫完大部份的系統設定檔了
-
第八個步驟後,必要的系統工具(您可以從一份清單內選擇)已經安裝並且設定完成
-
第九個步驟後,您選擇的開機程式已經安裝並且設定完成在您的新Gentoo系統當中
-
第十個步驟後,您的Gentoo環境已經準備好讓您去探索了
當您擁有許多選擇時,我們將盡我們所能為您解釋每個的優點及缺點。我們將繼續使用預設
的選項,將會以 "預設:" 放在標題。其他選擇將會以
"其他選擇:" 為標題。請 不要 認為我們建議您使用預設的,但這是我
們認為多數使用者會使用的設定。
有時候您可以選擇其他選擇性的步驟。這些步驟將會被標為 "選擇性:"
並且對於安裝不是非常的重要。但是,有些選擇性的步驟需要依賴著您之前所做的決定。
我們將會在發生時,需要決定時和在選擇性的步驟前面告訴您。
我的選擇有那些?
您可以使用多種方法安裝 Gentoo。您可以下載然後使用我們的光碟安裝
,從其他版本,從開機光碟(如 Knoppix),從網路開機的環境,從一個救援磁片,等等
。
這份文件將會包含著使用我們的 Universal 光碟為安裝方式,他是一片可開機光碟,包含
了全部讓 Gentoo Linux 啟動並執行需要的東西。你也可以使用我們的套件光碟在安裝好
Gentoo 基本系統後幾分鐘裝好整個系統。
這種安裝方法並不會安裝套件的最新版本,如果你想用最新版的話你可以看 Gentoo Linux 手冊 的安裝步驟。
關於其他的安裝方法請參考「其他安裝指南」。我們也提供也同樣有用的
Gentoo/x86 安裝技巧 文件。
如果您認為這使用手冊說明的太詳細,您可以使用我們
文件資源中的快速安裝手冊,如果
您使用的架構已經有文件。
如果您打算使用以預先編譯的套件安裝 Gentoo,除了使用 LiveCD 的套件外,您將沒有其
他選擇。更新版的 Gentoo 發佈也會在網路上提供這些已編譯完成的套件。
碰到問題?
如果您在安裝過程內碰到問題(或是安裝指南)請到 Gentoo Release Engineering Project 查看勘誤表,或是到 臭蟲申報系統 查詢是否有重複或和您相同的申報
。如果沒有,請建立一個方便我們維護。請不要害怕我們的開發員 -- 他們大部份不會吃人
。
請注意,雖然您正在閱讀的文件針對各種不同架構,但是它還是會包含著一些關於其他架構
的資料。這是因為 Gentoo 手冊使用著大量可共用的原始碼軟體(為了減少重複和少許的開
發資源)。我們會將疑惑減到最少。
如果您不確定問題是否為使用者相關(有些是粗心的錯誤)還是軟體問題,我們歡迎您到
irc.freenode.net 的 #gentoo (英文)或是 IRCNET 的 #Gentoo.tw 發問。當然,
如果您有其他目的,我們也歡迎:)
如果您有關於 Gentoo 的問題,請到 Gentoo 文件 查看我們
的 常見問題。您也可以到 FAQs(英文) 或是
Gentoo Taiwan 討論區。
1.b. 使用 Gentoo 發行平台(GRP) 快速安裝
GRP 是什麼?
Gentoo 發行平台,縮寫 GRP,是讓想要使用預編套件的使用者(就是你!)可以在安裝過程使
用的快照,讓你加速 Gentoo 安裝的過程。GRP 包含了 Gentoo 完整安裝過程中需要的套件。
他們不只有在安裝時加速安裝,在所有需要長時間編譯的套件(像 KDE,xorg-x11,GNOME,
OpenOffice,Mozilla 等等) 都有 GRP 套件可以用。
然而,這些預編套在 Gentoo 生命週期中並不被維護。這些快照每次 Gentoo 發佈新版
本時發佈,實現短時間裝好完整功能的 Gentoo 。你可以在 Gentoo 下工作實在背景更新
系統。
Portage 如何處理 GRP 套件
你的 Portage tree - ebuilds 檔的集合(ebuild 是包含了套件資訊的檔案,像是
說明,原始檔路徑,編譯過程,相依性等等) - 需要和 GRP 同步:可使用的 ebuild 版本
必需符合 GRP 套件。
因為這個原因,你只有在使用目前這種安裝方式時從 GRP 套件得到益處。GRP 對那些想要
全部套件都裝最新版本的人並不適用。
有 GRP 可以用嗎?
並不是所有的架構都有 GRP 套件可以用。這並不是說 GRP 不支援其他的平台,而是因為
我們沒有足夠資源編譯及測試 GRP 套件。
目前底下這些架構我們有提供 GRP:
-
x86 架構 (x86, athlon-xp, pentium3, pentium4)
注意:x86 套件 (packages-x86-2005.1.iso) 可以在鏡像站上取得,而 pentium3
,pentium4 及 athlon-xp 只能經由 bittorrent 取得。
-
amd64 架構 (amd64)
-
sparc 架構 (sparc32, sparc64)
-
ppc 架構 (G3, G4, G5)
-
alpha 架構
如果你的架構(或子架構)不在列表的話,你並不能選擇使用 GRP 安裝。
現在這個說明結束了,接下來繼續 使用 Universal LiveCD 開機
2. 使用 Universal 安裝光碟開機
2.a. 硬體需求
介紹
開始前,我們將先列出能成功安裝 Gentoo Linux 的硬體清單。
硬體需求
| Apple NewWorld 機器 |
Power/PowerPC 微處理器 (G3, G4, G5) 像是 iMac, eMac, iBook
PowerBook, Xserver, PowerMac。
|
| Apple OldWorld 機器 |
像 Beige G3s, PCI PowerMacs 及 PCI PowerBooks 之類 OpenFirmware 版本低於三的
Apple 機器,還有以 PCI 為基礎的 Apple 複製機也有支援。
|
| Genesi's Pegasos |
Pegasos I/II, Open Desktop Workstation
|
| IBM |
RS/6000, iSeries, pSeries
|
| 記憶體 |
最少 64 MB |
| 磁碟空間 |
1.5 GB (不包含置換分割區) |
| 置換分割區 |
至少 256 MB |
在繼續前請先閱讀 Gentoo
PPC FAQ。
2.b. Gentoo Universal 安裝光碟
介紹
Gentoo Linux 使用 stage3 壓縮檔安裝。這種檔案是 tar 壓縮檔,包含了讓你安
裝 Gentoo 到系統上的最小環境。
如果你想要用 stage1 或 stage2 來安裝,請參考 Gentoo FAQ 中的
我如何用 stage1 或 stage2 安裝 Gentoo?
Gentoo Universal 安裝光碟
安裝光碟是可開機的光碟,包含了一個自足的 Gentoo 環境,他允許您從光碟開機。在開機的過程當中,它會偵測您的硬體設備並且載入合適的區東程式。Gentoo 安裝光碟由 Gentoo 開發員所維護。
我們目前提供兩種 安裝光碟:
-
Universal 安裝光碟包含了您需要用來安裝 Gentoo 的所有軟體,它為常見的架構提供了 stage3 檔案,您需要選擇的額外應用程式的原始碼,當然,還有適用於您的硬體架構的安裝指令。
-
Minimal 安裝光碟僅包含有最小需求的環境來讓您開機並設定您的網路,讓您可以連結上網際網路,它並不包含任何額外的檔案,所以無法在目前的安裝方式中使用。
Gentoo 同時也提供一個套件 CD,這不是 安裝光碟,而是一個提供您在安裝您的 Gentoo 系統時可以利用的額外資源。它包含了預先編好的套件(一般所稱的 GRP 包),讓您在 Gentoo 安裝完成之後,更新您的 Portage tree 之前,簡單又快速地安裝額外的應用程式(例如 OpenOffice.org, KDE, GNOME, ...)。
套件 CD 的使用方法稍後會在這份文件中介紹。
2.c. 下載、燒錄、並使用 Gentoo Universal 安裝光碟開機
下載並燒錄安裝光碟
您可以從我們的鏡像站中下載 Universla 安裝光碟(還有,如果您想要,套件 CD 也一樣)。安裝光碟放在 releases/x86/2005.1/livecd 目錄下,套件 CD 則放在 releases/ppc/2005.1/packagecd 目錄。
在這些目錄內,您將可以找到 ISO 的檔案。這些是完整的 CD 映像檔方便讓您寫入 CD-R。
這些檔案下載完成後,您可以確認檔案的完整性,看看有沒有毀損:
-
您可以檢查檔案的 MD5 checksum,將之與我們提供的 MD5 checksum 相比對(舉例來說,使用 Linux/Unix 下的 md5sum 工具或是 Windows 的 md5sum)。
-
您可以檢查我們提供的加密簽章(cryptographic signature)。在您進行此步之前,您需要取得我們使用的公開鑰匙(17072058)。
要使用 GnuPG 程式取得我們的公開鑰匙,執行下列指令:
原始碼 3.1: 索取簽名檔 |
$ gpg --keyserver subkeys.pgp.net --recv-keys 0x17072058
|
然後檢查簽名:
原始碼 3.2: 檢查 |
$ gpg - -verify <簽名檔> <下載的 iso>
|
如要燒錄所下載的光碟映像檔,您將需要選擇 raw 的燒錄格式。我們將教使用
cdrecord 和 k3b;關於其他可以到我們的 Gentoo FAQ 和 PPC FAQ 找到。
-
使用 cdrecord,您只需要輸入 cdrecord dev=/dev/hdc <下載的 iso 檔>(將
/dev/hdc 更改唯您的燒錄機的位置)
-
使用 K3B,選擇工具(tools) > CD(光碟) >
燒錄映像檔(Burn Image)。然後在 '燒錄映像檔(Image to Burn)',然後
選擇正確的 ISO 檔案。最後按下 開始(Start)。
2.d. 使用 PPC 安裝光碟開機
預設:用 Universal 安裝光碟透過 Yaboot 開機
將 Installation CD 放入光碟機,然後重新啟動系統。在聽到 system-start-bell 時按下 'C' 鍵
直到載入 CD。
您將會看到一個友善的歡迎詞然後 boot:
畫面放在螢幕的下方。
在這個畫面,您將可以選擇適合您所用的子架構的核心。我們提供 G3,G4
,G5。這些都有編譯多 CPU 支援,但是在單 CPU 的系統仍然可以使用。
您也可以在這個畫面調整一些核心選項。以下的列表是一些您可以加入的開機選項:
| 開機選項 |
說明 |
| video |
這個選項將使用以下不同廠商相關的標籤之一:
radeonfb,rivafb,atyfb,aty128 或是
ofonly。您可以跟著這個標籤選擇您想要的解析度和更新頻率。舉例來說,
video=radeonfb:1280:1024@75。如果您不知道該選擇什麼,那您可以選擇
通用的 ofonly
|
| nol3 |
關閉部份的 Powerbook 上的第三層的快取(需要最少17")
|
| dofirewire |
啟用 IEEE1394 (FireWire) 設備支援,如外接應碟。
|
| dopcmcia |
如果您想要在安裝過程中使用 PCMCIA 設備 (如 PCMCIA 網路卡),您需要啟用這個選項。
|
在這個畫面,按下 Enter,然後一個完整的 Gentoo Linux 環境將會從光碟內被載入。
現在請從 當您開機了... 繼續。
其他選擇:在 Pegasos 上用安裝光碟開機
在 Pegasos 上,只要放入光碟,然後在 SmartFirmware 開機畫面輸入 boot cd
/boot/pegasos。這會開啟一個小小的 bootmenu,您可以選擇數個預先設定好的 video configs。如果您需要特別的開機選項,您可以加在後面。舉例來說 boot cd /boot/pegasos
video=radeonfb:1280x1024@75 mem=256M。完整的 kernel 參數列表 (以防有問題發生而您需要用到)已經在核心內預先設定好,使用 console=ttyS0,115200 console=tty0 init=/linuxrc looptype=squashfs loop=/livecd.squashfs udev nodevfs cdroot root=/dev/ram0。
另一種選擇:藉由 BootX 用安裝光碟開機
如果你是使用 OldWorld Mac,livecd 上的開機分割區不能被使用。最簡單的方法是用一
個叫 BootX 的工具從 MacOS 開機到 Linux 的環境下。開機磁碟片是給沒有裝 MacOS 的
Mac 用的,但是這時候並不適用。
首先,下載 BootX 然後解
開壓縮檔。把解開來的 BootX Extension 複製到 Extensions Folder,然
後把 BootX App Control Panel 複製到 Control Panels。這兩茬ㄕb MacOS 系
統資料夾中。接著,在系統資料夾中建立叫作 "Linux Kernels" 的資料夾,然後把¥??碟上
的 G3G4 核心複製到這個資料夾中。最後,從光碟上的 boot 資料
夾複製 G3G4.igz 到 System Folder。
接著設定 BootX,啟動 BootX App Control Panel。首先選擇 Options 對話匡然後勾選
Use Specified RAM Disk 並選擇系統資料夾中的 G3G4.igz。接著回到一
開始的畫面確認 ramdisk 的大小至少是 32000。最後,如下設定核心參數:
原始碼 4.1: BootX 核心參數 |
cdroot root=/dev/ram0 init=linuxrc loop=livecd.squashfs looptype=squashfs console=tty0 nodevfs udev
|
注意:
yaboot 那一段的核心參數在這裡也可以用。
|
再檢查一次,確認設定都正½T了然後儲存設定。這樣可以減少你在不能開機或是忘了一些東
西時額外的輸入。按下在最上面的 Linux 按鈕就會用安裝光碟開機了,接著繼Ä?
當您開機了...。
當您開機了...
現在您將會有一個 ("#") root 的操作介面。您可以使用 Alt-F2,Alt-F3,Alt-F4 來
回切換。如要回到剛才的畫面請按 Alt-F1。在 Apple 機器上您可能要使用 Alt-fn-Fx。
如果您是使用非 US 鍵盤,記得使用 loadkeys 載入您的鍵盤所使用的設定。如要
查看所有的 keymaps,執行 ls /usr/share/keymaps。在 NewWorld 機器或是 Pegasos 上,不要使用 ppc 或 mac 中的 keymap,因為他們是適用以 ADB 為基礎的 OldWorld 機器。
原始碼 4.2: 列出可用 keymaps |
# ls /usr/share/keymaps/i386
|
現在載入您需要的 keymap。
原始碼 4.3: 載入 keymap |
# loadkeys be-latin1
|
現在請繼續到 其他硬體設定。
其他硬體設定
當 Installation CD 開啟時,它將會嘗試偵測所有系統上的硬體然後載入相關的核心模組來支援您的
硬體。在大部份的例子,它做的相當不錯。但是,在某些例子,它將無法自動載入相關的系
統模組。如果 PCi 的自動偵測錯過了系統上某些硬體,您將需要手動載入它們。
以下的例子我們將載入 airport 模組。這個模組只支援舊的 Airport cards (b-net),AirportExtreme 目前 Linux 沒有支援:
原始碼 4.4: 載入核心模組 |
# modprobe airport
|
選擇性:微調硬碟效能
如果您是一個高階使用者,您或許想要使用 hdparm 微調您的 IDE 硬碟。
使用 -tT 的參數將讓您測試硬碟的效能(請多執行幾次來確定比較正確的數值):
原始碼 4.5: 測試磁碟效能 |
# hdparm -tT /dev/hda
|
要微調,您可以使用以下任何範例(或是自行測試)。請將 /dev/hda
更改為您所要微調的磁碟:
原始碼 4.6: 微調硬碟效能 |
# hdparm -d 1 /dev/hda
# hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hda
|
選擇性:使用者帳號
如果您打算給予其他人安裝環境的權限,或是使用非 root 的權限執行 irssi
(安全考量)您將需要建立相關的使用者帳號和更改 root 密碼。
要更改 root 密碼,使用 passwd 工具:
原始碼 4.7: 更改 root 密碼 |
# passwd
New password:
Re-enter password:
|
要建立使用者帳號,我們先需要輸入他們的帳號然後密碼。我們將使用 useradd
和 passwd 完成這些工作。下面的例子,我們將建立一個使用者叫做
"john"。
原始碼 4.8: 建立一個使用者帳號 |
# useradd -m -G users john
# passwd john
New password:
Re-enter password:
|
您也可以利用 su 從 root 更便道您剛建立的帳號:
原始碼 4.9: 更換使用者 |
# su john -
|
選擇性:在安裝時查看手冊
如果您想要在安裝過程時查詢Gentoo使用手冊(從CD或上網),請確認您已經建立一個
使用者帳號(看 選擇性:建立使用者帳號).然後按
下Alt-F2進入新的文字介面登入。
如果您想查看在CD上的使用手冊,您可以馬上輸入links2來閱讀他:
原始碼 4.10: 查看在CD上的使用手冊 |
# links2 /mnt/cdrom/docs/html/index.html
|
但是,我們還是建議您從網路上閱讀較新版的使用手冊。您可以藉由以下連結 links2
或是 links -g 有圖像的 framebuffer 瀏覽器來查看。但是只有在您已經完成
設定您的網路這一章的動作才可以(否則您將不能上網來查閱使用手冊)。
原始碼 4.11: 查看線上使用手冊 |
# links2 http://www.gentoo.org/doc/en/handbook/handbook-ppc.xml
|
您可以藉由輸入Alt-F1回到您原本的文字介面。
選擇性:開啟 SSH 伺服器
如果您想在安裝過程中讓其他使用者使用您的電腦(或許是幫忙您安裝 Gentoo 的人)
,您將需要建立一個使用者帳號給他們,提供您的 root 密碼給他們(只有
在您 完全信任 的狀況下)。
要開啟 SSH 伺服器,執行以下指令:
原始碼 4.12: 開啟 ssh 伺服器 |
# /etc/init.d/sshd start
|
要使用 sshd,您將需要先設定您的網路。
現在請繼續到 設定您的網路。
3. 設定網路
3.a. 你需要網路嗎?
誰可以不用他?
一般來說,你在使用 Universal 安裝光碟安裝 Gentoo 時並不需要連上網路。然而有一些
情況你需要使用網路:
-
Universal 安裝光碟上的 stage3 檔案並不適合你的架構,你需要下載正確的 stage3 檔案。
-
你需要安裝讓你連接到網路的程式,而這些程式在安裝光碟有支援但是原始碼並沒有放在
Universal 安裝光碟中(例如說,你可以使用安裝光碟連到網際網路,但是必需的原始碼
不在安裝光碟中)。
-
你在安裝時需要遠端協助(使用 SSH 或是在 IRC 上討論)
我需要網路嗎?
如果要確定適合你的架構的 stage3 檔案是否存在,查看 /mnt/cdrom/stages
的內容確認有沒有適合的檔案。如果沒有的話,你仍人可以找一個相容的來用。
如果你反而想要使用針對你的架構最佳化的 stage3 檔案,而這並不存在的話,你需要使
用網路下載合適的檔案。
所以,如果你不需要網路,你可以掠過這章繼續閱讀 準備磁碟。
不然的話,繼續底下的網路設定部份。
3.b. 自動偵測網路
或許他已經可以工作了?
如果你的電腦是接在有 DHCP 伺服器的乙太網路下,非常有可能網路設定已經自動設好了。
如果是這樣的話,你應該可以使用 Installation CD 上許多網路相關指令,像是 ssh,scp
,ping, irssi,wget 及 links 之中任何一個。
如果網路已經設好了, /sbin/ifconfig 指令應該會顯示 lo 之外的網路裝置,像
是 eth0:
原始碼 2.1: /sbin/ifconfig for a working network configuration |
# /sbin/ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:BA:8F:61:7A
inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::50:ba8f:617a/10 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0
TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0
collisions:1984 txqueuelen:100
RX bytes:485691215 (463.1 Mb) TX bytes:123951388 (118.2 Mb)
Interrupt:11 Base address:0xe800
|
選擇性:設定代理伺服器
如果您是透過代理伺服器連線至網路,您將需要在安裝過程中設定相關的代理伺服器資料。
要定義一個代理伺服器非常簡單:您只需要設定一個變數包含著您的代理伺服器資料。
在大部份的例子裡,您可以直接將變數定義為代理伺服器的主機名稱。舉例來說,我們假設
代理伺服器為 proxy.gentoo.org 而 port 為 8080。
原始碼 2.2: 定義代理伺服器 |
# export http_proxy="http://proxy.gentoo.org:8080"
# export ftp_proxy="ftp://proxy.gentoo.org:8080"
# export RSYNC_PROXY="proxy.gentoo.org:8080"
|
如果您的代理伺服器需要使用者帳號及密碼,請按照以下方式定義變數:
原始碼 2.3: 在代理伺服器變數加入帳號及密碼 |
http://username:password@proxy.gentoo.org:8080
|
測試網路
或許您會想要嘗試 ping 網路公司的 DNS 伺服器(可以在
/etc/resov.conf)或是您所選的網址,這只是為了查看您的封包是否能傳送
網路,DNS 解析是否正常,等等﹍
原始碼 2.4: 測試網路 |
# ping -c 3 www.yahoo.com
|
如果您的網路有正常運作,請跳過以下部份,從
準備磁碟 繼續。如果沒有,,請往下繼續 :)
3.c. 自動網路設定
如果您的系統擁有多個網路卡,它們將會以 eth0,eth1,等以此類推。
請確認您的顯示卡可以使用。所有的文件將會以 eth0 為使用範例。
如果您的網路不能自動作用,您可以使用有些安裝媒介提供的 net-setup(正常網
路或是無線網路),adsl-setup(ADSL-使用者)。或是 pptp(PPTP使用
者 - 只適用於 x86)。
如果您使用的安裝方式沒有提供以上所說明的工具或是無法正常使用網路,請從 手動網路設定 繼續。
預設:使用net-setup
如果網路沒有自動設定,設定網路最間單的方式就是執行 net-setup:
原始碼 3.1: 執行 net-setup |
# net-setup eth0
|
net-setup 將會問您一些關於您的網路環境的問題。當您完成的時候,您應該會有
一個可用的網路連線。就和剛剛所講的一樣,您應該要測試您的網路連線。如果測試正常,
恭喜!您現在可以開始安裝 Gentoo 了。請跳過以下的部份從 準備磁碟 開始。
如果您的網路還是無法正常運作,請從 手動網路設定
繼續。
其他選擇:使用 RP-PPPoE
假設您需要 PPPoE 連線至網路,Installation CD (任何版本)都會有提供簡單的 rp-pppoe
供您使用。使用我們提供的 adsl-setup 程序來設定您的連線。您將會被帶入網路
裝置連線到 adsl 數據機的畫面。這個畫面包括了您的帳號,密碼,DNS IP 和問您
是否需要簡易的防火牆。
原始碼 3.2: 使用 rp-pppoe |
# adsl-setup
# adsl-start
|
如果有出錯,請仔細檢查 /etc/ppp/pap-secrets 或是
/etc/ppp/chap-secrets 查看您的帳號及密碼。如果您的網路裝置不存在,
您將要載入相關的網路模組。在這個狀況,您應該從
手動網路設定 繼續。
如果一切正常,請從 準備磁碟 繼續。
其他選擇:使用 PPTP
如果您需要 PPTP 支援,您可以使用我們的 Installation CD 提供的 pptpclient。但是您將
需要先確定您的設定無誤。編輯 /etc/ppp/pap-secrets 或是
/etc/ppp/chap-secrets 確定它包含著正確的帳號及密碼:
原始碼 3.3: 編輯 /etc/ppp/chap-secrets |
# nano -w /etc/ppp/chap-secrets
|
然後依照需要調整 /etc/ppp/options.pptp:
原始碼 3.4: 編輯 /etc/ppp/options.pptp |
# nano -w /etc/ppp/options.pptp
|
當設定完成,只要執行 pptp(包括您在 options.pptp 不能設定的)
連線至伺服器:
原始碼 3.5: 連線至撥號伺服器 |
# pptp <server ip>
|
現在從 準備磁碟 繼續。
3.d. 手動網路設定
載入相關網路模組
當 Installation CD 啟動時,它會偵測您所有的硬體裝置然後載入相關的核心模組(驅動程式)來
支援您的硬體。在大部份的例子來說,它做的非常好,但是在某些情況下,它或許無法自
動載入您所需要的核心模組。
如果您無法使用 net-setup 或是 adsl-setup,那您就可以假設您的網路卡
無法在即時被找到。這代表著您將要手動載入相關核心模組。
要找出我們可以用的核心模組,使用 ls:
原始碼 4.1: 搜尋提供的模組 |
# ls /lib/modules/`uname -r`/kernel/drivers/net
|
如果您找到您的網路卡所用的驅動程式,使用 modprobe 載入這個核心模組:
原始碼 4.2: 使用 modprobe 載入核心模組 |
# modprobe pcnet32
|
要檢查您的網路卡是否被偵測到,使用 ifconfig 來偵測。一個被偵測到的網路卡
將會類似以下被列出來:
原始碼 4.3: 測試網路卡是否可用,成功 |
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr FE:FD:00:00:00:00
BROADCAST NOARP MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
|
如果您收到以下錯誤,那麼網路卡則是沒被偵測到:
原始碼 4.4: 測試網路卡是否可用,失敗 |
# ifconfig eth0
eth0: error fetching interface information: Device not found
|
假設您現在有一張被偵測到的網路卡,您可以重新嘗試 net-setup 或是
adsl-setup (現在應該可以用了),但是,對於其他人,我們現在將為您解釋如何
手動設定網路。
選擇以下其中一個適用的部份來設定您的網路:
使用 DHCP
DHCP (Dynamic Host Configuration Protocol) 可以讓您自動索取相關網路資料(
IP位置, netmask,broadcast address,gateway,nameserver 等等)。但是在您的網路
內一定要有一個可用的 DHCP 伺服器(或是您的提供商提供 DHCP 服務)。要網路介面
自動索取相關資料,使用 dhcpcd:
原始碼 4.5: 使用 dhcpcd |
# dhcpcd eth0
# dhcpcd -HD eth0
|
如果成功(嘗試 ping 一些網路伺服器,如
Google),那您就可以跳到下個部份到
準備磁碟。
準備無線網路
注意:
不是所有的 Installation CD 都有 iwconfig 的指令。如果真的碰上這種情況,您可以參考
linux-wlan-ng 計畫。
|
如果您有一張無線 (802.11)網路卡,您將需要在繼續前先設定好您的無線網路。如要查
看目前的設定,您可以使用 iwconfig。執行 iwconfig 將會列出類似以下
的訊息:
原始碼 4.6: 顯示目前的設定 |
# iwconfig eth0
eth0 IEEE 802.11-DS ESSID:"GentooNode"
Mode:Managed Frequency:2.442GHz Access Point:
00:09:5B:11:CC:F2
Bit Rate:11Mb/s Tx-Power=20 dBm
Sensitivity=0/65535
Retry limit:16 RTS thr:off
Fragment thr:off
Power Management:off
Link Quality:25/10 Signal level:-51 dBm Noise level:-102 dBm
Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx
excessive retries:237 Invalid misc:350282 Missed beacon:84
|
注意:
有些網路卡的裝置名稱或許是 wlan0 或 ra0 而不是 eth0。不要
加任何參數執行 iwconfig 確認裝置的名稱。
|
對於大部份的使用者,只需要更改兩個重要的設定,ESSID(無線網路名稱)或是 WEP 金錀
。如果 ESSID 和無限網路連接點已經顯示出您沒有使用 WEP,那您的網路已經好了。如果
您需要更改您的 ESSID,或是加入一個 WEP 金錀,您可以執行以下指令:
原始碼 4.7: 更改 ESSID 和/或 加入 WEP 金錀 |
# iwconfig eth0 essid GentooNode
# iwconfig eth0 key 1234123412341234abcd
# iwconfig eth0 key s:密碼
|
您將可以再次使用 iwconfig 來確認您的設定。當您的無線網路已經可以使用,您
將可以從下一個部份繼續(了解網路詞彙)或是使用之
前所談到的 net-setup 工具設定。
了解網路詞彙
注意:
如果您知道您的 IP 位址,broadcast address,netmask 和 nameserver,那您
可以跳過這個階段從 使用 ifconfig 和 route
繼續。
|
如果以上都失敗,您將需要手動設定網路。不要怕,這個很簡單。但是我們將要為您解釋
一些能幫助您的網路資訊方便您進行設定。當您讀完這個部份時,您將會知道什麼是一個
gateway,什麼是 netmask,和 為什麼會有 broadcast 位址和為
什麼您需要 nameservers。
在一個網路,機器都是用 IP 位置(Internet Protocol address)來辨別的。
這些地址為四組於 0 到 255 之間所組合的。這就是我們所看到的。在現實來說,這些
IP 位址是 32 位元的(一和零)。現在來看一個範例:
原始碼 4.8: IP位址的範例 |
IP Address (numbers): 192.168.0.2
IP Address (bits): 11000000 10101000 00000000 00000010
-------- -------- -------- --------
192 168 0 2
|
在這個網路內這個 IP 位址是獨特的,(例:所有您可以連到的主機都一定有一個個別的
IP 位址)。為了要可以分辨每個網路內的 IP 位址,IP 位址可以分成兩種:
網路 和 主機。
netmask 是用來分開,另一個一和零的組合。這將會把一個網路的 IP 區域化。
一部份為網路的部份,另一部份為主機的部份。和平常一樣,netmask 可以寫為
IP 位置。
原始碼 4.9: 網路和主機的區別範例 |
IP-address: 192 168 0 2
11000000 10101000 00000000 00000010
Netmask: 11111111 11111111 11111111 00000000
255 255 255 0
+--------------------------+--------+
網路 主機
|
換句話說, 192.168.0.14 還是我們範例網路的一部份,但是 192.168.1.2 不是。
broadcast(廣播)位址為一個 在同一個網路上的一個 IP 位址,但是只有一個
主機部份。每個在網路上的主機將聽取這個 IP 位置。這是用來聽取廣播封包的意思。
原始碼 4.10: 廣播位址 |
IP-address: 192 168 0 2
11000000 10101000 00000000 00000010
Broadcast: 11000000 10101000 00000000 11111111
192 168 0 255
+--------------------------+--------+
網路 主機
|
為了要確保可以連線至網路,您一定要知道那個主機分享網路連線。這個主機則是叫做
gateway。它也是一個普通的主機,它將會有一個常見的 IP 位置(如
192.168.0.1)。
我們之前講過,每台主機都有自己的 IP 位址。為了要能以名稱(而不是 IP 位置)連線
到主機上,您將需要一個翻譯名字的服務(例:dev.gentoo.org)到一個 IP
位址(例:64.5.62.82)。這種服務就叫做 name service(名稱伺服器)。
要使用這個服務,您一定要在 /etc/resolv.conf 設定一個相關的
name server。
在部份的例子,您的 gateway 也會提供 nameserver。不然您將要輸入您的網路提供商所提
供給您的。
總結,您將要在繼續之前擁有以下資料:
| 網路類別 |
範例 |
| 您的 IP 位置 |
192.168.0.2 |
| Netmask |
255.255.255.0 |
| Broadcast |
192.168.0.255 |
| Gateway |
192.168.0.1 |
| Nameserver(s) |
195.130.130.5, 195.130.130.133 |
使用 ifconfig 和 route
設定您的網路需要三個步驟。第一,我們將使用 ifconfig 設定我們的 IP 位置。
然後我們將需要 route(路由)到我們的 gateway 上。然後在將名稱伺服器放到
/etc/resolv.conf。
要設定 IP 位置,您將需要您的 IP 位置,廣播位置和 netmask。然後執行以下指令,
將 ${IP_ADDR} 更改成您的 IP 位置, ${BROADCAST} 為您的廣播位置
和 ${NETMASK} 為您的 netmask:
原始碼 4.11: 使用 ifconfig |
# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up
|
現在使用 route 設定您的路由。將 ${GATEWAY} 更改為您的 gateway
IP 位置:
原始碼 4.12: 使用 route |
# route add default gw ${GATEWAY}
|
現在使用您最喜歡的編輯器(以我們的例子,我們使用 nano)編輯
/etc/resolv.conf:
原始碼 4.13: 建立 /etc/resolv.conf |
# nano -w /etc/resolv.conf
|
現在將您的 nameserv (名稱服務器)按照以下的版面填入。請確定將
${NAMESERVER1} 和 ${NAMESERVER2} 更改為相關的名稱服務器的位置:
原始碼 4.14: /etc/resolv.conf 版面 |
nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}
|
完成了。現在 ping 一些網路伺服器(如
Google)測試您的網路連線。如果成功,恭喜!您現在已經可以準備安裝 Gentoo 了
。請從 準備磁碟 繼續
4. 準備磁碟
4.a. 介紹區塊裝置
區塊裝置(Block Devices)
我們將仔細的介紹 Gentoo Linux 和 整體的Linux 的磁碟方式,包括 Linux 檔案系統,
分割區,和區塊裝置。然後,當您了解磁碟和檔案系統,您將會學到如何為您的 Gentoo
Linux 安裝設定分割區和檔案系統。
首先,我們將要介紹 區塊裝置。最有名的區塊裝置大概就是代表 Linux 系統上的
第一個 IDE 磁碟,/dev/hda 如果您的系統使用 SCSI 或 SATA 磁碟,那您的第一個
磁碟將會是 /dev/sda。
以上的區塊裝置代表著磁碟的介面。使用者可以不用擔心您的磁碟是否為 IDE,SCSI
或是其他,並且使用程式來使用這些區塊裝置。這個程式可以在磁碟上寫入多個隨機的
512 byte 區塊。
分割區
理論上雖然您可以使用整個磁碟放置您的 Linux 系統,但是實務上幾乎沒有人這麼做。
整個磁碟將會被分為其他小一點的大小,並可以更好的管理。大部份的系統將叫他
分割區(partitions)。
4.b. 策劃一個分割區計畫
預設的分割區策劃
如果您不打算策劃一個分割計畫,您可以使用我們手冊的分割區規劃:
| NewWorld 分割區 |
OldWorld 分割區 |
Pegasos 分割區 |
RS/6000 分割區 |
檔案系統 |
大小 |
說明 |
| /dev/hda1 |
/dev/hda1 |
(不適用) |
(不適用) |
(分割區配置表) |
32k |
Apple_partition_map |
| /dev/hda2 |
(不需要) |
(不適用) |
(不適用) |
(bootstrap) |
800k |
Apple_Bootstrap |
| (不適用) |
(不適用) |
(不適用) |
/dev/sda1 |
(PReP Boot) |
800l |
Type 0x41 |
| (不適用) |
(不適用) |
/dev/hda2 (如果使用 quik) |
(不適用) |
ext2 |
Boot 分割區 |
| /dev/hda3 |
/dev/hda2(/dev/hda3 如果使用 quik) |
/dev/hda2 |
/dev/sda2 |
(swap) |
512M |
Swap 分割區, Type 0x82 |
| /dev/hda4 |
/dev/hda3(/dev/hda4 如果使用 quik) |
/dev/hda3 |
/dev/sda3 |
ext3,xfs |
磁碟剩下的空間 |
根 或是 主分割區(Root partition), Type 0x83 |
注意:
這裡有一些分割區名稱是:Apple_Driver43,Apple_Driver_ATA,
Apple_FWDriver,Apple_Driver_IOKit,Apple_Patches。如果你不打算使用
MacOS 9 那你就可以把他們刪了,因為 MacOS X 和 Linux 並不需要。你可以用 parted
清除整個磁碟或是初始化分割區配置表。
|
警告:
parted 可以重設分割區大小 (resize partitions),Installation CD 有包含重設 HFS+ 檔案系統大小的補釘,但是不能重設 HFS+ journaled 檔案系統的大小,即使 journaling 已經在 Mac OS X 中關閉。所有您在 parted 中所作的重設大小的動作,請記得這是您自己要承擔的風險!請先備份您的資料!
|
如果您對於一個分割區需要多大,或是需要幾個分割區等有興趣,請繼續閱讀。不然的話請從 預設:使用 mac-fdisk (Apple)分割您的磁碟 或是 其他選擇:使用 parted (IBM/Pegasos)分割您的磁碟繼續。
多少和多大?
多少分割區通常是按照您的使用環境。舉例來說,如果您有很多個使用者,您就會因為安全
問題和能夠簡易備份將您的 /home 分開。如果您將 Gentoo 安裝為郵件伺服
器那您的 /var應該分開,因為郵件通常是放在 /var。選擇好
的檔案系統將會提昇您的效能。遊戲伺服器因為大多數的遊戲伺服器都是安裝在
/opt 所以通常會將 /opt 分開。原因很和
/home 類似:安全問題和備份。你一定會想分給 /usr 比較
大的空間:不只是因為他包含大部份的程式,Portage 樹,除了他儲存的各種原始碼知外
,本身需要 500 Mb 的空間。
如您所見,不同的方式是彼此相依的。不同的分割區或是容量將會有以下優點:
-
您可以選擇適合個別分割區的檔案系統提高效能
-
您的系統不會因為一個分割區或是容量失效而完全終止
-
如果必要,檔案系統檢查所費的時間將會減少,並且可以以平行方式進行(雖然這個優點
比較適合多分割區)
-
安全性可以因為某些分割區以分割成唯讀而加強,nosuid(setuid機會被略過),
noexec(執行檔將會被掠過)等等。
但是,多個分割區也有一個很大的缺點:如果沒有完好的設定,您將會看到一個分割區上的
空間不夠或是一個分割區上的空間太多。SCSI 和 SATA 也有最多 15 個分割區的限制。
4.c. 在 PPC 上使用 mac-fdisk (Apple)分割您的磁碟
在這邊,使用 mac-fdisk 建立您的分割區:
原始碼 3.1: 使用 mac-fdisk |
# mac-fdisk /dev/hda
|
當 fdisk 開始後,您將會看到以下的畫面:
首先刪除您之前為了保留給 Linux 的分割區。使用 mac-fdisk 內的 d 來
刪除這些分割區。它將會問您要刪除那一個分割區。一般來說在 NewWorld 機器上的第一個
分割區(Apple_partition_map)不能被刪除。
這個磁碟包含著七個 Linux 檔案系統(顯示為 "Linux")和一個 swap 分割區(顯示為
"Linux Swap")。
第二,使用 b 建立一個 Apple-bootstrap 分割區。它將會問您要從那個區
塊開始。輸入您的第一個空閒的分割區,然後加上 p。舉例來說 2p 為第一
個分割區。
注意:
這個分割區 不是 一個 "開機" 分割區。它完全不被 Linux 所使用;您不應該掛載
它也不能將檔案系統放到它上面。 Apple 使用者不需要/boot開機分割區。
|
現在輸入 c 建立 swap 分割區。mac-fdisk 將會問您要從那個分割區開始。
以我們的範例來說,剛剛使用了 2 來建立 Apple_Bootstrap 分割區,您現在將需
要輸入 3p。當您被問到大小時,輸入 512M(或是適合您的號碼 -- 我們
建議 512)。當您被問到名字時,輸入 swap(必需)。
要建立主分割區,輸入 c 然後 4p 來選擇主分割區應該開始的區塊。當您
被問到大小,再輸入一次 4p。mac-fdisk 將會判斷成 "使用所有可用的空
間"。當問到名子時,輸入 root (必需)。
要結束,輸入 w 將分割區寫入磁碟然後 q 離開 mac-fdisk。
注意:
為了確定全部都完成了,你應該再一次執行 mac-fdisk 並檢查所有的分割區是否都還在。
如果你沒有看到任何你建立,修改的分割區,你應該在 mac-fdisk 中按下 "i" 重新初始
化分割區。注意這會重新建立分割區地圖,因此移除所有分割區。
|
現在您的分割區已經建立完成了,您可以從 建立檔案系統
繼續。
4.d. 使用 parted (特別是 Pegasos)分割您的磁碟
分割區編輯器 parted,現在可以處理 Mac OS 和 Mac OS X 使用的 HFS+ 分割區
。使用這個工具你可以重設你的 Mac 分割區的大小,然後建立 Linux 的分割區。然而,底下只
示範分割 Pegasos 機器的分割區。
要開始,我們需要先啟動 parted:
原始碼 4.1: 開始 parted |
# parted /dev/hda
|
如果這個磁碟尚未被分割,執行 mklabel amiga 來建立這個磁碟新的 disklabel。
您可以在任何時候輸入 print來顯示目前的分割表。如果您犯一個操作上的錯誤,您可以隨時按下 Ctrl-C 離開 parted。
如果您打算在您的 Pegasos 上安裝 MorphOS,先在磁碟的最前面建立一個 affs1 的檔案系
統,並命名為"BI0" (BI 零)。32MB 的大小應該足以儲放 MorphOS 核心。如果您有
Pegasos I 或是打算使用 reiserfs 或 xfs,您也應該將您的 Linux 核心放在這個
分割區。(Pegasos II 可使從 ext2/ext3 或 affs1 分割區開機)。要建立分割區,執行
mkpart primary affs1 START END,START 和 END 應該要被替換成
megabyte 的範圍(如 0 32 建立一個始於 0MB 並終於 32MB 的 32MB
大小的分割區)。
您將需要為 Linux 建立兩個分割區,一個為主檔案系統來放置您所有的程式檔,另一個為
快取(Swap)分割區。要建立主分割區,您一定要決定要使用那個檔案系統。可以選擇
ext2,ext3,reiserfs 和 xfs。您如果知道您在作什麼,請使用 ext3。然後執行
mkpart primary ext3 START END。START 和 END 應該要被替換成
megabyte 的範圍。
大部份來說,我們建議您建立一個以您的記憶體大小兩倍的快取分割區。如果您不打算一次
執行很多程式,您可以建立小一點的快取(雖然我們建議 512MB)。要建立快取分割區,執
行 mkpart primary linux-swap START END
記得寫下分割區的號碼,因為在安裝過程中,您將需要用到它們。要顯示號碼,執行
print。您的磁碟將會被列為 /dev/hdaX X 就是您該紀錄的號碼。
4.e. 建立檔案系統
介紹
現在您的分割區已經建立完成了,我們該把檔案系統放到它們上面。如果您不在乎該使用哪
種檔案系統,並且滿意手冊內的預設,請從 將檔案系統
套用在分割區上。不然請繼續閱讀關於可用的檔案系統﹍
檔案系統?
PPC 架構上提供多種穩定的檔案系統,如 ext2,ext3,ReiserFS 和 XFS。
ext2 是一個舊的 Linux 檔案系統,沒有日誌功能. 啟用的時間通常需要很久。目
前有許多 日誌型態 的檔案系統可以以更快的速度及更好的效率完成系統啟用和檢
查。
ext3 為 ext2 的日誌版,提供了 metadata 日誌系統 並且可以快速地使用日誌系
統復原。ext3 是個相當不錯並且可靠的檔案系統. 它有額外的 hashed b-tree 索引功能
將會開啟幾乎在任何情況內的狀態為高效能。你可以在 mke2fs 指令加上
-O dir_index 啟動這個功能。簡單來說,ext3 是一個很棒的檔案系統。
ReiserFS 整體來說是個相當不錯的系統,它處理小型檔案(少於4kb)時效能會比
ext2 和 ext3 來的好。他使用的是 B*-tree 為基礎的檔案系統. 另外也能很有效率地處理
大型檔案。Linux 核心版本 2.4.18+ 後,ReiserFS 是一個相當有值得推薦的系統, 從很少
,到很多檔案。ReiserFS 都可以處理的非常好。開機分割區並不建議使用此檔案系統。
XFS 是一個 metadata 日誌系統,並且擁有完整的功能及針對延展性最佳化。如果
您使用高速 SCSI 或是纖維的儲存裝置,並且有持續不斷的電源供應,我們才推薦您使用
XFS。 如果沒有,請使用其他檔案系統。因為 XFS 大量的將要轉送的資料快取在記憶體中
,設計不好的程式(的確有一些程式在寫入磁碟時不做一般的預防措施)可能當系統意外斷
電時損失大量的資料。
JFS 是 IBM 發展的高效能日誌系統。目前雖然已經可以算是個完成品,關於他的穩地度並
沒有太多的優點及缺點。
將檔案系統套用到分割區上
要把檔案系統建立到一個分割區或是容量上可使用一些為個別檔案系統所設計的工具:
| 檔案系統 |
建立指令 |
| ext2 |
mkfs.ext2 |
| ext3 |
mkfs.ext3 |
| reiserfs |
mkfs.reiserfs |
| xfs |
mkfs.xfs |
以我們的範例來說,主分割區(在我們的例子為 /dev/hda4)為 ext3,您將
要使用:
原始碼 5.1: 將檔案系統套用到分割區上 |
# mkfs.ext3 /dev/hda4
|
現在檔案系統已經建立到我們剛建立完成的分割區上了(或是logical 容量)。
注意:
在 PegasosII 機器上,你放置核心的分割區必需要是 ext2 或 ext3。
使用 BootX 開機的 NewWorld 機器,核心需要放在 HFS 分割區中,而這會在你設定開機管
理員時完成。
|
啟用 Swap 分割區
mkswap 是用來起始 swap 分割區的指令:
原始碼 5.2: 建立 swap 簽名 |
# mkswap /dev/hda3
|
要啟用 swap,使用 swapon 指令:
原始碼 5.3: 啟動 swap |
# swapon /dev/hda3
|
現在,建立然後啟動 swap。
4.f. 掛載
現在您的分割區已經起始和放置檔案系統了,接下來我們該把這些分割區掛載起來。使用
mount 的指令。不要忘了建立相關的掛載目錄,以我們的範例分割來說只掛載主
分割區:
原始碼 6.1: 掛載分割區 |
# mkdir /mnt/gentoo
# mount /dev/hda4 /mnt/gentoo
|
注意:
如果您要將 /tmp 放在不同的分割區,記得掛載後將它的權限更改為:
chmod 1777 /mnt/gentoo/tmp。這也適用於 /var/tmp。
|
我們將需要掛載 proc 檔案系統(一個核心的虛擬介面)並且把它放在
/proc。但首先我們需要將檔案放到分割區上。
現在從 使用安裝檔安裝 Gentoo 繼續。
5. Gentoo 安裝檔案
5.a. 安裝一個 Stage 壓縮檔
設定正確的日期/時間
在您繼續之前,您將需要檢查您的日期/時間。一個設定錯誤的時鐘將會在未來的時候造成
一些奇怪的錯誤!
要檢查正確的日期/時間,執行date
原始碼 1.1: 檢查日期/時間 |
# date
Fri Mar 29 16:21:18 CEST 2005
|
如果顯示出的日期/時間是錯誤的,使用 date MMDDhhmmYYYY 進行更新(M
為月,D為日,h為時,m為分,和 Y為年份)。舉例來說,
要將日期設定為 2005年3月29號,16:21:
原始碼 1.2: 設定日期/時間 |
# date 032916212005
|
找到 Stage3 檔案
如果您已經設定好網路,因為您需要下載屬於您系統架構的 stage3 檔案,請遵照 另種途徑:使用網路上的 Stage3,其他請閱讀 預設:使用 Installation CD 的 Stage3。
5.b. 預設:使用 Installation CD 的 Stage3
解壓縮 Stage Tarball
CD 上的 stage 檔案放置在 /mnt/cdrom/stages 目錄中,要查看所有
stages 檔案列表,使用 ls:
原始碼 2.1: 列出所以 stage 檔案 |
# ls /mnt/cdrom/stages
|
如果系統回應的是個錯誤訊息,您也許需要先將 CD-ROM 掛載起來:
原始碼 2.2: 掛載 CD-ROM |
# ls /mnt/cdrom/stages
ls: /mnt/cdrom/stages: No such file or directory
# mount /dev/cdroms/cdrom0 /mnt/cdrom
# ls /mnt/cdrom/stages
|
現在進到您的 Gentoo 掛載點(通常是 /mnt/gentoo):
原始碼 2.3: 改變所在目錄至 /mnt/gentoo |
# cd /mnt/gentoo
|
我們現在要將您所選定的 stage tarball 解壓縮。我們將使用 tar 工具,請確認
您使用相同的選項(xvjpf)!x 代表著 Extract(解開)
,v 代表著 Verbose 用來檢視在解壓縮過程中發生的事件(好啦,是的,
這是選擇性的),j 代表著Decompress with bzip2(以 bzip2 解開),
p 代表著 Preserve permissions(預留的權限)和 f代表著以我
們的方式解開而不是標準的輸入。在下面的例子中,我們解壓縮的 stage tarball 是
stage3-<subarch>-2005.1-r1.tar.bz2,請記得將 tarball 檔名用
您所選的 stage 檔代換。
原始碼 2.4: 解壓縮 stage tarball |
# tar xvjpf /mnt/cdrom/stages/stage3-<subarch>-2005.0.tar.bz2
|
現在 stage 檔已經安裝完成,請繼續下一步 安裝
Portage。
5.c. 另種途徑:使用網路上的 Stage
下載 Stage 壓縮檔
先更換到您之前所掛載的目錄下(大部份是/mnt/gentoo):
原始碼 3.1: 更換到 Gentoo 的掛載點 |
# cd /mnt/gentoo
|
依照您的安裝方式,您有幾個可以選擇的工具下載 Stage 壓縮檔。如果您有 links2
,您就可以馬上連接到 Gentoo 對映站 然後
選擇最靠近您的位置。
如果沒有 links2 的話,應該會有 lynx 可以用。假如要透過 proxy,設定
http_proxy 和 ftp_proxy 變數:
原始碼 3.2: 設定 lynx proxy 資訊 |
# export http_proxy="http://proxy.server.com:port"
# export ftp_proxy="http://proxy.server.com:port"
|
我們假設你有 links2 可以使用。
選擇releases/的目錄,接著是您所使用的架構(如 x86/)
最後則是 Gentoo 的版本(2005.1 或是 2005.1-r1/)最後
您就可以看到適合您的架構所使用的 Stage 壓縮檔位於 stages/的列表(他
們也許會被放在不同子架構中的子目錄中)。選擇一個然後按下 D 開始下載。當下
載完成時,按下 Q 離開瀏覽器。
原始碼 3.3: 使用 links2遊覽對映站 |
# links2 http://www.gentoo.org/main/en/mirrors.xml
# links2 -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml
|
確認你是下載 stage3 壓縮檔。使用 stage1 或 stage2 安裝的方式不再被支援。
如果您想要檢查下載的壓縮檔是否正確,您可以使用 md5sum 然後以 MD5
checksum 輸出進行比較。例如說,檢查 stage 壓縮檔是否正確:
原始碼 3.4: 檢查 stage 壓縮檔是否下載正確 |
# md5sum -c stage1-x86-2005.1-r1.tar.bz2.md5
stage1-x86-2005.1-r1.tar.bz2: OK
|
解開 Stage 壓縮檔
現在解開您剛剛下載到系統上的壓縮檔。我們使用最簡單的 tar 方式進行
:
原始碼 3.5: 解開 Stage 壓縮檔 |
# tar xvjpf stage3-*.tar.bz2
|
確定您有放入一樣的參數(xvjpf)。x 代表著 Extract(解開)
,v 代表著 Verbose
用來檢視在解壓縮過程中發生的事件(好啦,是的,這是選擇性的),j 代表著
Decompress with bzip2(以 bzip2 解開),p 代表著 Preserve
permissions(預留的權限)和 f代表著以我們的方式解開而不是標準的輸入。
現在 stage 已經安裝完成了,請從 安裝 Porage 繼續。
5.d. 安裝 Portage
解壓縮 Portage 快照
現在你需要安裝 Portage 快照,裡面是告訴 Portage 那些軟體可以安裝,那些 profiles
可以使用等等的檔案集合。
解壓縮 Installation CD 上的快照
要安裝快照,請先看看 /mnt/cdrom/snapshots
目錄中有哪些快照可供選擇:
原始碼 4.1: 檢查 /mnt/cdrom/snapshots 內容 |
# ls /mnt/cdrom/snapshots
|
現在用下列指令解壓縮快照。同樣的,請確認您使用 tar
時有搭配正確的選項,另外 -C 是大寫的 C,不是
c。在下面的範例中,我們使用 portage-<date>.tar.bz2
作為快照檔名,請記得要將它用您 Installation CD 上的快照名稱作代換。
原始碼 4.2: 解壓縮 Portage 快照 |
# tar xvjf /mnt/cdrom/snapshots/portage-20041022.tar.bz2 -C /mnt/gentoo/usr
|
複製原始碼檔案
您也需要從 Universal Installation CD 複製所有的原始碼。
原始碼 4.3: 複製原始碼 |
# mkdir /mnt/gentoo/usr/portage/distfiles
# cp /mnt/cdrom/distfiles/* /mnt/gentoo/usr/portage/distfiles/
|
5.e. 設定編譯參數
介紹
要自訂 Gentoo,您可以設定很多變數來影響 Portage 的動作。這些變數可以設為環境變數
(使用 export)但是非永久性。如果要保留您的設定,可以存在 Portage 提供的
/etc/make.conf,一個 Portage 的設定檔。這也將是我們將要編輯的檔案。
注意:
您將會看到 /mnt/gentoo/etc/make.conf.example裡有一大串註解的
可用變數。要完整地安裝 Gentoo 您至少需要按照以下設定變數。
|
使用您最喜歡的編輯器(這份指南我們使用 nano)然後我們才可以繼續我們稍後
會討論到的自訂變數。
原始碼 5.1: 打開 /etc/make.conf |
# nano -w /mnt/gentoo/etc/make.conf
|
您或許已經發現了,make.conf.example 檔案是基於常用的架構:
註解的行數將以 "#" 放在每行的最前面,其他已定義的變數將使用類似
變數="內容" ,make.conf 也使用相同的語法。許多變數將在下面
繼續講解。
警告:
如果您計畫在 stage3 安裝中使用 GRP,請不要對 USE
變數作任何變動,您可以在安裝完所有您想要的套件之後再變更 USE
變數,已知有怪事會發生侵害您的系統,如果您忽視這個警告的話!
|
CHOST
CHOST 變數宣告你要編譯的系統類型。這個變數已經設定好了。因為可能破壞你的
系統,不要編輯他。如果 CHOST 變數看起來對你不適合,你可能
用了錯誤的 stage3 壓縮檔。
CFLAGS 和 CXXFLAGS
CFLAGS 和 CXXFLAGS 變數將定義最佳效能化 gcc C 和 C++ 編譯器
的參數。雖然我們以通用的方式定義,您將需要分開定義適合您提高效能的設定。原因是
每個程式使用的都不同。
在 make.conf 您應該要定義一個您認為會最佳化的 通用 參數。
不要將測驗性質的參數也放到這裡;太多自訂會讓程式變得怪異(當掉,或是更遭,無法作
用)。
我們將不會解釋這些可用的參數選擇。如果您想知道更多,查看 GNU 線上指南 或是
gcc infopage (info gcc -- 只在一個完成的 Linux 系統上可作用)。
make.conf.example 這個檔也包含著許多範例及資料;不要忘了閱讀他們。
第一個設定為 -march= 參數,這代表著電腦架構的目標。可用的參數將會在
make.conf.example 檔案內說明(為註解的方式)。舉例來說,給 x86
Athlon XP 的架構:
原始碼 5.2: GCC march 設定 |
-march=athlon-xp
|
第二個則是 O(是大寫的 O,不是零) 參數,代表著 gcc 的性能參數。可
用的參數為 s (增加檔案大小性能),0 (零 - 沒有提昇性能),
1,2 或是 3 則關於速度的性能(一個特定的性能加上另外一個或
是兩個)。舉例來說,一個 2 的性能參數:
另一個受歡迎的參數為 -pipe (使用 pipes 進行編譯中的通訊而不是暫存檔)。
值得注意的是,使用 -fomit-frame-pointer (在不需要 frame pointer 的時候
不使用)時可能會讓程式除錯時會有嚴重的負面效果。
當您定義 CFLAGS 和 CXXFLAGS後,您應該按照以下範例將他們結合起來:
原始碼 5.4: 定義 CFLAGS 和 CXXFLAGS 變數 |
CFLAGS="-march=athlon-xp -pipe -O2"
CXXFLAGS="${CFLAGS}"
|
MAKEOPTS
MAKEOPTS 將定義的是您需要在安裝一個套件時需要幾個平行編譯。一個好的選擇是
為您系統上的 CPU 數目加一,但這準則並不總是完美的。
原始碼 5.5: 普通的 1-CPU 系統的 MAKEOPTS |
MAKEOPTS="-j2"
|
預備,開始!
依照您個人的選擇編輯 /mnt/gentoo/etc/make.conf 然後儲存
(nano 使用者可以按下 Ctrl-X)。您現在可以從
轉換根目錄進 Gentoo 基礎系統 繼續。
6. 安裝 Gentoo 基礎系統
6.a. 變換根目錄
掛載 /proc 及 /dev 檔案系統
掛載 /proc 檔案系統到 /mnt/gentoo/proc,讓安裝過程即
便是在轉換根目錄的環境下,也可以使用核心所提供的資訊,然後以 bind 的方式掛載
/dev 檔案系統
原始碼 1.1: 掛載 /proc 及 /dev |
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev
|
選擇性:複製 DNS 資訊
如果您設定好您的網路,並打算稍後從網路上抓取合適的 stage 檔案,您需要複製儲存在 /etc/resolv.conf 中的 DNS 資訊到 /mnt/gentoo/etc/resolv.conf,這個檔案包含您系統用來轉譯網名到 IP 位址的名稱伺服器。
原始碼 1.2: 複製 DNS 設定 |
# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
|
進入新的系統環境
現在所有的分割區都已經初步設定好了而且基本的系統也安裝完畢,現在是用
變換根目錄進入新的系統環境的時候了。這代表我們從目前的安裝環境
進入您安裝的系統(就是已經安裝的分割區)。
變換根目錄動作在三步驟內完成。首先我們會用 chroot 讓根目錄從
/ (目前安裝的媒體)變換到 /mnt/gentoo (或您安裝的分割區)。
然後用 env-update 建立新的環境,這將會建立基本的系統變數。最後,我們用
source 把這些變數載入到記憶體。
原始碼 1.3: 進入新的環境 |
# chroot /mnt/gentoo /bin/bash
# env-update
>>> Regenerating /etc/ld.so.cache...
# source /etc/profile
# export PS1="(chroot) $PS1"
|
恭喜!您現在在新的 Gentoo Linux 環境當中了。不過離安裝完畢還有一段時間,這就是為什
麼安裝指南還有下面這些部份 :-)
建立 Portage 快取
你已經安裝好了 Portage tree,但是你也需要建立 Portage 快取來加速 emerge 的過程
。emerge --metadata 可以幫你完成這件事。
原始碼 1.4: 建立 Portage 快取 |
# emerge --metadata
|
6.b. 設定 USE 變數
什麼是 USE 變數?
USE 是 Gentoo 提供給使用者最有威力的變數之一。許多程式可以在編譯時包含或
不包含自由選擇的支援。例如,一些程式可以在編譯時包含 gtk 支援,或者是支援 qt。其它
程式可以包含或不包含 SSL 支援,也有一些甚至可以使用 framebuffer (svgalib) 而不是
X11 (X-server)。
大部分的安裝套件在編譯時都盡可能地加入最多的支援,增加檔案大小以及程式啟動的時
間,更別提複雜的相依性。在 Gentoo 下您可以定義哪些支援編譯時要加入。這就是 USE
的作用。
在 USE 變數中,您可以加入要在編譯時加入支援的關鍵字。例如,ssl 會
在支援 ssl 的程式編譯時加入 ssl 支援。-X 則會移除 X-server 支援(注意前面
的減號)。gnome gtk -kde -qt 則會支援 gnome(以及 gtk),而不包含 kde(以及 qt)
的支援,這可以讓您的系統對 GNOME 完整的調節。
修改 USE 變數
警告:
如果您打算要使用預編套件(GRP 包),請先不要對 USE 變數作任何的修改,您可以在安裝完所有您想要的套件之後,再變更 USE 變數。已知會有怪事侵襲您的系統,如果您忽視這個警告的話!
|
預設的 USE 設定放在 /etc/make.profile/make.defaults,而您在 /etc/make.conf 中的設定會和預設的設定一起考慮。如果您在 USE
設定中新增一些東西,他會加入預設的設定中。如果您從 USE 中移除一些東西(在
前面加上減號),他會從預設的設定移除。永遠不要改變任何在
/etc/make.profile 目錄中的東西,他會在您更新 Portage 時被覆蓋!
完整的 USE 說明可以在 Gentoo 手冊中
USE 參數 找到。完整的 USE 參數列表
可以在系統中的 /usr/portage/profiles/use.desc 找到。
原始碼 2.1: 檢視可用的 USE 參數 |
# less /usr/portage/profiles/use.desc
|
下面是一個 USE 的設定,在以 KDE 為基礎的系統中支援 DVD, ALSA 以及燒錄機。
原始碼 2.2: 開啟 /etc/make.conf |
# nano -w /etc/make.conf
|
原始碼 2.3: USE 設定 |
USE="-gtk -gnome qt kde dvd alsa cdr"
|
7. 設定核心
7.a. 時區
為了讓您的系統知道它的位置在那裡,您將需要設定您的系統時區。到
/usr/share/zoneinfo 尋找您的時區,然後把他複製到
/etc/localtime。請避免使用
/usr/share/zoneinfo/Etc/GMT* 下的檔案,因為他們並不代表你預期的時
區。例如說 GMT-8 實際上是 GMT+8。
原始碼 1.1: 設定時區資訊 |
# ls /usr/share/zoneinfo
# cp /usr/share/zoneinfo/GMT /etc/localtime
|
7.b. 安裝核心原始碼
選擇一個核心
Linux 的核心是所有版本的最中心,也是最重要的。他位於使用者程式和系統硬體之間。
Gentoo 提供使用者很多可用的核心原始碼。您可以到 Gentoo 核心 指南 查看我們所提供的核心。
PPC 的使用者可以從 vanilla-sources 和 gentoo-sources核心選擇,兩
種都是 2.6 核心。後者在你使用無網路安裝時可以使用。所以我們現在就使用
emerge 來安裝核心原始碼。為了避免安裝 xorg-x11 或其他相依
軟體,需要加上 USE="-doc"。第一次安裝時不一定需要
USE="symlink",但是確定你有正確建立 /usr/src/linux 符號連結。
原始碼 2.1: 安裝核心原始碼 |
# USE="-doc symlink" emerge gentoo-sources
|
當您查看 /usr/src 您將會看到一個 linux 的連接連到
您所選的核心,我們假設安裝的核心原始碼是 gentoo-sources-2.6.12-r6,你用
的核心名稱可能不同,所以記得你用的名稱。
原始碼 2.2: 觀看核心原始碼目錄連接 |
# ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Jul 10 10:55 /usr/src/linux -> linux-2.6.12-gentoo-r4
|
現在我們該設定以及編譯您的核心了。您可以使用 genkernel 以和
Installation CD 一樣的通用的方式進行編譯。或是手動編譯自訂符合您的環境的核心。
如果您想要手動設定核心,請從 預設:手動設定 繼續。如果您想要使用 genkernel 您應該要閱讀 其他選擇:使用 genkernel。
7.c. 預設:手動設定
介紹
手動設定核心常常被 Linux 使用者認為最難完成的步驟。雖然不假,但是當您手動編譯
幾次核心後,您應該不會覺得它有多難 ;)
然而,有一個事實:您必須要了解您的系統才可以開始手動編譯。系統上多數
的資料可以安裝 pciutils (emerge pciutils),從裏面包含的 lspci 取得
。你可以在 chroot 的環境下執行 lspci,不過可能會碰到一些 lspci 丟
出來的警告(像是 pcilib: cannot open /sys/bus/pci/devices)。此外,你也可以在
未 chroot 執行,兩個結果都一樣。您也可以執行 lsmod 看看安裝光碟使
用那些核心模組(這是一個不錯的暗示,教您該開啟那個選項)。另一個要開啟那些元件
的線索是在你目前成功開機過程中核心的訊息。輸入 dmesg 查看這些訊息。
現在到您的核心原始碼目錄,是開始設定核心的時候了。建議你先執行
make defconfig 將預設的設定加進去。預設的設定設好以後,執行
make menuconfig,會出現一個 ncurses 的設定選單。
原始碼 3.1: 開始 menuconfig |
# cd /usr/src/linux
# make defconfig
# make menuconfig
|
您將會看到一大串的設定部份。我們將列出一些您一定要啟用的選項(不然 Gentoo 無法
完善地工作)。
必須開啟的選項
首先,開啟 development and experimental code/drivers。您將需要這個,不然
您將無法看見一些其他重要的程式碼或是驅動程式。
原始碼 3.2: 選擇 experimental code/drivers, General setup |
Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
General setup --->
[*] Support for hot-pluggable devices
|
現在到 File Systems 然後選擇要支援的檔案系統。記得不要將它們編成模
組(Module),否則您的 Gentoo 系統將無法掛載您的分割區。另外還要勾選 /proc file system 和 Virtual memory。
原始碼 3.3: 選擇相關檔案系統 |
File systems --->
Pseudo Filesystems --->
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
<*> Second extended fs support
<*> XFS filesystem support
<*> Ext3 journalling file system support
<*> Reiserfs support
|
如果您需要透過 PPPoE 連線到網路或是數據機撥接,您將需要以下的核心選項:
原始碼 3.4: 選擇 PPPoE 相關驅動程式 |
Device Drivers --->
Networking support --->
<*> PPP (point-to-point protocol) support
<*> PPP support for async serial ports
<*> PPP support for sync tty ports
|
雖然 PPP over Ethernet 選項只有在 rp-pppoe 設定為核心 PPPoE
時需要,但是這兩個壓縮的選項不會造成錯誤。
如果您需要,不要忘了為您的網路卡加入核心的支援。
NewWorld 及 OldWord 的使用者都會將需要 HFS 支援。OldWord 的使用者可以複製編譯好的核心到 MacOS 分割區
而 NewWorld 機器需要用他設定特殊的 Apple_Bootstrap 分割區:
原始碼 3.5: 啟用 HFS 支援 |
File Systems --->
[*] HFS Support
|
在目前,kernel preemption 在 PPC 上仍然不穩定,而且會引起許多編譯失敗及隨機的
segfaults。強烈建議你不要使用這項功能。
原始碼 3.6: 確定 Preemptible Kernel 選項是關閉的 |
Platform options --->
[ ] Preemptible Kernel
|
如果你是從 Firewire 開機,你需要啟動這些選項。但如果你不想把他們編譯進核心,可
以把這些模組及他們相依的模組放入 initrd 中。
原始碼 3.7: 在開幾時啟動 firewire 裝置支援 |
Device Drivers --->
IEEE 1394 (FireWire) support --->
<*> IEEE 1394 (FireWire) support
<*> OHCI-1394 support
<*> SBP-2 support (Harddisks etc.)
|
如果用 USB,你需要啟動這些選項。但如果你不想把他們編譯進核心,可
以把這些模組及他們相依的模組放入 initrd 中。
原始碼 3.8: 在開幾時啟動 USB 裝置支援 |
Device Drivers --->
USB support --->
<*> Support for Host-side USB
<*> OHCI HCD support
<*> USB Mass Storage support
|
因為開機時需要 framebuffer 支援,所以不要關掉他。如果你是用 NVIDIA 為基礎的晶片
組,那要使用 OpenFirmware framebuffer。如果是 ATI,你要依照你的晶片選擇驅動程式
(Mach64, Rage128 或 Radeon)。
原始碼 3.9: 選擇 Framebuffer 驅動程式 |
Device Drivers --->
Graphics support --->
<*> Support for frame buffer devices
[*] Open Firmware frame buffer device support
<*> ATI Radeon display support
<*> ATI Rage128 display support
<*> ATI Mach64 display support
Console display driver support --->
<*> Framebuffer Console support
|
注意:
如果你選一個以上 framebuffer 驅動程式,預設使用的可能不是最好的驅動程式。最好只
使用一種驅動程式,或是指定你要使用的驅動程式,像是 video=radeonfb。
|
當您完成核心設定時,請從 編譯和安裝 繼續。
編譯和安裝
現在您的核心已經設定完成了,我們該來編譯然後安裝它。離開核心設定,然後執行編譯
核心的指令:
原始碼 3.10: 編譯核心 |
# make && make modules_install
|
當核心完成編譯時,將核心映像檔複製到 /boot (請確定這在 Pegasos 上有正確的掛載起來)。
原始碼 3.11: 安裝核心 |
(Apple/IBM) # cp vmlinux /boot/<kernel-version>
(Pegasos) # cp arch/ppc/boot/images/zImage.chrp /boot/<kernel-version>
|
現在請從 安裝分開的核心模組 繼續。
7.d. 安裝分開的核心映像檔和模組
設定模組
您將需要將想要開機時自動載入的模組放到
/etc/modules.autoload.d/kernel-2.6。您也可以加上模組的選項。
要查看所有可用的模組,執行 find 指令。不要忘了將 "<kernel
version>"更改為您剛剛編譯的版本:
原始碼 4.1: 查看所有可用的版本 |
# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'
|
舉例來說,要自動載入 3c59x.o 模組,編輯 kernel-2.6:
原始碼 4.2: 編輯 /etc/modules.autoload.d/kernel-2.6 |
# nano -w /etc/modules.autoload.d/kernel-2.6
|
原始碼 4.3: /etc/modules.autoload.d/kernel-2.6 |
3c59x
|
請到 設定您的系統 繼續安裝程序。
7.e. 其他選擇:使用 genkernel
如果您在閱讀這節,您已經選擇使用我們的 genkernel 指令稿來幫您設定您的核心。
現在您的核心原始碼樹已經安裝完成,該是編譯核心的時候了,這會使用我們的
genkernel 指令稿來自動為您編譯核心。genkernel 會設定出一個幾乎和
安裝光碟核心完全一樣的核心,意思是說,當您使用 genkernel 來編譯您的核心
,您的系統會在開機的時候偵測到您的硬體,就如同我們的安裝光碟所做的一樣。因為
genkernel 並不需要任何手動核心設定,對不習慣編譯自己核心的使用者來說,這是個最
好的解決辦法。
現在讓我們來看看如何使用 genkernel。首先,emerge genkernel ebuild:
原始碼 5.1: Emerge genkernel |
# emerge genkernel
|
接著,複製 Installation CD 所使用的核心設定到 genkernel 搜尋預設核心設定的位置:
原始碼 5.2: 複製 Installation CD 核心設定 |
# zcat /proc/config.gz > /usr/share/genkernel/ppc/kernel-2.6
|
如果你用 firewire 或 USB 開機,你需要把相關的模組加入 initrd。編輯
/usr/share/genkernel/ppc/modules_load 加入
MODULES_FIREWIRE="ieee1394 ohci1394 sbp2" 以支援 firewire,或加入
MODULES_USB="usbcore ohci-hcd ehci-hcd usb-storage" 支援 USB。
現在,用 genkernel --genzimage all 編譯您的核心。如果是 Pegasos 機器,我
們需要使用不同設定並且使用 bzImage 而不是在 Apple 上用的 vmlinux 核心。請注意
,因為genkernel 編譯的,是一個要支援幾乎所有硬體的核心,所以要編譯完成會
花費相當的時間!
注意,如果您存放核心的分割區不是使用 ext2 或 ext3 檔案系統,您可能需要執行
genkernel --menuconfig --genzimage all 手動設定您的核心,然後加入您所使
用的檔案系統支援到核心 裡面 (也就是 不要 編譯成模組)。EVMS2 或
LVM2 的使用者可能還會想要加入 --evms2 或 --lvm2 參數。
原始碼 5.3: 執行 genkernel |
# genkernel --genzimage all
|
原始碼 5.4: 在 Pegasos 機器上執行 genkernel |
# genkernel --genzimage --kernel-config=/usr/share/genkernel/ppc/Pegasos all
|
一旦 genkernel 完成,便會產生一個核心,完整的模組集合,還有
initial root disk (initrd)。此份文件稍後在設定 boot loader 時
,我們會使用到產生的核心和 initrd,記下核心的名稱和 initrd,您將會在
編輯 bootloader 設定檔時用到。initrd 會立即在開機時啟動,執行硬體自動偵測 (就像
在 Installation CD 上一樣),在您 "真正的" 系統啟動之前。要記得確認你有連開機參數
一起複製,要成功的使用 genkernel 開機的話就會用到。
原始碼 5.5: 檢查產生的核心影像名稱和 initrd |
# ls /boot/kernel* /boot/initramfs*
|
如果你希望你的系統更像 Installation CD,你需要在安裝完成後 emerge
coldplug。initrd 會自動偵測開機所需要用到的硬體,而 coldplug 則會
自動偵測其他所有的硬體。要 emerge 並啟動 coldplug,鍵入下列指令:
原始碼 5.6: Emerge 並啟動 coldplug |
# emerge -k coldplug
# rc-update add coldplug boot
|
如果你要你的系統在熱插拔時有所反應,你需要安裝 hotplug:
原始碼 5.7: Emerge 並啟動 hotplug |
# emerge hotplug
# rc-update add hotplug default
|
現在請從 設定您的系統 繼續。
8. 設定您的系統
8.a. 檔案系統資訊
什麼是 fstab?
在 Linux 中,所有在系統中被使用的分割區要被列在 /etc/fstab 之中。在
這個檔案之中包含了這些分割區的掛載點(他們在檔案系統中哪裡被存取),他們如何掛載(
一些特別的參數),以及何時掛載(要不要自動掛載,一般使用者可不可以掛載等)。
建立 /etc/fstab
/etc/fstab
使用特別的語法。每一列包含六個欄位,以空格(一個以上)、tab或兩者同時用來分隔。每
一個欄位有他自己的定義:
-
第一個欄位設定分割區的位置(裝置的路徑)
-
第二個欄位設定分割區要在哪個掛載點被掛載
-
第三個欄位設定分割區的檔案系統
-
第四個欄位設定 mount 要掛載時所使用的掛載參數。
因為不同的檔案系統有不同的參數,您要去查詢 manpage (man mount) 來取得完
整的參數列表。這些參數之間以逗號分隔。
-
第五個欄位被 dump 用來決定這個分割區需不需要被傾印。一般而言您可以設成
0(零)
-
第六個欄位讓 fsck 決定當系統不正常的關機時,檔案系統檢查的順序。
根目錄要被設成 1 而其他則要設成 2,如果檔案系統不需要被檢查的
話,則設成 0。
Gentoo 提供的預設 /etc/fstab 檔案 不是一個有效的 fstab 檔
,接下來啟動 nano (或您慣用的編輯器)來建立/etc/fstab:
原始碼 1.1: 開啟 /etc/fstab |
# nano -w /etc/fstab
|
接著來看看我們如何設定 /boot 分割區。這只是一個範例,所以如果您的
系統不需要 /boot 分割區(如:PPC),不要直接複製它。
在我們的 x86 分割範例中 /boot 是位於 /dev/hda1 分割區
中,而且使用 ext2 檔案系統。他不應該在開機時自動掛載 (noauto),但
是需要被檢查,所以我們應該記下來:
原始碼 1.2: /etc/fstab 中 /boot 設定範例 |
/dev/hda1 /boot ext2 defaults 1 2
|
如果您不需要自動掛載 /boot 分割區,來增加您的系統安全性,您將需要將
defaults 更換成 noauto。這代表著您將需要在使用時手動掛載。
為了增進效能,大部分使用者都會在要掛載的分割區掛載參數中設定 noatime,
因為這會讓系統不更新上次檔案的存取時間(一般來說您並不需要這個功能),因此可以加快
速度:
原始碼 1.3: etc/fstab 中改進過的 /boot 設定範例 |
/dev/hda1 /boot ext2 default,noatime 1 2
|
接下來,我們繼續完成下面這幾行,包括 /boot,/ 還有置換
區:
原始碼 1.4: /etc/fstab 中三行設定 |
/dev/hda1 /boot ext2 default,noatime 1 2
/dev/hda2 none swap sw 0 0
/dev/hda3 / ext3 noatime 0 1
|
最後,您要加入 /proc,tmpfs (必要),以及CD-ROM。如果您還有其
他的裝置,也加到檔案中:
原始碼 1.5: 完整的 /etc/fstab |
/dev/hda1 /boot ext2 defaults,noatime 1 2
/dev/hda2 none swap sw 0 0
/dev/hda3 / ext3 noatime 0 1
none /proc proc defaults 0 0
none /dev/shm tmpfs nodev,nosuid,noexec 0 0
/dev/cdroms/cdrom0 /mnt/cdrom auto noauto,user 0 0
|
檔案系統設定 auto 讓 mount 猜測使用哪個檔案系統(建議在可卸除的裝置
使用,因為他們可能有多種檔案系統),而 user 參數讓一般使用者也能掛載 CD。
如果您使用 SPARC 的話,您也要將下面這一行加入 /etc/fstab 中:
原始碼 1.6: 在 /etc/fstab 加入 openprom 檔案系統 |
none /proc/openprom openpromfs defaults 0 0
|
重新檢查一次 /etc/fstab,儲存離開後進行下面的步驟。
8.b. 網路資訊
主機名稱,領域名稱等
接下來的步驟其中之一就是給您的電腦一個名稱。這步驟相當簡單,但是許多人很
難找到一個合適的名稱,記得您設定的名字在之後還是可以改變的,這可以讓您快一點完成
。一般而言,您可以設定電腦名稱為 tux 而領域名稱為 homenetwork。
我們會使用這些設定來當做範例。首先設定主機名稱:
原始碼 2.1: 設定主機名稱 |
# nano -w /etc/conf.d/hostname
HOSTNAME="tux"
|
其次設定領域名稱:
原始碼 2.2: 設定領域名稱 |
# nano -w /etc/conf.d/domainname
DNSDOMAIN="homenetwork"
|
如果您有 NIS 領域名稱的話(您不知道這是什麼的話,那您就不用設定它),您也需要去設
定它:
原始碼 2.3: 設定 NIS 領域名稱 |
# nano -w /etc/conf.d/domainname
NISDOMAIN="my-nisdomain"
|
現在加入 domainname script 到預設的 runlevel 中:
原始碼 2.4: 將 domainname 加到預設 runlevel |
# rc-update add domainname default
|
設定網路
在您覺得 "嗯,我現在已經弄好了" 之前,您要記得在您剛開始安裝 Gentoo 時設定的網路
只是在安裝過程中使用。現在您要為您的 Gentoo 系統設定網路。
注意:
更詳細的網路資訊,包括進階的主題如頻寬合併,橋接, 802.11Q VLAN 及無線網路等包
含在 Gentoo 網路設定 部份。
|
所有的網路設定都集合在 /etc/conf.d/net。如果您不知道如何設定的話,您
會覺得這些語法相當不熟悉或是不了解,但不用擔心,我們會解釋每件您該需要的訊息 :)
包含許多不同設定的指令範例可以在 /etc/conf.d/net.example 找到。
預設是使用 DHCP,他並不需要做任何設定。
如果你因為要指定 DHCP 選項或是你沒有使用 DHCP 而要設定網路,用你習慣的瀏覽器開
啟 /etc/conf.d/net(範例中使用 nano)。
原始碼 2.5: 開啟 /etc/conf.d/net 來編輯 |
# nano -w /etc/conf.d/net
|
你會看到底下這些:
原始碼 2.6: 預設 /etc/conf.d/net |
# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d. To create a more complete configuration,
# please review /etc/conf.d/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).
|
要自己輸入 IP,子網路遮罩以及閘道器的話,你需要設定
config_eth0 及 routes_eth0:
原始碼 2.7: 手動設定 eth0 IP 資訊 |
config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default gw 192.168.0.1" )
|
要使用 DHCP 並且指定 DHCP 選項,設定 config_eth0 及 dhcp_eth0:
原始碼 2.8: 自動取得 eth0 的 IP |
config_eth0=( "dhcp" )
dhcp_eth0="nodns nontp nonis"
|
請參閱 /etc/conf.d/net.example 中完整的選項列表。
如果您有數個網路介面,對 iface_eth1,iface_eth2 等變數重複上面的
步驟。
現在儲存設定然後離開,繼續下面的步驟。
開機時自動啟動網路
讓您的網路介面開機時自動啟動,您要把底下這些加入預設的 runlevel 中。如果您使用
PCMCIA 介面則跳過這一步驟,PCMCIA 是由 PCMCIA 啟動 script 來啟動。
原始碼 2.9: 加入 net.eth0 到預設的 runlevel |
# rc-update add net.eth0 default
|
如果您有數個網路介面,您要建立對應的 net.eth1,net.eth2 等。
您可以使用 ln 來完成:
原始碼 2.10: 建立額外的 initscripts |
# cd /etc/init.d
# ln -s net.eth0 net.eth1
# rc-update add net.eth1 default
|
寫入網路資訊
您需要告訴 Linux 關於您的網路的資訊。這在 /etc/hosts 中定義幫助您將
名稱伺服器上查不到的主機名稱反解為 IP。例如您的網路中有三台電腦,分別叫做
jenny (192.168.0.5),benny (192.168.0.6) 和 tux
(192.168.0.7 - 這台電腦),您要開啟 /etc/hosts 然後填入這些設定:
原始碼 2.11: 開啟 /etc/hosts |
# nano -w /etc/hosts
|
原始碼 2.12: 填入網路資訊 |
127.0.0.1 localhost
192.168.0.5 jenny.homenetwork jenny
192.168.0.6 benny.homenetwork benny
192.168.0.7 tux.homenetwork tux
|
如果您的電腦是唯一的一部,或是名稱伺服器有全部的反解,底下這一行已經足夠了,例
如說,你想要你的電腦叫做 tux:
原始碼 2.13: 適合單一電腦或是有完整反解的電腦的 /etc/hosts |
127.0.0.1 localhost tux
|
儲存設定然後離開,繼續下面的步驟。
如果您沒有 PCMCIA,您可以繼續進行 系統資訊。
PCMCIA 使用者繼續下面的主題。
非必要:讓 PCMCIA 工作
注意:
pcmcia-cs 只可以在 x86, amd64 和 ppc 平台上使用。
|
PCMCIA 使用者首先要安裝 pcmcia-cs 套件,包含打算使用 2.6 核心的使用者(雖
然他們將不會使用套件內的驅動程式)。然後使用 USE="-X" 來避免現階段的
XFree86 安裝:
原始碼 2.14: 安裝 pcmcia-cs |
# USE="-X" emerge pcmcia-cs
|
當 pcmcia-cs 安奘好以後,新增 pcmcia 到預設 runlevel:
原始碼 2.15: 新增 pcmcia 到預設 runlevel |
# rc-update add pcmcia default
|
8.c. 系統資訊
Root密碼
我們藉由輸入以下指令來更改Root密碼
原始碼 3.1: 設定Root密碼 |
# passwd
|
如果您希望讓Root能夠從文字介面登入,請增加tts/0到/etc/securetty:
原始碼 3.2: 增加 tts/0 to /etc/securetty |
# echo "tts/0" >> /etc/securetty
|
系統資訊
Gentoo 使用 /etc/rc.conf 來設定整個系統的一般設定。
開啟 /etc/rc.conf 然後享受裡面完善的注解 :)
原始碼 3.3: 開啟 /etc/rc.conf |
# nano -w /etc/rc.conf
|
當你設定 /etc/rc.conf 好以後,存檔然後離開。
就如同您所看到的,這個檔案有完善的注解讓您設定必要的參數。你可以設定系統使用
unicode 及定義預設的編輯器還有顯示管理員(像 kdm 和 gdm)。
Gentoo 使用 /etc/conf.d/keymaps 來處理鍵盤設定。編輯他設定你的鍵盤。
原始碼 3.4: 開啟 /etc/conf.d/keymaps |
# nano -w /etc/conf.d/keymaps
|
特別要注意
KEYMAP 變數,如果您設定錯誤的 KEYMAP 當您再用鍵盤輸入時會得到錯誤
的結果。
注意:
以 USB 為主的 SPARC 系統或相容的系統可能要選擇 i386 keymap (例如 "us") 而不是
"sunkeymap"。大部份的 PPC 系統都是用 x86 的設定。想要在開機時可以使用
ADB keymaps 的使用者需要啟動核心中的 ADB keycode sendings,並且在
/etc/conf.d/keymaps 中設定 mac/ppc keymap。
|
當你設定 /etc/conf.d/keymaps 好以後,存檔然後離開。
Gentoo 使用 /etc/conf.d/clock 設定系統時鐘,根據你的需求編輯他。
原始碼 3.5: 開啟 /etc/conf.d/clock |
# nano -w /etc/conf.d/clock
|
如果你的硬體時鐘是使用 UTC,你需要在檔案中加入 CLOCK="local",不然你會發
現時間偏移了。
當你設定好 /etc/conf.d/clock 後,存檔然後離開。
如果你不是在 IBM PPC64 系統上安裝 Gentoo,接著繼續
安裝必需的系統工具。
設定 Console
注意:
下面這一部分適用 IBM PPC64 硬體平台。
|
如果你打算在 IBM PPC64 系統上安裝 Gentoo 並且使用虛擬 Console,你需要取消
/etc/inittab 中 hvc 那幾行的注解,讓虛擬 Console 可以產生登入提示
符號。
原始碼 3.6: 在 /etc/inittab 中啟動 hvc 或 hvsi 支援 |
hvc0:12345:respawn:/sbin/agetty -L 9600 hvc0
hvsi:12345:respawn:/sbin/agetty -L 19200 hvsi0
|
這時你也要順便檢查 /etc/securetty 中是不是有把合適的 console 列上
去。
接著繼續 安裝必需的系統工具。
9. 安裝必要的系統工具
9.a. 系統記錄器
因為有多個套件提供相同的功能,這類套件並不包含在 stage3 壓縮檔中。現在
你可以決定要安裝那一個套件。
第一個您需要做決定的工具是用來提供給系統記錄的功能。Unix 和 Linux 擁有一個很好
的記錄功能的歷史 -- 若是您想要的話,您可以記錄所有發生在您系統上的事情至
logfiles。這將會需要用到 系統記錄器。
Gentoo 提供許多個系統記錄器的選擇。分別為 sysklogd,它是一個傳統的系統
記錄伺服器,syslog-ng ,是一個進階的系統記錄器,而 metalog 則是一
個高度配置的系統記錄器。Portage 內或許有其他的記錄器 -- 我們提供的套件每天都在
增加當中。
假如你打算使用 sysklogd 或 syslog-ng,你可能想要接著安裝
logrotate 因為這兩個紀錄器不會提供任何輪替紀錄檔的功能。
請用 emerge 指令來安裝您想使用的系統記錄器,並使用 rc-update 將之
加入至預設 runlevel。下面是一個安裝 syslog-ng 的例子。當然,它也適用於
安裝您要用的系統記錄器:
原始碼 1.1: 安裝系統記錄器 |
# emerge syslog-ng
# rc-update add syslog-ng default
|
9.b. 非必要: Cron 伺服器
接下來的則是 cron 伺服器。雖然您的系統並不一定需要安裝這個伺服器,但我們
還是建議您安裝一個。然而,什麼是 cron 伺服器呢?cron 伺服器執行排定的指令。
若您需要時常執行一些指令 (每天、每星期、或是每個月),則它將會是一個得力的
助手。
針對無網路的安裝,我們只提供 vixie-cron。如果您想要安裝其他 cron ,您將
需要等到之後再自行安裝。
原始碼 2.1: 安裝 cron 伺服器 |
# emerge vixie-cron
# rc-update add vixie-cron default
|
9.c. 自由選擇:檔案索引
如果你想要為你系統上的檔案製作索引,讓你可以用 locate 工具快速找到他們的
位置,你需要安裝 sys-apps/slocate。
原始碼 3.1: 安裝 slocate |
# emerge slocate
|
9.d. 檔案系統工具
依照您使用的檔案系統,您應該安裝必要的檔案系統工具 (用來檢查檔案系統的正確性、
建立額外的檔案系統等等)。
下面的表格列出各檔案系統所需要安裝的工具,不是所有的架構都支援所有的檔案系統。
| 檔案系統 |
工具 |
安裝指令 |
| XFS |
xfsprogs |
emerge xfsprogs |
| ReiserFS |
reiserfsprogs |
emerge reiserfsprogs |
| JFS |
jfsutils |
emerge jfsutils |
如果你要使用 EVMS,你需要安裝emvs:
原始碼 4.1: 安裝 EVMS 工具 |
# USE="-gtk" emerge evms
|
USE="-gtk" 會避免安裝相依的軟體。如果你想要啟動 evms 圖形化工具,
可以之後再重新編譯 evms。
如果您不需要使用任何網路相關的程式(例如說 rp-pppoe 或 dhcp 客戶端),可以繼續閱讀
設定開機管理員
9.e. 網路工具
非必要:安裝 DHCP 客戶端
如果你需要 Gentoo 自動取得你網路介面的 IP 位址,你需要在你的系統上安裝
dhcpcd (或其他 DHCP 客戶端)。如果你目前不先做的話,在安裝完成後你可能不
能連接網際網路!
原始碼 5.1: 安裝 dhcpcd |
# emerge dhcpcd
|
非必要:安裝 PPPoE 客戶端
如果您需要 rp-pppoe 來連線至網際網路,您需要安裝它。
原始碼 5.2: 安裝 rp-pppoe |
# USE="-X" emerge rp-pppoe
|
USE="-X" 將會禁止 xorg-x11 因為依存性而被安裝至系統 (rp-pppoe
有圖型介面工具;如果您想要啟動它們,您可以晚點再重新編譯 rp-pppoe
,但您也可以現在就安裝 xorg-x11 -- 這將會需要更長的編譯時間)。
現在請接著閱讀 設定開機管理員。
10. 設定開機程式
10.a. 選擇開機程式
介紹
現在您的核心已經設定和已經編譯好相關的系統設定檔了,你現在需要 開機程式
來啟動 Linux。你需要使用的 開機程式 決定於你使用那一種的 PPC 機器。
如果你使用 NewWorld 或 IBM 的機器,你需要用 yaboot。
OldWorld Apple 機器有兩個選擇,BootX (建議使用) 以及
quik。Pegasos 不需要開機程式,但是你需要安裝
BootCreator 建立 SmartFirmware 開機選單。
10.b. 預設:使用 yaboot
介紹
重要:
yaboot 只適用於 NewWorld 的 PPC 和 IBM 的系統!
|
為了讓 yaboot 可以尋找開機裝置,他需要讀取 /dev 檔案系統。這可以用
"bind"-mapping 將安裝光碟中的 /dev 檔案系統映射到 chroot 內的
/dev
原始碼 2.1: Bind-mounting /dev 檔案系統 |
# exit # 這會離開 chroot 環境
# mount -o bind /dev /mnt/gentoo/dev
# chroot /mnt/gentoo /bin/bash
# /usr/sbin/env-update && source /etc/profile
|
要設定 yaboot,您可以使用包含在內的 yabootconfig 然後自動設定
yaboot。如果您是在 G5 上安裝 Gentoo(yabootconfig 常常無法正確設定),或
你打算用 firewire 或 USB 開機,您需要手動設定設定檔。
直接設定。
注意:
如果你使用 genkernel 的話,可能需要去編輯 yaboot.conf 檔案。就算用 yabootconfig
設定,yaboot.conf 核心部份要改成下面這樣:
|
原始碼 2.2: 在 yaboot.conf 之中加入開機參數 |
image=/boot/kernel-2.6.12
label=Linux
root=/dev/ram0
partition=3
append="real_root=/dev/hda3 init=/linuxrc"
read-only
|
預設:使用 yabootconfig
yabootconfig 將會自動偵測您的系統上的分割區然後設定 Linux, Mac OS 和
Mac OS X 3的組合。
要使用 yabootconfig,您的磁碟一定要有一個 Apple_Bootstrap 的分割區。
/etc/fstab 一定要依照您的 Linux 分割區設定。這兩個步驟一定要在少面
的步驟完成。要開始前,請確認您有最新版本的 yaboot。
原始碼 2.3: 安裝 GRP yaboot |
# emerge --usepkg --update yaboot
|
現在離開 chroot 執行 yabootconfig --chroot /mnt/gentoo。這個程式將會確認
bootstrap 分割區。如果正確,輸入 Y。如果錯誤,請檢查您的
/etc/fstab。yabootconfig 將會掃描您的系統設定然後建立
/etc/yaboot.conf,然後自動執行 mkofboot。mkofboot 格
式化您的 Apple_Bootstrap 分割區,然後將 yaboot 設定檔安裝到裡面。接下來再進入
chroot:
原始碼 2.4: 進入 chroot |
# chroot /mnt/gentoo /bin/bash
# /usr/sbin/env-update && source /etc/profile
|
您應該要確定 /etc/yaboot.conf 的內容。如果您更改
/etc/yaboot.conf 的設定(像是更改預設開機),完成時確定要執行
ybin -v 套用相關更變到 Apple_Bootstrap 分割區上。
接下來請到 重開機系統。
其他選擇:手動設定 yaboot
請先確認您有最新版本的 yaboot:
原始碼 2.5: 安裝 yaboot |
# emerge --usepkg --update yaboot
|
以下您將可以看到完整的 yaboot.conf 檔案。但你需要修改他符合你的需
要。G5 以及用 firewire/USB 開機的使用者應該要注意您們的 Serial ATA 磁碟,因為這
將會被 Linux 核心判斷成 SCSI 磁碟(所以將 /dev/hda 換成
/dev/sda)。
原始碼 2.6: /etc/yaboot.conf |
boot=/dev/hda2
device=hd:
delay=5
defaultos=macosx
timeout=30
install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot
image=/boot/kernel-2.6.9
label=Linux
root=/dev/hda3
read-only
macos=/dev/hda13
macosx=/dev/hda12
enablecdboot
enableofboot
|
當您完成 yaboot.conf 的設定時,執行 mkofboot -v 來格式化
Apple_bootstrap 分割區,並安裝設定。如果你在 Apple_bootstrap 分割區建立好後改變
yaboot.conf 的設定,你可以執行 ybin -v 更新設定。
關於更多相關 yaboot 的資料,請參考 yaboot 計畫。
接下來請到 重開機系統。
10.c. 其他選擇:BootX
重要:
BootX 只適用於 OldWorld Apple 系統架構!
|
因為 BootX 從 MacOS 之內啟動 Linux,核心需要從 Linux 的分割區複製到 MacOS 的分
割區。首先,在 chroot 之外掛載 MacOS 分割區。使用 mac-fdisk -l 找出 MacOS
分割區的編號,這裡用 sda6 做範例。在分割區掛載以後,我們把核心複製到系統資料夾讓
BootX 可以找到。
原始碼 3.1: 複製核心到 MacOS 分割區 |
# exit
cdimage ~# mkdir /mnt/mac
cdimage ~# mount /dev/sda6 /mnt/mac -t hfs
cdimage ~# cp /mnt/gentoo/usr/src/linux/vmlinux "/mnt/mac/System Folder/Linux Kernels"
|
如果你使用 genkernel 的話,kernel 和 initrd 都需要複製到 MacOS 分割區。
原始碼 3.2: 複製 Genkernel 產生的核心及 initrd 到 MacOS 分割區 |
# exit
cdimage ~# mkdir /mnt/mac
cdimage ~# mount /dev/sda6 /mnt/mac -t hfs
cdimage ~# cp /mnt/gentoo/boot/kernel-* "/mnt/mac/System Folder/Linux Kernels"
cdimage ~# cp /mnt/gentoo/boot/initramfs-* "/mnt/mac/System Folder"
|
現在核心已經複製好了,我們需要重新開機設定 BootX。
原始碼 3.3: 卸載所有分割區然後重開機 |
cdimage ~# cd /
cdimage ~# umount /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo /mnt/mac
cdimage ~# reboot
|
當然,不要忘了移除可開機媒體,我們需要用 MacOS 開機。
現在你的電腦在 MacOS,開啟 BootX 控制台。如果你不是使用 genkernel,選擇
Options 然後取消 Used specified RAM disk。如果你是用 genkernel,
確定你是選 genkernel 的 initrd 而不是安裝光碟上的 initrd。當你回到 BootX 主視窗後
,你可以看到一個選項指定根磁碟機及分割區,填入適當的設定。根據你的核心設定,你或
許要加上一些額外的核心參數。
BootX 可以設定開機時啟動 Linux,如果你選擇這樣做的話,電腦會開機到
MacOS ,然後在啟動時,BootX 會載入並啟動 Linux。參閱
BootX 首頁 取得更多資訊。
現在重開機後進入 Linux,接著繼續 最終化 Gentoo 安裝
10.d. 另一選擇:quik
quik 允許 OldWorld Macs 不透過 MacOS 開機。但是他並沒有完整的支援。如果可以選擇
的話,建議你使用 BootX,因為他比較穩定,而且比 quik 容易設定。
第一步先安裝他:
原始碼 4.1: Emerge quik |
# emerge quik
|
接著要做一些設定,編輯 /etc/quik.conf 並且把 image 設成我們之前複製到開機分割區
的核心。
原始碼 4.2: Configuring quik.conf |
# Example of quik.conf
init-message = "Gentoo 2005.1\n"
partition = 2
root = /dev/hda4
timeout = 30
default = gentoo
image = /vmlinux-2.6.12
label = gentoo
|
quik.conf 檔案一定要和 quik 開機映像檔在同一個磁碟,不過可以在不同的分割區,
雖然如此,建議你把他移到開機分割區中。
原始碼 4.3: 將 quik.conf 移到 /boot |
# mv /etc/quik.conf /boot/quik.conf
|
現在要設定一些開機變數讓 quik 在開機時載入。我們用一個叫作 nvsetenv 的程
式來做設定。你要設定的變數會因為不同的機器有所差異,建議你在開始前找到你機器的
quirks。
原始碼 4.4: 設定開機變數 |
# nvsetenv auto-boot true
# nvsetenv output-device video
# nvsetenv input-device kbd
# nvsetenv boot-device scsi/sd@1:0
# nvsetenv boot-device ata/ata-disk@0:0
# nvsetenv boot-file /boot/vmlinux-2.6.12 root=/dev/hda4
# nvsetenv boot-command boot
|
注意:
你也可能可以在 MacOS 改變開機變數。根據你的機種,可以用
bootvars或
Apple System Disk 設定。參閱上面的 quik quirks 取得更多資訊。
|
現在開機相關的設定都做好了,你需要確定開機映像檔有正確安裝。執行
quik -v -C /boot/quik.conf。他應該會告訴你他已經安裝在
first stage QUIK boot block。
注意:
如果有地方出問題了,你可以在開機前按著 command + option + p + r 讓 PRAM
回到預設值。他會清除掉 nvsetenv 做的設定,並且讓你可以從 MacOS 或 Linux 開機片
開機。
|
接著繼續 重新開機。
10.e. 其他選擇:BootCreator
重要:
BootCreator 會用 Forth 為 Pegasos 建立一個 SmartFirmware bootmenu。
|
首先請確定您的系統上有安裝 bootcreator:
原始碼 5.1: 安裝 bootcreator |
# emerge --usepkg --update bootcreator
|
然後將檔案 /etc/bootmenu.example 複製到 /etc/bootmenu
,並按照您的需求作適當的編輯:
原始碼 5.2: 編輯 bootcreator config 檔案 |
# cp /etc/bootmenu.example /etc/bootmenu
# nano -w /etc/bootmenu
|
下面是一個 /etc/bootmenu 設定範例。
原始碼 5.3: bootcreator config 檔案 |
[VERSION]
1
[TITLE]
Boot Menu
[SETTINGS]
AbortOnKey = false
Timeout = 9
Default = 1
[SECTION]
Local HD -> Morphos (Normal)
ide:0 boot2.img ramdebug edebugflags="logkprintf"
[SECTION]
Local HD -> Linux 2.6.12 (Normal)
ide:0 linux-2.6.12 video=radeonfb:1024x768@70 root=/dev/hda3
[SECTION]
Local HD -> Genkernel (Normal)
ide:0 kernelz-2.6.12 root=/dev/ram0 real_root=/dev/hda3 init=/linuxrc
|
最後,bootmenu 必須要傳送給 Forth 然後複製到您的開機分割區,這樣
SmartFirmware 才可以讀到它。所以您要呼叫 bootcreator:
原始碼 5.4: 安裝 bootmenu |
# bootcreator /etc/bootmenu /boot/menu
|
注意:
在您重開機的時候,請記得要檢查 SmartFirmware 的設定中,menu 是預設載入的檔案。
|
現在,到 重開機系統 繼續安裝程序。
10.f. 重開機系統
離開 chrooted 的環境然後卸載所有掛載的分割區。接著輸入 reboot。
原始碼 6.1: 離開 chroot,卸載所有分割區然後重開機 |
# exit
livecd ~# umount /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo
livecd ~# reboot
|
重開機之後,接下來請到 完成您的 Gentoo 安裝 進行最後的步驟。
11. 最終化您的 Gentoo 安裝
11.a. 使用者管理
加入一個每天使用的使用者
在 Unix/Linux 系統下登入成 root 工作是危險的,並應該盡量的避免。所以我們
強烈的建議您新增另一個使用者來應付日常的使用。
使用者所在的群組定義了使用者可以執行那些工作?底下的表格列出許多你會想用的重要
群組:
| 群組 |
說明 |
| audio |
可以存取音效裝置 |
| cdrom |
可以直接存取光學儲存裝置(ex:光碟機) |
| floppy |
可以直接存取磁碟 |
| games |
可以玩遊戲 |
| portage |
可以以一般使用者執行 emerge --pretend
|
| usb |
可以存取 USB 裝置 |
| plugdev |
可以掛載及使用卸除式裝置,如相機及隨身碟
|
| video |
可以存取影像擷取器以及使用硬體加速
|
| wheel |
可以使用 su
|
例如,建立一個叫做 john 的使用者,他是 wheel、users、以及
audio 群組 的一員,請先用root登入(只有root可以新增使用者),然後執行
useradd:
原始碼 1.1: 加入一個每天使用的使用者 |
Login: root
Password:
# useradd -m -G users,wheel,audio -s /bin/bash john
# passwd john
Password:
Re-enter password:
|
如果這個使用者需要在 root 下執行一些任務,他們可以使用 su - 暫時取得
root 的權限。另一個方法則是使用 sudo 套件,若是正確的設置該套件,
它將是非常安全的。
11.b. 自由選擇:安裝 GRP 套件
重要:
這部份只適用 GRP 使用者。其他使用者請跳過這部份繼續閱讀
然後呢?
|
現在你的系統開機好了,以你建立的使用者登入(例如 john),然後
su - 取得管理者權限:
原始碼 2.1: 取得管理者權限 |
$ su -
Password:
|
現在我們要改變 Portage 的設定讓它搜尋第二張光碟(套件光碟)上的預編套
件,首先掛載光碟:
原始碼 2.2: 掛載光碟 |
# mount /mnt/cdrom
|
現在設定 Portage 使用 /mnt/cdrom 目錄中的套件:
原始碼 2.3: 設定 Portage 使用/mnt/cdrom |
# ls /mnt/cdrom
# export PKGDIR="/mnt/cdrom/packages"
# export PKGDIR="/mnt/cdrom"
|
現在安裝你想要用的套件。套件光碟包含多種的預編套件,例如 KDE 及 GNOME:
原始碼 2.4: 安裝 GNOME |
# emerge --usepkg gnome
|
如果想知道有那些預編套件可以用,只要把 /mnt/cdrom/All 下的所有檔案
列出就知道了。例如說,看可不可以安裝 KDE:
原始碼 2.5: 看可不可以安裝 KDE |
# ls /mnt/cdrom/All/kde*
|
確定現在就安裝預編套件。當你執行 emerge --sync 更新
Portage (之後你就會學到),預編套件可能不符合你更新後的 ebuild
檔。可可以試試用 emerge --usepkgonly 取代
emerge --usepkg 避免這個問題。
恭喜,你的系統完全搞定了!接下來繼續然後呢? 學習更多關於
Gentoo 的東西。
12. 然後呢?
12.a. 文件
恭喜!您現在有一個可以運行的 Gentoo 系統了。但接下來該何去何從呢?您接下來
有什麼選擇?該先探索什麼?Gentoo 提供它的使用者許多的方向,因此,它提供了
許多的特點並編寫成文件。
您應該先看一看 Gentoo Handbook 的下一章節名為
使用 Gentoo,它將會告訴您如果讓您的軟體保持在最新的狀
態、如果安裝更多的軟體、什麼是 USE 參數、Gentoo Init 系統的運作方式等等。
如果您有興趣將您的系統最佳化成桌面使用,或著您想要學習如果設定您的系統至一個
完整的桌面系統,請閱讀 Gentoo 桌面文件資源。
除此之外,你可能也需要
localization guide 讓你的系統
使用起來更加舒適。
在 Gentoo Security Handbook 上也有豐富的文件值得一讀。
請翻閱我們的 文件資源 一頁取得我們
提供的完整的文件列表。
12.b. Gentoo 線上
我們永遠歡迎您加入 Gentoo 討論區
或是我們眾多的 Gentoo IRC 頻道
我們也有一些對所有使用者公開的 郵寄列表。
這頁將會介紹如何加入的資訊。
我們閉嘴的時間到了,並讓您享受您的安裝過程 :)
12.c. 2005.1 後的改變
改變?
Gentoo 的演進相當快。底下部份說明影響 Gentoo 安裝的重要部份。我們只列出安裝過程
中共同的部份,安裝過程中不會用到的套件並不包含在其中。
這次並沒有明顯的改變。
B. 使用 Gentoo
1. Portage 介紹
1.a. 歡迎使用 Portage
Portage 大概是 Gentoo 在軟體管理方面最傑出的創造。因為他具有很高的彈性及數不清
的功能,通常被視為 Linux 中最好的軟體管理工具。
Portage 完全以 Python 和
Bash 寫成,因此他可以完全的
讓使用者看透,因為這兩個都是草稿語言。
大部分使用者會透過 emerge 工具使用 Portage。這一章並不會重複 emerge man
page 中提供的資訊。如果你想要了解完整的 emerge 選項,請查閱 man page:
原始碼 1.1: 閱讀 emerge man page |
$ man emerge
|
1.b. Portage 樹
Ebuilds
當我們談到套件時,通常是指透過 Portage 樹讓 Gentoo 使用者可以取得的軟體名稱。
Portage 樹是指 ebuilds 的集合,檔案中包含 Portage 維護軟體所需的資訊(安
裝,搜尋,查詢,...)。這些 ebuilds 預設存放在 /usr/portage。
當你要求 Portage 對某個軟體名稱執行某樣動作時,他都會以系統上的 ebuilds 為基礎。
因此定期更新系統上的 ebuilds 讓 Portage 知道新的軟體,安全更新等等是很重要的。
更新 Portage 樹
Portage 樹通常是用 rsync,一個快速的
小型檔案傳輸工具,來更新。因為 emerge 指令提供一個 rsync 的前端介面,更
新相當的簡單。
原始碼 2.1: 更新 Portage 樹 |
# emerge --sync
|
如果因為防火牆的限制讓你不能使用 rsync,你仍然可以使用每天自動產生的 Portage 快
照。emerge-webrsync 工具自動下載及安裝最新的快照到你的系統中:
原始碼 2.2: 執行 emerge-webrsync |
# emerge-webrsync
|
1.c. 維護軟體
搜尋軟體
你可以使用 emerge 內建的搜尋功能來搜尋軟體。預設上,emerge --search
回覆符合搜尋字串的套件名稱(完全或部分符合)。
例如說,搜尋名稱中有 "pdf" 的所有套件:
原始碼 3.1: 搜尋以 pdf 命名的套件 |
$ emerge --search pdf
|
如果你也想要搜尋套件描述,你可以使用 --searchdesc (或 -S):
原始碼 3.2: 搜尋 pdf 相關套件 |
$ emerge --searchdesc pdf
|
當看到輸出內容時,你會發現他給你很多資訊。這些欄位很清楚的命名所以我們不會深入
說明他們的意義:
原始碼 3.3: 'emerge --search' 輸出範例 |
* net-print/cups-pdf
Latest version available: 1.5.2
Latest version installed: [ Not Installed ]
Size of downloaded files: 15 kB
Homepage: http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
Description: Provides a virtual printer for CUPS to produce PDF files.
License: GPL-2
|
安裝軟體
一但你找到你喜歡的軟體,你可以使用 emerge 輕鬆的安裝他:只要加上套件名稱
。例如說,安裝 gnumeric:
原始碼 3.4: 安裝 gnumeric |
# emerge gnumeric
|
因為有很多套件都依賴其他套件,任何安裝特定套件的動作可能會導致安裝數個相依套件
。別擔心,Portage 會完美的處理相依關係。如果你想要知道當你安裝某個套件時
Portage 可能 會安裝的軟體,加上 --pretend,例如說:
原始碼 3.5: Pretend to install gnumeric |
# emerge --pretend gnumeric
|
當你要求 Portage 安裝一個套件時,他會從網路上下載需要的原始碼(如果需要的話)並且
預設存在 /usr/portage/distfiles。這之後會解壓縮,編譯,然後安裝套
件。如果你想要 Portage 只下載原始碼而不安裝,在 emerge 指令後加入
--fetchonly 選項:
原始碼 3.6: 下載 gnumeric 的原始碼 |
# emerge --fetchonly gnumeric
|
尋找已安裝套件的文件
許多套件有提供他們自己的文件。有時候,doc USE 設定決定要不要安裝這些文件。
你可以使用 emerge -vp <套件名稱> 指令來檢查是否有 doc USE 設
定。
原始碼 3.7: 檢查 doc USE 設定是否存在 |
# emerge -vp alsa-lib
[ebuild N ] media-libs/alsa-lib-1.0.9_rc3 +doc -jack 674 kB
|
你可以在 /etc/make.conf 檔案中全域啟動或關閉 doc USE 設定,
或是在 /etc/portage/package.use 檔案中設定個別套件。USE 設定 這一章包含這些的詳細說明。
在套件安裝完以後,他的文件一般都在 /usr/share/doc 下以套件名稱為名
的子目錄下。你也可以用 app-portage/gentoolkit 套件 中的 equery 工具列出所有已安裝
的檔案。
原始碼 3.8: 確認套件文件的位置 |
# ls -l /usr/share/doc/alsa-lib-1.0.9_rc3
total 28
-rw-r--r-- 1 root root 669 May 17 21:54 ChangeLog.gz
-rw-r--r-- 1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x 2 root root 8560 May 17 21:54 html
-rw-r--r-- 1 root root 196 May 17 21:54 TODO.gz
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.9_rc3
* Contents of media-libs/alsa-lib-1.0.9_rc3:
/usr
/usr/bin
/usr/bin/alsalisp
|
移除軟體
當你想從系統上移除軟體,使用 emerge --unmerge。這會告訴 Portage 從你的系統
中移除所有這個套件安裝的檔案,除了該套件在安裝後你修改過的設定檔。留下這
些設定檔讓你可以繼續使用這個套件,如果你重新安裝他的話。
然而,一個 嚴重警告 是:Portage 並 不會 檢查別的套件是否
依賴你要移除的套件。然而他會在你想要移除某些套件時警告你,因為移除後會搞雜系統。
原始碼 3.9: 從系統上移除 gnumeric |
# emerge --unmerge gnumeric
|
當你從系統上移除套件後,再安裝這個套件時自動安裝的相依套件會被留下來。要讓
Portage 知道相依套件也可以移除,使用 emerge 的 --depclean 功能。我
們會在之後討論他。
更新系統
為了讓你的系統保持在最佳狀態(更不用說安裝最新的安全性更新),你需要定期更新系統
。因為 Portage 只檢查在 Portage 樹中的 ebuilds,首先你需要更新 Portage 樹。當你
更新好了以後,你可以使用 emerge --update world 更新你的系統。在底下的範
例中,我們也會加上 --ask 讓 Portage 顯示要更新的軟體列表並且詢問你是否繼
續:
原始碼 3.10: 更新你的系統 |
# emerge --update --ask world
|
Portage 會搜尋你安裝過的程式較新的版本。然而,他只會搜尋你要求安裝的軟體 - 而沒
有相依套件。如果你相要更新系統上每一個套件,加上 --deep 參數:
原始碼 3.11: 更新全系統 |
# emerge --update --deep world
|
因為你沒有刻意安裝的套件(因為其他套件相依而安裝)也會有安全更新,建議你偶爾執行
這個指令。
如果你最近改變過任何 USE 旗標,你可能會想
要加入 --newuse。Portage 會檢查這個改變是否需要安裝新的套件會是重新編譯
已安裝的套件:
原始碼 3.12: 執行完整更新 |
# emerge --update --deep --newuse world
|
存根套件
一些在 Portage 樹中的套件實際上並沒有任何內容,而是用在安裝一系列的套件。例如說
,kde 套件會設定相依許多 KDE 相關套件來在你的系統上安裝一個完整的 KDE 環
境。
如果你想要移除像這樣的套件,執行 emerge --unmerge 並不會有太大幫助,因為他
的相依套件還是留在系統上。
Portage 有能力移除孤立相依套件,但是因為套件的相依性是動態的,你首先需要更新整
個系統,包括你改變 USE 旗標造成的改變。完成之後你可以執行 emerge --depclean
移除孤立相依套件。做完以後,你需要重新編譯動態連結到已移除軟體,但現在不再需要
連結的套件。
這些事情可以用底下的指令處理:
原始碼 3.13: 移除孤立相依套件 |
# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild
|
revdep-rebuild 是由 gentoolkit 套件提供的,不要忘記先安裝他:
原始碼 3.14: 安裝 gentoolkit 套件 |
# emerge gentoolkit
|
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,包含了在其他資訊之外,系統正常工作所需
的套件列表。
阻擋的套件
原始碼 4.1: Portage 警告阻擋套件 (加上 --pretend) |
[blocks B ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)
|
原始碼 4.2: 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 錯誤追蹤系統。
封鎖的套件
原始碼 4.3: Portage 警告封鎖的套件 |
!!! all ebuilds that could satisfy "bootsplash" have been masked.
|
原始碼 4.4: 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。
相依性遺失
原始碼 4.5: 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 名稱
原始碼 4.6: 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 會
告訴你可能符合的讓你選擇。
循環相依
原始碼 4.7: 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 看看這件事被發現了沒,如果沒
有的話,請回報他。
下載失敗
原始碼 4.8: Portage 警告下載失敗 |
!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
!!! Some fetch errors were encountered. Please see above for details.
|
Portage 不能下載指定程式的原始碼而會繼續安裝其他的程式(如果可用的話)。這個錯誤
可能因為鏡像站還沒正確同步,或是 ebuild 指向錯誤的位置。原始碼存放的伺服器也可
能因為一些理由關閉了。
一小時候在看看這個問題是否還存在。
系統 Profile 保護
原始碼 4.9: Portage warning about profile-protected package |
!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.
|
你已經要求移除屬於系統核心套件一部分的套件。他在 profile 中視為必要的因此不能從
系統上移除。
2. USE 參數
2.a. 什麼是 USE 參數?
USE 關鍵字的概念
當您在安裝 Gentoo (或是其他版本,或是作業系統)您將需要依照環境而決定一些選擇。
要設定一台伺服器和要設定一台工作站是不一樣的。一個遊戲工作站和一個需要 3D 立體
加速的工作站也不同。
這不只是您要選擇安裝什麼套件,但是您也需要某些功能支援於某些套件。如果您不需要
OpenGL,那您為什麼要自找麻煩安裝然後編譯 OpenGL 到您大多數的套件呢呢?如果您不
想要使用 KDE,那為什麼要多浪費時間編譯那些可以不用 KDE 也可以完整的執行的套件內
的 KDE 支援呢?
為了要幫助使用者決定要安裝/啟用,我們需要使用者簡單的了解他所使用的環境。這將
強迫使用者決定他真的要什麼,和了解 Portage 套件管理系統的方便性。
一個 USE 參數的解釋
USE 參數就好像一個包含著相依性支援的關鍵字。如果您定義一個 USE 關鍵字,Portage 將
會知道您需要那方面的支援。當然,這也會啟用相關依賴的套件。
讓我們使用一個範例來講解:kde 的關鍵字。如果您的 Use 變數沒有這個
,那所有選擇性 的 KDE 支援將 不會 把 KDE 的支援編進去。所有擁有
選擇性的 KDE 相依性套件將不會編入。如果您有將 kde 定義,那麼所有
的這些套件將會以滿足相依性安裝。
請正確的定義您所需要的關鍵字。
有那些 USE 關鍵字?
USE 參數總共有分兩種:全區性(Global) 和 區域性(Local)。
-
一個 全區性 的 USE 參數將被許多套件系統共用。這是一個大家所看到的
USE 參數。
-
一個 區域性 的 USE 參數將被單一的套件用來選擇某些套件決定。
您可以到我們的 現在清單 查看完整的 USE
變數清單或是電腦上的 /usr/portage/profiles/use.desc。
2.b. 使用 USE 參數
定義永久的 USE 參數
在我們希望您了解 USE 參數的重要性後,您現在需要定義您自己的 USE 參數了。
就如之前所提到的,所有的 USE 參數都是定義到 USE 的變數內。為了要方便使用
者可以搜尋和選擇 USE 參數,我們已經提供了 預設的 USE 設定。這個設定包含著
我們認為適合 Gentoo 使用者常用的。預設的變數是定義在
make.defaults 檔案。
你系統目前所使用的profile 是由 /etc/make.profile 的符號連結決定的。
每一個 profile 屬於另一個更大的profile,最後形成了所有profile 的總和。最上層的
profile 是 base profile (/usr/portage/profiles/base)。
來看看預設的設定:
原始碼 2.1: 2004.3 profile 中 make.defaults 的加總 USE 變數 |
USE="x86 oss apm arts avi berkdb bitmap-fonts crypt cups encode fortran f77
foomaticdb gdbm gif gpm gtk imlib jpeg kde gnome libg++ libwww mad
mikmod motif mpeg ncurses nls oggvorbis opengl pam pdflib png python qt
quicktime readline sdl spell ssl svga tcpd truetype X xml2 xmms xv zlib"
|
就您所見,這個變數已經包含著許多關鍵字了。請 不要 更改
make.defaults 的檔案。所有的 USE 內的關鍵字將會在每次您更新
Portage 的時候自動被改回預設的方式!
要更改這個預設的設定,您需要在 USE 變數內做更改。您需要更改的是
/etc/make.conf 內的 USE 變數。在這個檔案的變數內,您可以增加
您需要的關鍵字或是移除不需要的關鍵字。您可以使用在關鍵字前面加上減號 ("-")。
舉例來說,要移除掉 KDE 和 QT 但是要支援 ldap,您將需要在
/etc/make.conf 內定義類似以下的的變數:
原始碼 2.2: /etc/make.conf 的範例 USE 設定 |
USE="-kde -qt ldap"
|
設定套件自己使用的 USE 設定
有時候你想對一個(或一組)套件使用一個 USE 設定,但是不希望影響到整個系統。為了達
成這個,需要先建立 /etc/portage 目錄(如果還沒建立的話),然後編輯
/etc/portage/package.use。
例如說,你不想要整個系統都有 berkdb 支援,但是你想要 mysql 支援,
你可以加入:
原始碼 2.3: /etc/portage/package.use 範例 |
dev-db/mysql berkdb
|
你當然可以明確關閉某個程式的 USE 設定。例如說,你不想要 PHP 支援
java:
原始碼 2.4: /etc/portage/package.use 第二個範例 |
dev-php/php -java
|
定義暫時性的變數
有時候您會想要定義暫時性的變數。或許只使用那麼一次。這樣一來您就可以不用編輯
/etc/make.conf 兩次(先設定,編譯完再復原)您可以直接將 USE 定義成
環境變數。記得,當你重新安裝或升級這個程式(不管是只升級他或是升級全系統),你的
改變會遺失!
以下的範例,我們將暫時從 USE 設定移除 java 來安裝 mozilla。
原始碼 2.5: 使用 USE 為環境變數 |
# USE="-java" emerge mozilla
|
自動 USE 參數
某些套件安裝完成後,額外的 USE 參數如果你沒有明確關閉的話,會被自動啟動。要查看
完整的提供 USE 參數的清單,查看
/etc/make.profile/use.defaults及他上層 profile 的
use.defaults:
原始碼 2.6: 簡短版本的 /etc/make.profile/use.defaults |
gnome gnome-base/gnome
gtk x11-libs/gtk+
qt x11-libs/qt
kde kde-base/kdebase
motif x11-libs/openmotif
|
優先度
當然我們有著各個設定的優先度。您不會因為 java 因為較高的優先序而再使用而輸入
USE="-java"。USE 設定的優先度將按照以下的排列(從低到高):
-
放在 make.defaults 預設的 USE 設定
-
use.defaults 承接的 USE 設定
-
使用者在 /etc/make.conf 定義的 USE 設定
-
使用者在 /etc/portage/package.use 定義的 USE 設定
-
以環境變數的方式定義的 USE 設定變數
要查看最後的 USE 設定,執行 emerge --info。這將會看到所有相關的變數
(包括 USE 變數)和 Portage 需要使用到的內容。
原始碼 2.7: 執行 emerge --info |
# emerge --info
|
讓您的系統適應新的 USE 旗標
如果您有更改您的 USE 旗標,並且想將整個系統都套用新的設定,使用 emerge
的 --newuse 參數。
原始碼 2.8: 重新編譯您的系統 |
# emerge --update --deep --newuse world
|
接下來,執行 Portage 的 depclean 移除就系統上不需要的舊相依性套件。
警告:
執行 emerge --depclean 是一件非常危險的動作,請小心執行。請仔細確認列出來的
套件沒有包含著您鎖需要的套件。以下的範例我們將加入 -p 的參數來顯示出將要
被移除的列表清單。
|
原始碼 2.9: 移除不需要的套件 |
# emerge -p --depclean
|
當 depclean 完成後,執行 revdep-rebuild 重新編譯動態連結到已移除套件共享
函式庫的套件。revdep-rebuild 是 gentoolkit 套件的一部分;不要忘了
先安裝他。
原始碼 2.10: 執行 revdep-rebuild |
# revdep-rebuild
|
當這些都完成後,你的系統就正在使用新的 USE 設定了。
2.c. 套件相關 USE 設定
查看可用的 USE 設定
讓我們使用 mozilla 的範例:它聽取著什麼 USE 關鍵字?
要查看,我們使用 emerge 加上 --pretend 和 --verbose 參數:
原始碼 3.1: 查看 USE 關鍵字 |
# emerge --pretend --verbose mozilla
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild R ] www-client/mozilla-1.7.12-r2 USE="crypt gnome java mozsvg ssl
truetype xprint -debug -ipv6 -ldap -mozcalendar -mozdevelop -moznocompose
-moznoirc -moznomail -moznoxft -postgres -xinerama" 0 kB
|
除了emerge 以外還有別的軟體可以完成類似查詢的工作。事實上,我們有一個特別
的套件叫做 equery。這是包含在 gentoolkit 的套件內。首先,安裝
gentoolkit:
原始碼 3.2: 安裝 gentoolkit |
# emerge gentoolkit
|
現在執行 equery 然後使用參數查看某個套件的 USE 關鍵字。舉例來說
gnumeric 套件:
原始碼 3.3: 使用 equery 查看使用的 USE 關鍵字 |
# equery uses gnumeric
[ Colour Code : set ]
[ Legend : (U) Col 1 - Current USE flags ]
[ : (I) Col 2 - Installed With USE flags ]
U I [ Found these USE variables in : app-office/gnumeric-1.2.0 ]
- - : Adds GNU Data Access (CORBA wrapper) support for gnumeric
- - : unknown
+ + python : Adds support/bindings for the Python language
+ + bonobo : Adds support for gnome-base/bonobo (Gnome CORBA interfaces)
|
3. Portage 功能
3.a. Portage 功能
Portage 有一些而外的功能讓你的 Gentoo 使用經驗更加美好。這些功能中許多都是依賴
特定軟體來加強效能,可靠性,安全...
你需要編輯 /etc/make.conf 包含各種功能關鍵字,以空白分隔的
FEATURES 變數來開啟或關閉特定 Portage 功能。在一些情況你也要安裝這個功能
需要的額外套件。
不是所有 Portage 支援的功能都列在這篇文件?請查閱 make.conf 手冊頁
來取得完整的列表。
原始碼 1.1: 查閱 make.conf 手冊頁 |
$ man make.conf
|
如果要找到預設啟動那些功能,執行 emerge --info 並在其中尋找 FEATURES 變數
或用 grep:
原始碼 1.2: 找出那些功能已經設定了 |
$ emerge --info | grep FEATURES
|
3.b. 分散編譯
使用 distcc
distcc 是一個讓您可以在多台,不一定同一類型的電腦經由網路分別編譯。
distcc 客戶端傳送給伺服器(執行 distccd)必要的資訊讓它可以幫客戶端
編譯原始碼的一部份。這會幫您加快編譯時間。
您可以在 Gentoo Distcc 文件中找到關於
distcc 更詳細的資訊(包括他如何在 Gentoo 上工作)。
安裝 distcc
Diskcc 提供一個圖形化的監視程式讓您監視您的電腦送出去的編譯工作。如果您使用
Gnome 的話,在 USE 設定中加入 'gnome'。然而,如果您不是使用 Gnome 但您
想使用它的話,您應該在 USE 設定中加入 'gtk'。
原始碼 2.1: 安裝 distcc |
# emerge distcc
|
啟動 Portage 的支援
在 /etc/make.conf 之中的 FEATURES 變數加入 distcc。然後依你
的喜好編輯 MAKEOPTS 變數。一個常見的法則是填入 "-jX",這裡的 X 是執行
distccd 的總 CPU 數加一(包括目前的電腦),但是填入其他數字你可能會有較好
的結果。
現在執行 distcc-config 然後輸入可使用的 distcc 伺服器。舉一個簡單的例子,
我們假設可用的 DistCC 伺服器是 192.168.1.102(目前的電腦),192.168.1.103 和
192.168.1.104(兩台遠端電腦):
原始碼 2.2: 設定 distcc 使用三台可用的 distcc 伺服器 |
# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"
|
當然,不要忘記啟動 distccd 伺服器程式:
原始碼 2.3: 啟動 distcc 伺服器程式 |
# rc-update add distccd default
# /etc/init.d/distccd start
|
3.c. 編譯快取
關於 ccache
ccache 是一個快速的編譯器快取。當您編譯程式時,他會立即快取結果,因此當
您重新編譯時,編譯的時間減少相當多。在一般的狀況可以加快 5 到 10 倍的編譯時間。
如果您對 ccache 的詳細內容有興趣,請瀏覽
ccache 首頁。
安裝 ccache
要安裝 ccache 的話,執行 emerge ccache:
原始碼 3.1: 安裝 ccache |
# emerge ccache
|
啟動 Portage 支援
開啟 /etc/make.conf 然後在 FEATURES 變數中加入 ccache。接著
新增一個叫 CCACHE_SIZE 的變數並設成 "2G":
原始碼 3.2: 編輯 /etc/make.conf 中的 CCACHE_SIZE |
CCACHE_SIZE="2G"
|
要檢查 ccache 是否在工作,您可以要求 ccache 提供你他的狀態。因為 Portage
使用不同的 ccache 家目錄,你也要設定 CCACHE_DIR 變數。
原始碼 3.3: 查看 ccache 狀態 |
# CCACHE_DIR="/var/tmp/ccache" ccache -s
|
Portage 預設的家目錄是 /var/tmp/ccache。如果你想要改變到別的目錄,
你可以設定 /etc/make.conf 之中的 CCACHE_DIR 變數。
然而,如果你執行 ccache,他預設會用 ${HOME}/.ccache,因此你
需要設定 CCACHE_DIR 變數,來取得 Portage 的 ccache 統計。
在非 Portage 的 C 程式編譯時使用 ccache
如果你想要在非 Portage 的 C 程式編譯時使用 ccache,在你的 PATH 變數中加入
/usr/lib/ccache/bin(在 /usr/bin 之前)。這可以藉由編輯
/etc/env.d/00basic 來完成,這是第一個定義 PATH 變數的檔案:
原始碼 3.4: 編輯 /etc/env.d/00basic |
PATH="/usr/lib/ccache/bin:/opt/bin"
|
3.d. 已編譯程式套件支援
建立預編程式套件
Portage 支援安裝預先編譯好的套件。雖然 Gentoo 本身不提供預編的套件(除了
GRP 以外),Portage 可以完全明白預編套件。
如果套件已經安裝好的話,你可以使用 quickpkg 來建立預編套件,否則使用
emerge 指令加上 --buildpkg 或 --buildpkgonly 參數。
如果你想要 Portage 把每一個你安裝的套件都建立預編套件,在 FEATURES 變數中加入
buildpkg。
可以從 catalyst 得到建立預編套件更多的支援。請閱讀 Catalyst 參考手冊 和
Catalyst 常見問題
取得更多資訊。
安裝預編套件
雖然 Gentoo 並不提供,你可以建立一個檔案庫來存放預編套件。如果你想要使用這個檔
案庫,你需要設定 PORTAGE_BINHOST 變數讓 Portage 知道他。例如說,如果預編套件在
ftp://buildhost/gentoo :
原始碼 4.1: 設定 /etc/make.conf 中的 PORTAGE_BINHOST |
PORTAGE_BINHOST="ftp://buildhost/gentoo"
|
當你想要安裝預編套件時,在 emerge 指令的 --usepkg 參數旁加上
--getbinpkg。前面的參數要求 emerge 在下載及編譯原始碼前先嘗試安裝預編套件,
而後者告訴 emerge 從先前定義的伺服器下載預編套件。
例如說,用預編套件安裝 gnumeric:
原始碼 4.2: 安裝 gnumeric 預編套件 |
# emerge --usepkg --getbinpkg gnumeric
|
關於 emerge 的預編套件選項可以在 emerge 手冊頁找到:
原始碼 4.3: 閱讀 emerge 手冊頁 |
$ man emerge
|
4. 起始程序(Initscripts)
4.a. 執行階段(Runlevels)
啟用您的系統
當您開啟您的系統,您將會看到很多文字跳過。如果您注意一點,您將會發現那些文字都是
一樣的。這些動作叫做固定式的 開機序列。
首先,您的開機程式將會載入您所定義到設定檔內的核心映像檔,並且將他放到記憶體內。
這是為了要告訴 CPU 該執行核心。當核心載入完畢開始執行後,它將會起始核心相關的
架構和程序然後開始 init 的程序。
這個步驟是為了確保所有的檔案系統(被定義在 /etc/fstab)有被載入並且
可以使用。然後將執行一些放在 /etc/init.d 的給個程序,將啟用所有您打
算開啟的服務。
最後,當所有的程序都執行後,init 將會啟用終端(在大多的例子裡,只是幾個
藏在 Alt-F1 下的虛擬終端,Alt-F2,等等。)包含著一個特別的程序
叫做 agetty。然後這個程序將會使用 login 讓您可以登入到這些終端內。
Init 程序
現在 init 不只是執行 /etc/init.d 裡面的程序。更多的是,他還
會依照 /etc/runlevels 來選擇要執行的程序。
首先,init 將執行所有 /etc/runlevels/boot 內的連接,這些連接
將會連到 /etc/init.d 裡面的程序。大部份來說,這些將會按照字母排列
分別起始,但是有些會因為相依性的關係而先執行其他的程序。
當 /etc/runlevels/boot 內的程序都被執行後,init 將繼續執行
/etc/runlevels/default 內的連接。在一次,這些將會按照字母排列分別起
始,但是有些會因為相依性的關係而先執行其他的程序。
Init 是如何執行的
當然 init 不能自己決定所有的選擇。他需要一個設定檔來告訴要有那些動作。這
個設定檔為 /etc/inittab。
如果您記得剛剛解釋過的開機序列,您將會記得 init 的第一個動作就是掛載所有
的檔案系統。這將會按照以下的方式定義在 /etc/inittab:
原始碼 1.1: /etc/inittab 的系統起始 |
si::sysinit:/sbin/rc sysinit
|
這行將告訴 init 一定要執行 /sbin/rc sysinit來起始系統。
/sbin/rc 的程序將掌管起始的動作,您也可以說 init 的工作其實
不多 -- 它只是指派起始系統的工作給另外一個程序。
第二,init 將執行 /etc/runlevels/boot 內所有的連接。將按照以
下定義:
原始碼 1.2: 繼續系統起始 |
rc::bootwait:/sbin/rc boot
|
rc 程序再一次的執行相關工作。但是這是是 rc (boot)將會去
執行 /etc/runlevels 的相關目錄。
現在 init 將檢察他的設定檔然後查看他應該執行那個階段。要決定這個,
它將會從 /etc/inittab 取以下這行:
原始碼 1.3: init預設(initdefault) |
id:3:initdefault:
|
在這個例子(大多數的 Gentoo 使用者也會使用),將會從第三個執行階段開始。
使用這個資訊,init 將會從 執行階段 3 開始:
原始碼 1.4: 定義執行階段 |
l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot
|
這行將定義第三階段,然後執行 rc 程序來選擇要啟用的服務(現在則是更改為
default)。這個 rc 後面的參數將會合 /etc/runlevels
內的子目錄一樣。
當 rc 完成的時候,init 將會決定應該要啟用那些虛擬終端和在各終端應
該執行什麼指令:
原始碼 1.5: 虛擬終端定義 |
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
|
什麼是執行階段(runlevel)?
您已經知道了 init 如何使用號碼來決定該啟用那個執行階段。一個
執行階段 將會代表著您的系統將執行那些程序(執行階段程序或是
起始程序(initscripts))。
在 Gentoo 內共有定義七個執行階段:三個內部執行階段,和四個使用者定義的執行階段。
內部的執行階段叫做 sysinit,shoutdown 和 reboot 就和他們的
名字一樣:
使用者定義的執行階段包含著 /etc/runlevels 的自目錄:
boot,default,nonetwork 和
single。boot 的執行階段將起始包含其他所有系統相關的服務
。剩下的三個執行階段則是依照不同的服務而類別:default 適用於日常運作
所需,nonetwork 適用於沒有網路連線的需求,和 single
則是在您需要整理系統時所用。
使用 Init Scripts
rc 的程序叫做 init scripts。每個在 /etc/init.d 的程序
都可以使用 start,stop,restart,pause,zap,
status,ineed,iuse,needsme,usesme 或是
broken 為參數。
要開始,停止,或是重新啟動一個服務(和所有相依的服務),您應該使用 start
,stop 和 restart:
原始碼 1.6: 啟用 Postfix |
# /etc/init.d/postfix start
|
注意:
只有 指定 的服務會被停止或是重開。其他相依的程式(那些使用這個服務
但是不需要他的)將不會被影響到。
|
如果您要停止一個服務,但是不是依賴著它的其他服務,您可以使用 pause:
原始碼 1.7: 停止 Postfix 但是繼續執行其他相依的服務 |
# /etc/init.d/postfix pause
|
如果您要查看某個服務的狀態(啟用,停止,暫停﹍)您可以使用 status:
原始碼 1.8: 關於 postfix 的狀態 |
# /etc/init.d/postfix status
|
如果狀態告訴您這個服務正在執行,但是您知道這是錯的,那您將可以使用 zap 將
狀態重設為 "停止":
原始碼 1.9: 重設 postfix 的狀態 |
# /etc/init.d/postfix zap
|
如果要查看某個服務的相依性有那些,您可以使用 iuse 或是 ineed。
您可以使用 ineed 來觀看服務的相關功能。iuse 則是查看服務是否有被
其他服務依賴著。
原始碼 1.10: 查詢 Postfix 依賴的服務 |
# /etc/init.d/postfix ineed
|
類似的,您可以查詢那些服務需要那些服務(needsme)或是(usesme):
原始碼 1.11: 需要用到 Postfix 的服務 |
# /etc/init.d/postfix needsme
|
最後您可以查看依賴著某個服務但是壞損的其他服務:
原始碼 1.12: 查詢 Postifx 需要但是損毀的相依性 |
# /etc/init.d/postfix broken
|
4.b. 使用 rc-update
什麼是 rc-update?
Gentoo 的 init 系統使用的是相依性列表來決定那個服務需要先啟用。這是一個複雜
的工作,所以我們不會讓我們的使用者手動完成這項工作。所以我們建立了相關的執行階段
工具和 init 工具方便管理。
使用 rc-update,您可以從執行階段新增或是移除 init 程序。rc-update
的工具將自動讓 depscan.sh 程序重新建立相依性資料。
新增或是移除服務
您已經在安裝 Gentoo 時將 init 程序加入過 "default" 的執行階段了。當時您應該對
"default" 沒有任何了解,但是您現在應該知道了它的意義。rc-update 程序需要
第二個參數來告訴它要執行的動作:add,del 或是 show。
要增加或是移除一個 init 程序,只需要在 rc-update 後面放入 add 或是
del 的參數,然後接著就是要加入的 init 程序的名字。舉例來說:
原始碼 2.1: 執行階段移除 Postfix |
# rc-update del postfix default
|
rc-update show 的指令將會0按照執行順序顯示出所有可能的 init 程序清單:
原始碼 2.2: 顯示 init 程序資料 |
# rc-update show
|
4.c. 設定服務
為什麼需要多餘的設定?
Init 程序可以是很複雜的。所以直接編輯 init 程序會讓使用者感到困難。但是要可以
正確的設定這些服務是極為重要的。舉例來說,您或許會想在啟動服務時加入某個參數。
第二個原因是為了要讓 init 程序可以更新原始設定檔以外的設定,而不會直接改到重要的
設定檔。
/etc/conf.d 目錄
Gentoo 提供一個簡單的方法設定相關服務:每個 init 程序都有一個可以設定的設定檔
放在 /etc/conf.d舉例來說, apache2 的 init 程序(叫做
/etc/init.d/apache2)的設定檔會放在
/etc/conf.d/apache2,這樣可以在啟動 Apache 2 伺服器時加數您需要的參
數:
原始碼 3.1: /etc/conf.d/apache2 的變數定義 |
APACHE2_OPTS="-D PHP4"
|
這種設定檔包含的變數(就和 /etc/make.conf 類似),是為了要讓服務的
設定更加簡易。它也以註解的方式提供著一些相關的資料和變數用法。
4.d. 編寫 Init 程序
我需要嗎?
不。Gentoo 提供了這些 init 程序,所以您不需要自己編寫一個。但是,如果您安裝了
非 Portage 提供的服務,那麼您就需要編寫一個類似 init 的程序。
如果不是針對 Gentoo 所設計的程序,請不要使用:Gentoo 的 init 程序和其他版本的
init 程序不相容!
規劃
以下為一個 init 程序的規劃。
原始碼 4.1: Basic layout of an init script |
#!/sbin/runscript
depend() {
}
start() {
}
stop() {
}
restart() {
}
|
任何 init 程序 都需要 start() 功能的定義。其他的則是非必需。
相依性
您總共有兩種相依性可以定義:use 和 need。就如我們之前提到的,
need 的相依性比 use 來的嚴厲。然後使用 virtual
來選擇所依賴的相依性。
virtual 是一個提供服務的相依性,但是並不是完全由這個服務提供。您的 init
程序可以依賴著系統記錄器,但是我們提供著許多系統記錄器(metalogd,syslog-ng,
sysklogd,﹍)當您無法 need 所有的(執行全部的系統記錄器並不合理)我們將
確定這些服務可以 提供 一個虛擬相依性。
現在讓我們來看看一個 postfix 服務所依賴的相依性。
原始碼 4.2: Postfix 的相依性 |
depend() {
need net
use logger dns
provide mta
}
|
如擬可見,postfix:
-
需要所有的(虛擬)net 相依性 (是由 /etc/init.d/net.eth0
所提供)
-
需要使用(虛擬) logger 相依性(是由
/etc/init.d/syslog-ng 提供)
-
需要使用(虛擬) dns 相依性(事由 /etc/init.d/named
提供)
-
提供(虛擬) mta 相依性(常用的郵件伺服器所需)
控制順序
在某些情況下您不需要一個服務,如果在系統可以提供的環境下(沒有相依的問題),但是
您想要在這個服務之前 befre(開始) (或是 after(之後) 使用另外一
個服務 然後 放到同一個執行階段(只有同執行階段的服務)。您可以使用
before 或是 after 設定來完成這些設定。
我們將查看 Portmap 的設定為範例:
原始碼 4.3: Portmap 服務的 depend() 功能 |
depend() {
need net
before inetd
before xinetd
}
|
您也可以使用 "*" 來選擇同一個執行階段內所有的服務,但是我們並不建議。
原始碼 4.4: 設定成為第一個同執行階段的 init 程序 |
depend() {
before *
}
|
符合標準的功能
depend() 之後,您將需要定義 start() 的功能。這個將包含著所有相關
啟動服務的指令。我們建議您使用 ebegin 和 eend 功能來通知使用者正在
發生什麼事:
原始碼 4.5: start() 功能範例 |
start() {
ebegin "Starting my_service"
start-stop-daemon --start --quiet --exec /path/to/my_service
eend $?
}
|
如果您需要更多的 start() 功能的範例,請查看您系統中放在
/etc/init.d 目錄裡面的 init 程序。關於 start-stop-daemon,
我們有提供著一個很棒的說明頁讓您查閱:
原始碼 4.6: 查詢更多關於start-stop-daemon 的說明頁 |
# man start-stop-daemon
|
其他您可以定義的功能為:stop() 和 restart()。您不一定要定義這些功
能!如果您使用 start-stop-daemon,我們 init 系統將會自動填入這些功能。
Gentoo 的 init script 語法是以 Bourne Again Shell (bash) 為基礎,所以你可以在你
的 init script 中自由使用和 bash 相容的架構。
加入自訂選項
如果您想要讓您的 init 程序支援更多我們已經提供的選項,您應該將這些選項加入到
opts 變數,然後建立一個功能將此功能的命名為 opt 變數內所定義的。舉例來說,
要提供一個 restartdely 的功能:
原始碼 4.7: 提供 restartdely 選項 |
opts="${opts} restartdelay"
restartdelay() {
stop
sleep 3
start
}
|
系統設定變數
您不需要任何動作來提供一個 /etc/conf.d 的設定檔:如果您的 init 程序
執行了,以下將會自動的載入(例:可用的變數):
- /etc/conf.d/<您的 init 程序>
- /etc/conf.d/basic
- /etc/rc.conf
另外,如果您的 init 程序需要一個虛擬的相依性(如 net),那麼相關的檔案將
會也會被載入(如 /etc/conf.d/net)。
4.e. 更改執行階段(RunLevel)的態度
誰會受益?
很多使用手提電腦的使用者將會明白這個狀況:在家裡您需要啟動 net.eth0,在外
面因為沒有網路,所以您不想啟動 net.eth0。因此您可以依照您的需求而改變
Gentoo 的執行階段。
舉例來說,您可以建立第二個 "default" 執行階段來讓您執行其他的起始程序(Init
Scripts)。然後在開機時選擇使用預設的執行階段。
使用 softlevel
首先,建立第二個 "default" 執行階段。我們將建立 offline 執行階段為
這次的範例:
原始碼 5.1: 建立一個執行階段目錄 |
# mkdir /etc/runlevels/offline
|
然後加入相關的起始程序到剛建立完成的目錄內。舉例來說,如果除了 net.eth0
以外,您想要將其他 default 執行階段的內容都複製到新的執行階段:
原始碼 5.2: 加入相關起始程序 |
# cd /etc/runlevels/default
# for service in *; do rc-update add $service offline; done
# rc-update del net.eth0 offline
# rc-update show offline
acpid | offline
domainname | offline
local | offline
net.eth0 |
|
現在編輯您的開機程式設定檔然後加入一個新的 offline 執行階段。
舉例來說,在 /boot/grub/grub.conf:
原始碼 5.3: 加入 offline 執行階段 |
title Gentoo Linux Offline Usage
root (hd0,0)
kernel hd(0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline
|
噹啷!完成了。當您重新啟動系統然後選擇剛加入的選項, offline 將會被執行而
不是本來的 default。
使用 bootlevel
使用 bootlevel 和 softlevel 的方法完全類似。唯一不一樣的就是您需要
定義另外一個 "boot" 執行階段而不是第二個 "default" 執行階段。
5. 環境變數
5.a. 系統變數?
這是什麼
系統變數是一個有名稱的物件,包含一個或多個程式要用的資訊。許多使用者(特別是 Linux
新手)覺得這有一些古怪而且難以管理。這想法有一些錯誤:使用者可以用系統變數輕鬆的
改變一個或多個程式設定。
重要的範例
下面的表格顯示許多 Linux 使用的變數以及它們的用途。範例在表格後面展示。
| 變數 |
說明 |
| PATH |
這個變數包含用冒號分隔的目錄列表,讓系統尋找可執行檔。如果您輸入一個可執行檔
(例如 ls,rc-update 或 emerge)但是這個檔案不在列表中的
目錄,您的系統不會執行它(除非您輸入完整的路徑,如 /bin/ls)。
|
| ROOTPATH |
這個變數和 PATH 有相同功能,但是這裡面包含的目錄是根使用者數入指令時
才會尋找。
|
| LDPATH |
這個變數包含以冒號分隔的目錄列表,讓動態連結檔在裡面搜尋函式庫。
|
| MANPATH |
這個變數包含以冒號分隔的目錄列表,讓 man 指令搜尋手冊頁。
|
| INFODIR |
這個變數包含以冒號分隔的目錄列表,讓 info 搜尋資訊頁。
|
| PAGER |
這個變數包含顯示檔案內容的程式路徑(例如 less 或 more)。
|
| EDITOR |
這個變數包含編輯的程式路徑(例如 nano 或 vi)。
|
| KDEDIRS |
這個變數包含以冒號分隔的目錄列表,設定 KDE 的主要路徑。
|
| CLASSPATH |
這個變數包含以冒號分隔的目錄列表,設定 Java 程式的路徑。
|
| CONFIG_PROTECT |
這個變數包含以空白分隔的目錄列表,這些目錄在 Portage 更新時需要被保護。
|
| CONFIG_PROTECT_MASK |
這個變數包含以空白分隔的目錄列表,這些目錄更新 Portage 時不要被保護。
|
底下是所有的變數的設定範例:
原始碼 1.1: Example definitions |
PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:."
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
/usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
/usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"
|
5.b. 定義全域變數
/etc/env.d 目錄
為了要集中管理這些變數的設定,Gentoo 使用 /etc/env.d 目錄。在目錄中
您會發現許多檔案,例如 00basic,05gcc 等。這裡面包含檔
案名稱中所提到的程式需要用的變數。
例如,當您安裝 gcc 後,ebulid 會建立一個叫做 05gcc 的檔案,
包含下面的變數設定:
原始碼 2.1: /etc/env.d/05gcc |
PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
|
其他的 Linux 套件會告訴您在 /etc/profile 或其他地方新增這些變數。
Gentoo 則讓您很容易(對 Portage 也是)去管理這些變數而不用注意其他設定系統變數的
檔案。
舉例來說,當 gcc 更新了之後,/etc/env.d/05gcc 也會同時被更新
而使用者不必做任何事。
這不僅對 Portage 有好處,對使用者也是。您或許偶爾會被要求設定一些系統變數。拿
http_proxy 做例子。您不用弄亂 /etc/profile,只要建立一個
檔案( /etc/env.d/99local )然後在裡面輸入設定:
原始碼 2.2: /etc/env.d/99local |
http_proxy="proxy.server.com:8080"
|
藉著將您自己的變數設定放到這個檔案中,您可以很快找到哪些變數是您自己設定的。
env-update 指令稿
在 /etc/env.d 中的數個檔案同時定義了 PATH 變數。這並沒有錯:
當您執行 env-update,他會把數個設定同時加到系統設定中,因此讓軟體套件(或
使用者)加入他們自己的設定而不會干擾已經存在的設定。
env-update 指令稿將會以 /etc/env.d 中的檔案名稱以字母順序依
序加入系統設定中。檔案名稱開頭必需要是兩位數的數字。
原始碼 2.3: env-update 的新增順序 |
00basic 99kde-env 99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"
|
變數的連結不一定會發生,只有這些變數有:KDEDIRS,PATH,
CLASSPATH,LDPATH,MANPATH,INFODIR,INFOPATH,
ROOTPATH,CONFIG_PROTECT,CONFIG_PROTECT_MASK,
PRELINK_PATH 和 PRELINK_PATH_MASK。其他的變數使用最後定義的值
(依 /etc/env.d 中檔案的字典順序)。
當您執行 env-update,他會建立所有的系統變數然後寫入
/etc/profile.env 中(這檔案被 /etc/profile 使用)。他也
會從 LDPATH 讀取資訊然後建立 /etc/ld.so.conf,之後,他會執行
ldconfig 重新建立動態連結使用的 /etc/ld.so.cache 檔案。
如果您希望 env-update 在您執行它後立刻作用,執行下面的指令來更新。自行安
裝 Gentoo 的使用者可能會記得安裝過程中執行過:
原始碼 2.4: 更新環境變數 |
# env-update && source /etc/profile
|
注意:
上面的指令只更新你目前終端機,新啟動 consoles,以其他的孩子的環境變數。
因此,如果你在 X11,你需要在你每一個新開啟的終端機輸入 source /etc/profile,
或是重新啟動 X,讓所有終端機使用新的環境變數。如果你使用圖形化的登入管理員,你
需要先變成 root,然後輸入 /etc/init.d/xdm restart。如果不是的話,你要先離
開再進入 X,讓所有他生成的孩子都使用新的變數。
|
5.c. 定義局部變數
使用者自行設定
您或許不想要定義全域變數。例如您可能要加入 /home/my_user/bin 以及
目前的工作目錄(你所在的目錄)到 PATH 變數中,但是您不想要其他使用者在他們
的 PATH 也有這個設定。如果您想要定義區域變數,您可以加到
~/.bashrc 或 ~/.bash_profile:
原始碼 3.1: 在 ~/.bashrc 中額外增加局部 PATH 設定 |
PATH="${PATH}:/home/my_user/bin:"
|
當您重新登入後,您的 PATH 變數就會更新了。
有期限的設定
有的時候需要更嚴格的定義。例如您可能需要從您剛剛建立的暫時目錄執行程式,但您不想
輸入完整的路徑或是編輯 ~/.bashrc 只為了在這一小段時間使用。
在這種情況下,您只要使用 export 指令設定 PATH 變數。只要您不登出,
PATH 將會使用目前暫時的設定。
原始碼 3.2: 設定有期限的變數 |
# export PATH="${PATH}:/home/my_user/tmp/usr/bin"
|
C. 使用Portage
1. 檔案和資料夾
1.a. Portage 檔案
設定指令
Portage 含有一個預設的設定檔,放在 /etc/make.globals。當你打開來看
,你將注意到所有的 Portage 設定配置是以變數的形式處理。後面將會敘述哪些變數
Portage 會聽從,還有他們各代表什麼意思。
因為許多設定指令在不同的電腦架構之間並不相同,在你的 profile 中,Portage 也有
一個預設的設定檔案:make.defaults。關於 profiles
和 /etc/make.profile 資料夾,待會我們將解釋更多。
如果你打算變更設定變數,不要修改 /etc/make.globals 或
make.defaults。請使用優先權較上面檔案高的
/etc/make.conf。你會發現有個 /etc/make.conf.example。
正如他名字,這不過是個樣本 - Portage 並不會讀取這個檔案。
你也可以用環境變數來定義 Portage 設定變數,但是我們並不建議這麼做。
Profile 特定資訊
我們與 /etc/make.profile 資料夾已有過邂逅。但這並不是一個真正的資料夾,
只是一個連到 /usr/portage/profiles 其中之一的符號連結。你也可以在別的
地方建立你自己的 profiles 然後指向他。該符號連結所指向的 profile,將是你的系統所依賴的。
一個 profile 包含著給 Portage 的特定電腦架構資訊,像是一個與該 profile 相符合系統的
套件列表,一個不運作(或被 mask 掉)、給該 profile 用的套件列表等等。
使用者專用設定
當你想要推翻 Portage 中,與軟體安裝有關的特性,你可以開始編輯 /etc/portage
之中的檔案。強烈建議您使用 /etc/portage 中的檔案,千萬不要
以環境變數覆蓋該特性。
你可以建立以下檔案在 /etc/portage 之中:
-
package.mask 列出你不想讓 Portage 安裝的套件。
-
package.unmask 列出你想讓 Portage 能夠安裝的套件,即使 Gentoo 開發
者強烈建議你不要 emerge 他們。
-
package.keywords 列出你想讓 Portage 能夠安裝的套件,即使該套件(還)
沒有被認為適合你的系統或電腦架構。
-
package.use 列出你想給特定套件使用的 USE 旗標,而不必讓整個系統使
用該 USE 旗標。
可以在 Portage man page 找到更多關於 /etc/portage 資料夾的資訊,和可建
立的檔案的完整列表。
原始碼 1.1: 閱讀 Portage man page |
$ man portage
|
改變 Portage 檔案 & 資料夾路徑
之前提到的設定檔並不能存在別的地方 - Portage 總是會到這些地方找這些設定檔。然而
因為各種目的:建立資料夾、存放原始碼、Portage 樹狀目錄路徑等等,Portage 還有許多其
他的路徑設定。
這些目的都有個眾所皆知的預設存放路徑,但可以透過編輯/etc/make.conf
來改成你自己的品味。這章剩下的部分將解釋哪些特定目的路定 Portage 會去使用,以及
如何在你的檔案系統中變更他們。
然而這份文件並不想被當做參考資料來使用。如果你需要百分之百範圍的解說,請查閱
Portage 和 make.conf 的 man page:
原始碼 1.2: 閱讀 Portage 和 make.conf 的 man pages |
$ man portage
$ man make.conf
|
1.b. 檔案儲存
Portage 樹狀目錄
Portage 樹狀目錄預設路徑是 /usr/portage。這是由 PORTDIR 變數所定義。
當你把 Portage 樹狀目錄存在別的地方(透過變更此變數),不要忘記跟著改變
/etc/make.profile 符號連結。
如果你修改了 PORTDIR 變數,你可能也想改變下列的變數,因為他們不會注意到 PORTDIR
改變。這是由於 Portage 處理變數的方式:PKGDIR、DISTDIR、RPMDIR。
預先編譯好的二進位檔
即使 Portage 預設不使用預先編譯好的二進位檔,但 Portage 對他們有廣泛的支援。
當你要求 Portage 以預先編譯好套件工作時,他將到 /usr/portage/packages
尋找他們。這個路徑由 PKGDIR 變數定義。
原始碼
應用程式原始碼預設儲存在 /usr/portage/distfiles。這個路徑由 DISTDIR 變數
定義。
RPM 檔案
即使 Portage 不能使用 RPM 檔案,但可以使用 ebuild 指令產生他們。
(請看 Ebuild 程式)。
Portage 預設存放 RPM 檔案的地方在 /usr/portage/rpm ,他是以 RPMDIR 變
數來定義。
Portage 資料庫
Portage 在 /var/db/pkg 中儲存系統的狀態(那些套件已經安裝,什麼檔案
屬於什麼套件,...)。不要手動修改裏面的檔案!這可能會破壞 Portage 對系統
的了解。
Portage 快取
Portage 的快取(包括修改時間,virtuals,相依資訊,...) 是儲存在
/var/cache/edb。這個位置只是快取而已:如果你當時並沒有在執行任何和
Portage 有關的程式,你可以把他清除。
1.c. 編譯軟體
Portage 暫存檔案
Portage 的暫存檔案預設上放在 /var/tmp。這定義於 PORTAGE_TMPDIR 變數。
如果你改變了 PORTAGE_TMPDIR 變數,你可能也想改變下列的變數,因為他們不會注意到
PORTAGE_TMPDIR 改變。這是由於 Portage 處理變數的方式:BUILD_PREFIX。
編譯資料夾
Portage 在 /var/tmp/portage 裡面建立專用的編譯資料夾,讓各個套件
在裡面 emerge。這個路徑由 BUILD_PREFIX 變數定義。
Live 檔案系統路徑
預設上,Portage 安裝所有檔案到當前的檔案系統 (/),但你可以設定 ROOT
環境變數來改變他。當你想要建立一個新的編譯鏡像,這是很有用的。
1.d. 日誌特性
Ebuild 日誌
Portage 可以建立各個 ebuild 的日誌,但只有當 PORT_LOGDIR 變數已設置到一個 Portage
可寫入的路徑(portage 使用者)。預設上,這個變數並無設定。
2. 經由變數來設定
2.a. Portage 設定
如前所述,我們可以透過許多變數來調整 Portage 的行為,這些變數定義在
/etc/make.conf。請參考 make.conf 的 man
page,裡面有更詳細而完整的資訊。
原始碼 1.1: 參考 make.conf 的 man page |
$ man make.conf
|
2.b. 編譯相關的選項
設定和編譯器的選項
當 Portage 編譯程式時,它會將下列變數的數值傳給編譯器和 configure script:
-
CFLAGS 和 CXXFLAGS 設定編譯器編譯 C 和 C++ 程式所使用的 flags。
-
CHOST 設定程式的 configure script 所需要的主機資訊。
-
MAKEOPTS 會傳給 make 指令,通常用來設定編譯時平行處理的程度。更多關於
make 的參數可以在 make 的 man page 中找到。
USE 這個變數也會在 configure
和編譯階段用到,但我們已經在前面的章節講述的非常清楚了。
Merge 選項
Portage
在安裝(merge)某個軟體的新版本之後,會將舊版本相關的檔案從您的系統中移除。在進行這個動作之前,Portage
會給使用者 5 秒鐘的緩衝時間,這個數值是由變數 CLEAN_DELAY 來設定。
2.c. 設定檔的防護
Portage 保護的目錄位置
Portage 會將軟體新版本提供的檔案覆寫到系統上,唯一的例外是存放在protected
位置的檔案。這些受保護的位置定義在 CONFIG_PROTECT
變數下,通常是設定檔的目錄位置。要設定多個目錄位置時,在目錄間用空白(space)分開。
當一個需要被寫入系統的檔案存放在受保護的位置時,Portage
會用別的檔名將檔案寫入系統,然後告知使用者該設定檔新版本的存在。
您可以利用 emerge --info 取得目前 CONFIG_PROTECT 的設定:
原始碼 3.1: 獲得 CONFIG_PROTECT 的設定 |
$ emerge --info | grep 'CONFIG_PROTECT='
|
更多關於 Portage 設定檔防護的資訊可以從 emerge 獲得:
原始碼 3.2: 得到更多關於設定檔防護的資訊 |
$ emerge --help config
|
排除特定目錄
您可以使用 CONFIG_PROTECT_MASK 變數來 '不保護' 受保護位置下的特定子目錄。
2.d. 下載選項
Server 位置
當您的系統上沒有所需要的資訊或是資料時,Portage
會從網路上抓取,而取得這些資訊和資料的 server 位置定義在下列變數內:
-
GENTOO_MIRRORS 設定存放有原始碼(distfiles)的 server 位置。
-
PORTAGE_BINHOST 設定可提供您系統預先編譯套件(prebuilt packages)的 server
位置。
第三個設定是用來更新 Portage tree 的 rsync server 位置:
-
SYNC 設定 Portage 用來取得 Portage tree 的 server。
GENTOO_MIRRORS 和 SYNC 變數可以用 mirrorselect 程式來自動設定。您需要先
emerge mirrorselect。請參考 mirrorselect 的線上輔助來獲知更多資訊:
原始碼 4.1: 更多關於 mirrorselect 的資訊 |
# mirrorselect --help
|
如果您的環境需要您使用 proxy server,您可以用 HTTP_PROXY、FTP_PROXY 和
RSYNC_PROXY 這些變數來指定 proxy server。
抓取指令
當 Portage 需要抓取原始碼時,預設是使用 wget,您可以用 FETCHCOMMAND
變數來更改。
Portage 能夠繼續部份下載的原始碼,而不用重新抓取。預設用來執行這項工作的程式是
wget,但是您可以用 RESUMECOMMAND 變數來改變。
請確認您的 FETCHCOMMAND 和 RESUMECOMMAND
將原始碼存到正確的位置。在這些變數內,您應該分別用 \${URI} 和 \${DISTDIR}
來指到原始碼和 distfiles 的存放位置。
您也可以針對不同的傳輸協定,設定所使用的指令,相關的變數有
FETCHCOMMAND_HTTP、FETCHCOMMAND_FTP、RESUMECOMMAND_HTTP、RESUMECOMMAND_FTP
等等。
Rsync 設定
您無法更動 Portage 用來更新 Portage tree 所使用的 rsync
指令,但是您可以設定一些與 rsync 指令相關的變數:
-
RSYNC_EXCLUDEFROM 指到一個檔案,檔案內列舉 rsync
在更新過程中應該略過的套件和類別。
-
RSYNC_RETRIES 設定 rsync 嘗試連到 mirror 的次數,mirror 由 SYNC
變數指定。預設值是 3。
-
RSYNC_TIMEOUT 設定 rsync 連線因為閒置而被視為 timed-out
的時間(單位為秒)。這個變數預設值是 180,但是使用撥接的使用者可以設成 300
或更長。
2.e. Gentoo 設定
Branch 選擇
您可以用 ACCEPT_KEYWORDS 變數改變預選支系(default
branch),預設值是您的系統架構下的 stable branch。更多關於 Gentoo branches
的資訊會在下一章說明。
Portage Features
您可以用 FEATURES 變數來啟用某個 Portage feature。Portage Features
在前面的章節,如 Portage
Features,已經討論過。
2.f. Portage 行為
資源管理
透過 PORTAGE_NICENESS 變數,您可以增加或降低 Portage 執行時的 nice
值。PORTAGE_NICENESS 所設定的數值會被 加到 到目前的 nice 值上。
更多關於 nice 值的資訊,請參考 nice 的 man page:
原始碼 6.1: 更多關於 nice 的資訊 |
$ man nice
|
輸出行為
NOCOLOR,預設為 "false",設定 Portage 是否該取消彩色輸出。
3. 混用不同分支的軟體
3.a. 選擇一個分支
穩定分支
變數 ACCEPT_KEYWORDS 定義您的系統使用的軟體分支,預設是軟體在您系統架構下的穩定分支,例如 x86。
我們建議您只使用穩定分支(the stable
branch)。但是,如果您不是很在意穩定性的問題,而且您願意幫助 Gentoo
偵測臭蟲,回報給 http://bugs.gentoo.org,請您繼續閱讀這份文件。
測試分支
如果您想要使用最新的軟體,您可以考慮選用測試分支(the testing branch)。要讓
Portage 使用測試分支,在您的系統架構前加上 ~。
測試分支就如同他所說的 - 測試。如果一個套件在測試中,這代表發展者覺得他
可以運作,但是還沒有詳細的測試。你可以成為第一個發現錯誤的人,在這種狀況你可以
回報錯誤讓發展者知道
要小心的是,你可能會捧到一些不穩定的問題,不完美的套件管理(例如錯誤/遺失相依性)
,過於頻繁的更新(導致要花很多時間編譯)或毀損的套件。如過你不清楚 Gentoo 如何運
作及如何去修復,我們建議你停留在穩定而且測試過的分枝。
舉例來說,要選擇 x86 架構下的測試分支,編輯
/etc/make.conf,並做如下設定:
原始碼 1.1: 設定 ACCEPT_KEYWORDS 變數 |
ACCEPT_KEYWORDS="~x86"
|
如果您現在要更新您的系統了,您會發現 一大堆
套件都需要升級。必須提醒您的是:當您用測試分支更新完您的系統之後,沒有辦法可以
輕易地將系統改回使用官方建議的穩定分支(當然,使用備份例外)。
3.b. 混合使用穩定和測試分支
檔案 package.keywords
您可以要求 Portage 針對特定的套件使用測試分支,而系統其他所有的套件仍使用穩定分
支。如果您想要這樣的功能,將您希望使用測試分支的套件類別和名稱加到檔案
/etc/portage/package.keywords 裡面。例如,要使用 gnumeric
的測試分支:
原始碼 2.1: /etc/portage/package.keywords 內 gnumeric 的設定,完整版 |
app-office/gnumeric ~x86
|
測試特定版本
如果您想要使用軟體在測試分支內某個特定的版本,但是您不希望 Portage
在後續的軟體更新上繼續使用測試分支,您可以在檔案 package.keywords
內加入版本資訊。在這種情況下,您 一定要 使用 = 運算子,您也可以使用
<=, <, > 或是 >= 運算子,鍵入一個版本範圍。
在任何情況下,如果您要加入版本資訊,您 一定要
使用運算子。如果您不想加入版本資訊,您 不可以 使用運算子。
在下面的例子中,我們要求 Portage 接受 gnumeric-1.2.13:
原始碼 2.2: 使用特定 gnumeric 版本 |
=app-office/gnumeric-1.2.13 ~x86
|
3.c. 使用被封鎖的套件
檔案 package.unmask
Gentoo 發展者不支援這些檔案的使用。請在練習時小心使用。和
package.unmask 及 package.mask 相關的要求並不會回應。
當一個套件被 Gentoo 開發者封鎖時,在檔案 package.mask
內會陳述套件被封鎖的理由(預設放在
/usr/portage/profiles),如果您仍然想要使用這個套件,將紀錄該套件
的那行文字,原封不動 地加到檔案
/etc/portage/package.unmask 內。
舉例來說,如果 =net-mail/hotwayd-0.8 被封鎖了,您可以在
package.unmask 內加入完全相同的文字,而將其解封鎖:
原始碼 3.1: /etc/portage/package.unmask |
=net-mail/hotwayd-0.8
|
檔案 package.mask
當您不希望 Portage
將某個套件或是套件的某特定版本列入考量範圍,您可以自己將該套件封鎖起來,這只需
要在檔案 /etc/portage/package.mask 中加入相對應的紀錄。
例如,如果您不希望 Portage 安裝比 gentoo-sources-2.6.8.1 更新版的
kernel sources,您可以將下列一行文字加入 package.mask:
原始碼 3.2: /etc/portage/package.mask 範例 |
>sys-kernel/gentoo-sources-2.6.8.1
|
4. 附加的Portage工具
4.a. etc-update
etc-update 是一個幫助合併 ._cfg0000_<名稱> 檔案的工具
。他提供互動式的合併設定,也可以自動處理明顯的改變。
._cfg0000_<名稱> 檔案是由 Portage 在他想要把檔案複寫到被
CONFIG_PROTECT 變數保護的目錄時產生的。
執行 etc-update 相當的直觀:
原始碼 1.1: 執行 etc-update |
# etc-update
|
在合併明顯的改變後,你會看到需要更新的受保護檔案列表。在底下有兩個選項:
原始碼 1.2: etc-update 選項 |
Please select a file to edit by entering the corresponding number.
(-1 to exit) (-3 to auto merge all remaining files)
(-5 to auto-merge AND not use 'mv -i'):
|
如果你輸入 -1,etc-update 會離開不做任何改變。輸入 -3 或
-5 的話,所有列在上面的設定檔都會用新的覆蓋。因此先選擇不要自動更
新的設定檔相當重要。這是很簡單的一件事情,只要輸入列在設定檔左邊的號碼就好。
我們用 /etc/pear.conf 設定檔當作範例:
原始碼 1.3: 更新特定設定檔 |
Beginning of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
End of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
1) Replace original with update
2) Delete update, keeping original as is
3) Interactively merge original with update
4) Show differences again
|
你現在可以看到新舊設定檔間的不同處。如果你相信更新過的設定檔可以正確無誤的使用
,輸入 1。如果你認為更新檔案沒有必要,或沒有提供任何新或有用的資訊,輸入
2。如果你想要互動的更新目前的設定檔,按 3。
在這裡更深入的說明互動是並沒有意義。為了完整的理由,我們會列出在你互動合併兩個
檔案時可以用的指令。你會看到兩行(原來的,以及新建議的)和你可以輸入下列指令的提
示符號:
原始碼 1.4: 互動合併時可用的指令 |
ed: 在編輯器中編輯兩種版本,各個版本前加上不同標頭。
eb: 在編輯器中編輯兩種版本。
el: 編輯左邊的版本然後使用。
er: 編輯右邊的版本然後使用。
e: 編輯新的版本。
l: 使用左邊的版本。
r: 使用右邊的版本。
s: 簡潔的包含共同部份。
v: 詳細的包含共同部份。
q: Quit.
|
當你更新好這重要的設定檔,你以自動更新所有其他的設定檔。如果沒有其他需要更新的
檔案,etc-update 會自動離開。
4.b. dispatch-conf
使用 dispatch-conf 你可以合併更新到你的更新當同時監看所有的改變。
dispatch-conf 以 patch 檔案或是使用 RCS 修訂版系統來儲存設定檔間的不同處。
就像 etc-update,你可以保持原本的設定檔,使用新的設定檔,編輯目前設定檔
或互動合併改變。然而 dispatch-conf 也有一些很棒的功能。
-
自動合併只有註解更新的檔案。
-
自動合併只有空白的地方修改的檔案。
確定你先編輯過 /etc/dispatch-conf.conf 然後建立 archive-dir 變數設
定的目錄。
查看 dispatch-conf 手冊頁取得更多資訊:
原始碼 2.1: 閱讀 dispatch-conf 手冊頁 |
$ man dispatch-conf
|
4.c. quickpkg
使用 quickpkg 你可以建立已經安裝在你系統上軟體的套件檔。這檔案可以當作預
先編好的套件。執行 quickpkg 相當直觀:只要加入你想製作的套件名。
例如說,打包 curl,arts 和 procps:
原始碼 3.1: quickpkg 使用範例 |
# quickpkg curl arts procps
|
預先編譯好的套件會放在 $PKGDIR/All
(預設是 /usr/portage/packages/All)。到這些套件的符號連結在
$PKGDIR/<category>。
5. 愉悅的使用官方的Portage Tree
5.a. 使用 Portage 樹子集合
排除套件/類別
你可以選擇只更新某些類別/套件並且忽略其他類別/套件。我們讓 emerge --sync
在執行 rsync 時排除類別/套件來達成這個功能。
你需要在 /etc/make.conf 檔案中的 RSYNC_EXCLUDEFROM 變數加入
檔案,檔案中包含你想要排除的套件名稱樣式。
原始碼 1.1: 在 /etc/make.conf 定義排除檔案 |
RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes
|
原始碼 1.2: 在 /etc/portage/rsync_excludes 設定排除所有的遊戲 |
games-*/*
|
然而要注意的是這可能導致相依性問題,因為套件可能相依被排除的套件。
5.b. 加入非官方套件
定義 Portage Overlay 目錄
你可以要求 Portage 使用非官方,但是以透過 Portage 樹使用的 ebuild。建立一個新
目錄(例如說 /usr/local/portage)來存放其他人提供的 ebuild。使用和官
方 Portage 樹相同的目錄架構!
然後在 /etc/make.conf 中定義 PORTDIR_OVERLAY 指向你使用的目錄。現
在當你使用 Portage 時,他也會將這些 ebuild 納入考慮,而且下次你執行
emerge --sync 時不會移除/覆蓋這些 ebuild。
使用多個 Overlay
對於開發多個 overlay 的重度使用者,在更新 Portage tree 前測試或是使用多個來源的
非官方 ebuild,app-portage/gentoolkit-dev 套件提供你 gensync,
幫助你保持 overlay 在最新的狀態。
你可以用 gensync 一次更新所有 Overlay,或更新其中幾個。每個 Overlay 要在
/etc/gensync/ 目錄中放一個 .syncsource 檔案,包含
Overlay 位置,名稱,ID 等等。
假設你有兩個叫作 java (發展中的 java ebuild) 以及 entapps
(你為工作開發的軟體),你可以像底下範例更新 overlay:
原始碼 2.1: 使用 gensync 更新一些 overlay |
# gensync java entapps
|
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:
原始碼 3.1: 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 抓取原始碼, 請執行:
原始碼 2.1: 抓取原始碼 |
# ebuild path/to/ebuild fetch
|
如果 ebuild 的 md5sum 不符合列在 Manifest 檔案裡面的那份,
或是下載的原始碼不符合列在 files/digest-<package> 檔案中
的那些 checksum,你將收到像是這樣的錯誤訊息:
原始碼 2.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>。
原始碼 2.3: 重新建立 Manifest and digest |
# ebuild path/to/ebuild digest
|
解開原始碼包裹
想解開 /var/tmp/portage(或你在 /etc/make.conf
指定的其他目錄路徑)中的原始碼檔案, 可以使用 ebuild 的 unpack 功能:
原始碼 2.4: 解開原始碼包裹 |
# ebuild path/to/ebuild unpack
|
這將執行 ebuild 的 src_unpack() 函式(如果沒有定義 src_unpack() 函式,預設會單純
解壓縮)。在這個步驟也會套用所有必須的修補檔。
編譯原始碼
在 merge 程序中,下個步驟就是編譯原始碼。ebuild 的 compile 功能是去執行
ebuild 檔案中的 src_compile() 函式。如果有需要,這也包含著 configure 步驟。
原始碼 2.5: 編譯原始碼 |
# ebuild path/to/ebuild compile
|
如果你想改變編譯指令,建議您編輯 ebuild 檔案中的 src_compile() 函式。然而,你也可
以讓 Portage 以為 ebuild 程式已經完成編譯步驟了。自己執行所有必須的命令然後在
工作目錄建立一個叫做 .compiled 的空檔案。
原始碼 2.6: 通知 Portage 編譯工作完成了 |
# touch .compiled
|
安裝暫存路徑中的檔案
下個步驟 Portage 將會安裝暫存目錄中的所有必要檔案。這個目錄將會包含所有要被
merge 到 Live 檔案系統的檔案。你可以跑 ebuild 的 install 功能來完成
這個動作,他會執行 ebuild 檔案中的 src_install() 函式:
原始碼 2.7: 安裝檔案 |
# ebuild path/to/ebuild install
|
Merge 檔案到 Live 檔案系統
最後一個步驟是把所有檔案 merge 到 Live 檔案系統和登記他們到 Portage 後端。
ebuild 將這個步驟稱做 "qmerge",而且包含下列步驟:
- 若有指定,將會執行 pkg_preinst() 函式
- 複製所有檔案到 Live 檔案系統
- 登記檔案到 Portage 後端
- 若有指定,將會執行 pkg_postinst() 函式
執行 ebuild 的 qmerge 功能以達成這些步驟:
原始碼 2.8: Merge 檔案到 Live 檔案系統 |
# ebuild path/to/ebuild qmerge
|
清除暫存目錄
最後,你可以使用 ebuild 的 clean 功能清除暫存資料夾:
原始碼 2.9: 清除暫存目錄 |
# ebuild path/to/ebuild clean
|
6.c. 額外的 ebuild 特性
執行所有 Merge 相關命令
使用 ebuild 的 merge 功能,你可以一次執行 fetch、unpack、compile、install、qmerge 命令:
原始碼 3.1: 安裝軟體 |
# ebuild path/to/ebuild merge
|
執行設定動作
某些程式包含對你系統更進一步設定的指令。這些指令可以與人互動,也因此不會自動執行。
使用 ebuild 的 config 功能來執行列在 ebuild 檔案裡(非必要)config() 函式中
的設定步驟:
原始碼 3.2: 設定套件 |
# ebuild path/to/ebuild config
|
建立一個 (RPM) 套件
你可以叫 Portage 由 ebuild 檔案建立一個二進位的套件,即使是 RPM 檔案。使用
ebuild 的 package 或 rpm 功能去建立這些檔案。然而這兩個功能有些不同:
-
package 功能與 merge 功能非常相像,在建立套件之前,會執行所有必備的動作
(fetch、unpack、compile、install)
-
rpm 功能會把執行 ebuild 的 install 功能之後所建立的檔案
包成 RPM 套件。
原始碼 3.3: 建立套件 |
# ebuild path/to/ebuild package
# ebuild path/to/ebuild rpm
|
然而用此方式建立的 RPM 檔案並不包含 ebuild 的相依性相關訊息。
6.d. 更多資訊
要更多關於 Portage、ebuild 程式和 ebuild 檔案的資訊,請查閱下列 man page:
原始碼 4.1: Man pages |
$ man portage
$ man emerge
$ man ebuild
$ man 5 ebuild
|
你也可以在 開發者手冊 找到更多有關開發的資訊
D. Gentoo 網路設定
1. 新手上路
1.a. Getting started
注意:
這篇文件假設你已成功的設定核心,和它的網路設備模組並且知道介面名稱.
我們並且假設你現在在設定eth0,但是也可以是eth1,wlan0,或其他.
|
注意:
這篇文章適用 baselayout-1.11.11 或更新的版本.
|
要開始設定你的網路卡,你需要告訴Gentoo RC系統相關的資訊.
做一個符號連結從 net.lo
到 net.eth0 在 /etc/init.d 目錄以完成這項動作
原始碼 1.1: 做一個符號連結從 net.eth0 到 net.lo |
# cd /etc/init.d
# ln -s net.lo net.eth0
|
Gentoo's RC 系統現在知道這個介面了.它一樣也需要知道如何設定這個介面.所有的網路介面設定都在
/etc/conf.d/net這個檔案完成.接下來是一個用dhcp和靜態ip的範例設定.
原始碼 1.2: /etc/conf.d/net範例 |
config_eth0=( "dhcp" )
config_eth0=( "192.168.0.7/24" )
routes_eth0=( "default via 192.168.0.1" )
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.
|
現在我們已經完成設定這個介面,我們可以使用以下的命令來啟動和停止它.
原始碼 1.3: 啟動和停止網路介面 |
# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop
|
重要:
在我們想要對網路除錯時,我們建議設定
RC_VERBOSE="yes" 在 /etc/conf.d/rc 檔案,我們就可以得到關於發生什麼事情的更多資訊.
|
.現在我們已經成功開始和停止我們的網路介面,你也許會想要讓它在Gentoo啟動的時候也啟動.
下面就是做法.最後一個"rc" 命令叫 Gentoo 去啟動任何的程式在當時的runlevel還沒有啟動的.
原始碼 1.4: 設定一個網路介面在開機時啟動 |
# rc-update add net.eth0 default
# rc
|
2. 進階設定
2.a. 進階設定
config_eth0 變數是網路介面設定的核心。他是一個高階的網路介面(例子中是
eth0)設定列表。在列表中的每個指令依序執行。當最後一個指令成功後網路介面
就視為可以用了。
這是內建指令的列表。
| 指令 |
說明 |
| null |
不做任何事 |
| noop |
如果網路介面啟動而且有一個位址,那就成功離開設定
|
| an IPv4 or IPv6 address |
為這個介面加上一個網路位址 |
|
dhcp, adsl or apipa (或是第三方模組提供的自訂指令)
|
執行這個指令的模組。例如說 "dhcp" 會執行 dhcp 模組,是 dhcpcd,udhcpc,
dhclient 或 pump 其中一個。
|
如果有一個失敗了,你可以指定 fallback 指令。fallback需要完全符合設定的結構。
你可以把這些指令連在一起。底下是一些實際的範例。
原始碼 1.1: 設定範例 |
config_eth0=(
"192.168.0.2/24"
"192.168.0.3/24"
"192.168.0.4/24"
)
config_eth0=(
"192.168.0.2/24"
"4321:0:1:2:3:4:567:89ab"
"4321:0:1:2:3:4:567:89ac"
)
config_eth0=(
"noop"
"dhcp"
)
fallback_eth0=(
"null"
"apipa"
)
|
注意:
當使用 ifconfig 模組並且加上超過一個位址,每個位址會建立一個別名。上面的
例子你會有 eth0,eth0:1 和 eth0:2 這幾個介面。你不能對多出
來的介面做任何事。因為核心和其他程式會把 eth0:1 和 eth0:2 當作
eth0。
|
重要:
fallback 中的順序相當重要!如果你沒有在 apipa 之前指定 null,他只
有在 noop 指令失敗時才會做。
|
2.b. 網路相依性
/etc/init.d 中的 可以依賴某個網路介面或是任一個(net),net
可以在 /etc/conf.d/rc 中的 RC_NET_STRICT_CHECKING 變數定義
代表那些東西。
| 值 |
說明 |
| none |
net 服務總是被認為啟動了 |
| no |
這基本上代表除了 net.lo 以外,任一個 net.* 服務啟
動才算。這個可以給同時有無線網路及有線網路的筆記型電腦使用者使用,因為某一
時間只要其中之一介面啟動了,net 服務就被視為啟動。
|
| lo |
這和 no 相同,但是 net.lo 也被考慮在內。這對於不在意哪
個介面啟動的使用者很有用。
|
| yes |
所有的網路介面啟動了 net 服務才算啟動。
|
但是,net.br0 要依賴 net.eth0 還是
net.eth1?net.eth1 可能是一個無線網路或 ppp 裝置,需
要在橋接前先做設定。這不能由 /etc/init.d/net.br0 完成,因為他只是
一個到 net.lo 的符號連結。
解答是在 /etc/conf.d/net 做一個你自己的 depend() 函數。
原始碼 2.1: /etc/conf.d/net 中 net.br0 相依關係 |
depend_br0() {
need net.eth0 net.eth1
}
|
要取得更多關於相依性的討論。參考 寫
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.1: 變數名稱範例 |
dns_domain_My____NET="My \"\\ NET"
|
3. 網路模組
3.a. 網路模組
我們現在支援模組化的網路 script,這代表可以輕鬆的支援新的網路介面和設定模組,而
且同時和原來的保持相容性。
如果模組需要的套件已經安裝,他就會自動載入。但是如果你指定一個還沒安裝套件的模
組,那你會收到一個錯誤訊息,告訴你要安裝哪個套件。理想上,只有在你安裝兩個以上
提供相同功能的套件,而且你比較喜歡某一個時,才需要用模組設定。
注意:
這裡討論的設定,除非特別說明,都是在 /etc/conf.d/net 中。
|
原始碼 1.1: 模組優先權 |
modules=( "iproute2" )
modules_eth0=( "udhcpc" )
modules=( "!iwconfig" )
|
3.b. 網路介面管理
我們目前提供兩種不同的網路管理程式:ifconfig 及 iproute2。你可以
用這兩個其中之一來做任何種類的網路設定。
ifconfig 是目前 Gentoo 預設使用的,並且包含在系統 profile 之中。
iproute2 是更有威力及彈性的套件,但是預設並不包含他。
原始碼 2.1: 安裝 iproute2 |
# emerge sys-apps/iproute2
modules=( "iproute2" )
|
因為 ifconfig 和 iproute2 都是做很類似的事,我們讓這兩個可以使用
共同的基本設定。例如說底下兩段程式碼不管對那種都適用。
原始碼 2.2: 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
原始碼 3.1: /etc/conf.d/net 的 DHCP 範例 |
modules=( "dhcpcd" )
config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10"
dhcp_eth0="release nodns nontp nonis"
|
注意:
dhcpcd,udhcpc 和 pump 預設會傳送目前的主機名稱給 DHCP 伺
服器,所以你不用去指定他。
|
3.d. ADSL 連線
首先我們要安裝 ADSL 軟體。
原始碼 4.1: Install the rp-pppoe package |
# emerge net-dialup/rp-pppoe
|
警告:
baselayout-1.11.x 目前只支援 PPPOE。我們希望以後的版本可以支援 PPPOA。
|
現在要更新 /etc/conf.d/net,設定 eth0 為 ADSL 連接的網路介
面,並且輸入使用者名稱。
原始碼 4.2: 在 /etc/conf.d/net 設定 eth0 使用 ADSL |
config_eth0=( "adsl" )
adsl_user_eth0="username"
|
最後你要在 /etc/ppp/pap-secrets 定義使用者名稱及密碼。
原始碼 4.3: /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。
原始碼 5.1: /etc/conf.d/net 的 APIPA 設定 |
config_eth0=( "dhcp" )
fallback_eth0=( "apipa" )
config_eth0=( "apipa" )
|
3.f. 頻寬合併
要使用頻寬合併,先安裝 net-misc/ifenslave
頻寬合併用來增加網路頻寬。如果你有兩個連到同一網路的網路介面,你可以把這兩個連
結在一起,讓應用程式只看到一個網路介面,但實際上他們正同時使用兩個介面。
原始碼 6.1: /etc/conf.d/net 頻寬合併設定 |
slaves_bond0="eth0 eth1 eth2"
config_bond0=( "null" )
depend_bond0() {
need net.eth0 net.eth1 net.eth2
}
|
3.g. 橋接 (802.1d 支援)
橋接的支援要先安裝 net-misc/bridge-utils
橋接是用來兩個網路連接在一起。例如說,你有一台伺服器透過 ADSL 連到網際網路,還
有一張無線網路卡讓其他的電腦可以連到網際網路。你可以用橋接把這兩個連在一起。
原始碼 7.1: /etc/conf.d/net 橋接設定 |
brctl_br0=( "setfd 0" "sethello 0" "stp off" )
bridge_br0="eth0 eth1"
config_eth0=( "null" )
config_eth1=( "null" )
config_br0=( "192.168.0.1/24" )
depend_br0() {
need net.eth0 net.eth1
}
|
3.h. MAC 位址
如果你用 sys-apps/baselayout-1.11.14 或更新的版本,你不用安裝任何東西就
可以改變網路介面的 MAC 位址。然而,如果你使用比上面提到更舊的版本,你需要安裝
net-analyzer/macchanger 才能有這個功能。
原始碼 8.1: MAC 改變範例 |
mac_eth0="00:11:22:33:44:55"
mac_eth0="random-ending"
mac_eth0="random-samekind"
mac_eth0="random-anykind"
mac_eth0="random-full"
|
3.i. Tunnel
你需要裝任何東西就可以使用 tunnel 了,因為網路介面管理會幫你做這些事。
原始碼 9.1: /etc/conf.d/net 的 tunnel 設定 |
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
config_vpn0=( "192.168.0.2 peer 192.168.1.1" )
|
3.j. VLAN (802.1q 支援)
安裝好 net-misc/vconfig 後,就可以支援 VLAN 了。
虛擬區網 (Virtual LAN) 是讓一組網路裝置運作時,有如他們連到同一段區網一樣 - 但
實際上可能不是。VLAN 成員即使是連在同一個實體區域網路,也只能看到同一 VLAN 的成
員。
原始碼 10.1: /etc/conf.d/net VLAN 設定 |
vlans_eth0="1 2"
vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )
config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )
|
重要:
要設定 VLAN,你可以參考
變數名稱 文件。
|
4. 無線網路
4.a. 介紹
目前我們支援用 wireless-tools 或 wpa_supplicant 來設定無線網路。
要記得最重要的一點是無線網路的設定是全域為主,而不是以介面為主。
wpa_suppliant 是最好的選擇,但是他並不支援所有裝置。要看他所有支援的裝置
請查看
wpa_supplicant 網站。
此外,wpa_supplicant 目前只能連線到你已經設定的 SSID。
wireless-tools 幾乎支援所有的裝置,但是不能連到只使用 WPA 的 AP。
警告:
目前 baselayout 不支援 linux-wlan-ng。因為 linux-wlan-ng 有著和其
他完全不同的設定方式。搖傳 linux-wlan-ng 開發者要把他們的設定變成
wireless-tools - 這代表可以在 baselayout 中使用 linux-wlan-ng。
|
4.b. WPA Supplicant
WPA Supplicant 是讓你
連接到使用 WPA 的 AP 的套件。因為還在測試中,他的設定過程常常改變 - 但是大部份情
況都可以正常工作。
原始碼 2.1: 安裝 wpa_supplicant |
# emerge net-wireless/wpa_supplicant
|
重要:
核心中要啟動 CONFIG_PACKET 才能讓 wpa_supplicant 工作。
|
現在要設定 /etc/conf.d/net 優先使用 wpa_supplicant 而不是
wireless-tools (兩個都安裝的話,預設會用 wireless-tools)。
原始碼 2.2: /etc/conf.d/net 設定 wpa_supplicant |
modules=( "wpa_supplicant" )
wpa_supplicant_eth0="-Dmadwifi"
|
注意:
如果你用 host-ap 驅動程式,你需要讓網路卡進入管理模式,讓
wpa_supplicant 可以正確使用。在 /etc/conf.d/net 中加上
iwconfig_eth0="mode managed" 來啟動。
|
很簡單不是嗎?然而,根據你要連線 AP 的安全程度,還有一些 wpa_supplicant
的設定要調整。底下的例子是從 wpa_supplicant 提供的
/etc/wpa_supplicant.conf.example 簡化而來的。
原始碼 2.3: /etc/wpa_supplicant.conf 設定 |
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
ap_scan=1
network={
ssid="simple"
psk="very secret passphrase"
priority=5
}
network={
ssid="second ssid"
scan_ssid=1
psk="very secret passphrase"
priority=2
}
network={
ssid="example"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
priority=2
}
network={
ssid="plaintext-test"
key_mgmt=NONE
}
network={
ssid="static-wep-test"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
}
network={
ssid="static-wep-test2"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}
network={
ssid="test adhoc"
mode=1
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="secret passphrase"
}
|
4.c. Wireless Tools
初始設定及管理模式
Wireless Tools 提供通用的方法設定無線網路介面使用 WEP 安全等級。雖然 WEP
是脆弱的安全防護,但他也是最普及的。
Wireless Tools 設定是由一些主要的變數控制的。底下的設定檔說明所有你需要知道的東
西。要牢記在心理的是不設定代表 "連結到訊號最強,未加密的 AP"
we will always try and connect you to something.
原始碼 3.1: 安裝 wireless-tools |
# emerge net-wireless/wireless-tools
|
注意:
雖然你可以把設定存在 /etc/conf.d/wireless,但是指南中建議你存在
/etc/conf.d/net。
|
原始碼 3.2: /etc/conf.d/net iwconfig 設定範例 |
modules=( "iwconfig" )
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
preferred_aps=( "ESSID1" "ESSID2" )
|
AP 選擇的詳細設定
你可以加上一些額外參數來做 AP 選擇的細部設定,但是一般來說這並不需要。
你可以決定是不是只連到優先的 AP。預設如果每個設定都失敗了,會連線到未加密的 AP。
這可以用 associate_order 變數控制。這是每個參數控制的說明。
| 值 |
說明 |
| any |
預設行為 |
| preferredonly |
只會連到在優先列表上可見的 AP |
| forcepreferred |
即使掃描時沒找到,還是會依優先順序強制連到 AP
|
| forcepreferredonly |
不要掃描 AP - 只依序連到每一個
|
| forceany |
forcepreferred 加上連到任何可見的 AP |
最後還有 blacklist_aps 及 unique_ap 選擇。blacklist_aps 和
preferred_aps 運作方法差不多。unique_ap 設定 yes 或
no 決定第二個無線網路介面可不可以連到同一個 AP。
原始碼 3.3: blacklist_aps 及 unique_ap 範例 |
blacklist_aps=( "ESSID3" "ESSID4" )
unique_ap="yes"
|
Ad-Hoc 及 Master 模式
如果你想要在管理模式連線 AP 失敗時設定成 Ad-Hoc 模式,也可以做的到。
原始碼 3.4: 失敗後進入 ad-hoc 模式 |
adhoc_essid_eth0="This Adhoc Node"
|
要如何連到 Ad-Hoc 網路或是用 Master 模式執行,成為 AP?這裡就是這樣做的設定!你
可能需要向下面這樣指定 WEP key。
原始碼 3.5: ad-hoc/master 設定範例 |
mode_eth0="ad-hoc"
essid_eth0="This Adhoc Node"
channel_eth0="9"
|
重要:
底下是從
NetBSD 文件 中找到的 BSD wavelan 文件複製過來的。
一共有 14 個頻道可以用:1-11 在北美是合法的,歐洲則是 1-13,法國是 10-13,日本
只有 14。如果你不確定的話,請查閱你的卡或 AP 附的文件。確定你選的頻道和 AP 所使
用的(或其他在 ad-hoc 網路中的卡)一樣。在北美及歐洲大部份賣出的網路卡是用頻道 3,
法國則是 11,日本是 14。
|
Wireless Tools 疑難排解
有一些變數可以在裝置或環境有問題時,幫你啟動無線網路。這是你可以嘗試使用的變數
列表。
| 變數 |
預設值 |
說明 |
| iwconfig_eth0 |
|
查看 iwconfig 手冊頁了解送到 iwconfig 設定的細節 |
| iwpriv_eth0 |
|
查看 iwpriv 手冊頁了解送到 iwpriv 設定的細節 |
| sleep_scan_eth0 |
0 |
在嘗試掃描前睡眠幾秒。當驅動程式/軔體在裝置可以使用前,要花一些使間啟動時使
用。
|
| sleep_associate_eth0 |
5 |
當介面從一個 AP 移到另一個 AP 時要等幾秒
|
| associate_test_eth0 |
MAC |
有些驅動程式在失去或嘗試連線時不會重設 MAC 位址到無效的,
有些驅動程式在失去或嘗試連線時不會重設 quality level。可以設定的值有
MAC,quality 和 all。
|
| scan_mode_eth0 |
|
一些驅動程式需要在 ad-hoc 模式掃描。所以如果掃描失敗了,試試看把他設成
ad-hoc
|
| iwpriv_scan_pre_eth0 |
|
在開始掃描前送一些 iwpriv 的指令。查閱 iwpriv 手冊頁取得更多資訊。
|
| iwpriv_scan_post_eth0 |
|
在掃描後送一些 iwpriv 的指令。查閱 iwpriv 手冊頁取得更多資訊。
|
4.d. 針對每一個 ESSID 做網路設定
有時候當你連到 ESSID1 時你會用固定 IP,而連到 ESSID2 時使用 DHCP
。事實上大部份的模組指令可以針對不同的 ESSID 做設定。底下就說明如何設定。
注意:
在你使用 WPA Supplicant 或 Wireless Tools 時才有作用。
|
原始碼 4.1: override network settings per ESSID |
config_ESSID1=( "192.168.0.3/24 brd 192.168.0.255" )
routes_ESSID1=( "default via 192.168.0.1" )
config_ESSID2=( "dhcp" )
fallback_ESSID2=( "192.168.3.4/24" )
fallback_route_ESSID2=( "default via 192.168.3.1" )
dns_servers_ESSID1=( "192.168.0.1" "192.168.0.2" )
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"
config_001122334455=( "dhcp" )
dhcpcd_001122334455="-t 10"
dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )
|
5. 新增功能
5.a. 標準函數連結
有四個定義好的函數在 start/stop 動作時會啟動。這些函數開頭都是網
路介面的名稱,以便控制多個網路介面。
preup() 和 predown() 函數應該回傳 0,表示接下來的介面設定或取消設
定可以繼續,如果 preup() 回傳不為 0 的數值,會結束網路介面的設定。如果
predown() 回傳不為 0 的數值,將會不允許繼續這個網路介面的取消設定。
postup() 及 postdown() 函數會忽略回傳值,因為如果他們有錯誤的話,
也沒有什麼要做的。
${IFACE} 是設成要啟動/關閉的網路介面。${IFVAR} 是把
${IFACE} 轉換成 bash 可以接受的變數名稱。
原始碼 1.1: pre/post up/down function 範例 |
preup() {
if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
return 0
}
predown() {
if is_net_fs /; then
eerror "root filesystem is network mounted -- can't stop ${IFACE}"
return 1
fi
return 0
}
postup() {
return 0
}
postdown() {
return 0
}
|
5.b. 無線網路函數連結
注意:
這對 WPA Supplicant 不能工作 - 但是 ${ESSID} 和 ${ESSIDVAR} 變數在
postup() 函數內可以用。
|
這裡定義兩個結合函數在相關的函數附近被呼叫。這些函數開頭都是網路介面的名稱,
以便控制多個網路介面。
preassociate() 函數應該回傳 0,表示接下來的介面設定或取消設定可以繼續,如果
preup 回傳不為 0 的數值,會結束網路介面的設定。如果 preassociate() 回傳
不為 0 的數值,將會不允許繼續這個網路介面的取消設定。
preassociate() 函數會忽略回傳值,因為如果他們有錯誤的話,也沒有什麼要做
的。
${ESSID} 是設成你連線 AP 的 ESSID。${ESSIDVAR} 是 ${ESSID}
轉換成 bash 可以接受的變數名稱。
原始碼 2.1: pre/post 結合函數 |
preassociate() {
local user pass
eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"
if [[ -n ${user} && -n ${pass} ]]; then
if [[ ! -x /opt/cisco/bin/leapscript ]]; then
eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
return 1
fi
einfo "Waiting for LEAP Authentication on \"${ESSID//\\\\//}\""
if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
ewarn "Login Failed for ${user}"
return 1
fi
fi
return 0
}
postassociate() {
return 0
}
|
注意:
${ESSID} 及 ${ESSIDVAR} 在 predown() 還有
postdown() 函數不能使用
|
6. 網路管理
6.a. 網路管理
如果你和你的電腦經常在移動,你可能會沒有網路線或無線網路可以用。而且,你可能希
望在你插上網路線或是找到無線網路時網路自動啟動。
這裡你可以找到一些幫你完成的工具。
注意:
這份文件只介紹 ifplugd,但時還有其他像 quickswitch 的工具你可以參考。
|
6.b. ifplugd
ifplugd 是一個在
網路線接上或拔掉時自動啟動,停止網路介面的服務。他也會在新的無線網路結點在範圍
內時幫你管理無線網路。
原始碼 2.1: 安裝 ifplugd |
# emerge sys-apps/ifplugd
|
設定 ifplugd 相當的直觀。設定檔是放在 /etc/conf.d/ifplugd。執行
man ifplugd 取得詳細的變數資訊。
原始碼 2.2: ifplug 設定範例 |
INTERFACES="eth0"
AUTO="no"
BEEP="yes"
IGNORE_FAIL="yes"
IGNORE_FAIL_POSITIVE="no"
IGNORE_RETVAL="yes"
POLL_TIME="1"
DELAY_UP="0"
DELAY_DOWN="0"
API_MODE="auto"
SHUTDOWN="no"
WAIT_ON_FORK="no"
MONITOR="no"
ARGS=""
MONITOR_wlan0="yes"
DELAY_UP_wlan0="5"
DELAY_DOWN_wlan0="5"
|
這份文件是以
Creative Commons - 姓名標示-相同方式分享 授權條款發布
|