Gentoo Logo

免責聲明: 這份手冊已經被更新的版本取代,不再被維護。

Gentoo Linux/PPC 手冊

內容:

  • 安裝 Gentoo
    您可以使用多種方式安裝 Gentoo。在這個指南內我們將解釋如何使用 Gentoo LiveCD 進行 Gentoo 的安裝。
    1. 關於 Gentoo Linux 安裝步驟。
      對於不熟 Gentoo 的使用者,無法了解 Gentoo 中選擇的哲學。
    2. 選擇適合的安裝方式
      安裝 Gentoo 有許多方式。您可以使用我們的 LiveCD,或是已經存在的版本。
    3. 設定網路
      如果您選擇透過網路安裝 Gentoo,您將需要設定網路。
    4. 準備磁碟
      為了要安裝 Gentoo,您一定要建立一些所需的分割區。這章的內容將為您解釋如何設定磁 碟分割。
    5. Gentoo 安裝檔案
      Gentoo 安裝需要使用到 stage 檔案。在這章內容我們將為您解釋如何解開一個 stage 壓 縮檔然後再 chroot 到系統內。
    6. 安裝 Gentoo 基礎系統
      不論您是選擇那一個 stage 的壓縮檔,到最後您將會擁有一個 Gentoo 的基礎系統。這章 將會為您解釋如何到達完成安裝的過程。
    7. 設定核心
      Linux kernel 是每個版本的核心。這章將解釋如何編譯您的核心。
    8. 設定您的系統
      您將需要編輯一些重要的設定檔。這章將解釋這些重要設定檔的功能以及設定。
    9. 安裝必要的系統工具
      就如之前所提的,Gentoo 的哲學是選擇。這章將帶領您選擇並且安裝一些重要的工具。
    10. 設定開機程式
      目前有多個開機程式。每個都有個別的設定。這章將解釋所有需要的設定,安裝,並且完成 設定您想使用的開機程式。
    11. 最終化您的 Gentoo 安裝
      到這個步驟時,您已經差不多要完成安裝過程了。我們只需要建立一個(或多個)系統使用 者,然後(選擇性的)安裝已經預編譯好的套件。。
    12. 然後呢?
      現在您的 Gentoo 系統已經完成安裝了,然後呢?
  • 使用 Gentoo
    學習如何使用 Gentoo:安裝軟體,變數,Portage 的行為等等。
    1. Portage 介紹
      這一章在簡介一些使用者在維護自己系統上的軟體的一些簡單的步驟
    2. USE 參數
      USE 參數對於 Gentoo 非常的重要。在這章內,您將會學習如何使用 USE 參數和了解 USE 參數如何跟您的系統互動。
    3. Portage 功能
      包括了Portage擁有的特色,就像是軟體的編譯和快取等等。
    4. 起始程序(Initscripts)
      Gentoo 使用一份非常特別的起始程序,包含著其他功能如相依性和虛擬起始程序。這章將 解釋所有的概念和如何使用它們。
    5. 環境變數
      使用 Gentoo,您可以很簡單的管理系統上的環境變數。這章將解釋如何管理的方法, 也解釋著一些常用的變數。
  • 使用Portage
    "使用Portage"提供一些較深入的Portage功能介紹,Gentoo的軟體管理工具。
    1. 檔案和資料夾
      一旦您想進一步知道Portage,您必須先知道他是怎樣和在哪裡存取他的檔案。
    2. 經由變數來設定
      Portage完全由一堆變數來設定,因此您可以設定這些變數在設定檔或是在環 境變數中。
    3. 混用不同分支的軟體
      Gentoo 提供一些已經依據穩定性和架構來分類的軟體在不同的分支中。 在"混用不同分支的軟體"中將會教您如何設定這些分支並且如何讓您可 以個別的使用這些軟體。
    4. 附加的Portage工具
      Portage另外提供一些工具讓您在使用Gentoo時有更好的經驗。閱讀他 您將會學到更多快速的設定方式和其他的工具。
    5. 愉悅的使用官方的Portage Tree
      在這章中會提供您一些小技巧和小方法來使用您自己的Portage Tree, 如何同步您需要的目錄,增加目錄等等。
    6. Ebuild的應用方式
      在這章中會告訴您一些有關於當Portage安裝軟體時的步驟和您自己要 如何利用ebuild的資訊。

A. 安裝 Gentoo

1. 關於 Gentoo Linux 安裝步驟。

1.a. 介紹

歡迎!

首先,歡迎 使用 Gentoo。您將會進入一個關於選擇和效能的世界。 Gentoo 是代 表著選擇。當您安裝 Gentoo 時,我們會清楚地解釋您可用的軟體選擇,安裝的方式, 選擇您想要的系統記錄器,等等。

Gentoo 是一個快速,現代化,乾淨,高彈性設計的版本。 Gentoo 基於免費的軟體和絕對 不會隱瞞問題。Portage,為 Gentoo 所使用套件維護系統,編寫於 Python 也代表著您可 以簡單的查看以及更改原始嗎。 Gentoo 的套件系統使用原始碼 (也支援已編譯的套件) 和設定檔都是普通的文字檔。換句話說,到處都是開放性的。

了解您自己的 選擇 是非常重要的,這也是 Gentoo 的哲學。我們將盡力不強迫您 安裝任何您不想安裝的軟體。如果還是您覺得我們強迫您安裝了某些您不想要的東西,請 申報錯誤

安裝程序的規劃?

Gentoo 安裝可以分為 10 個步驟,從第二章到第十一章。每個步驟都會完成以下的目的:

  • 第一個步驟後,您就在安裝 Gentoo 的工作環境內
  • 第二個步驟後,您的網路連線已經完成並且可以繼續安裝 Gentoo (在某些情況下,這是一個選擇性的部份)
  • 第三個步驟後,您的硬碟以起始完成,並且可以放置您的 Gentoo 安裝
  • 第四個步驟後,您的安裝完靜已經準備完成並且以 chroot 進入了新了環境
  • 第五個步驟後,核心套件,和所有 Gentoo 安裝的一樣都會被安裝
  • 第六個步驟後,您的 Linux 核心已經編譯完成了
  • 第七個步驟後,您已經編寫完大部份的系統設定檔了
  • 第八個步驟後,必要的系統工具(您可以從一份清單內選擇)已經安裝並且設定完成
  • 第九個步驟後,您選擇的開機程式已經安裝並且設定完成在您的新Gentoo系統當中
  • 第十個步驟後,您的Gentoo環境已經準備好讓您去探索了

當您擁有許多選擇時,我們將盡我們所能為您解釋每個的優點及缺點。我們將繼續使用預設 的選項,將會以 "預設:" 放在標題。其他選擇將會以 "其他選擇:" 為標題。請 不要 認為我們建議您使用預設的。但是我們 認為多數的使用者也使用者預設的選擇。

有時候您可以選擇其他選擇性的步驟。這些步驟將會被標為 "選擇性:" 並且對於安裝不是非常的重要。但是,有些選擇性的步驟需要依賴著您之前所做的決定。 我們將會在發生時,需要決定時和在選擇性的步驟前面告訴您。

我的選擇有那些?

您可以使用多種方法安裝 Gentoo。您可以下載然後使用我們的 LiveCD 安裝(安裝光碟) ,從其他版本,從開機光碟(如 Knoppix),從網路開機的環境,從一個救援磁片,等等 。這份文件將會包含著使用我們的 LiveCD 為安裝方式,或是在某些狀況來說,網路開機。 關於其他的安裝方法請參考「其他安裝指南」。我們也提供也同樣有用的 Gentoo/x86 安裝技巧 文件。 如果您認為這使用手冊說明的太詳細,您可以使用我們 文件資源中的快速安裝手冊,如果 您使用的架構已經有文件。

您也有些不同的可能性:您可以從頭編譯整個系統,或是使用預先編譯的套件安裝 Gentoo 環境。您也能從已經完成一半的系統開始安裝。

如果您打算使用以預先編譯的套件安裝 Gentoo,除了使用 LiveCD 的套件外,您將沒有其 他選擇。更新版的 Gentoo 發佈也會在網路上提供這些以編譯完成的套件。

碰到問題?

如果您在安裝過程內碰到問題(或是安裝指南)請到 Gentoo 發佈計畫 查看錯誤列表,然後到 臭蟲申報系統 查詢是否有重複或和您相同的申報 。如果沒有,請建立一個方便我們維護。請不要害怕我們的開發員 -- 他們大部份不會吃人 。

請注意,雖然您正在閱讀的文件針對各種不同架構,但是它還是會包含著一些關於其他架構 的資料。這是因為 Gentoo 手冊使用著大量可共用的原始碼軟體(為了減少重複和少許的開 發資源)。我們會將疑惑減到最少。

如果您不確定問題是否為使用者相關(有些是粗心的錯誤)還是軟體問題,我們歡迎您到 irc.freenode.net 的 #gentoo (英文)或是 irc.hinet.net 的 #gentoo 發問。當然, 如果您有其他目的,我們也歡迎:)

如果您有關於 Gentoo 的問題,請到 Gentoo 文件 查看我們 的 常見問題。您也可以到 FAQs(英文) 或是 Gentoo Taiwan 討論區

1.b. 預編或是全編?

什麼是 Gentoo Reference Platform?

Gentoo Reference Platform,現在開始簡稱為 GRP,是一套預編套件的快照讓使用者(就 是您!)可以加速安裝 Gentoo 的過程。GRP 可用來安裝整個 Gentoo。他們不只能快速的 完成安裝,也包括了一些套件(如 KDE、xorg-x11、GNOME、OpenOffice、Mozilla...)。

但是,這些 Gentoo 並不會每天維護 GRP,它們只會在每次 Gentoo 新版發表時更新。您可 以在工作時把系統升級放在背景處理。

Portage 如何處理 GRP 套件

您的 Portage tree - 收集許多 ebuilds(包含所有套件的資訊,如簡介,網址, 原始碼 網址,編譯指示,相依性,等等的檔案) - 一定要和 GRP 套件同步: ebuild 的 版本一定要和 GRP 的套件一樣。

如果您打算使用 GRP 安裝,您將要安裝 Portage 快照而不是最新的同步 Portage。

有適合我的 GRP 可以用嗎?

不是所有的架構都提供 GRP 套件。這不代表著 GRP 不支援其他架構,原因是我們沒有資源 來編譯和測試這些 GRP 套件。

目前我們提供以下架構的 GRP 套件:

  • x86 架構(x86,i686,pentium3,pentium4,athlon-xp)注意:x86 和 i686 的 GRP 套件(例如說 packages-x86-2004.2.iso),可以在我們的鏡像站取得, 而 pentium3,pentium4,athlon-xp 只能經由 bittorrent 取得。
  • amd64 架構(amd64)
  • sparc 架構(sparc32,sparc64)
  • ppc 架構(G3,G4,G5)
  • alpha 架構(alpha,alphaev5,alpha56,alphaev6)
  • mips 架構
  • hppa 架構

如果您的架構(或是子架構)沒有出現在清單上,您將無法使用 GRP 安裝。

現在介紹完畢,讓我們從 選擇對的安裝方式 繼續。

2. 選擇適合的安裝方式

2.a. 硬體需求

介紹

開始前,我們將先列出能成功安裝 Gentoo Linux 的硬體清單。這當然包含著電腦的架構。

PPC 架構

繼續安裝 Gentoo 前請查看以下需求:

  • 您需要最少 2 GB 的磁碟空間
  • 如果您不使用已編譯的套件,您需要最少 300 MB 的記憶體 (RAM + swap)
  • 關於 PowerPC 架構,您可以在使用 Power 或是 PowerPC 微處理器的 NewWorld 機器上安裝 Gentoo/PPC,包含著但是不限制 G3, G4,或是 G5 的 Apple 電腦如 iMac ,eMac,iBook,PowerBook,Xserv,PowerMac 和 bPlan 的 Pegasos II...我們 也支援著有限的 oldword 系統,IBM(rs/6000,iSeries,pSeries,﹍),Amiga 和 Pegasos系統。記得 在開始前要將 Gentoo PPC FAQ 閱讀完。

2.b. 決定您的選擇

介紹

對 Gentoo 還有興趣嗎?現在您將需要選擇一個安裝的方法。沒錯,選擇權在您,不,他們 不一樣,對,結果都是一樣的:一個 Gentoo 系統。

我們提供的安裝方式:

  • Gentoo 的 Minimal LiveCD
  • Gentoo 的 Universal LiveCD

每個不同的方法都有他的優缺點。我們將會列出每個優缺點來幫助您做決定。但是在我們開 始之前,讓我為您解釋一下我們的三個不同階段的安裝。

三種階段的安裝

Gentoo Linux 可以從三種 階段 的壓縮檔進行安裝。您所選擇的將會決定您要自己編譯多少。stage1 將是從 頭開始進行 bootstrap 到整個系統的編譯。stage2 壓縮檔已經完成了 bootstrap 的步驟;是一個 "半成品"。stage3 的壓縮檔已經包含著一個基礎的 Gentoo Linux 系統。稍後我們會解釋,您也可以安裝 Gentoo 時不用進行到任何編譯的動 作(除了核心和一些選擇性的套件以外)。如果您要這個方法,您將需要使用 stage3 壓縮檔和一份包含著以編譯套件的 Gentoo LiveCD。

現在您該選擇那個 Stage?

stage1 開始,您將擁有完全的自訂設定以及選擇性的編譯功能的系統。這將讓 stage1 的安裝適合高階使用者。如果您想要知道 Gentoo Linux 是如何架構的,您 也應該要使用 stage1

Stage1 的安裝只適用於有網路連線的安裝環境

Stage1 優點及缺點
+ 讓您可以完全自訂和將系統的效能完全依照您的需求
+ 適合知道自己在做些什麼的高階使用者
+ 讓您了解 Gentoo 的內部架構
- 需要長時間完成安裝
- 如果您不打算調整系統設定,這樣是浪費時間
- 不用適用於無網路連線的安裝環境

Stage2 的安裝將讓您要過第一階段的 bootstrap,並且使用我們為您調整過的 stage2 壓縮檔。

Stage2 只可以在有網路連線的環境下進行安裝。

Stage2 優點及缺點
+ 不需要 bootstrap
+ 和 stage1 比較來快速許多
+ 您還是可以最佳化系統設定
- 您無法像在 stage1 時自訂那麼多設定
- 不是最快安裝 Gentoo 的方法
- 您將要接受我們為您調整過的 bootstrap
- 不適用於無網路連線的安裝環境

選擇使用 stage3 將會是安裝 Gentoo Linux 最快的一個方法,這也代表著您將要 選擇我們為您所做的系統調整以及設定(老實說,我們的完好的設定足以讓系統保持在完好 的效率以及穩定度)。如果您想要使用以編譯完成的套件或是在無網路連線的情況下,您將 需要stage3

Stage3 優點及缺點
+ 安裝 Gentoo Linux 最快速的方法
+ 適用於無網路連線的安裝環境
- 您無法為系統進行調整 - 已經編譯好了
- 無法像在 stage1 或是 stage2 那樣

請記得(或是寫下)您所用的是那個 stage。稍後您將需要決定要使用那種 LiveCD 或 是那種您想要的安裝方式。如果您安裝 Gentoo 後使用的是不同的自訂設定,您還是可以在 稍後以更新的自訂設定重新編譯整個系統。

現在看看一些可用的安裝媒介:

Gentoo LiveCDs

注意: Gentoo/PPC 2004.2 並不是官方釋出的版本,所以你並不會在境像站上找到他。儘管如此 我們已經編譯好LiveCDs而且可在, 和 透過BitTorrent找到他。

注意: 已經發現Pegasos II不能使用2004.2 LiveCD開機。請使用2004.1 LiveCD.

Gentoo LiveCD 為可開機的光碟。他將偵測您的硬體然後套用相關的驅動程式。 這是由 Gentoo 開發員針對多種架構而維護的。

所有的 LiveCD 將會讓您可以開機進入安裝,設定網路,啟始化分割區,然後 從網路進行 Gentoo 的安裝。但是,有些 LiveCD 也包含著相關的原始碼讓您可以在安裝時 不需要用到網路。

那這些 LiveCD 裡面有什麼呢?

Gentoo 的 Minimal LiveCD

這是一個小的,沒有廢話的可開機光碟。此光碟的主要用意是開啟系統,準備網路,然後 繼續 Gentoo 的安裝。他不包含任何 stage 的壓縮檔(有些包含著 stage1 的檔案), 也不包含著原始碼,或是已編譯的套件。舉例來說,ppc 的基礎檔案可以在 livecd 子目錄下被命名為 install-ppc-minimal-2004.2.iso

Minimal LiveCD 優點及缺點
+ 最小的下載光碟
+ 適合全部的架構
+ 您可以網路下載 stage1,stage2,stage3
- 不包含 stage 檔案,沒有 Portage,沒有 GRP 套件,不適合非網路安裝

Gentoo 的 Universal LiveCD

Gentoo 的 Universal 光碟是一張可以用來開機的光碟,方便讓您可以在無網路連線的情況 下安裝 Gentoo。他包含著一個 stage1 和多個 stage3 壓縮檔(針對各個子架構自訂過)和 相關的可以讓您不需要網路的連線從 Stage1 開始安裝。舉例來說,適合全部 ppc 的光碟 映像檔是叫做 install-ppc-universal-2004.2.iso 並且可以在 livecd 的子目錄找到。

如果您仔細看看我們的對映站,您將會看到一些架構提供 Gentoo Package CDs(Gentoo套件光碟)。這張光碟只包含著已編譯完成的套件,方便您 完成安裝後可以安裝其他軟體套件。要安裝 Gentoo,您只需要 Universal LiveCD,但是如 果您需要 Openoffice.org,Mozilla,KDE,GNOME而不編譯它們,您也需要套件光碟。 舉例來說 G4 (一個 ppc 的子架構)的第二片光碟就會被命名為 packages-g4-2004.2.iso 並且可以在正確的子架構目錄找到 (g4)。

如果您打算進行 Stage3 搭配著 GRP 的安裝,您只需要套件光碟。

我們提供一份"預設"光碟,都適合所有架構的子架構,並且也針對各子架構自訂化(CD2) (如 Athlon-XP,G4,等等。)。

Universal LiveCD 包括套件光碟 優點及缺點
+ 套件光碟是為您所用的架構自訂化過
+ 為了需要快速安裝 Gentoo 的使用者提供已編譯的套件
+ 包含著所有您需要的。您可以不用網路連線進行安裝。
- 龐大的下載檔案

2.c. 下載,燒錄,然後使用 Gentoo LiveCD開機

下載然後燒錄 LiveCD

您將選擇使用 Gentoo LiveCD (如果不是,那您讀錯文章了)。我們將要先下載 LiveCD 然後燒錄為光碟。我們之前談過有一些可用的 LiveCD,但是您要到那裡下載呢?

請查看我們的 對映站 然後到 releases/ppc/2004.2/livecd/universal 的目錄尋找適合您的 ISO 檔案。 這些是完整的 CD 映像檔方便讓您寫入 CD-R。

如果您害怕您下載的檔案有損毀,您可以透過我們提供的 MD5 checksum (如 install-ppc-minimal-2004.2.iso.md5)並且使用 MD5 checksum 檢查。 在 Linux/Unix 環境下您可以使用 md5sum 工具或者是 Windows 下的 md5sum

目前 Mac OS X 並不支援 md5sum ,所以您要使用 openssl 的 md5 功能 。因此在 Terminal.app 輸入:

原始碼 3.1: 藉著 openssl 的幫助執行 md5sum

$ openssl md5 /path/to/iso 
這可能會花一些時間,由 ISO 檔的大小及 CPU 的速度決定 

現在把他輸出的結果跟你下載的 ISO 相對應的檔案(檔名結尾會有 .md5)做比較。如果是 相同的,代表你下載的 ISO 影像檔是正確的。確定你還沒掛載他(例如說:Disk Copy)!

更多的資訊可以參閱:PPC FAQ

如要燒錄所下載的光碟映像檔,您將需要選擇 raw 的燒錄格式。我們將教使用 cdrecordk3b;關於其他可以到我們的 Gentoo FAQPPC FAQ 找到。

  • 使用 cdrecord,您只需要輸入 cdrecord dev=/dev/hdc(將 /dev/hdc 更改唯您的燒錄機的位置)然後隨後的為映像檔的目錄:)
  • 使用 k3b,選擇工具(tools) > CD(光碟) > 燒錄映像檔(Burn Image)。然後在 '燒錄映像檔(Image to Burn)',然後 選擇正確的 ISO 檔案。最後按下 開始(Start)

2.d. 使用 PPC LiveCD 開機

預設:Apple/IBM

將 LiveCD 放入光碟機,然後重新啟動系統。在聽到 system-start-bell 時按下 'C' 鍵 直到載入 CD。

如果你使用 OldWorld Mac,livecd 上的開機分割區不能被使用,你需要去下載 BootX 並且有一個可以使 用的 MacOS。你需要從解壓縮出來的檔案複製 BootX ExtensionExtensions Folder 然後建立一個叫 Linux Kernels 的目錄。下一步您要 把 LiveCD 上的 G3 核心和 initrd.img.gz 複製到 Linux Kernels 目錄中。然後重開機等到 BootX 載入。在它載入後你還要設定一 些項目。在選項對話框中勾選 Use Secified RAM Disk 然後選擇你放在 Linux Kernels 目錄中的 initrd.img.gz。ramdisk 大小至少要 32000。此外核心參數要設成 rw init=/linuxrc cdroot。最後你只要選擇 Linux 就可以啟動 LiveCD 了。

您將會看到一個友善的歡迎詞然後 boot: 畫面放在螢幕的下方。

在這個畫面,您將可以選擇適合您所用的子架構的核心。我們提供 G3G4G5。這些都有編譯多 CPU 支援,但是在單 CPU 的系統仍然可以使用。

您也可以在這個畫面調整一些核心選項。以下的列表將是您可以加入的開機選項:

開機選項 說明
video 這個選項將使用以下不同廠商相關的標籤之一: radeonfbrivafbatyfbaty128 或是 ofonly。您可以跟著這個標籤選擇您想要的解析度和更新頻率。舉例來說, video=radeonfb:1280:1024@75。如果您不知道該選擇什麼,那您可以選擇 通用的 ofonly
nol3 關閉部份的 Powerbook 上的第三層的快取(需要最少17")
debug 啟用開機說明,將會產生一個 initrd shell 讓您用來除錯 LiveCD
sleep=X 繼續前等待 X 秒;這將是因為有些老舊的 SCSI 光碟需無法快速的啟用光碟
bootfrom=X 從不同的裝置開機

在這個畫面,按下 Enter,然後一個完整的 Gentoo Linux 環境將會從光碟內被載入。 現在請從 當您開機了... 繼續。

其他選擇: Pegasos

在 Pegasos 上,只要放入光碟,然後在 SmartFirmware 開機畫面輸入 boot cd /boot/pegasos root=/dev/ram0 init=/linuxrc looptype=gcloop cdroot。如果您需 要特別的開機選項,您可以加在後面。舉例來說 boot cd /boot/pegasos video=radeonfb:1280x1024@75 mem=256M

當您開機了...

現在您將會有一個 ("#") root 的操作介面。您可以使用 Alt-F2,Alt-F3,Alt-F4 來 回切換。如要回到剛才的畫面請按 Alt-F1。

如果您是使用非 US 鍵盤,記得使用 loadkeys 載入您的鍵盤所使用的設定。如要 查看,執行 ls /usr/share/keymaps。不要使用 ppcmac 中的 keymap,因為他們是適用以 ADB 為基礎的 OldWorld 機器。

原始碼 4.1: 列出可用 keymaps

(大部份的 PPC 系統使用著 x86 的 keymaps。 LiveCD 提供的 mac/ppc
keymaps 將無法使用於 LiveCD 核心)
# ls /usr/share/keymaps/i386

現在載入您需要的 keymap。

原始碼 4.2: 載入 keymap

# loadkeys be-latin1

現在請繼續到 其他硬體設定

其他硬體設定

當 LiveCD 開啟時,它將會嘗試偵測所有系統上的硬體然後載入相關的核心模組來支援您的 硬體。在大部份的例子,它做的相當不錯。但是,在某些例子,它將無法自動載入相關的系 統模組。如果 PCi 的自動偵測錯過了系統上某些硬體,您將需要手動載入它們。

以下的例子我們將載入 8319too 模組(支援某種網路介面):

原始碼 4.3: 載入核心模組

# modprobe 8139too

選擇性:微調硬碟效能

如果您是一個高階使用者,您或許想要使用 hdparm 微調您的 IDE 硬碟。 使用 -tT 的參數將讓您測試硬碟的效能(請多執行幾次來確定比較正確的數值):

原始碼 4.4: 測試磁碟效能

# hdparm -tT /dev/hda

要微調,您可以使用以下任何範例(或是自行測試)。請將 /dev/hda 更改為您所要微調的磁碟:

原始碼 4.5: 微調硬碟效能

啟動 DMA:                                       # hdparm -d 1 /dev/hda
啟動 DMA + 安全的增加效能選項:  # hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hda

選擇性:使用者帳號

如果您打算給予其他人安裝環境的權限,或是使用非 root 的權限執行 irssi (安全考量)您將需要建立相關的使用者帳號和更改 root 密碼。

要更改 root 密碼,使用 passwd 工具:

原始碼 4.6: 更改 root 密碼

# passwd
New password: (輸入新密碼)
Re-enter password: (再次輸入新密碼)

要建立使用者帳號,我們先需要輸入他們的帳號然後密碼。我們將使用 useraddpasswd 完成這些工作。下面的例子,我們將建立一個使用者叫做 "john"。

原始碼 4.7: 建立一個使用者帳號

# useradd -m -G users john
# passwd john
New password: (輸入 john 的密碼)
Re-enter password: (再次輸入 john 的密碼)

您也可以利用 su 從 root 更便道您剛建立的帳號:

原始碼 4.8: 更換使用者

#  su john -

選擇性:在安裝時查看手冊

如果您想要在安裝過程時查詢Gentoo使用手冊(從CD或上網),請確認您已經建立一個 使用者帳號(看 選擇性:建立使用者帳號).然後按 下Alt-F2進入新的文字介面登入。

如果您想查看在CD上的使用手冊,您可以馬上輸入links2來閱讀他:

原始碼 4.9: 查看在CD上的使用手冊

 # links2 /mnt/cdrom/docs/html/index.html

但是,我們還是建議您從網路上閱讀較新版的使用手冊。您可以藉由以下連結 links2 來查看。但是只有在您已經完成設定您的網路這一章的動作才可以(否則您將 不能上網來查閱使用手冊)。

原始碼 4.10: 查看線上使用手冊

# links2 http://www.gentoo.org/doc/en/handbook/handbook-ppc.xml

您可以藉由輸入Alt-F1回到您原本的文字介面。

選擇性:開啟 SSH 伺服器

如果您想在安裝過程中讓其他使用者使用您的電腦(或許是幫忙您安裝 Gentoo 的人) ,您將需要建立一個使用者帳號給他們,提供您的 root 密碼給他們(只有 在您 完全信任 的狀況下)。

要開啟 SSH 伺服器,執行以下指令:

原始碼 4.11: 開啟 ssh 伺服器

# /etc/init.d/sshd start

要使用 sshd,您將需要先設定您的網路。 現在請繼續到 設定您的網路

3. 設定網路

3.a. 您可以不需要,但是﹍

誰可以不用?

依照您所選擇的安裝方式,您可以也可以不需要網路連線。我們沒有在搞亂您 =)

大致來說,您將需要設定網路。但是 Gentoo 也提供不需要網路連線的安裝。這種特例 只適用於 Gentoo Universal LiveCDs:

為什麼我需要網路連線?

從網路安裝 Gentoo 將會讓您的安裝使用最新的套件。您將會使用最近期的 Portage tree (管理我們提供的套件的工具)。這也是為什麼我們建議您使用網路安裝。但是, 有些使用者不能或是不想在安裝中將電腦連線至網路。

如果您需要使用到 Gentoo Universal LiveCD。這份 LiveCD 包含著原始嗎, Portage tree 的快照和安裝 Gentoo 基礎系統或是之後的工具。這個方法是有代價的: 雖然差別不一定會很大,您將無法使用到最新版本的軟體。

如果您想使用無網路環境的安裝方式,您將需要使用到 Universal LiveCD,然後跳過以下 的部份從 準備磁碟 繼續。

選擇性:設定代理伺服器

如果您是透過代理伺服器連線至網路,您將需要在安裝過程中設定相關的代理伺服器資料。 要定義一個代理伺服器非常簡單:您只需要設定一個變數包含著您的代理伺服器資料。

在大部份的例子裡,您可以直接將變數定義為代理伺服器的主機名稱。舉例來說,我們假設 代理伺服器為 proxy.gentoo.org 而 port 為 8080。

原始碼 1.1: 定義代理伺服器

(如果是 HTTP 代理伺服器)
# export http_proxy="http://proxy.gentoo.org:8080"
(如果是 FTP 代理伺服器)
# export ftp_proxy="ftp://proxy.gentoo.org:8080"
(如果是 RSYNC 代理伺服器)
# export RSYNC_PROXY="proxy.gentoo.org:8080"

如果您的代理伺服器需要使用者帳號及密碼,請按照以下方式定義變數:

原始碼 1.2: 在代理伺服器變數加入帳號及密碼

http://username:password@server

舉例來說, HTTP 代理伺服器需要一個帳號 "john" 密碼 "f00b_r":

原始碼 1.3: 需認證的代理伺服器

# export http_proxy="http://john:f00b_r@proxy.gentoo.org:8080"

3.b. 自動網路偵測

或許已經可以了?

如果您的系統有將網路卡連線到一台 DHCP 伺服器,很有可能您的網路連線已經自動設定完 成了。如果如此,您將可以佔有 LiveCD 的好處,如 sshscppingirssiwgetlinks,等等。

如果您的網路已經設定好了,您可以使用 /sbin/ifconfig 指令列出除了 lo 網路 介面的清單如 etho0:

原始碼 2.1: /sbin/ifconfig 查看可用的網路卡

# /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 

測試網路

或許您會想要嘗試 ping 網路公司的 DNS 伺服器(可以在 /etc/resov.conf)或是您所選的網址,這只是為了查看您的封包是否能傳送 網路,DNS 解析是否正常,等等﹍

原始碼 2.2: 測試網路

# ping -c 3 www.yahoo.com

您的網路有正常嗎?如果有,請跳過以下部份,從 準備磁碟 繼續。如果沒有,可惜,您將要更好運一點,請往下繼續 :)

3.c. 自動網路設定

如果您的系統擁有多個網路卡,它們將會以 eth0eth1,等以此類推。 請確認您的顯示卡可以使用。所有的文件將會以 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 連線至網路,LiveCD (任何版本)都會有提供簡單的 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 支援,您可以使用我們的 LiveCD 提供的 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. 手動網路設定

載入相關網路模組

當 LiveCD 啟動時,它會偵測您所有的硬體裝置然後載入相關的核心模組(驅動程式)來 支援您的硬體。在大部份的例子來說,它做的非常好,但是在某些情況下,它或許無法自 動載入您所需要的核心模組。

如果您無法使用 net-setup 或是 adsl-setup,那您就可以假設您的網路卡 無法在即時被找到。這代表著您將要手動載入相關核心模組。

要找出我們可以用的核心模組,使用 ls

原始碼 4.1: 搜尋提供的模組

# ls /lib/modules/`uname -r`/kernel/drivers/net

如果您找到您的網路卡所用的驅動程式,使用 modprobe 載入這個核心模組:

原始碼 4.2: 使用 modprobe 載入核心模組

(舉例來說,我們將載入 pcnet32 模組)
# 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
一些網路管理員可能會要求你使用
DHCP 伺服器提供的主機名稱及領域名稱。
如果是這種情況,使用
# dhcpcd -HD eth0

如果成功(嘗試 ping 一些網路伺服器,如 Google),那您就可以跳到下個部份到 準備磁碟

準備無線網路

注意: 不是所有的 LiveCD 都有 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 而不是 eth0

對於大部份的使用者,只需要更改兩個重要的設定,ESSID(無線網路名稱)或是 WEP 金錀 。如果 ESSID 和無限網路連接點已經顯示出您沒有使用 WEP,那您的網路已經好了。如果 您需要更改您的 ESSID,或是加入一個 WEP 金錀,您可以執行以下指令:

原始碼 4.7: 更改 ESSID 和/或 加入 WEP 金錀

(這將會把網路名稱設定為 "GentooNode")
# iwconfig eth0 essid GentooNode

(這將設定一個 hex WEP 金錀)
# iwconfig eth0 key 1234123412341234abcd

(這將設定一個 ASCII 金錀 - 起始為 "s:")
# 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 磁碟,那您的第一個 磁碟將會是 /dev/sda

以上的區塊裝置代表著磁碟的介面。使用者可以不用擔心您的磁碟是否為 IDE,SCSI 或是其他,並且使用程式來使用這些區塊裝置。這個程式可以在磁碟上寫入多個隨機的 512 byte 區塊。

分割區和 Slices

理論上雖然您可以使用整個磁碟放置您的 Linux 系統,但是實務上幾乎沒有人這麼做。 整個磁碟將會被分為其他小一點的大小,並可以更好的管理。大部份的系統將叫他 分割區(partitions)。其他架構使用類似的技術,叫做 slices

4.b. 策劃一個分割區計畫

預設的分割區策劃

如果您不打算策劃一個分割計畫,您可以使用我們手冊的分割區規劃:

NewWorld 分割區 OldWorld 分割區 Pegasos 分割區 檔案系統 大小 說明
/dev/hda1 /dev/hda1 不適用 (分割區地圖) 32k Apple_partition_map
/dev/hda2 (不需要) (不適用) (bootstrap) 800k Apple_Bootstrap
/dev/hda3 /dev/hda2 /dev/hda1 (swap) 512M Swap 分割區
/dev/hda4 /dev/hda3 /dev/hda2 ext3 磁碟剩下的空間 根 或是 主分割區(Root partition)

注意: 這裡有一些像這類名稱的分割區:Apple_Driver43,Apple_Driver_ATA, Apple_FWDriver,Apple_Driver_IOKit,Apple_Patches。如果你不打算使用 MacOS 9 那你就可以把他們刪了,因為 MacOS X 和 Linux 並不需要。你可能需要使用 parted 來刪除,因為 mac-fdisk 並不能刪除他們。

如果您對於一個分割區需要多大,或是需要幾個分割區,請繼續閱讀。不然的話請從 預設:使用 mac-fdisk (Apple/IBM)分割您的磁碟 或是 其他選擇:使用 parted (特別是 Pegasos)分割您的磁碟繼續。

多少和多大?

多少分割區通常是按照您的使用環境。舉例來說,如果您有很多個使用者,您就會因為安全 問題和能夠簡易備份將您的 /home 分開。如果您將 Gentoo 安裝為郵件伺服 器那您的 /var應該分開,因為郵件通常是放在 /var。選擇好 的檔案系統將會提昇您的效能。遊戲伺服器因為大多數的遊戲伺服器都是安裝在 /opt 所以通常會將 /opt 分開。原因很和 /home 類似:安全問題和備份。

如您所見,不同的方式是彼此相依的。不同的分割區或是容量將會有以下優點:

  • 您可以選擇適合個別分割區的檔案系統提高效能
  • 您的系統不會因為一個分割區或是容量失效而完全終止
  • 如果必要,檔案系統檢查所費的時間將會減少,並且可以以平行方式進行(雖然這個優點 比較適合多分割區)
  • 安全性可以因為某些分割區以分割成唯讀而加強,nosuid(setuid機會被略過), noexec(執行檔將會被掠過)等等。

但是,多個分割區也有一個很大的缺點:如果沒有完好的設定,您將會看到一個分割區上的 空間不夠或是一個分割區上的空間太多。SCSI 和 SATA 也有最多 15 個分割區的限制。

4.c. 在 PPC 上使用 mac-fdisk (Apple/IBM)分割您的磁碟

在這邊,使用 mac-fdisk 建立您的分割區:

原始碼 3.1: 使用 mac-fdisk

# mac-fdisk /dev/hda

fdisk 開始後,您將會看到以下的畫面:

首先刪除您之前為了保留給 Linux 的分割區。使用 mac-fdisk 內的 d 來 刪除這些分割區。它將會問您要刪除那一個分割區。

這個磁碟包含著七個 Linux 檔案系統(顯示為 "Linux")和一個 swap 分割區(顯示為 "Linux Swap")。 第二,使用 b 建立一個 Apple-bootstrap 分割區。它將會問您要從那個區 塊開始。輸入您的第一個空閒的分割區,然後加上 p。舉例來說 1p 為第一 個分割區。

注意: 這個分割區 不是 一個 "開機" 分割區。它完全不被 Linux 所使用;您不應該掛載 它也不能將檔案系統放到它上面。 PPC 使用者不需要/boot開機分割區。

現在輸入 c 建立 swap 分割區。mac-fdisk 將會問您要從那個分割區開始。 以我們的範例來說,剛剛使用了 1 來建立 Apple_Bootstrap 分割區,您現在將需 要輸入 2p。當您被問到大小時,輸入 512M(或是適合您的號碼 -- 我們 建議 512)。當您被問到名字時,輸入 swap(必需)。

要建立主分割區,輸入 c 然後 3p 來選擇主分割區應該開始的區塊。當您 被問到大小,再輸入一次 3pmac-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 零)。50MB 的大小應該足以儲放 MorphOS 核心。如果您有 Pegasos I 或是打算使用 reiserfs 或 xfs,您也應該將您的 Linux 核心放在這個 分割區。(Pegasos II 可使從 ext2/ext3 的分割區開機)。要建立分割區,執行 mkpart primary affs1 START ENDSTARTEND 應該要被替換成 megabyte 的範圍(如 5 55 則是在 5MB 開始然後結束於 55MB 的 50MB 大小的分割區)。

您將需要為 Linux 建立兩個分割區,一個為主檔案系統來放置您所有的程式檔,另一個為 快取(Swap)分割區。要建立主分割區,您一定要決定要使用那個檔案系統。可以選擇 ext2,ext3,reiserfs 和 xfs。您如果知道您在作什麼,請使用 ext3。然後執行 mkpart primary ext3 START ENDSTARTEND 應該要被替換成 megabyte 的範圍。

大部份來說,我們建議您建立一個以您的記憶體大小兩倍的快取分割區。如果您不打算一次 執行很多程式,您可以建立小一點的快取(雖然我們建議 512MB)。要建立快取分割區,執 行 mkpart primary linux-swap START END

記得寫下分割區的號碼,因為在安裝過程中,您將需要用到它們。要顯示號碼,執行 print。您的磁碟將會被列為 /dev/hdaX X 就是您該紀錄的號碼。

4.e. 建立檔案系統

介紹

現在您的分割區已經建立完成了,我們該把檔案系統放到它們上面。如果您不在乎該使用哪 種檔案系統,並且滿意手冊內的預設,請從 將檔案系統 套用在分割區上。不然請繼續閱讀關於可用的檔案系統﹍

檔案系統?

PPC 架構上提供多種穩定的檔案系統,如 ext2,ext3,Reiserfs 和 XFS。雖然我們沒在 Linux 2.6 核心上遇到嚴重的錯誤。jfs 則是不被支援。

ext2 是一個舊的 Linux 檔案系統,沒有日誌功能. 啟用的時間通常需要很久。目 前有許多 日誌型態 的檔案系統可以以更快的速度及更好的效率完成系統啟用和檢 查。

ext3 為 ext2 的日誌版,提供了 metadata 日誌系統 並且可以快速地使用日誌系 統復原。ext3 是個相當不錯並且可靠的檔案系統. 它有額外的 hashed b-tree 索引功能 將會開啟幾乎在任何情況內的狀態為高效能。簡單來說,ext3 是一個很棒的檔案系統。

ReiserFS 整體來說是個相當不錯的系統,它處理小型檔案(少於4kb)時效能會比 ext2 和 ext3 來的好。他使用的是 B*-tree 為基礎的檔案系統. 另外也能很有效率地處理 大型檔案。Linux 核心版本 2.4.18+ 後,ReiserFS 是一個相當有值得推薦的系統, 從很少 ,到很多檔案。ReiserFS 都可以處理的非常好。開機分割區並不建議使用此檔案系統。

XFS 是一個 metadata 日誌系統,並且擁有完整的功能及針對延展性最佳化。如果 您使用高速 SCSI 或是纖維的儲存裝置,並且有持續不斷的電源供應,我們才推薦您使用 XFS。 如果沒有,請使用其他檔案系統。因為 XFS 大量的將要轉送的資料快取在記憶體中 ,設計不好的程式(的確有一些程式在寫入磁碟時不做一般的預防措施)可能當系統意外斷 電時損失大量的資料。

JFS 是 IBM 發展的高效能日誌系統。目前雖然已經可以算是個完成品,關於他的穩地度並 沒有太多的優點及缺點。

將檔案系統套用到分割區上

要把檔案系統建立到一個分割區或是容量上可使用一些為個別檔案系統所設計的工具:

檔案系統 建立指令
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs

以我們的範例來說,主分割區(在我們的例子為 /dev/hda3)為 ext3,您將 要使用:

原始碼 5.1: 將檔案系統套用到分割區上

# mke2fs -j /dev/hda3

現在檔案系統已經建立到我們剛建立完成的分割區上了(或是logical 容量)。

注意: 確定你放核心的目錄 (/boot) 一定要是 ext2 或 ext3。開機管理員只能處 理這兩種格式。

啟用 Swap 分割區

mkswap 是用來起始 swap 分割區的指令:

原始碼 5.2: 建立 swap 簽名

# mkswap /dev/hda2

要啟用 swap,使用 swapon 指令:

原始碼 5.3: 啟動 swap

# swapon /dev/hda2

現在建立然後啟動 swap。

4.f. 掛載

現在您的分割區已經起始和放置檔案系統了,接下來我們該把這些分割區掛載起來。使用 mount 的指令。不要忘了建立相關的掛載目錄,以我們的範例分割來說只掛載主 分割區和開機分割區:

原始碼 6.1: 掛載分割區

# mkdir /mnt/gentoo
# mount /dev/hda3 /mnt/gentoo

注意: 如果您要將 /tmp 放在不同的分割區,記得掛載後將它的權限更改為: chmod 1777 /mnt/gentoo/tmp。這也適用於 /var/tmp

最後我們將需要在我們的新家建立 /dev 的目錄,這是在安裝開機程式的過程 中所不可或缺的。您可以使用 "綁的方式"(bind)將 LiveCD 內的 /dev 檔 案系統掛載起來:

原始碼 6.2: 掛載 /dev 檔案系統

# mkdir /mnt/gentoo/dev
# mount -o bind /dev /mnt/gentoo/dev

我們將需要掛載 proc 檔案系統(一個核心的虛擬介面)並且把它放在 /proc。但首先我們需要將檔案放到分割區上。

現在從 使用安裝檔安裝 Gentoo 繼續。

5. Gentoo 安裝檔案

5.a. 安裝一個 Stage 壓縮檔

設定正確的日期/時間

在您繼續之前,您將需要檢查您的日期/時間。一個設定錯誤的時鐘將會在未來的時候造成 一些奇怪的錯誤!

要檢查正確的日期/時間,執行date

原始碼 1.1: 檢查日期/時間

# date
Sun Apr 25 16:21:18 CEST 2004

如果顯示出的日期/時間是錯誤的,使用 date MMDDhhmmYYYY 進行更新(M 為月,D為日,h為時,m為分,和 Y為年份)。舉例來說, 要將日期設定為 2004年4月25號,16:21:

原始碼 1.2: 設定日期/時間

# date 042516212004

選擇您的需要的

接下來的步驟您將需要將您選擇的 stage 壓縮檔安裝到您的系統上。您可以從網路 下載,或是從我們的 Gentoo Universal LiveCD 開機,然後從光碟上複製。如果您使用 Universal CD 而且你想要用的 stage 就在 CD 中,從網際網路下載只是浪費頻寬,因為 他們是一樣的。

如果您有一個可用的網路連線,那我們建議您使用預設的選項。如果您沒有的網路連線或是 您想要使用 GRP (已編譯完成)進行安裝,那您可以選擇其他替代的選項。

5.b. 預設:從網路下載

下載 Stage 壓縮檔

先更換到您之前所掛載的目錄下(大部份是/mnt/gentoo):

原始碼 2.1: 更換到 Gentoo 的掛載點

# cd /mnt/gentoo

依照您的安裝方式,您有幾個可以選擇的工具下載 Stage 壓縮檔。如果您有 links2 ,您就可以馬上連接到 Gentoo 對映站 然後 選擇最靠您的位置。如果您沒有links2可以使用,您也可以使用lynx。在 這邊,後面所有用到links2的地方都可以用lynx取代。

選擇releases/的目錄,接著是您所使用的架構(如 x86/) 最後則是 Gentoo 的版本(2004.2)最後您就可以看到適合您的架構所使 用的 Stage 壓縮檔位於 stages/的列表(他們也許會被放在不同子架構 中的子目錄中)。選擇一個然後按下 D 開始下載。當下載完成時,按下Q 離開瀏覽器。

原始碼 2.2: 使用 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

如果您想要檢查下載的壓縮檔是否正確,您可以使用 md5sum 然後以 MD5 checksum 輸出進行比較。例如說,檢查 stage 壓縮檔是否正確:

原始碼 2.3: 檢查 stage 壓縮檔是否下載正確

# md5sum -c stage1-x86-2004.2.tar.bz2.md5
stage1-x86-2004.2.tar.bz2: OK

解開 Stage 壓縮檔

現在解開您剛剛下載到系統上的壓縮檔。我們使用最簡單的 GNU 的 tar 方式進行 :

原始碼 2.4: 解開 Stage 壓縮檔

# tar -xvjpf stage?-*.tar.bz2

確定您有放入一樣的參數(-xvjpf)。x 代表著 Extract(解開) ,v 代表著 Verbose(顯示,好吧,這個可以不用),j 代表著 Decompress with bzip2(以 bzip2 解開),p 代表著 Preserve permissions(預留的權限)和 f代表著以我們的方式解開而不是標準的輸入。

現在 stage 已經安裝完成了,請從 安裝 Porage 繼續。

5.c. 其他選擇:使用 LiveCD 的 Stage

解開 Stage 壓縮檔

Stage 將被放在光碟內的 /mnt/cdrom/stages 目錄。要查看整個目錄, 使用 ls

原始碼 3.1: 查看所有可用的 Stage

# ls /mnt/cdrom/stages

如果您的系統回報錯誤,您將需要先掛載您的光碟機:

原始碼 3.2: 掛載光碟機

# 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):

原始碼 3.3: 更變目錄到 /mnt/gentoo

# cd /mnt/gentoo

我們現在需要解開您剛剛所選擇的 stage 壓縮檔。我們將使用 GNU 的 tar 工具。 確定您也使用著一樣的參數(-xvjpf)!在下面的範例,我們將使用 stage3-<子架構>-2004.2.tar.bz2。要記得將壓縮檔檔名換成您所 選擇的檔名。

原始碼 3.4: 解開 Stage 壓縮檔

# tar -xvjpf /mnt/cdrom/stages/stage3-<子架構>-2004.2.tar.bz2

現在 stage 已經安裝完成了,請從 安裝 Portage 繼續。

5.d. 安裝 Portage

有網路或是沒有網路?

如果您沒有網路連線,您將需要從我們的 LiveCD 內安裝 portage 快照。這會假設你從 stage3 開始安裝(這是唯一支援無網路安裝的壓縮檔),如果您想要使用預編套件 加快安裝的速度,您 一定要 使用光碟內的 portage 快照。其他使用者將需要在 下一章使用 emerge 下載一個最新的 Portage tree。

從 LiveCD 安裝 Portage 快照和原始碼

有些 Universal LiveCD 內有提供 Portage 快照。當您讀到這邊時,我們可以安全的假設 您正在使用這種 LiveCD。要安裝這個快照,看看 /mnt/cdrom/snapshots 查 看我們可用的快照:

原始碼 4.1: 查看 /mnt/cdrom/snapshots 的內容

# ls /mnt/cdrom/snapshots

現在將快找使用以下的方法解開。記得用正確的 tar 參數。另外,-C 是大寫的 C 而不是 c。以下的範例我們將使用 portage-20040710.tar.bz2 為快照檔名。記得要將更換您的檔名。

原始碼 4.2: 解開 Portage 快照

# tar -xvjf /mnt/cdrom/snapshots/portage-20040710.tar.bz2 -C /mnt/gentoo/usr

您也需要複製光碟內所有的原始碼:

原始碼 4.3: 複製原始碼

# mkdir /mnt/gentoo/usr/portage/distfiles
# cp /mnt/cdrom/distfiles/* /mnt/gentoo/usr/portage/distfiles/

現在您的 Portage 快照已經安裝好了,請從 設定編譯選項 繼續。

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 也使用相同的語法。許多變數將在下面 繼續講解。

CHOST

警告: 雖然這會對一些非 Stage1 的使用者有興趣,但是非 stage1 的使用者 不應該 更改 make.conf 內的 CHOST 的設定。這樣會造成系統不穩。 再一次提醒:這只適用於 stage1 的使用者。

CHOST 的變數將定義著 gcc 針對架構所需要編譯的參數。可能性為:

架構 子架構 CHOST 設定
x86 i386 i386-pc-linux-gnu
x86 i486 i486-pc-linux-gnu
x86 i586 i586-pc-linux-gnu
x86 i686 and above (incl. athlon) i686-pc-linux-gnu
alpha alpha-unknown-linux-gnu
ppc powerpc-unknown-linux-gnu
ppc64 powerpc64-unknown-linux-gnu
sparc sparc-unknown-linux-gnu
hppa (通用) hppa-unknown-linux-gnu
hppa pa7000 hppa1.1-unknown-linux-gnu
hppa pa8000 或以上 hppa2.0-unknown-linux-gnu
mips mips-unknown-linux-gnu
amd64 x86_64-pc-linux-gnu

CFLAGS 和 CXXFLAGS

CFLAGSCXXFLAGS 變數將定義最佳效能化 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 設定

# 想要使用原生 64 位元環境的 AMD64 的使用者不應該使用 athlon-xp
-march=athlon-xp

第二個則是 O(是大寫的 O,不是零) 參數,代表著 gcc 的性能參數。可 用的參數為 s (增加檔案大小性能),0 (零 - 沒有提昇性能), 12 或是 3 則關於速度的性能(一個特定的性能加上另外一個或 是兩個)。舉例來說,一個 2 的性能參數:

原始碼 5.3: GCC O 設定

-O2

另一個受歡迎的參數為 -pipe (使用 pipes 進行編譯中的通訊而不是暫存檔)。

值得注意的是,使用 -fomit-frame-pointer (在不需要 frame pointer 的時候 不使用)時可能會讓程式除錯時會有嚴重的負面效果。

當您定義 CFLAGSCXXFLAGS後,您應該按照以下範例將他們結合起來:

原始碼 5.4: 定義 CFLAGS 和 CXXFLAGS 變數

CFLAGS="-march=athlon-xp -pipe -O2"   AMD64 的使用者不該使用 athlon-xp
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. 變換根目錄

自由選擇:選擇鏡像站

如果您是從 Gentoo LiveCD 開機的話,您可以使用 mirrorselect 來更新 /etc/make.conf 讓您可以從最快的鏡像站取得套件和原始碼(當在您有網路 連線的狀況下):

原始碼 1.1: 選擇最快的鏡像站

# mirrorselect -a -s4 -o | grep 'GENTOO_MIRRORS=' >> /mnt/gentoo/etc/make.conf

如果因為某些理由 mirrorselect 失敗了,不要慌張。這一步是自由選擇的。 這項步驟是非必要性的,您也可以使用預設的設定。

複製 DNS 設定

還有一件事在我們進入新的系統環境之前要記得做,就是複製 /etc/resolv.conf 中的 DNS 設定。您需要做這件是確保網路在進入新的環境後仍然可以工作。 /etc/resolv.conf 包含網路需要的名稱伺服器。

原始碼 1.2: 複製 DNS 設定

(我們將需要使用到 "-L" 的參數來確保我們不會複製到連接類型的檔案 )
# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

掛載 proc 檔案系統

/proc 檔案系統掛載到 /mnt/gentoo/proc 讓安裝過程中 即使是在 chrooted 的環境也可以取得新提供的資訊。

原始碼 1.3: 掛載 /proc

# mount -t proc none /mnt/gentoo/proc

進入新的系統環境

現在所有的分割區都已經初步設定好了而且基本的系統也安裝完畢,現在是用 變換根目錄進入新的系統環境的時候了。這代表我們從目前的安裝環境 (LiveCD 或是其他的安裝媒體)進入您安裝的系統(就是已經安裝的分割區)。

變換根目錄動作在三步驟內完成。首先我們會用 chroot 讓根目錄從 / (目前安裝的媒體)變換到 /mnt/gentoo (或您安裝的分割區)。 然後用 env-update 建立新的環境,這將會建立基本的系統變數。最後,我們用 source 把這些變數載入到記憶體。

原始碼 1.4: 進入新的環境

# chroot /mnt/gentoo /bin/bash
# env-update
 * Caching service dependencies...
# source /etc/profile

恭喜!您現在新的 Gentoo Linux 環境當中了。不過離安裝完畢還有一段時間,這就是為什 麼安裝指南還有下面這些部份 :-)

自由選擇:更新 Portage tree

如果您沒按照上一章所說的,將 Portage 快照安裝,您一定要從網路上下載一分最新的 Portage tree。emerge --sync 將會為您完成此項動作。其他的使用者應該跳過這個 部份從 設定 USE 變數 繼續。

原始碼 1.5: 更新 Portage tree

# emerge --sync

Portage 使用的是 RSYNC 協定來更新 Portage tree。如果以上的指令失敗,請使用 emerge-webrsync 透過 HTTP 協定下載 Portage 快照。

原始碼 1.6: 使用 emerge-webrsync 更新 Portage tree

# emerge-webrsync

如果您看到新的 Portage 已經可以下載而且您必須要更新的警告時,您應該要略過它, Portage 在之後安裝時會被更新。

設定 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 設定放在 /etc/make.profile/make.defaults,而您在 /etc/make.conf 中的設定會和預設的設定一起考慮。如果您在 USE 設定中新增一些東西,他會加入預設的設定中。如果您從 USE 中移除一些東西(在 前面加上減號),他會從預設的設定移除。永遠不要改變任何在 /etc/make.profile 目錄中的東西,他會在您更新 Portage 時被覆蓋!

完整的 USE 說明可以在 Gentoo 手冊中 USE 參數 找到。完整的 USE 參數列表 可以在系統中的 /usr/portage/profiles/use.desc 找到。

原始碼 1.7: 檢視可用的 USE 參數

# less /usr/portage/profiles/use.desc
(你可以使用方向鍵來捲動,按下 'q' 離開)

下面是一個 USE 的設定,在以 KDE 為基礎的系統中支援 DVD, ALSA 以及燒錄機。

原始碼 1.8: 開啟 /etc/make.conf

# nano -w /etc/make.conf

原始碼 1.9: USE 設定

USE="-gtk -gnome qt kde dvd alsa cdr"

你可能只會需要在你的系統上使用一種或兩種 locale。在目前編譯完 glibc 後所 有可用的 locale 都會被建立。你可以啟動 userlocales USE 設定並且在 /etc/locales.build 指定你需要的 locale。

原始碼 1.10: 為 glibc 啟動 userlocales USE 設定

# mkdir /etc/portage
# echo "sys-libs/glibc userlocales" >> /etc/portage/package.use

現在指定你想要使用的 locale:

原始碼 1.11: nano -w /etc/locales.build

en_US/ISO-8859-1
en_US.UTF-8/UTF-8
de_DE/ISO-8859-1
de_DE@euro/ISO-8859-15

自由選擇:在不同電腦編譯

如果您對使用許多系統來協助您一起編譯程式,您可能會想要看 DistCC 指南。您可以藉著 distcc 來使 用許多台電腦的處理能力來幫助您完成安裝。

6.b. Stage1,Stage2 和 Stage3 的不同

現在先坐下來回想一下之前的步驟。我們要求您選擇 stage1stage2stage3 並且提醒您您的選擇對之後的安裝步驟很重要。嗯,現在是您決定接下來 的步驟的時候了。

  • 如果您選擇 stage1,接下來您要做這一節全部的步驟從 Stage1 到 Stage2 的過程 開始
  • 如果您選擇 stage2 您只要略過第一步驟,立即從第二部份 Stage2 到 Stage3 的過程 開始
  • 如果您選擇 stage3(不管使不使用 GRP)那您可以略過這兩部份。 請繼續下一節: 設定核心

6.c. Stage1 到 Stage2 的過程

介紹 Bootstrapping

所以您決定要從頭編譯所有東西?那開始吧 :-)

在這個步驟中,我們會 bootstrap 您的 Gentoo 系統。這會花很長一段時間,但是 您會得到一個針對您的機器完全最佳化的系統。

Bootstrapping 代表編譯 GNU C 函式庫、GNU C 編譯器以及其他重要的軟體。

在開始之前,我們會列出兩個您需要或是不需要的參數。如果您不想要閱讀這些的話,從 Bootstrapping 您的系統 繼續。

自由選擇:先下載原始碼

如果您之前不曾複製全部的原始碼,bootstrap script 會下載所有必要的檔案。這當然在 有連接到網路時才能正常工作 :-) 如果您想要先下載原始碼然後再執行 bootstrap (例如 您並不想在編譯時讓您的網路一直保持連線),使用bootstrap script 的 -f 選項 ,這將會下載(Fetch)所有的原始碼。

原始碼 3.1: 下載必須的原始碼

# cd /usr/portage
# scripts/bootstrap.sh -f

Bootstrapping 您的系統

好啦,在您的鍵盤敲下底下的指令來啟動 bootstrap,然後給您自己找些娛樂吧 然後自己找點喜歡的事情做,因為這一步驟將會花費一些時間完成。

原始碼 3.2: Bootstrapping 您的系統

# cd /usr/portage
# scripts/bootstrap.sh

接下來繼續下一步驟 Stage2 到 Stage3 的過程

6.d. Stage2 到 Stage3 的過程

介紹

如果您正在閱讀這一部份,那您已經有一個 bootstrap 好的系統(可能是您之前執行 bootstrap 或是您使用 stage2)。現在是編譯所有系統套件的時候了。

所有系統套件?不,不完全是。在這一步驟中,您將會編譯沒有其他選擇的系統套 件。一些套件有多種選擇 (例如 system loggers),因為 Gentoo 代表選擇,我們不會強迫 您一定要使用哪一種。

自由選擇:看會做哪些事

如果您想要知道哪些套件會被安裝,執行 emerge --pretend system。這將會列出 所有要編譯的程式。因為這相當的多,您應該使用 lessmore 來上下瀏 覽。

原始碼 4.1: 看 'emerge system' 會做什麼

# emerge --pretend system | less

自由選擇:下載原始碼

如果您想要 emerge 在開始之前先下載原始碼(例如您並不想在編譯時讓您的網路一 直保持連線),您可以使用 emerge--fetchonly 參數來幫您下載所有的 原始碼。

原始碼 4.2: 下載原始碼

# emerge --fetchonly system

編譯系統

執行 emerge system 來開始編譯系統。然後讓您自己忙於某些事情,因為這到完成 會花很長一段時間。

原始碼 4.3: 編譯系統

# emerge system

您現在可以安全的略過任何警告來更新您的設定檔(執行 etc-update)。當您的 Gentoo 系統已經完全安裝完畢,重開機後,查看我們的 設定檔案保護

當編譯過程完成後,請從 設定核心 繼續。

7. 設定核心

7.a. 時區

為了讓您的系統知道它的位置在那裡,您將需要設定您的系統時區。到 /usr/share/zoneinfo 尋找您的時區,然後使用 ln 建立一個連接到 /etc/localtime

原始碼 1.1: 設定時區資訊

# ls /usr/share/zoneinfo
(假設您要使用 GMT)
# ln -sf /usr/share/zoneinfo/GMT /etc/localtime

7.b. 安裝核心原始碼

選擇一個核心

Linux 的核心是所有版本的最中心,也是最重要的。他位於使用者程式和系統硬體之間。 Gentoo 提供使用者很多可用的核心原始碼。您可以到 Gentoo 核心 指南 查看我們所提供的核心。

PPC 的使用者可以從 development-sourcesgentoo-dev-sources核心選 擇 (都是 2.6 核心)。如果您使用的是無網路的安裝,您只可以使用後者。除此之外,還有 針對 Pegasos 修正過的 2.6 核心:pegasos-dev-sources。所以我們現在就使用 emerge 來安裝核心原始碼:

原始碼 2.1: 安裝核心原始碼

# emerge gentoo-dev-sources

當您查看 /usr/src 您將會看到一個 linux 的連接連到 您所選的核心:

原始碼 2.2: 觀看核心原始碼目錄連接

# ls -l /usr/src/linux
lrwxrwxrwx    1 root     root           12 Jul 10 10:55 /usr/src/linux -> linux-2.6.7-r9

如果您碰到的不是這樣(例:連接連到其他的核心目錄)您將需要在繼續往下之前更改連接 :

原始碼 2.3: 更改核心連接目錄

# rm /usr/src/linux
# cd /usr/src
# ln -s linux-2.6.7-r9 linux

現在我們該設定以及編譯您的核心了。所有架構的使用者都可以使用 genkernel 完 成此項步驟,並且將會以和 LiveCD 一樣的通用的方式進行編譯。我們將先解釋如何手動編 譯因為這是自訂您的環境的最佳方法。

現在請從 手動設定 繼續。

7.c. 手動設定

介紹

手動設定核心常常被 Linux 使用者認為最難完成的步驟。雖然不假 -- 但是當您手動編譯 幾次核心後,您應該不會覺得它有多難 ;)

但是,唯一 的重點就是:您必須要了解您的系統才可以開始手動編譯。系統上多數 的資料可以從 /proc/pci (如果可以的話使用 lspci)查看。您也 可以執行 lsmod 看看 LiveCD 使用那些核心模組(這是一個不錯的暗示,教您該 開啟那個選項)。

現在到您的核心原始碼目錄然後執行 make menuconfig。這將會啟動一個 ncurses 的設定選單。

原始碼 3.1: 開始 menuconfig

# cd /usr/src/linux
# make menuconfig

您將會看到一大串的設定部份。我們將列出一些您一定要啟用的選項(不然 Gentoo 無法 完善的工作)。

必須開啟的選項

首先,開啟 development and experimental code/drivers。您將需要這個,不然 您將無法看見一些其他重要的程式碼或是驅動程式。

原始碼 3.2: 選擇 experimental code/drivers

Code maturity level options --->
  [*] Prompt for development and/or incomplete code/drivers

現在到 File Systems 然後選擇要支援的檔案系統。記得不要將它們編成模 組。還有 Virtual memory/proc file system/dev file system + Automatically munt at boot

原始碼 3.3: 選擇相關檔案系統

File systems --->
  Pseudo Filesystems --->
    [*] /proc file system support
    [*] /dev file system support (OBSOLETE)
    [*]   Automatically mount at boot
    [*] Virtual memory file system support (former shm fs)

(按照您系統所需要的檔案系統開啟以下選項)
  <*> Reiserfs support
  <*> Ext3 journalling file system support
  <*> Second extended fs support
  <*> XFS filesystem 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 時需要,但是這兩個壓縮的選項不會造成錯誤。

如果您需要,不要忘了為您的網路卡加入核心的支援。

關閉 ADB raw keycodes:

原始碼 3.5: 關閉 ADB raw keycodes

Macintosh Device Drivers --->
  [ ] Support for ADB raw keycodes

然後選擇正確的 RTC 支援(關閉 Enhanced RTC 選項):

原始碼 3.6: 啟用正確的 RTC 選項

Character devices --->
  [ ] Enhanced RTC

General setup --->
  [*] Support for /dev/rtc

OldWord 的使用者將需要 HFS 支援來讓他們可以複製編譯好的核心到 MacOS 分割區。

原始碼 3.7: 啟用 HFS 支援

File Systems --->
  [*] HFS Support

當您完成核心設定時,請從 編譯和安裝 繼續。

編譯和安裝

現在您的核心已經設定完成了,我們該來編譯然後安裝它。離開核心設定,然後執行編譯 核心的指令:

原始碼 3.8: 編譯核心

# make all && make modules_install 

當核心完成編譯時,將核心映像檔複製到 /boot

原始碼 3.9: 安裝核心

將 2.6.7 換成您的核心版本
(Apple/IBM)# cp vmlinux /boot/kernel-2.6.7
(Pegasos)# cp arch/ppc/boot/images/zImage.chrp /boot/kernel-2.6.7

不要忘了將 system map 複製過去:

原始碼 3.10: 複製 system map

# cp System.map /boot/System.map-2.6.7

您也可以將您的核心設定檔備份到 /boot,以防萬一 :)

原始碼 3.11: 備份您的核心設定檔

# cp .config /boot/config-2.6.7

現在請從 安裝分開的核心模組

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

現在執行 modules-update 來套用您的變更到 /etc/modules.conf

原始碼 4.4: 執行 modules-update

# modules-update

現在請從 設定您的系統 繼續安裝。

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

最後,您要加入 /proctmpfs (必要),以及CD-ROM。如果您還有其 他的裝置,也加到檔案中:

原始碼 1.5: 完整的 /etc/fstab

/dev/hda1   /boot     ext2    noauto,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

檔案系統設定 automount 猜測使用哪個檔案系統(建議在可卸除的裝置 使用,因為他們可能有多種檔案系統),而 user 參數讓一般使用者也能掛載 CD。

如果您使用 SPARC 的話,您也要將下面這一行加入 /etc/fstab 中:

原始碼 1.6: 在 /etc/fstab 加入 openprom 檔案系統

none        /proc/openprom  openpromfs    defaults      0 0

如果您要需要 usbfs,加入下面這一行:

原始碼 1.7: 在 /etc/fstab 加入 usbfs 檔案系統

none        /proc/bus/usb   usbfs         defaults      0 0

重新檢查一次 /etc/fstab,儲存離開後進行下面的步驟。

8.b. 網路資訊

主機名稱,領域名稱等

接下來的步驟其中之一就是給您的電腦一個名稱。這步驟相當簡單,但是許多人很 難找到一個合適的名稱,記得您設定的名字在之後還是可以改變的,這可以讓您快一點完成 。一般而言,您可以設定電腦名稱為 tux 而領域名稱為 homenetwork

我們會使用這些設定來當做範例。首先設定主機名稱:

原始碼 2.1: 設定主機名稱

# echo tux > /etc/hostname

其次設定領域名稱:

原始碼 2.2: 設定領域名稱

# echo homenetwork > /etc/dnsdomainname

如果您有 NIS 領域名稱的話(您不知道這是什麼的話,那您就不用設定它),您也需要去設 定它:

原始碼 2.3: 設定 NIS 領域名稱

# echo nis.homenetwork > /etc/nisdomainname

現在加入 domainname script 到預設的 runlevel 中:

原始碼 2.4: 將 domainname 加到預設 runlevel

# rc-update add domainname default

設定網路

在您覺得 "嗯,我現在已經弄好了" 之前,您要記得在您剛開始安裝 Gentoo 時設定的網路 只是在安裝過程中使用。現在您要為您的 Gentoo 系統設定網路。

所有的網路設定都集合在 /etc/conf.d/net。如果您不知道如何設定的話,您 會覺得這些語法相當不熟悉或是不了解,但不用擔心,我們會解釋每件您該需要的訊息 :)

首先用您慣用的編輯器開啟 /etc/conf.d/net (這個範例中使用 nano):

原始碼 2.5: 開啟 /etc/conf.d/net 來編輯

# nano -w /etc/conf.d/net

您會看到的第一個變數是 iface_eth0。他的語法如下:

原始碼 2.6: iface_eth0 語法

iface_eth0="<您的 IP> broadcast <您的廣播位址> netmask 
<網路遮罩>"

如果您使用 DHCP (自動取得 IP),您只要設定 iface_eth0dhcp。 如果您使用 rp-pppoe (例如 ADSL),則設定為 up。如果您要手動設定但是對上 面的一些專有名詞不了解的話,請閱讀 了解網路專有名詞這一部分。

接這我們給您三個例子;第一個使用 DHCP,第二個設定靜態 IP (192.168.0.2) 以及網路遮 罩 255.255.255.0,廣播位址 192.168.0.255 還有閘道 192.168.1.1,第三個則是適合 rp-pppoe 的設定:

原始碼 2.7: Examples for /etc/conf.d/net

(適用 DHCP)
iface_eth0="dhcp"
#一些網路管理員會要求你使用
#DHCP 伺服器指定的主機名稱和領域名稱。
#在這種情況下,加入底下的東西讓 dhcpcd 使用他們。
#這會取代掉你遠本設定的主機名稱和領域名稱。
dhcpcd_eth0="-HD"
#如果你使用 NTP 來同步你的電腦時間,使用
#-N 參數避免 dhcpcd 覆蓋你的 /etc/ntp.conf
dhcpcd_eth0="-N"

(適用靜態 IP)
iface_eth0="192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0"
gateway="eth0/192.168.0.1"

(適用 rp-pppoe) 
iface_eth0="up" 

如果您有數個網路介面,新增額外的 iface_eth 變數,例如 iface_eth1iface_eth2 等。而 gateway 變數在您只有一個閘道時並不用增加。

現在儲存設定然後離開,繼續下面的步驟。

開機時自動啟動網路

讓您的網路介面開機時自動啟動,您要把底下這些加入預設的 runlevel 中。如果您使用 PCMCIA 介面則跳過這一步驟,PCMCIA 是由 PCMCIA 啟動 script 來啟動。

原始碼 2.8: 加入 net.eth0 到預設的 runlevel

# rc-update add net.eth0 default

如果您有數個網路介面,您要建立對應的 net.eth1net.eth2 等。 您可以使用 ln 來完成:

原始碼 2.9: 建立額外的 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.10: 開啟 /etc/hosts

# nano -w /etc/hosts

原始碼 2.11: 填入網路資訊

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.homenetwork

原始碼 2.12: 適合單一電腦或是有完整反解的電腦的 /etc/hosts

127.0.0.1     tux.homenetwork tux localhost

儲存設定然後離開,繼續下面的步驟。

如果您沒有 PCMCIA,您可以繼續進行 系統資訊。 PCMCIA 使用者繼續下面的主題。

非必要:讓 PCMCIA 工作

注意: pcmcia-cs 只可以在 x86, amd64 和 ppc 平台上使用。

PCMCIA 使用者首先要安裝 pcmcia-cs 套件,包含打算使用 2.6 核心的使用者(雖 然他們將不會使用套件內的驅動程式)。然後使用 USE="-X" 來避免現階段的 XFree86 安裝:

原始碼 2.13: 安裝 pcmcia-cs

# USE="-X" emerge pcmcia-cs

pcmcia-cs 安奘好以後,新增 pcmcia預設 runlevel:

原始碼 2.14: 新增 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

就如同您所看到的,這個檔案有完善的注解讓您設定必要的參數。特別要注意 KEYMAP 變數,如果您設定錯誤的 KEYMAP 當您再用鍵盤輸入時會得到錯誤 的結果。

注意: 以 USB 為主的 SPARC 系統或相容的系統可能要選擇 i386 keymap (例如 "us") 而不是 "sunkeymap"。

PPC 在大部份的系統上使用 x86 的 keymaps。想要使用 ADB keymaps 的使用者將需要在開 機時啟用核心內的 ADB keycode sendings 然後在 rc.conf 內設定一個 mac/ppc keymap。

設定好 /etc/rc.conf 以後,存檔然後離開。接下來繼續 安裝必要的系統工具

9. 安裝必要的系統工具

9.a. 系統記錄器

在我們提到什麼是 stage3 時,我們曾說它包含著所有我們不能提供給 我們的使用者的系統工具。我們也曾提到過之後將會安裝其他的工具。 我們便從這裡開始解說這些工具吧 :)

第一個您需要做決定的工具是用來提供給系統記錄的功能。Unix 和 Linux 擁有一個很好 的記錄功能的歷史 -- 若是您想要的話,您可以記錄所有發生在您系統上的事情至 logfiles。這將會需要用到 系統記錄器

Gentoo 提供許多個系統記錄器的選擇。分別為 sysklogd,它是一個傳統的系統 記錄伺服器,syslog-ng ,是一個進階的系統記錄器,而 metalog 則是一 個高度配置的系統記錄器。Portage 內或許有其他的記錄器 -- 我們提供的套件每天都在 增加當中。

如果您無法決定要使用那一個系統記錄器,您可以考慮使用 metalog,它除了非常 強大外,它也內含了非常好的預設配置。

請用 emerge 指令來安裝您想使用的系統記錄器,並使用 rc-update 將之 加入至預設 runlevel。下面是一個安裝 metalog 的例子。當然,它也適用於 安裝您要用的系統記錄器:

警告: 2004.2 的 stage3 壓縮檔錯誤的包含 sysklogd 紀錄器。您需要再安裝新的之前先移除他。

原始碼 1.1: 安裝系統記錄器

(如果您使用 stage3 壓縮檔的話先移除 sysklogd 紀錄器)
# emerge unmerge sysklogd
(你也要移除 sysklogd init 指令稿)
# rm /etc/init.d/sysklogd
(現在安裝您選擇的系統記錄器)
# emerge metalog
# rc-update add metalog default

9.b. 非必要: Cron 伺服器

接下來的則是 cron 伺服器。雖然您的系統並不一定需要安裝這個伺服器,但我們 還是建議您安裝一個。然而,什麼是 cron 伺服器呢?cron 伺服器執行排定的指令。 若您需要時常執行一些指令 (每天、每星期、或是每個月),則它將會是一個得力的 助手。

Gentoo 提供三種可能的 cron 伺服器:dcronfcron、 以及 vixie-cron。安裝它們的方式跟安裝系統記錄器的方式一樣。但是, dcronfcron 需要一個額外的設定指令,即 crontab /etc/crontab。如果您無法決定使用那個 cron 伺服器,您可以考慮使用 vixie-cron

針對無網路的安裝,我們只提供 vixie-cron。如果您想要安裝其他 cron ,您將 需要等到之後再自行安裝。

原始碼 2.1: 安裝 cron 伺服器

# emerge vixie-cron
# rc-update add vixie-cron default
(只有在安裝 dcron 或 fcron) # crontab /etc/crontab

9.c. 自由選擇:檔案索引

如果你想要為你系統上的檔案製作索引,讓你可以用 locate 工具快速找到他們的 位置,你需要安裝 sys-apps/slocate

注意: 如果你不是使用 cascading profiles 安裝 Gentoo,那 slocate 已經在你的系統中了。 目前預設並不會使用 Cascading profiles。如果你不了解這件事的話,你可以假設你沒 有使用 cascading profiles 。

原始碼 3.1: 安裝 slocate

# emerge slocate

9.d. 檔案系統工具

依照您使用的檔案系統,您應該安裝必要的檔案系統工具 (用來檢查檔案系統的正確性、 建立額外的檔案系統等等)。

下面的表格列出各檔案系統所需要安裝的工具:

檔案系統 工具 安裝指令
XFS xfsprogs emerge xfsprogs
ReiserFS reiserfsprogs emerge reiserfsprogs
JFS jfsutils emerge jfsutils

如果您不需要使用任何網路相關的程式(例如說 rp-pppoe 或 dhcp 客戶端),可以繼續閱讀 設定開機管理員

9.e. 網路工具

非必要:安裝 DHCP 客戶端

如果你需要 Gentoo 自動取得你網路介面的 IP 位址,你需要在你的系統上安裝 dhcpcd (或其他 DHCP 客戶端)。如果你目前不先做的話,在安裝完成後你可能不 能連接網際網路!

注意: 如果你不是使用 cascading profiles 安裝 Gentoo,那 dhcpcd 已經在你的系統中了。 目前預設並不會使用 Cascading profiles。如果你不了解這件事的話,你可以假設你沒 有使用 cascading profiles 。

原始碼 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 有多個開機程式。我們有 yaBoot(適用於 New World PPC 的機器)和 BootX (適用於 OldWord PPC 的機器 和 IBM 的機器)。Pegasos 不需要一個開機程式。您在這邊將無法使用 yaBoot 或是 BootX。Pegasus 的使用者應該要從 重開機系統 繼續。

10.b. 使用 yaBoot

介紹

重要: yaBoot 只適用於 NewWorld 的 PPC 和 IBM 的系統架構!

設定 yaBoot 有兩個方法。您可以使用包含在內的 yabootconfig 然後自動設定 yaboot。如果因為某種原因您無法執行 yabootconfig 自動設定 /etc/yaboot.conf,您可以編輯已經在您的系統裡面的範例檔。如果您是在 G5 (yabootconfig 常常無法正確設定),您可以依照已經安裝到系統上的範例檔 直接設定。

預設:使用 yabootconfig

yabootconfig 將會自動偵測您的系統上的分割區然後設定 Linux, Mac OS 和 Mac OS X 3的組合。

要使用 yabootconfig,您的磁碟一定要有一個 bootstrap 的分割區。 /etc/fstab 一定要依照您的 Linux 分割區設定。這兩個步驟一定要在少面 的步驟完成。要開始前,請確認您有最新版本的 yaboot 輸入 emerge --update yaboot。這將會將 Portage 內的 yaboot 更新為最新,stage 檔案內的或許已經老就 。

原始碼 2.1: 安裝 yaboot

# emerge --usepkg --update yaboot

現在離開 chroot 執行 yabootconfig --chroot /mnt/gentoo。這個程式將會執行 然後確認 bootstrap 分割區。如果正確,輸入 Y。如果錯誤,請檢查您的 /etc/fstab。yabootconfig 將會掃描您的系統設定然後建立 /etc/yaboot.conf,然後自動執行 mkofbootmkofboot 是 用來格式化您的 bootstrap 分割區,然後將 yaboot 設定檔安裝到裡面。接下來再進入 chroot:

原始碼 2.2: 進入 chroot

# chroot /mnt/gentoo /bin/bash
# /usr/sbin/env-update && source /etc/profile

您應該要確定 /etc/yaboot.conf 的內容。如果您更改 /etc/yaboot.conf 的設定(像是更改預設開機),完成時確定要執行 ybin -v 套用相關更變。

接下來請到 重開機系統

其他選擇:手動設定 yaBoot

請先確認您有最新版本的 yaboot 安裝到您的系統:

原始碼 2.3: 安裝 yaboot

# emerge --usepkg --update yaboot

以下您將可以看到完整的 yaboot.conf 檔案。G5 的使用者應該要注意您們 的 Serial ATA 磁碟,因為這將會被 Linux 核心判斷成 SCSI 磁碟(所以將 /dev/hda 換成 /dev/sda)。

原始碼 2.4: /etc/yaboot.conf

## /etc/yaboot.conf
##
## run: "man yaboot.conf" for details. Do not make changes until you have!!
## see also: /usr/share/doc/yaboot/examples for example configurations.
##
## For a dual-boot menu, add one or more of:
## bsd=/dev/hdaX, macos=/dev/hdaY, macosx=/dev/hdaZ

## our bootstrap partition:

boot=/dev/hda1

## ofboot is the openfirmware way to specify the bootstrap partition.
## If this isn't defined, yaboot fails on the G5 (unless you pass the necessary
## arguments to the mkofboot/ybin program).
## hd:X means /dev/sdaX (or /dev/hdaX).
## 
## G5 users should uncomment this line!!

#ofboot=hd:1

##hd: is open firmware speak for hda
device=hd:
partition=3

delay=5
defaultos=macosx
timeout=30
install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot

#################
## This section can be duplicated if you have more than one kernel or set of
## boot options - replace 2.6.7 with your kernel-version
#################
image=/boot/kernel-2.6.7
  label=Linux
  root=/dev/hda3
  sysmap=/boot/System.map-2.6.7
  read-only
##################

## G5 users should set 
##   macos=hd:13
##   macosx=hd:12
## instead of the example values.
macos=/dev/hda13
macosx=/dev/hda12
enablecdboot
enableofboot

當您完成 yaboot.conf 的設定時,您需要執行 mkofboot -v 來安裝 設定到 bootstrap 分割區。請不要忘記! 如果一切順利,您的設定檔和上面的一 樣,下次重開機時您將會看到一個簡單,五個選項的開機清單。如果您更新了您的 yaboot 設定檔,您只需要執行 ybin -v 更新 bootstrap 分割區 - mkofboot 只適用於第一次的設定。

關於更多相關 yaboot 的資料,請參考 yaboot 計畫。 接下來請到 重開機系統

10.c. 其他選擇:BootX

重要: BootX 只適用於 OldWorld 的 PPC 和 IBM 的系統架構!

BootX 需要先重開機。所以我們接下來就重開機吧 :)

離開 chrooted 的環境然後卸載所有掛載的分割區。接著輸入你已經等很久的神奇指令: reboot

原始碼 3.1: 離開 chroot,卸載所有分割區然後重開機

# exit
cdimage ~# cd
cdimage ~# umount /mnt/gentoo/proc /mnt/gentoo
cdimage ~# reboot

當然,不要忘了移除可開機光碟,否則會從光碟開機而不是 Mac OS X。

現在你的電腦在 MacOS,開啟 BootX 控制台。選擇 Options 然後取消 Used specified RAM disk。當你回到 BootX 主視窗後,你可以看到一個選項指定 根磁碟機及分割區,填入適當的設定。

BootX 可以設定開機時啟動 Linux,如果你這樣做的話,你會先看到你的電腦開機到 MacOS ,然後在啟動時,BootX 會載入並啟動 Linux。參閱 BootX 首頁 取得更多資訊。

現在重開機後進入 Linux,接著繼續 最終化 Gentoo 安裝

10.d. 重開機系統

離開 chrooted 的環境然後卸載所有掛載的分割區。接著輸入你已經等很久的神奇指令: reboot

原始碼 4.1: 離開 chroot,卸載所有分割區然後重開機

# exit
cdimage ~# umount /mnt/gentoo/proc /mnt/gentoo
cdimage ~# reboot

我們在 PPC FAQ 中提供更多協助。

接下來請到 安裝系統所需工具

11. 最終化您的 Gentoo 安裝

11.a. 使用者管理

加入一個每天使用的使用者

在 Unix/Linux 系統下登入成 root 工作是危險的,並應該盡量的避免。所以我們 強烈的建議您新增另一個使用者來應付日常的使用。

使用者所在的群組定義了使用者可以執行那些工作?底下的表格列出許多你會想用的重要 群組:

群組 說明
audio 可以存取音效裝置
cdrom 可以存取光碟機
floppy 可以存取磁碟
games 可以玩遊戲
usb 可以存取 USB 裝置
video 可以存取影像擷取器以及使用硬體加速
wheel 可以使用 su

例如,建立一個叫做 john 的使用者,他是 wheelusers、以及 audio 群組 的一員,請先用root登入(只有root可以新增使用者),然後執行 useradd

原始碼 1.1: 加入一個每天使用的使用者

Login: root
Password: (您的root密碼)
# useradd -m -G users,wheel,audio,tty -s /bin/bash john
# passwd john
Password: (輸入 john 使用者的密碼)
Re-enter password: (再次輸入密碼確認)

如果這個使用者需要在 root 下執行一些任務,他們可以使用 su - 暫時取得 root 的權限。另一個方法則是使用 sudo 套件,若是正確的設置該套件, 它將是非常安全的。

11.b. 非必要:安裝 GRP 套件

重要: 這個部分是給 GRP 使用者。其他的使用者應該略過這個部分並繼續閱讀 該何去何從?.

現在您的系統已經開機,登入一個您建立的使用者 (例如:john) 並使用 su - 來取得 root 權限:

原始碼 2.1: 取得 root 權限

$ su -
Password: (輸入您的 root 密碼)

現在我們需要將 Portage 的預編套件搜尋設定到第二片光碟(Gentoo 套件(Packages)光 碟)。首先掛載這張光碟:

原始碼 2.2: 掛載 Packages 光碟

(將 Gentoo Packages 光碟放到光碟機托盤)
# mount /mnt/cdrom

現在設定 Portage 使用 /mnt/cdrom 來使用預編套件:

原始碼 2.3: 設定 Portage 使用 /mnt/cdrom

# ls /mnt/cdrom

(如果有 /mnt/cdrom/packages 目錄:)
# export PKGDIR="/mnt/cdrom/packages"

(沒有的話:)
# export PKGDIR="/mnt/cdrom"

接下來,安裝您要的套件。Packages 光碟包含了許多預先編譯好的檔案,如 KDE:

原始碼 2.4: 安裝 KDE

# emerge --usepkg kde

請務必現在安裝編譯好的檔案。當您使用 emerge --sync 來更新 Portage (晚點將會學到) 時,那些編譯好的檔案可能不會相容於在您已更新過的 Portage ebuilds。您可以試著用 emerge --usepkgonly 代替 emerge --usepkg 來迴避這個問題。

恭喜,您的系統現在已經裝備完成!請繼續閱讀 該何去何從? 一文學習更多關於 Gentoo 的東西。

12. 然後呢?

12.a. 文件

恭喜!您現在有一個可以運行的 Gentoo 系統了。但接下來該何去何從呢?您接下來 有什麼選擇?該先探索什麼?Gentoo 提供它的使用者許多的方向,因此,它提供了 許多的特點並編寫成文件。

您應該先看一看 Gentoo Handbook 的下一章節名為 使用 Gentoo,它將會告訴您如果讓您的軟體 保持在最新的狀態、如果安裝更多的軟體、什麼是 USE 參數、Gentoo Init 系統的運 作方式等等。

如果您有興趣將您的系統最佳化成桌面使用,或著您想要學習如果設定您的系統至一個 完整的桌面系統,請閱讀 Gentoo 桌面文件資源

請翻閱我們的 文件資源 一頁取得我們 提供的完整的文件列表。

12.b. Gentoo 線上

我們永遠歡迎您加入 Gentoo 討論區 或是我們眾多的 Gentoo IRC 頻道

我們也有一些對所有使用者公開的 郵寄列表。 這頁將會介紹如何加入的資訊。

我們閉嘴的時間到了,並讓您享受您的安裝過程 :)

B. 使用 Gentoo

1. Portage 介紹

1.a. 歡迎使用 Portage

Portage 大概是 Gentoo 在軟體管理方面最傑出的創造。因為他具有很高的彈性及數不清 的功能,通常被視為 Linux 中最好的軟體管理工具。

Portage 完全以 PythonBash 寫成,因此他可以完全的 讓使用者看透,因為這兩個都是草稿語言。

大部分使用者會透過 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 搜尋輸出範例

*  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

移除軟體

當你想從系統上移除軟體,使用 emerge unmerge。這會告訴 Portage 從你的系統 中移除所有這個套件安裝的檔案,除了該套件在安裝後你修改過的設定檔。留下這 些設定檔讓你可以繼續使用這個套件,如果你重新安裝他的話。

然而,一個 嚴重警告 是:Portage 並 不會 檢查別的套件是否 依賴你要移除的套件。然而他會在你想要移除某些套件時警告你,因為移除後會搞雜系統。

原始碼 3.7: 從系統上移除 gnumeric

# emerge unmerge gnumeric

當你從系統上移除套件後,再安裝這個套件時自動安裝的相依套件會被留下來。要讓 Portage 知道相依套件也可以移除,使用 emergedepclean 功能。我 們會在之後討論他。

更新系統

為了讓你的系統保持在最佳狀態(更不用說安裝最新的安全性更新),你需要定期更新系統 。因為 Portage 只檢查在 Portage 樹中的 ebuilds,首先你需要更新 Portage 樹。當你 更新好了以後,你可以使用 emerge --update world 更新你的系統:

原始碼 3.8: 更新你的系統

# emerge --update world

Portage 會搜尋你安裝過的程式較新的版本。然而,他只會搜尋你要求安裝的軟體 - 而沒 有相依套件。如果你相要更新系統上每一個套件,加上 --deep 參數:

原始碼 3.9: 更新全系統

# emerge --update --deep world

如果你最近改變過任何 USE 旗標,你可能會想 要加入 --newuse。Portage 會檢查這個改變是否需要安裝新的套件會是重新編譯 已安裝的套件:

原始碼 3.10: 執行完整更新

# emerge --update --deep --newuse world

存根套件

一些在 Portage 樹中的套件實際上並沒有任何內容,而是用在安裝一系列的套件。例如說 ,kde 套件會設定相依許多 KDE 相關套件來在你的系統上安裝一個完整的 KDE 環 境。

如果你想要移除像這樣的套件,執行 emerge unmerge 並不會有太大幫助,因為他 的相依套件還是留在系統上。

Portage 有能力移除孤立相依套件,但是因為套件的相依性是動態的,你首先需要更新整 個系統,包括你改變 USE 旗標造成的改變。完成之後你可以執行 emerge depclean 移除孤立相依套件。做完以後,你需要重新編譯動態連結到已移除軟體,但現在不再需要 連結的套件。

這些事情可以用底下的指令處理:

原始碼 3.11: 移除孤立相依套件

# emerge --update --deep --newuse world
# emerge depclean
# revdep-rebuild

revdep-rebuild 是由 gentoolkit 套件提供的,不要忘記先安裝他:

原始碼 3.12: 安裝 gentoolkit 套件

# emerge gentoolkit

1.d. 當 Portage 在編譯時...

關於 SLOT,虛擬,分支,架構,和 Profile

如同我們前面說的,Portage 相當有威力,並且支援許多其他軟體管理工具缺乏的功能。 為了了解這些功能,我們會從各角度解釋 Portage 而不會太深入。

借著 Portage 但依套件的不同版本可以共同存在系統上。而其他發行版通常是以套件的版 本來命名(像 freetypefreetype2),Portage 使用一種叫做 SLOT 的技術。ebuild 使用它的版本來宣告特定的 SLOT。有著不同 SLOT 的套件 可以共存在同一個系統上。例如說,freetype 有著包含 SLOT="1"SLOT="2" 的 ebuild。

也有些套件提供相同的功能但透過不同方法實做。例如說,metalogdsysklogdsyslog-ng 都是系統紀錄器。依賴 "系統紀錄器" 的軟體不 能只相依一種紀錄軟體,像是 metalogd,因為其他的紀錄器也是一個不錯的選擇 。Portage 允許 virtuals:每一種系統紀錄器提供 virtual/syslog 讓軟 體可以相依 virtual/syslog

Portage 樹中的軟體可以存放在不同的分支中。預設系統只接受 Gentoo 視為穩定的套件。 大部份新的軟體剛提交時,先加到測試中的分支去,代表在他標示為穩定前需要更多的測 試。雖然你可以在 Portage 樹中看到這個軟體的 ebuild,在他標示為穩定分支前 Portage 不會去做更新。

一些軟體只能在特定的硬體架構上使用。可能是在其他架構上不能工作,需要更多測試, 或者是提交這個軟體到 Portage 的發展者不能確認這個套件能不能在不同平台工作。

Gentoo 的安裝包括特定的 profile,包含了在其他資訊之外,系統正常工作所需 的套件列表。

阻擋的套件

原始碼 4.1: Portage 警告阻擋套件 (加上 --pretend)

[blocks B     ] gnome-base/bonobo-activation (from pkg gnome-base/libbonobo-2.4.0)

原始碼 4.2: Portage 警告阻擋套件 (沒有 --pretend)

!!! Error: the gnome-base/bonobo-activation 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。當其中一個相依關係中標記一 個套件或虛擬 相容,他就成為阻擋套件。

要修正阻擋,你可以選擇不要安裝這個套件,或是先移除衝突的套件。在上面的範例中, 你可以選擇不要安裝 libbonobo 或是先移除 bonobo-activation

封鎖的套件

原始碼 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-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。 以下為一個簡短的列表:

原始碼 1.1: 簡短的可用 USE 參數

gtk     - Adds support for x11-libs/gtk+ (The GIMP Toolkit)
gtk2    - Use gtk+-2.0.0 over gtk+-1.2 in cases where a program supports both.
gtkhtml - Adds support for gnome-extra/gtkhtml
guile   - Adds support for dev-util/guile (interpreter for Scheme)
icc     - Use the Intel C++ Compiler if the package supports it
icc-pgo - Enable PGO data generation or use when use icc.
imap    - Adds support for IMAP

2.b. 使用 USE 參數

定義永久的 USE 參數

在我們希望您了解 USE 參數的重要性後,您現在需要定義您自己的 USE 參數了。

就如之前所提到的,所有的 USE 參數都是定義到 USE 的變數內。為了要方便使用 者可以搜尋和選擇 USE 參數,我們已經提供了 預設的 USE 設定。這個設定包含著 我們認為適合 Gentoo 使用者常用的。預設的變數是定義在 /etc/make.profile/make.defaults 檔案。讓我們來看看它吧:

原始碼 2.1: 預設的 /etc/make.profile/make.defaults 變數

USE="x86 oss apm arts avi berkdb crypt cups encode foomaticdb gdbm gif gpm
  gtk gtk2 imlib jpeg kde gnome libg++ libwww mad mikmod motif mpeg ncurses
  nls oggvorbis opengl pam pdflib png python qt quicktime readline sdl
  slang spell ssl svga tcpd truetype X xml2 xmms xv zlib"

就您所見,這個變數已經包含著許多關鍵字了。請 不要 更改 /etc/make.profile/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 參數。當您要安裝這種套件時,他們提供的 USE 參數會被加到您的 USE 設定內。要查看完整的提供 USE 參數的清單,查看 /etc/make.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 設定的優先度將按照以下的排列(從低到高):

  1. 放在 /etc/make.profile/make.defaults 預設的 USE 設定
  2. /etc/make.profile/use.defaults 承接的 USE 設定
  3. 使用者在 /etc/make.conf 定義的 USE 設定
  4. 使用者在 /etc/portage/package.use 定義的 USE 設定
  5. 以環境變數的方式定義的 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-rebuildgentoolkit 套件的一部分;不要忘了 先安裝他。

原始碼 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  N    ] net-www/mozilla-1.5-r1 +java +crypt -ipv6 -gtk2 +ssl +ldap 
+gnome -debug +mozcalendar -mozaccess -mozxmlterm -moznoirc -moznomail
-moznocompose -moznoxft 

除了emerge 以外還有別的軟體可以完成類似查詢的工作。事實上,我們有一個特別 的套件叫做 etcat。這是包含在 gentoolkit 的套件內。首先,安裝 gentoolkit

原始碼 3.2: 安裝 gentoolkit

# emerge gentoolkit

現在執行 etcat 然後使用參數查看某個套件的 USE 關鍵字。舉例來說 gnumeric 套件:

原始碼 3.3: Using etcat to view used USE-flags使用 etcat 查看使用的 USE 關鍵字

# etcat uses gnumeric
[ Colour Code : set unset ]
[ 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 ]
 - - libgda  : Adds GNU Data Access (CORBA wrapper) support for gnumeric
 - - gnomedb : 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.confFEATURES 變數來開啟或關閉特定 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 提供你他的狀態:

原始碼 3.3: 查看 ccache 狀態

# ccache -s

在非 Portage 的 C 程式編譯時使用 ccache

如果你想要在非 Portage 的 C 程式編譯時使用 ccache,在你的 PATH 變數中加入 /usr/lib/ccache/bin(在 /usr/bin 之前)。這可以藉由編輯 /etc/env.d/00basic 來完成:

原始碼 3.4: 編輯 /etc/env.d/00basic

 
PATH="/usr/local/bin:/opt/bin:/usr/lib/ccache/bin"

3.d. 已編譯程式套件支援

建立預編程式套件

Portage 支援安裝預先編譯好的套件。雖然 Gentoo 本身不提供預編的套件(除了 GRP 以外),Portage 可以完全明白預編套件。

如果套件已經安裝好的話,你可以使用 quickpkg 來建立預編套件,否則使用 emerge 指令加上 --buildpkg--buildpkgonly 參數。

如果你想要 Portage 把每一個你安裝的套件都建立預編套件,在 FEATURES 變數中加入 buildpkg

可以從 catalyst 得到建立預編套件更多的支援。請閱讀 Catalyst 參考手冊Catalyst Howto 取得更多資訊。

安裝預編套件

雖然 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 程序再一次的執行相關工作。但是這是是 rcboot)將會去 執行 /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 內共有定義七個執行階段:三個內部執行階段,和四個使用者定義的執行階段。 內部的執行階段叫做 sysinitshoutdownreboot 就和他們的 名字一樣:

使用者定義的執行階段包含著 /etc/runlevels 的自目錄: bootdefaultnonetworksingleboot 的執行階段將起始包含其他所有系統相關的服務 。剩下的三個執行階段則是依照不同的服務而類別:default 適用於日常運作 所需,nonetwork 適用於沒有網路連線的需求,和 single 則是在您需要整理系統時所用。

使用 Init Scripts

rc 的程序叫做 init scripts。每個在 /etc/init.d 的程序 都可以使用 startstoprestartpausezapstatusineediuseneedsmeusesme 或是 broken 為參數。

要開始,停止,或是重新啟動一個服務(和所有相依的服務),您應該使用 startstoprestart

原始碼 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 程序需要 第二個參數來告訴它要執行的動作:adddel 或是 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() 功能的定義。其他的則是非必需。

相依性

您總共有兩種相依性可以定義:useneed。就如我們之前提到的, 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() 的功能。這個將包含著所有相關 啟動服務的指令。我們建議您使用 ebegineend 功能來通知使用者正在 發生什麼事:

原始碼 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 系統將會自動填入這些功能。

Adding Custom Options加入自訂選項

如果您想要讓您的 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: 加入相關起始程序

# ls /etc/runlevels/default
acpid  domainname  local  net.eth0  netmount  postfix  syslog-ng  vixie-cron
# rc-update add acpid offline
# rc-update add domainname offline
# rc-update add local offline
# rc-update add syslog-ng offline
# rc-update add vixie-cron offline

現在編輯您的開機程式設定檔然後加入一個新的 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

使用 bootlevelsoftlevel 的方法完全類似。唯一不一樣的就是您需要 定義另外一個 "boot" 執行階段而不是第二個 "default" 執行階段。

5. 環境變數

5.a. 系統變數?

這是什麼

系統變數是一個有名稱的物件,包含一個或多個程式要用的資訊。許多使用者(特別是 Linux 新手)覺得這有一些古怪而且難以管理。這想法有一些錯誤:使用者可以用系統變數輕鬆的 改變一個或多個程式設定。

重要的範例

下面的表格顯示許多 Linux 使用的變數以及它們的用途。範例在表格後面展示。

變數 說明
PATH 這個變數包含用冒號分隔的目錄列表,讓系統尋找可執行檔。如果您輸入一個可執行檔 (例如 lsrc-updateemerge)但是這個檔案不在列表中的 目錄,您的系統不會執行它(除非您輸入完整的路徑,如 /bin/ls)。
ROOTPATH 這個變數和 PATH 有相同功能,但是這裡面包含的目錄是根使用者數入指令時 才會尋找。
LDPATH 這個變數包含以冒號分隔的目錄列表,讓動態連結檔在裡面搜尋函式庫。
MANPATH 這個變數包含以冒號分隔的目錄列表,讓 man 指令搜尋手冊頁。
INFODIR 這個變數包含以冒號分隔的目錄列表,讓 info 搜尋資訊頁。
PAGER 這個變數包含顯示檔案內容的程式路徑(例如 lessmore)。
EDITOR 這個變數包含編輯的程式路徑(例如 nanovi)。
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 目錄。在目錄中 您會發現許多檔案,例如 00basic05gcc 等。這裡面包含檔 案名稱中所提到的程式需要用的變數。

例如,當您安裝 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"

當您執行 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

5.c. 定義局部變數

使用者自行設定

您或許不想要定義全域變數。例如您可能要加入 /home/my_user/binPATH 變數中,但是您不想要其他使用者在他們的 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 也有 一個預設的設定檔案:/etc/make.profile/make.defaults。關於 profiles 和 /etc/make.profile 資料夾,待會我們將解釋更多。

如果你打算變更設定變數,不要修改 /etc/make.globals/etc/make.profile/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 變 數來定義。

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 使用測試分支,在您的系統架構前加上 ~。

舉例來說,要選擇 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

在該行文字之後加上正確的關鍵字(keyword)也可以達到相同的目的,以 x86 架構來說:

原始碼 2.2: /etc/portage/package.keywords 內 gnumeric 的設定,完整版

app-office/gnumeric ~x86

測試特定版本

如果您想要使用軟體在測試分支內某個特定的版本,但是您不希望 Portage 在後續的軟體更新上繼續使用測試分支,您可以在檔案 package.keywords 內加入版本資訊。在這種情況下,您 一定要 使用 = 運算子,您也可以使用 <=, <, > 或是 >= 運算子,鍵入一個版本範圍。

在任何情況下,如果您要加入版本資訊,您 一定要 使用運算子。如果您不想加入版本資訊,您 不可以 使用運算子。

在下面的例子中,我們要求 Portage 接受 gnumeric-1.2.13:

原始碼 2.3: 使用特定 gnumeric 版本

=app-office/gnumeric-1.2.13 

3.c. 使用被封鎖的套件

檔案 package.unmask

當一個套件被 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 安裝比 development-sources-2.6.8.1 更新版的 kernel sources,您可以將下列一行文字加入 package.mask

原始碼 3.2: /etc/portage/package.mask 範例

>sys-kernel/development-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'):

如果你輸入 -1etc-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 相當直觀:只要加入你想製作的套件名。

例如說,打包 curlartsprocps

原始碼 3.1: quickpkg 使用範例

# quickpkg curl arts procps

預先編譯好的套件會放在 /usr/portage/packages/All。到這些套件的符號 連結在 /usr/portage/packages/<category>

5. 愉悅的使用官方的Portage Tree

5.a. 使用 Portage 樹子集合

排除套件/類別

你可以選擇只更新某些類別/套件並且忽略其他類別/套件。我們讓 emerge --sync 在執行 rsync 時排除類別/套件來達成這個功能。

預設上,rsync 會檢查 /etc/portage/rsync_excludes 的內容(如 果存在的話),裡面包含了你不要 rsync 更新的類別或套件。

然而要注意的是這可能導致相依性問題,因為套件可能相依被排除的套件。

5.b. 加入非官方套件

定義 Portage Overlay 目錄

你可以要求 Portage 使用非官方,但是以透過 Portage 樹使用的 ebuild。建立一個新 目錄(例如說 /usr/local/portage)來存放其他人提供的 ebuild。使用和官 方 Portage 樹相同的目錄架構!

然後在 /etc/make.conf 中定義 PORTDIR_OVERLAY 指向你使用的目錄。現 在當你使用 Portage 時,他也會將這些 ebuild 納入考慮,而且下次你執行 emerge --sync 時不會移除/覆蓋這些 ebuild。

5.c. 非 Portage 維護的軟體

使用 Portage 和自己維護的軟體

在某些情況你會想要自己設定,安裝,維護軟體而不要 Portage 自動完成這些過程,雖然 是 Portage 已經提供這些軟體了。已知的例子是核心原始碼和 nvidia 驅動程式。你可以 作一些設定讓 Portage 知道某個套件已經手動裝到系統上了。這個過程叫做 注入 而且透過 /etc/portage/profile/package.provided 檔案 Portage 支援這 個功能。

舉例來說,如果你想要告訴 Portage development-sources-2.6.8.1 你已經手動 裝好了,把底下幾行加到 /etc/portage/profile/package.provided

原始碼 3.1: package.provided 範例

sys-kernel/development-sources-2.6.8.1

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 功能重新建立 Manifestdigest-<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: 建立套件

(建立 Portage 相容,已編譯好套件)
# ebuild path/to/ebuild package

(建立 RPM 套件)
# ebuild path/to/ebuild rpm

然而用此方式建立的 RPM 檔案並不包含 ebuild 的相依性相關訊息。

6.d. 更多資訊

要更多關於 Portage、ebuild 程式和 ebuild 檔案的資訊,請查閱下列 man page:

原始碼 4.1: Man pages

$ man portage    (Portage 本身)
$ man emerge     (emerge 命令)
$ man ebuild     (ebuild command)
$ man 5 ebuild   (The ebuild file syntax)

你也可以在 開發者手冊 找到更多有關開發的資訊

列印

最後更新 2004年9月1日

這份翻譯的文件已不再被維護

大綱: 這是 Gentoo 手冊,集合了 Gentoo/Linux 的資料。

Sven Vermeulen
Author

Daniel Robbins
Author

Chris Houser
Author

Jerry Alexandratos
Author

Seemant Kulleen
Gentoo x86 Developer

Tavis Ormandy
Gentoo Alpha Developer

Jason Huebel
Gentoo AMD64 Developer

Guy Martin
Gentoo HPPA developer

Pieter Van den Abeele
Gentoo PPC developer

Joe Kallar
Gentoo SPARC developer

John P. Davis
Editor

Pierre-Henri Jondot
Editor

Eric Stockbridge
Editor

Rajiv Manglani
Editor

Jungmin Seo
Editor

Stoyan Zhekov
Editor

Jared Hudson
Editor

Colin Morey
Editor

Jorge Paulo
Editor

Carl Anderson
Editor

Jon Portnoy
Editor

Zack Gilburd
Editor

Jack Morgan
Editor

Benny Chuang
Editor

Tobias Scherbaum
Editor

Lars Weiler
Editor

Grant Goodyear
Reviewer

Gerald J. Normandin Jr.
Reviewer

Donnie Berkholz
Reviewer

Ken Nowack
Reviewer

Lars Weiler
Contributor

YiDa Chiang
Translator

Eternity
Translator

Frid Hou
Translator

Joseph Yen
Translator

LY Lai
Translator

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Online Kredit Index
Copyright 2001-2009 Gentoo Foundation, Inc. Questions, Comments? Contact us.