Gentoo Linux HPPA 手冊

Sven Vermeulen   Author
Roy Marples   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
Xavier Neys   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
dxcdxc   Translator

最後更新 2006年 3月 31日
這份文件的原始版本已不再被維護

內容:

  • 安裝 Gentoo
    您可以使用多種方式安裝 Gentoo。在這個指南內我們將解釋如何使用 Gentoo LiveCD 進行 Gentoo 的安裝。

    1. 關於 Gentoo Linux 安裝步驟。
      在這一章中將會為您簡介在這一部分的安裝步驟。
    2. 選擇適合的安裝方式
      安裝 Gentoo 有許多方式。您可以使用我們的 minimal LiveCD來安裝,或者使用 Universal LiveCD 也可以。
    3. 設定網路
      為了能夠下載到最新版的原始檔,您將要先作一些設定。
    4. 準備磁碟
      為了要安裝 Gentoo,您一定要建立一些所需的分割區。這章的內容將為您解釋如何設定磁碟分割。
    5. Gentoo 安裝檔案
      Gentoo 使用 stage3 壓縮檔來安裝。在這一章會告訴你如何解開 stage3 壓縮檔,以及設定 Portage。
    6. 安裝 Gentoo 基礎系統
      在你安裝及設定好 stage3 後,您將會擁有一個 Gentoo 的基礎系統。這章將會為您解釋如何到達完成安裝的過程。
    7. 設定核心
      Linux kernel 是每個版本的核心。這章將解釋如何編譯您的核心。
    8. 設定您的系統
      您將需要編輯一些重要的設定檔。這章將解釋這些重要設定檔的功能以及設定。
    9. 安裝必要的系統工具
      就如之前所提的,Gentoo 的哲學是選擇。這章將帶領您選擇並且安裝一些重要的工具。
    10. 設定開機管理程式
      在這章中,我們將會為您簡介PALO開機管理程式和一些用來設定PALO的必要程序步驟。
    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的資訊。
  • Gentoo 網路設定
    廣泛的 Gentoo 網路設定指南

    1. 新手上路
      在大部份的環境下設定及啟動網路介面的指南。
    2. 進階設定
      這裡學習這些設定如何工作 - 在學習網路模組前你需要先了解這一章。
    3. 網路模組
      Gentoo 提供你有彈性的網路設定 - 這篇告訴你如何選擇不同的 DHCP 客戶端程式,設定頻寬合併,橋接,VLAN 等等。
    4. 無線網路
      無線網路的設定並不很直觀。希望這篇能幫你設定!
    5. 新增功能
      如果你想要探險,你可以加上你自己的網路函數。
    6. 網路管理
      給筆記電腦或是移動電腦到不同網路的人參考。

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。您可以下載然後使用我們的光碟安裝,從其他版本,從開機光碟(如 Knoppix),從網路開機的環境,從一個救援磁片,等等。

這份文件將會包含著使用我們的光碟為安裝方式,或是在某些狀況來說,網路開機。安裝步驟中假設你想要使用最新的套件。如果你想要用無網路安裝,你應該閱讀 Gentoo 2006.0 手冊,裡面包含了無網路環境的安裝指南。

請注意,如果您打算使用 GRP (Gentoo 參考平台,一套供即時使用的預編套件),您 一定 要按照 Gentoo 2006.0 手冊 的說明。

關於其他的安裝方法請參考「其他安裝指南」。我們也提供也同樣有用的 Gentoo/x86 安裝技巧 文件。如果您認為這使用手冊說明的太詳細,您可以使用我們 文件資源中的快速安裝手冊,如果您使用的架構已經有文件。

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

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

碰到問題?

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

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

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

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

2. 選擇適合的安裝方式

2.a. 硬體需求

介紹

開始前,我們將先列出能成功安裝 Gentoo Linux 的硬體清單。

硬體需求

硬體支援列表可以在 PA 團隊網站找到。您可以在 Parisc-Linux 硬體資料庫取的您的機器額外的資訊。

記憶體 64 MB
磁碟空間 1.5 GB (不包含置換分割區)
置換分割區 至少 256 MB

2.b. Gentoo 安裝光碟

介紹

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

所有的安裝光碟將會讓您可以開機進入安裝,設定網路,啟始化分割區,然後從網路進行 Gentoo 的安裝。我們目前提供兩種安裝光碟,除非你要用最新的套件包作網路安裝,這兩種都適合用來安裝 Gentoo。

如果你想在沒有網路的狀況下安裝 Gentoo,請依照 Gentoo 2006.0 手冊 中列出的安裝步驟。

我們目前提供的兩種安裝光碟是:

  • Gentoo Minimal 安裝光碟,一個極簡,沒有廢話的可開機光碟,目的是提供 開機,設定網路,以及接著安裝 Gentoo。
  • Gentoo Universal 安裝光碟,除了和 Minimal 安裝光碟 差不多功能的開機光碟外, 還包含數個 stage3 (對不同的子架構作最佳化)壓縮檔。

為了幫你決定用那種安裝光碟,我們列出每一種安裝光碟的主要優點及缺點。

Gentoo's Minimal 安裝光碟

Minimal 安裝光碟的名稱是 install-hppa-minimal-2006.0.iso,只有 75 MB 大。你可以使用這個安裝光碟來安裝 Gentoo,但是需要連接網際網路。

Minimal 安裝光碟 優點及缺點
+ 最小的下載光碟
- 不包含 stage3 壓縮檔,沒有 Portage,沒有預先編好的套件,因此不適合非網路安裝。

Gentoo 的 Universal 安裝光碟

Universal 安裝光碟 名稱是 install-hppa-universal-2006.0.iso,他佔滿了一整片 339 MB 的光碟。你可以用這片光碟安裝 Gentoo,此外還可以用他進行無網路安裝,可能是你想在你目前用的電腦以外的安裝 Gentoo 就會用到了 :)

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

Universal 安裝光碟 優點及缺點
+ 包含著所有您需要的。您可以不用網路連線進行安裝。
- 要下載的檔案龐大

其他光碟

你或許已經發現在鏡像站上有 套件光碟。這些並不是安裝光碟,而是在無網路安裝時可以使用的資源。他包含預先編譯好的套件(俗稱 GRP 包),讓你可以方便,輕鬆的在安裝好 Gentoo 後安裝額外的程式(像是 OpenOffice.org,KDE,GNOME,...)。

如果你想要使用套件光碟快速安裝軟體,請先確認你抓的光碟是和你使用的 stage3 壓縮檔同架構。

Stage3 壓縮檔

stage3 壓縮檔是包含了 Gentoo 最小系統的檔案,足夠讓你依照這份文件的指示安裝 Gentoo。之前的 Gentoo Handbook 介紹你使用三個 stage 壓縮檔之一來安裝。而現在仍然有提供 stage1 和 stage2 壓縮檔,但是正式的安裝步驟中使用 stage3 安裝。如果你想要用 stage1 或 stage2 來安裝,請參考 Gentoo FAQ 中的 我如何用 stage1 或 stage2 安裝 Gentoo?

2.c. 下載,燒錄,然後使用 Gentoo安裝光碟開機

下載然後燒錄安裝光碟

您將選擇使用 Gentoo安裝光碟 。我們將要先下載安裝光碟然後燒錄為光碟。我們之前談過有一些可用的安裝光碟,但是您要到那裡下載呢?

請查看我們的 對映站 然後選擇最靠近您的地點,然後再到 experimental/hppa/livecd 的目錄尋找適合您的 ISO 檔案。這些是完整的 CD 映像檔方便讓您寫入 CD-R。

你可以從我們的 鏡像站 取得任何一種的 LiveCD (套件光碟也是,如果你需要的話)。安裝光碟 是放在 releases/hppa/2006.0/installcd 目錄下。

目錄中你可以看到 ISO 檔。他們是完整的光碟影像檔,你可以把他們燒到光碟上。

下載好以後,可可以用底下的方法檢查他的正確性:

  • 你可以用我們提供的 MD5 檢查碼計算工具算出他的 MD5 檢查碼(如 Linux/Unix 下的 md5sum 或 Windows 板的 md5sum
  • 你可以用我們提供的金鑰簽名。在你開始前需要先取得我們使用的公開金鑰 (17072058)。

執行底下指令使用 GnuPG 程式取得公開金鑰。

原始碼 1: 索取簽名檔

$ gpg --keyserver subkeys.pgp.net --recv-keys 17072058

然後檢查簽名:

原始碼 2: 檢查簽名

$ gpg - -verify <簽名檔> <下載的映像檔>

如要燒錄所下載的光碟映像檔,您將需要選擇 raw 的燒錄格式。我們會在此討論 cdrecord 和 k3b;關於其他可以在 Gentoo FAQ 內找到。

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

使用安裝光碟 開機

注意: 如果你在使用安裝光碟 或其他媒體開機時有任何問題,請參閱 PA-RISC Linux Boot HOWTO。

啟動您的 HPPA 系統。當開機程序進行中,您將會看到類似以下訊息:

原始碼 3: HPPA 開機訊息

Searching for Potential Boot Devices.
To terminate search, press and hold the ESCAPE key.

當此訊息顯示時,請在選項表單出現前按住 ESC 鍵。這或許會讓您等待一陣子,請耐心等待。預設來說,您將會進入到 BOOT_ADMIN 操控介面。如果您看到選單,選擇 Enter Boot Administration mode 進入 BOOT_ADMIN 操控畫面。您將會看到一個 '>' 畫面。

將 Gentoo安裝光碟 放到光碟機。如果您不知道您的光碟機的 SCSI ID,您的 PA-RISC 站將會在您輸入 search 指令時自動幫您尋找。

原始碼 4: 尋找SCSI ID

> search
Searching for Devices with Bootable Media.
To terminate search, please press and hold the ESCAPE key.
(如果您要停止,請按註 ESCAPE 鍵)

您的 PA-RISC 站現在將會顯示所有可用來開機的媒介。這將會類似於以下範例:

原始碼 5: 可開機媒介

Device Selection      Device Path             Device Type and Utilities
---------------------------------------------------------------------------
P0                    scsi.5.0                TOSHIBA CD-ROM XM-3301TA
IPL
P1                    scsi.2.0                COMPAQ ST32550N
IPL
P2                    lan.0010a7-06d1b6.3.6   server
IPL

要從光碟機啟用,您將需要附帶裝置的位址。舉例來說,如果我們要從 TOSHIBA 光碟機啟用,我們將要需要輸入以下指令:

原始碼 6: 使用光碟開機

> boot scsi.5.0 ipl
Trying scsi.5.0

ipl 的關鍵字 (Initial Program Loader) 告訴 palo (PA-RISC boot LOader)進入互動模式。這將方便讓您更改核心開機參數等其他功能。

當開機成功時,palo 將會起始至互動模式:

原始碼 7: PALO 互動模式

Boot path initialized.
Attempting to load IPL.
Hard booted.
palo ipl 1.5 root@hope Sat Apr 23 18:06:47 CEST 2005
Boot image contains:
0/vmlinux32 6241293 bytes @ 0x3904000
0/vmlinux64 8352719 bytes @ 0x3ef8000
0/ramdisk 1007589 bytes @ 0x105800
Information: No console specified on kernel command line. This is normal.
PALO will choose the console currently used by firmware (serial).Current command line:
0/vmlinux initrd=initrd TERM=linux root=/dev/ram0 init=/linuxrc cdroot looptype=squashfs loop=/livecd.squashfs hda=scsi console=ttyS0
0: 0/vmlinux
1: initrd=initrd
2: TERM=linux
3: root=/dev/ram0
4: init=/linuxrc
5: cdroot
6: looptype=squashfs
7: loop=/livecd.squashfs
8: hda=scsi
9: console=ttyS0
<#>    edit the numbered field
'b'    boot with this command line
'r'    restore command line
'l'    list dir

這先參數通常是最適合使用的。

如果您需要其他的功能,您一定要在指令的後面加入相關關鍵字。要加入關鍵字,更改最後一個區域,然後在您要加入的關鍵字前面放入一個空格。目前唯一殖入的關鍵字為 cdcache,告訴安裝光碟 將它載入記憶體方便您解除光碟的掛載。而 - noload=module1,[module2,[...]] 讓你不載入指定的模組。

原始碼 8: 加入 hdb=scsi 為開機參數

(or 'b' to boot with this command line)? 9
console=ttyS0 hdb=scsi

現在您已經調整過您的開機參數了,啟動它吧。

原始碼 9: 啟動核心

(or 'b' to boot with this command line)? b

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

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

其他硬體設定

大部份的 hppa 機器都有內建的網路卡。可以使用已編入核心內的 lasi 驅動程式。新的可以使用已編譯成模組的 tulip 驅動程式。要使用新的網路卡,您將需要載入它的驅動程式。

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

原始碼 10: 載入核心模組

# modprobe tulip

選擇性:使用者帳號

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

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

原始碼 11: 更改 root 密碼

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

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

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

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

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

原始碼 13: 更換使用者

#  su john -

選擇性:在安裝的過程中查看使用手冊

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

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

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

 # links /mnt/cdrom/docs/handbook/html/index.html

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

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

# links http://www.gentoo.org/doc/en/handbook/handbook-hppa.xml

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

選擇性:開啟 SSH 伺服器

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

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

原始碼 16: 開啟 ssh 伺服器

# /etc/init.d/sshd start

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

3. 設定網路

3.a. 自動偵測網路

或許他已經可以工作了?

如果你的電腦是接在有 DHCP 伺服器的乙太網路下,非常有可能網路設定已經自動設好了。如果是這樣的話,你應該可以使用 Installation CD 上許多網路相關指令,像是 ssh,scp ,ping, irssi,wget 及 links 之中任何一個。

如果網路已經設好了, /sbin/ifconfig 指令應該會顯示 lo 之外的網路裝置,像是 eth0:

原始碼 1: /sbin/ifconfig for a working network configuration

# /sbin/ifconfig
(...)
eth0      Link encap:Ethernet  HWaddr 00:50:BA:8F:61:7A
inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
inet6 addr: fe80::50:ba8f:617a/10 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0
TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0
collisions:1984 txqueuelen:100
RX bytes:485691215 (463.1 Mb)  TX bytes:123951388 (118.2 Mb)
Interrupt:11 Base address:0xe800

選擇性:設定代理伺服器

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

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

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

(如果是 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"

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

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

http://username:password@proxy.gentoo.org:8080

測試網路

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

原始碼 4: 測試網路

# ping -c 3 www.yahoo.com

如果你可以正常使用網路,請跳過以下部份,從 準備磁碟 繼續。如果沒有,請往下繼續 :)

3.b. 自動網路設定

如果您的系統擁有多個網路卡,它們將會以 eth0,eth1,等以此類推。請確認您的顯示卡可以使用。所有的文件將會以 eth0 為使用範例。

如果您的網路不能自動作用,您可以使用有些安裝媒介提供的 net-setup(正常網路或是無線網路),adsl-setup(ADSL-使用者)。或是 pptp(PPTP使用者 - 只適用於 x86)。

如果您使用的安裝方式沒有提供以上所說明的工具或是無法正常使用網路,請從 手動網路設定 繼續。

  • 普通的區網使用者應該要從 預設:使用 net-setup
  • ADSL 的使用者應該要從 其他選擇:使用 RP-PPPoE 繼續
  • PPTP 使用者應該要從 其他選擇:使用 PPTP 繼續

預設:使用net-setup

如果網路沒有自動設定,設定網路最間單的方式就是執行 net-setup:

原始碼 5: 執行 net-setup

# net-setup eth0

net-setup 將會問您一些關於您的網路環境的問題。當您完成的時候,您應該會有一個可用的網路連線。就和剛剛所講的一樣,您應該要測試您的網路連線。如果測試正常,恭喜!您現在可以開始安裝 Gentoo 了。請跳過以下的部份從 準備磁碟 開始。

如果您的網路還是無法正常運作,請從 手動網路設定 繼續。

其他選擇:使用 RP-PPPoE

假設您需要 PPPoE 連線至網路,Installation CD (任何版本)都會有提供簡單的 rp-pppoe 供您使用。使用我們提供的 adsl-setup 程序來設定您的連線。您將會被帶入網路裝置連線到 adsl 數據機的畫面。這個畫面包括了您的帳號,密碼,DNS IP 和問您是否需要簡易的防火牆。

原始碼 6: 使用 rp-pppoe

# adsl-setup
# adsl-start

如果有出錯,請仔細檢查 /etc/ppp/pap-secrets 或是 /etc/ppp/chap-secrets 查看您的帳號及密碼。如果您的網路裝置不存在,您將要載入相關的網路模組。在這個狀況,您應該從 手動網路設定 繼續。

如果一切正常,請從 準備磁碟 繼續。

其他選擇:使用 PPTP

注意: 只有 x86 有 PPTP 支援

如果您需要 PPTP 支援,您可以使用我們的 Installation CD 提供的 pptpclient。但是您將需要先確定您的設定無誤。編輯 /etc/ppp/pap-secrets 或是 /etc/ppp/chap-secrets 確定它包含著正確的帳號及密碼:

原始碼 7: 編輯 /etc/ppp/chap-secrets

# nano -w /etc/ppp/chap-secrets

然後依照需要調整 /etc/ppp/options.pptp:

原始碼 8: 編輯 /etc/ppp/options.pptp

# nano -w /etc/ppp/options.pptp

當設定完成,只要執行 pptp(包括您在 options.pptp 不能設定的)連線至伺服器:

原始碼 9: 連線至撥號伺服器

# pptp <server ip>

現在從 準備磁碟 繼續。

3.c. 手動網路設定

載入相關網路模組

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

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

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

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

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

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

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

(舉例來說,我們將載入 pcnet32 模組)
# modprobe pcnet32

要檢查您的網路卡是否被偵測到,使用 ifconfig 來偵測。一個被偵測到的網路卡將會類似以下被列出來:

原始碼 12: 測試網路卡是否可用,成功

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

如果您收到以下錯誤,那麼網路卡則是沒被偵測到:

原始碼 13: 測試網路卡是否可用,失敗

# ifconfig eth0
eth0: error fetching interface information: Device not found

假設您現在有一張被偵測到的網路卡,您可以重新嘗試 net-setup 或是 adsl-setup (現在應該可以用了),但是,對於其他人,我們現在將為您解釋如何手動設定網路。

選擇以下其中一個適用的部份來設定您的網路:

  • 使用 DHCP 來自動索取 IP
  • 準備無線網路 如果您有無線網路卡的話
  • 了解網路詞彙 將解釋您該懂得網路設定
  • 使用 ifconfig 和 route 將解釋如何手動設定網路

使用 DHCP

DHCP (Dynamic Host Configuration Protocol) 可以讓您自動索取相關網路資料( IP位置, netmask,broadcast address,gateway,nameserver 等等)。但是在您的網路內一定要有一個可用的 DHCP 伺服器(或是您的提供商提供 DHCP 服務)。要網路介面自動索取相關資料,使用 dhcpcd:

原始碼 14: 使用 dhcpcd

# dhcpcd eth0
一些網路管理員可能會要求你使用
DHCP 伺服器提供的主機名稱及領域名稱。
如果是這種情況,使用
# dhcpcd -HD eth0

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

準備無線網路

注意: 不是所有的 Installation CD 都有 iwconfig 的指令。如果真的碰上這種情況,您可以參考 linux-wlan-ng 計畫。

如果您有一張無線 (802.11)網路卡,您將需要在繼續前先設定好您的無線網路。如要查看目前的設定,您可以使用 iwconfig。執行 iwconfig 將會列出類似以下的訊息:

原始碼 15: 顯示目前的設定

# iwconfig eth0
eth0      IEEE 802.11-DS  ESSID:"GentooNode"
Mode:Managed  Frequency:2.442GHz  Access Point:
00:09:5B:11:CC:F2
Bit Rate:11Mb/s   Tx-Power=20 dBm
Sensitivity=0/65535
Retry limit:16   RTS thr:off
Fragment thr:off
Power Management:off
Link Quality:25/10 Signal level:-51 dBm Noise level:-102 dBm
Rx invalid  nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx
excessive retries:237 Invalid misc:350282 Missed beacon:84

注意: 有些網路卡的裝置名稱或許是 wlan0 或 ra0 而不是 eth0。不要加任何參數執行 iwconfig 確認裝置的名稱。

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

原始碼 16: 更改 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 位元的(一和零)。現在來看一個範例:

原始碼 17: 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 位置。

原始碼 18: 網路和主機的區別範例

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 位置。這是用來聽取廣播封包的意思。

原始碼 19: 廣播位址

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:

原始碼 20: 使用 ifconfig

# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up

現在使用 route 設定您的路由。將 ${GATEWAY} 更改為您的 gateway IP 位置:

原始碼 21: 使用 route

# route add default gw ${GATEWAY}

現在使用您最喜歡的編輯器(以我們的例子,我們使用 nano)編輯 /etc/resolv.conf:

原始碼 22: 建立 /etc/resolv.conf

# nano -w /etc/resolv.conf

現在將您的 nameserv (名稱服務器)按照以下的版面填入。請確定將 ${NAMESERVER1} 和 ${NAMESERVER2} 更改為相關的名稱服務器的位置:

原始碼 23: /etc/resolv.conf 版面

nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}

完成了。現在 ping 一些網路伺服器(如 Google)測試您的網路連線。如果成功,恭喜!您現在已經可以準備安裝 Gentoo 了。請從 準備磁碟 繼續

4. 準備磁碟

4.a. 介紹區塊裝置

區塊裝置(Block Devices)

我們將仔細的介紹 Gentoo Linux 和 整體的Linux 的磁碟方式,包括 Linux 檔案系統,分割區,和區塊裝置。然後,當您了解磁碟和檔案系統,您將會學到如何為您的 Gentoo Linux 安裝設定分割區和檔案系統。

首先,我們將要介紹 區塊裝置。最有名的區塊裝置大概就是代表 Linux 系統上的第一個 SCSI 磁碟將會是 /dev/sda。

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

分割區和 Slices

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

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

多少和多大?

多少分割區通常是按照您的使用環境。舉例來說,如果您有很多個使用者,您就會因為安全問題和能夠簡易備份將您的 /home 分開。如果您將 Gentoo 安裝為郵件伺服器那您的 /var應該分開,因為郵件通常是放在 /var。選擇好的檔案系統將會提昇您的效能。遊戲伺服器因為大多數的遊戲伺服器都是安裝在 /opt 所以通常會將 /opt 分開。原因很和 /home 類似:安全問題和備份。你一定會想分給 /usr 比較大的空間:不只是因為他包含大部份的程式,Portage 樹,除了他儲存的各種原始碼知外,本身需要 500 Mb 的空間。

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

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

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

4.c. 在 HPPA 上使用 fdisk 分割您的磁碟

使用 fdisk 建立您想要的分割區:

原始碼 1: 分割磁碟

# fdisk /dev/sda

HPPA 機器使用 PC 標準 DOS 磁區分割表。只要按下 o 就可以簡單的建立新的 DOS 分割表。

原始碼 2: 建立 DOS 分割表

# fdisk /dev/sda
Command (m for help): o
Building a new DOS disklabel.

PALO 需要一個特別的分割區。您將需要建立一個最少 16MB 大小的分割區在磁碟的頂端。這個分割區的類別一定要是 f0(Linux/PA-RISC boot)。

重要: 如果您略過這個上面的步驟,您的系統將會停止愛您然後無法開機。另外,如果您的硬碟是大於 2GB 的容量,記得將您的開機分割區放在 2GB 磁碟的最前端。不然 PALO 將無法閱讀 2GB 之後的核心。

原始碼 3: 一個簡單的分割規劃

# cat /etc/fstab
/dev/sda2    /boot   ext3    noauto,noatime   1 1
/dev/sda3    none    swap    sw               0 0
/dev/sda4    /       ext3    noatime          0 0
# fdisk /dev/sda
Command (m for help): p
Disk /dev/sda: 4294 MB, 4294816768 bytes
133 heads, 62 sectors/track, 1017 cylinders
Units = cylinders of 8246 * 512 = 4221952 bytes
Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           8       32953   f0  Linux/PA-RISC boot
/dev/sda2               9          20       49476   83  Linux
/dev/sda3              21          70      206150   82  Linux swap
/dev/sda4              71        1017     3904481   83  Linux

現在您的分割區已經建立完成了,請從 建立檔案系統 繼續。

4.d. 建立檔案系統

介紹

現在您的分割區已經建立完成了,接下來該將檔案系統放置上去。如果您不在乎要選擇什麼檔案系統然後滿意我們在手冊內的範例,請從 將檔案系統套用到分割區。不然請繼續閱讀關於更多的檔案系統﹍

檔案系統?

HPPA 的架構提供多個穩定的檔案系統。如 Ext2,ext3,XFS 和 reiserfs。其他則是實驗性

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

ext3 為 ext2 的日誌版,提供了 metadata 日誌系統 並且可以快速地使用日誌系統復原。ext3 是個相當不錯並且可靠的檔案系統. 它有額外的 hashed b-tree 索引功能,開啟他後幾乎任何情況內都是高效能。你可以在 mke2fs 指令加上 -O dir_index 開啟這個功能。簡單來說¡Aext3 是一個很棒的檔案系統。

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
jfs mkfs.jfs

以我們的範例來說,開機分割區(在我們的例子裡為 /dev/sda2)為 ext2 和主分割區(在我們的例子為 /dev/sda4)為 ext3,您將要使用:

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

# mke2fs /dev/sda2
# mke2fs -j /dev/sda4

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

啟用 Swap 分割區

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

原始碼 5: 建立 swap 簽名

# mkswap /dev/sda3

要啟用 swap,使用 swapon 指令:

原始碼 6: 啟動 swap

# swapon /dev/sda3

現在使用上面的指令建立然後啟動 swap。

4.e. 掛載

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

原始碼 7: 掛載分割區

# mount /dev/sda4 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/sda2 /mnt/gentoo/boot

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

我們將需要掛載 proc 檔案系統(一個核心的虛擬介面)並且把它放在 /proc 。但是第一我們需要先在磁區中配置一個位置。

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

5. Gentoo 安裝檔案

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

設定正確的日期/時間

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

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

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

# date
Fri Mar 29 16:21:18 CEST 2005

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

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

# date 022916212005

選擇您所需要的

接下來的步驟您將需要將您選擇的 stage3 壓縮檔安裝到您的系統上。您可以從網路下載,或是從我們的 Gentoo Universal Installation CD 開機,然後從光碟上複製。如果您使用 Universal CD 而且你想要用的 stage 就在 CD 中,從網際網路下載只是浪費頻寬,因為他們是一樣的。在大部份的情況,uname -m 可以幫助你決定要下載那一種 stage 檔。

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

  • 預設:從網路下載的 stage
  • 其他選擇:使用 Installation CD 裡面的 Stage 壓縮檔

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

下載 Stage 壓縮檔

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

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

# cd /mnt/gentoo

依照您的安裝方式,您有幾個可以選擇的工具下載 Stage 壓縮檔。如果您有 links ,您就可以馬上連接到 Gentoo 對映站 然後選擇最靠近您的位置。

如果沒有 links 的話,應該會有 lynx 可以用。假如要透過 proxy,設定 http_proxy 和 ftp_proxy 變數:

原始碼 4: 設定 lynx proxy 資訊

# export http_proxy="http://proxy.server.com:port"
# export ftp_proxy="http://proxy.server.com:port"

我們假設你有 links 可以使用。

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

原始碼 5: 使用 links遊覽對映站

# links http://www.gentoo.org/main/en/mirrors.xml
(如果你想要使用 proxy:)
# links -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml

確定你是下載 stage3 壓縮檔 - 使用 stage1 或 stage2 安裝的方法不再被支援。

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

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

# md5sum -c stage3-x86-2006.0.tar.bz2.DIGESTS
stage3-x86-2006.0.tar.bz2: OK

解開 Stage 壓縮檔

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

原始碼 7: 解開 Stage 壓縮檔

# tar xvjpf stage3-*.tar.bz2

確定您有放入一樣的參數(xvjpf)。x 代表著 Extract(解開),v 代表著 Verbose 查看解壓縮時發生的事情(這個可以省略), j 代表著 Decompress with bzip2(以 bzip2 解開),p 代表著 Preserve permissions(預留的權限)和 f代表著以我們的方式解開而不是標準的輸入。

注意: 一些架構 (像是 MIPS) 的 Live CD 及開機映像檔依賴編譯進 BusyBox 的 tar,目前不支援 v 選項。因此可能沒有作用。

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

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

解開 Stage 壓縮檔

重要: 如果你在 x86 架構使用 Installer LiveCD,CD 上不會有 stage 檔。你需要依照 預設:從網路下載的 stage安裝。

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

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

# ls /mnt/cdrom/stages

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

原始碼 9: 掛載光碟機

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

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

# cd /mnt/gentoo

我們現在需要解開您剛剛所選擇的 stage 壓縮檔。我們將使用 tar 工具。確定您也使用著一樣的參數(xvjpf)!同樣的,v 選項是可以自由選擇的,而且在某些 tar 版本並不支援。在下面的範例,我們將使用 stage3-<subarch>-2006.0.tar.bz2。要記得將壓縮檔檔名換成您所選擇的檔名。

原始碼 11: 解開 Stage 壓縮檔

# tar xvjpf /mnt/cdrom/stages/stage3-<subarch>-2006.0.tar.bz2

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

5.d. 安裝 Portage

解壓縮 Portage 快照

現在你需要安裝 Portage 快照,裡面是告訴 Portage 那些軟體可以安裝,那些 profiles 可以使用等等的檔案集合。

下載及安裝 Portage 快照

進入你掛在檔案系統的目錄(一般都是 /mnt/gentoo):

原始碼 12: 進入掛載點

# cd /mnt/gentoo

啟動 links(或是 lynx),然後連線到 Gentoo 鏡像站列表。選擇離你最近的站台,進入 snapshots/ 目錄。選擇一個 Portage 快照然後按下 D 就可以下載了。

原始碼 13: 瀏覽 Gentoo 鏡像站列表

# links http://www.gentoo.org/main/en/mirrors.xml

現在按下 Q 離開瀏覽器。 Portage 快照會存在 /mnt/gentoo。下一步,我們會把他解壓縮到你的檔案系統中。確定使用完全相同的指令,最後一個選項是大寫的 C,不是 c。

原始碼 14: 解壓縮 Portage 快照

(把 <date> 用所下載快照的時間戳記取代)
# tar xvjf /mnt/gentoo/portage-<date>.tar.bz2 -C /mnt/gentoo/usr

5.e. 設定編譯參數

介紹

要自訂 Gentoo,您可以設定很多變數來影響 Portage 的動作。這些變數可以設為環境變數(使用 export)但是非永久性。如果要保留您的設定,可以存在 Portage 提供的 /etc/make.conf,一個 Portage 的設定檔。這也將是我們將要編輯的檔案。

注意: 您將會看到 /mnt/gentoo/etc/make.conf.example裡有一大串註解的可用變數。要完整地安裝 Gentoo 您至少需要按照以下設定變數。

使用您最喜歡的編輯器(這份指南我們使用 nano)然後我們才可以繼續我們稍後會討論到的自訂變數。

原始碼 15: 打開 /etc/make.conf

# nano -w /mnt/gentoo/etc/make.conf

您或許已經發現了,make.conf.example 檔案是基於常用的架構:註解的行數將以 "#" 放在每行的最前面,其他已定義的變數將使用類似 變數="內容" ,make.conf 也使用相同的語法。許多變數將在下面繼續講解。

CHOST

CHOST 變數宣告你要編譯的系統類型。這個變數已經設定好了。因為可能破壞你的系統,不要編輯他。如果 CHOST 變數看起來對你不適合,你可能用了錯誤的 stage3 壓縮檔。

CFLAGS 和 CXXFLAGS

CFLAGS 和 CXXFLAGS 變數將定義最佳效能化 gcc C 和 C++ 編譯器的參數。雖然我們以通用的方式定義,您將需要分開定義適合您提高效能的設定。原因是每個程式使用的都不同。

在 make.conf 您應該要定義一個您認為會最佳化的 通用 參數。不要將測驗性質的參數也放到這裡;太多自訂會讓程式變得怪異(當掉,或是更遭,無法作用)。

我們將不會解釋這些可用的參數選擇。如果您想知道更多,查看 GNU 線上指南 或是 gcc infopage (info gcc -- 只在一個完成的 Linux 系統上可作用)。 make.conf.example 這個檔也包含著許多範例及資料;不要忘了閱讀他們。

第一個設定為 -march= 參數,這代表著電腦架構的目標。可用的參數將會在 make.conf.example 檔案內說明(為註解的方式)。舉例來說,給 x86 Athlon XP 的架構:

原始碼 16: GCC march 設定

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

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

原始碼 17: GCC O 設定

-O2

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

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

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

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

CFLAGS="-march=athlon-xp -pipe -O2"   AMD64 的使用者應該使用 k8
# EM64T 使用者要使用 march=nocona
CXXFLAGS="${CFLAGS}"                  # 兩個變數使用一樣的設定

MAKEOPTS

MAKEOPTS 將定義的是您需要在安裝一個套件時需要幾個平行編譯。一個好的選擇是為您系統上的 CPU 數目加一,但這準則並不總是完美的。

原始碼 19: 普通的 1-CPU 系統的 MAKEOPTS

MAKEOPTS="-j2"

預備,開始!

依照您個人的選擇編輯 /mnt/gentoo/etc/make.conf 然後儲存 (nano 使用者可以按下 Ctrl-X)。您現在可以從 安裝 Gentoo 基礎系統 繼續。

6. 安裝 Gentoo 基礎系統

6.a. 變換根目錄

自由選擇:選擇鏡像站

為了要快速下載原始碼,建議你選擇一個快速的鏡像站。Portage 會搜尋 make.conf 中的 GENTOO_MIRRORS 變數所列的鏡像站。你可以瀏覽我們的 鏡像站列表 來尋找最接近你的鏡像站(這通常是最快的),不過我們提供了一個不錯的工具,叫作 mirrorselect,提供一個不錯的介面選擇鏡像站。

原始碼 1: 使用 mirrorselect 設定 GENTOO_MIRRORS 變數

# mirrorselect -i -o >> /mnt/gentoo/etc/make.conf

警告: 不要選擇任何 IPv6 鏡像站。目前我們的 stage 不支援 IPv6。

另一個重要的設定是 make.conf 中的 SYNC 設定。這個變數包含當你在更新 Portage tree 時所使用的 rsync 伺服器(Portage tree 包含了 ebuild,裏面有所有 Portage 下載及安裝軟體所需的資訊)。雖然你可以手動輸入 SYNC 伺服器, mirrorselect 可以幫你輕鬆完成:

原始碼 2: 使用 mirrorselect 選擇 rsync 伺服器

# mirrorselect -i -r -o >> /mnt/gentoo/etc/make.conf

執行 mirrorselect 後最好再三確認 /mnt/gentoo/etc/make.conf 中的設定!

複製 DNS 設定

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

原始碼 3: 複製 DNS 設定

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

掛載 /proc 及 /dev 檔案系統

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

原始碼 4: 掛載 /proc

# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev

進入新的系統環境

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

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

原始碼 5: 進入新的環境

# chroot /mnt/gentoo /bin/bash
# env-update
>> Regenerating /etc/ld.so.cache...
# source /etc/profile
# export PS1="(chroot) $PS1"

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

6.b. 設定 Portage

更新 Portage tree

你現在要更新 Portage tree 到最新,用 emerge --sync 來更新。

原始碼 6: 更新 Portage tree

# emerge --sync
(如果你的終端機很慢,例如一些 framebuffer 或是 serial console,你可以
加入 --quiet 來加快速度:)

# emerge --sync --quiet

如果你被防火牆阻擋 rsync 連線,你可以使用 emerge-webrsync 下載及安裝 portage 快照。

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

選擇正確的 Profile

首先,先是一小部分的定義。

profile 是任何 Gentoo 系統在建立時參考的地方。不只是設定 CHOST,CFLAGS 及其他重要變數的預設值, 塔也把系統鎖定在特定的套件版本。這些都是由 Gentoo 開發者維護的。

在以前,這種 profile 很少會被使用者接觸到。但是 x86,hppa 及 alpha 使用者有兩個 profile 可以選擇,一個是適用 2.4 核心,另一個是 2.6 核心。這種做法是為了對2.6 核心有更好的整合性。ppc 及 ppc64 架構有數種 profile 可以用。我們稍後會介紹這些。

你可以用下面的指令來看你現在是用哪個 profile:

原始碼 7: 查看系統 profile

# ls -FGg /etc/make.profile
lrwxrwxrwx  1 48 Apr  8 18:51 /etc/make.profile -> ../usr/portage/profiles/default-linux/x86/2006.0/

如果你是用上面提到三種架構之一,預設提供給你的 profile 是使用 Linux 2.6 基礎的系統。預設建議你這麼做,但是你也可以選擇使用別種 profile。

一些使用者會想要安裝較舊的 Linux 2.4 profile。如果你有一個如此做的好理由,你首先要確認是否有額外的 profile 可以用。在 x86 系統,可以使用下面的指令來查詢:

原始碼 8: 查看是否有額外的 profile

# ls -d /usr/portage/profiles/default-linux/x86/no-nptl/2.4
/usr/portage/profiles/default-linux/x86/no-nptl/2.4

上面的例子顯示有額外的 2.4 profile (也就是說,他沒有抱怨找不到檔案或目錄)。建議你使用預設值就好,和如果你想要換過去的話,你可依下面的步驟操作:

原始碼 9: 換到 2.4 profile

(確定你使用正確的架構,底下的例子是適用 x86 的)
# ln -snf /usr/portage/profiles/default-linux/x86/no-nptl/2.4 /etc/make.profile
(顯示 2.4 profile 中的檔案)
# ls -FGg /etc/make.profile/
total 12
-rw-r--r--  1 939 Dec 10 14:06 packages
-rw-r--r--  1 347 Dec  3  2004 parent
-rw-r--r--  1 573 Dec  3  2004 virtuals

ppc 架構在 2006.0 板有這些新的 profile。

原始碼 10: PPC Profiles

(一般 PPC profile, 適用所有 PPC 機器,最小)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0 /etc/make.profile
(G3 profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0/G3 /etc/make.profile
(G3 Pegasos profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0/G3/Pegasos/ /etc/make.profile
(G4 (Altivec) profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0/G4 /etc/make.profile
(G4 (Altivec) Pegasos profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0/G4/Pegasos/ /etc/make.profile

ppc64 架構在 2006.0 板有這些新的 profile。

原始碼 11: PPC64 Profiles

(一般的 64bit userland PPC64 profile, 適用所有 PPC64 機器)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/64bit-userland /etc/make.profile
(一般的 32bit userland PPC64 profile, 適用所有 PPC64 機器)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/32bit-userland /etc/make.profile
(每一種的 userland 有底下的子類別,將底下的 (userland) 取代成你在上面選的 userland)
(JS20 使用的 970 profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/970 /etc/make.profile
(G5 profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/970/pmac /etc/make.profile
(POWER3 profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/power3 /etc/make.profile
(POWER4 profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/power4 /etc/make.profile
(POWER5 profile)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/power5 /etc/make.profile
(multilib profile 在這次發佈的版本仍然不穩定)

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

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

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

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

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

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

# nano -w /etc/make.conf

原始碼 14: USE 設定

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

自由選擇:GLIBC Locales

你可能只會需要在你的系統上使用一種或兩種 locale。在目前編譯完 glibc 後所有可用的 locale 都會被建立。你可以啟動 userlocales USE 設定並且在 /etc/locales.build 指定你需要的 locales。除非您知道您要選擇那一種 locales 才做這個動作。

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

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

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

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

# nano -w /etc/locales.build

下面是一個locales的範例,用來同時取得English (United States)和 German (Germany)和其他的字型格式(如UTF-8)。

原始碼 17: 指定你的 locale

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

請從 設定核心 繼續。

7. 設定核心

7.a. 時區

為了讓您的系統知道它的位置在那裡,您將需要設定您的系統時區。到 /usr/share/zoneinfo 尋找您的時區,然後把檔案複製到 /etc/localtime。請避免使用 /usr/share/zoneinfo/Etc/GMT* 下的檔案,因為他們並不代表你預期的時區。例如說 GMT-8 實際上是 GMT+8。

原始碼 1: 設定時區資訊

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

7.b. 安裝核心原始碼

選擇一個核心

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

HPPA 上我們使用 hppa-sources。這核心預設是以 2.6 核心為基礎。如果你想要 2.4 板的核心,你需要透網路安裝 Gentoo,因為我們不再有在光碟提供他的原始碼。接著繼續安裝核心原始碼。為了避免安裝 xorg-x11 或其他相依軟體,需要加上 USE="-doc"。第一次安裝時不一定需要USE="symlink",但是確定你有正確建立 /usr/src/linux 符號連結。

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

# USE="-doc symlink" emerge hppa-sources

當您查看 /usr/src 您將會看到一個 linux 的連接連到您所選的核心,在我們的範例中,核心是 hppa-sources-2.6.15.1-pa4,你的版本可能不同,所以記得你用的版本。

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

# ls -l /usr/src/linux
lrwxrwxrwx    1 root     root           12 Oct 13 11:04 /usr/src/linux -> linux-2.6.15.1-pa4

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

如果您想要手動編譯您的核心,請從 預設:手動設定 繼續。如果您想要使用 genkernel 請從 其他選擇:使用 genkernel 繼續。

7.c. 預設:手動設定

介紹

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

但是,唯一 的重點就是:您必須要了解您的系統才可以開始手動編譯。系統上多數的資料可以安裝 pciutils (emerge pciutils),從裏面包含的 lspci 取得。你可以在 chroot 的環境下執行 lspci,不過可能會碰到一些 lspci 丟出來的警告(像是 pcilib: cannot open /sys/bus/pci/devices)。此外,你也可以在 未 chroot 執行,兩個結果都¤@樣。您也可以執行 lsmod 看看安裝光碟使用那些核心模組(這是一個不錯的暗示?A教您該開啟那個選項)。

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

原始碼 4: 開始 menuconfig

# cd /usr/src/linux
# make menuconfig

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

必須開啟的選項

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

原始碼 5: 選擇 experimental code/drivers, General setup

Code maturity level options --->
[*] Prompt for development and/or incomplete code/drivers
General setup --->
[*] Support for hot-pluggable devices

現在到 File Systems 然後選擇要支援的檔案系統。記得不要將它們編成模組(Module)。還有 Virtual memory,/proc file system。

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

File systems --->
Pseudo Filesystems --->
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
(按照您系統所需要的檔案系統開啟以下選項)
<*> Reiserfs support
<*> Ext3 journalling file system support
<*> JFS filesystem support
<*> Second extended fs support
<*> XFS filesystem support

如果您需要透過 PPPoE 連線到網路或是數據機撥接,您將需要以下的核心選項:

原始碼 7: 選擇 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 時需要,但是這兩個壓縮的選項不會造成錯誤。

注意: 2.6 核心的使用者可以在 Device Drivers 下找到上面所談到的選項。

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

如果您有一個 HIl 滑鼠或是鍵盤,不要忘了編入核心的支援。

原始碼 8: 啟動 HIL 支援

Input core support --->
[*] Keyboard support
[*] Mouse support
[*] Event interface support

如果在 HIL 阜上沒有滑鼠,你只需要基本的支援:

原始碼 9: HIL 基本支援

HIL support --->
[*] HIL Keyboard (basic) support

如果你仍然想要 完整 HIL 支援,你需要選下列選項:

原始碼 10: 晚整 HIL 支援

HIL support --->
[*] HP System Device Controller i8042 Support
[*] HIL MLC Support
[*] HIL Keyboard (full) support
[*] HIL Mouse & Pointer support

再加上顯示驅動程式的支援:

原始碼 11: 顯示驅動程式的支援

Graphics support --->
[*] Support for frame buffer devices
[*] HP STI frame buffer device support
Console display driver support --->
[*] STI text console

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

編譯和安裝

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

原始碼 12: 編譯核心

(其他核心 2.6)
# make && make modules_install

當核心完成編譯時,將核心映像檔複製到 /boot:您可以隨意更改容易記住的檔案名稱,方便稍後的開機程式設定。記得把 <kernel-version> 取代成你用的核心名稱及版本。

原始碼 13: 安裝核心

# cp vmlinux /boot/<kernel-version>

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

7.d. 其他選擇:使用 genkernel

警告: Gnetoo/SPARC 不支援 genkernel。

如果您正在讀這個部份,那您應該是選擇使用我們的 genkernel 程序來為您設定核心。

現在您的核心原始碼已經安裝了,我們該使用 genkernel 程序來自動幫您編譯核心。genkernel 是利用類似安裝光碟的核心設定來進行工作的。這代表著當您使用 genkernel 編譯您的核心,您的系統大致上會在開機時偵測所有的硬體,就和我們的安裝光碟一樣。因為 genkernel 不需要手動核心設定,所以適合不會編譯核心的使用者。

現在讓我們來看看如何使用 genkernel。首先,安裝 genkernel:

原始碼 14: 安裝 genkernel

# emerge genkernel

現在,編譯您的核心原始碼。如果您是透過 grp 安裝 genkerenl,直接執行 genkernel all。請注意,當 genkernel 正在編譯所有硬體支援時,等待的時間會有點久!

如果您的開機分割區沒有使用 ext2 或是 ext3 為檔案系統,您將需要使用 genkernel --menuconfig all 手動設定,然後在核心內加入您所使用的檔案系統支援( 不能 編成模組)。

原始碼 15: 執行 genkernel

# genkernel all
(Output removed to increase readability)
* Kernel compiled successfully!
* Required Kernel Params:
*   : root=/dev/ram0 init=/linuxrc real_root=/dev/$ROOT
*     where $ROOT is the devicenode for your root partition as
*     you should have specified in /etc/fstab
*     d initrd
*
* Recommended Kernel Params:
*   : vga=0x317 splash=verbose
*
* Do NOT report kernel bugs (configs included) as genkernel bugs.
* Make sure you have the latest genkernel before reporting bugs
*
* For more info see /usr/share/genkernel/README

當 genkernel 完成的時候,一個核心映像檔,一套模組和一個 initial root disk (initrd)將會被建立。我們將在稍後設定開機程式時使用核心映像檔和 initrd。寫下核心和 initrd 的檔名方便您稍後設定開機程式。initrd 將會在開起到"真正的"系統之前馬上偵測硬體支援(就和安裝光碟一樣)。

原始碼 16: 查看已建立的核心映像檔名和 initrd

# ls /boot/kernel* /boot/initramfs*

現在,為了要讓我們的系統更像安裝光碟,我們需要安裝 coldplug。當 initrd 自動偵測硬體時,coldplug將會自動偵測其他的硬體。要安裝然後開啟 coldplug ,請按照以下輸入:

原始碼 17: 安裝和開啟 coldplug

# emerge coldplug
# rc-update add coldplug default

7.e. 設定核心模組

設定模組

您將需要將想要開機時自動載入的模組放到 /etc/modules.autoload.d/kernel-2.6)。您也可以加上模組的選項。

要查看所有可用的模組,執行 find 指令。不要忘了將 "<kernel version>"更改為您剛剛編譯的版本:

原始碼 18: 查看所有可用的版本

# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko'

舉例來說,要自動載入 3c59x.o 模組,編輯 kernel-2.6:

原始碼 19: 編輯 /etc/modules.autoload.d/kernel-2.6

# nano -w /etc/modules.autoload.d/kernel-2.6

原始碼 20: /etc/modules.autoload.d/kernel-2.6

3c59x

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

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: 開啟 /etc/fstab

# nano -w /etc/fstab

接著來看看我們如何設定 /boot 分割區。這只是一個範例,所以如果您的系統不需要 /boot 分割區(如:Apple PPC 機器),不要直接複製它。

在我們的 x86 分割範例中 /boot 是位於 /dev/hda1 分割區中,而且使用 ext2 檔案系統。他不應該在開機時自動掛載 (noauto),但是需要被檢查,所以我們應該記下來:

原始碼 2: /etc/fstab 中 /boot 設定範例

/dev/hda1   /boot     ext2    defaults        1 2

如果您不需要自動掛載 /boot 分割區,來增加您的系統安全性,您將需要將 defaults 更換成 noauto。這代表著您將需要在使用時手動掛載。

為了增進效能,大部分使用者都會在要掛載的分割區掛載參數中設定 noatime,因為這會讓系統不更新上次檔案的存取時間(一般來說您並不需要這個功能),因此可以加快速度:

原始碼 3: etc/fstab 中改進過的 /boot 設定範例

/dev/hda1   /boot     ext2    default,noatime    1 2

接下來,我們繼續完成下面這幾行,包括 /boot,/ 還有置換區:

原始碼 4: /etc/fstab 中三行設定

/dev/hda1   /boot     ext2    default,noatime    1 2
/dev/hda2   none      swap    sw                0 0
/dev/hda3   /         ext3    noatime           0 1

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

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

/dev/hda1   /boot     ext2    defaults,noatime     1 2
/dev/hda2   none      swap    sw                0 0
/dev/hda3   /         ext3    noatime           0 1
none        /proc     proc    defaults          0 0
none        /dev/shm  tmpfs   nodev,nosuid,noexec  0 0
/dev/cdroms/cdrom0    /mnt/cdrom    auto      noauto,user    0 0

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

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

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

none        /proc/openprom  openpromfs    defaults      0 0

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

8.b. 網路資訊

主機名稱,領域名稱等

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

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

原始碼 7: 設定主機名稱

# nano -w /etc/conf.d/hostname
(將 HOSTNAME 變數設為你的主機名稱)
HOSTNAME="tux"

其次設定領域名稱:

原始碼 8: 設定領域名稱

# nano -w /etc/conf.d/domainname
(將 DNSDOMAIN 變數設為你的領域名稱)
DNSDOMAIN="homenetwork"

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

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

# nano -w /etc/conf.d/domainname
(將 NISDOMAIN 變數設為你的領域名稱)
NISDOMAIN="my-nisdomain"

設定網路

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

注意: 更詳細的網路資訊,包括進階的主題如頻寬合併,橋接, 802.11Q VLAN 及無線網路等包含在 Gentoo 網路設定 部份。

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

預設是使用 DHCP,他並不需要做任何設定。

如果你因為要指定 DHCP 選項或是你沒有使用 DHCP 而要設定網路,用你習慣的瀏覽器開啟 /etc/conf.d/net(範例中使用 nano)。

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

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

你會看到底下這些:

原始碼 11: 預設 /etc/conf.d/net

# This blank configuration will automatically use DHCP for any net.*
# scripts in /etc/init.d.  To create a more complete configuration,
# please review /etc/conf.d/net.example and save your configuration
# in /etc/conf.d/net (this file :]!).

要自己輸入 IP,子網路遮罩以及閘道器的話,你需要設定 config_eth0 及 routes_eth0:

原始碼 12: 手動設定 eth0 IP 資訊

config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default gw 192.168.0.1" )

要使用 DHCP 並且指定 DHCP 選項,設定 config_eth0 及 dhcp_eth0:

原始碼 13: 自動取得 eth0 的 IP

config_eth0=( "dhcp" )
dhcp_eth0="nodns nontp nonis"

請參閱 /etc/conf.d/net.example 中完整的選項列表。

如果您有數個網路介面,對 iface_eth1,iface_eth2 等變數重複上面的步驟。

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

開機時自動啟動網路

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

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

# rc-update add net.eth0 default

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

原始碼 15: 建立額外的 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 然後填入這些設定:

原始碼 16: 開啟 /etc/hosts

# nano -w /etc/hosts

原始碼 17: 填入網路資訊

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:

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

127.0.0.1     localhost tux

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

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

非必要:讓 PCMCIA 工作

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

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

原始碼 19: 安裝 pcmcia-cs

# USE="-X" emerge pcmcia-cs

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

原始碼 20: 新增 pcmcia 到預設 runlevel

# rc-update add pcmcia default

8.c. 系統資訊

Root密碼

我們藉由輸入以下指令來更改Root密碼

原始碼 21: 設定Root密碼

 # passwd

如果您希望讓Root能夠從文字介面登入,請增加tts/0到/etc/securetty:

原始碼 22: 增加 tts/0 to /etc/securetty

 # echo "tts/0" >> /etc/securetty

系統資訊

Gentoo 使用 /etc/rc.conf 來設定整個系統的一般設定。開啟 /etc/rc.conf 然後享受裡面完善的注解 :)

原始碼 23: 開啟 /etc/rc.conf

# nano -w /etc/rc.conf

當你設定 /etc/rc.conf 好以後,存檔然後離開。

就如同您所看到的,這個檔案有完善的注解讓您設定必要的參數。你可以設定系統使用 unicode 及定義預設的編輯器還有顯示管理員(像 kdm 和 gdm)。

Gentoo 使用 /etc/conf.d/keymaps 來處理鍵盤設定。編輯他設定你的鍵盤。

原始碼 24: 開啟 /etc/conf.d/keymaps

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

特別要注意 KEYMAP 變數,如果您設定錯誤的 KEYMAP 當您再用鍵盤輸入時會得到錯誤的結果。

注意: 以 USB 為主的 SPARC 系統或相容的系統可能要選擇 i386 keymap (例如 "us") 而不是 "sunkeymap"。大部份的 PPC 系統都是用 x86 的設定。想要在開機時可以使用 ADB keymaps 的使用者需要啟動核心中的 ADB keycode sendings,並且在 /etc/conf.d/keymaps 中設定 mac/ppc keymap。

當你設定 /etc/conf.d/keymaps 好以後,存檔然後離開。

Gentoo 使用 /etc/conf.d/clock 設定系統時鐘,根據你的需求編輯他。

原始碼 25: 開啟 /etc/conf.d/clock

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

如果你的硬體時鐘是使用 UTC,你需要在檔案中加入 CLOCK="local",不然你會發現時間偏移了。而且 windows 假設你的電腦使用本地時間。所以如果你用雙重開機,你需要設定這個變數,不然你電能的時間會亂七八遭。

當你設定好 /etc/conf.d/clock 後,存檔然後離開。

如果你不是在 IBM PPC64 系統上安裝 Gentoo,接著繼續 安裝必需的系統工具。

設定 Console

注意: 下面這一部分適用 IBM PPC64 硬體平台。

如果你打算在 IBM PPC64 系統上安裝 Gentoo 並且使用虛擬 Console,你需要取消 /etc/inittab 中 hvc 那幾行的注解,讓虛擬 Console 可以產生登入提示符號。

原始碼 26: 在 /etc/inittab 中啟動 hvc 或 hvsi 支援

hvc0:12345:respawn:/sbin/agetty -L 9600 hvc0
hvsi:12345:respawn:/sbin/agetty -L 19200 hvsi0

這時你也要順便檢查 /etc/securetty 中是不是有把合適的 console 列上去。

接著繼續 安裝必需的系統工具。

9. 安裝必要的系統工具

9.a. 裝置管理員

如果你是使用 2.4 核心 而且 從 stage 3 開始安裝 Gentoo,這裡有一些你 需要知道的事情。因為 Gentoo 現在預設使用 udev,但是 2.4 核心不支援 udev,所以你需要使用 devfsd 並且移除 udev。

原始碼 1: 安裝 devfsd

(適用以 stage 3 安裝而且用 2.4 核心的人)
# emerge --unmerge udev
# emerge devfsd

9.b. 系統記錄器

有一些工具因為有多個套件提供相同功能,並沒有包含在 stage3 壓縮檔中。現在是讓你決定裝哪一個的時候了。

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

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

假如你打算使用 sysklogd 或 syslog-ng,你可能想要接著安裝 logrotate 因為這兩個紀錄器不會提供任何輪替紀錄檔的功能。

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

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

# emerge syslog-ng
# rc-update add syslog-ng default

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

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

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

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

原始碼 3: 安裝 cron 伺服器

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

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

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

原始碼 4: 安裝 slocate

# emerge slocate

9.e. 檔案系統工具

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

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

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

如果你有用 EVMS,你需要安裝 evms:

原始碼 5: 安裝 EVMS 工具

# USE="-gtk" emerge evms

USE="-gtk" 會避免安裝一些相依軟體。如果你想要啟動 evms 圖形介面工具,你可以之後再從新編譯 evms。

9.f. 非必要:IBM 硬體的 RAID 工具

如果你在 POWER5 為基礎的系統上使用 SCSI RAID,你可以考慮安裝 iprutils 讓你可以使用 RAID 磁碟陣列,取得陣列中硬碟的狀態,以及更新 microcode。

原始碼 6: 安裝 iprutils

# emerge iprutils

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

9.g. 網路工具

非必要:安裝 DHCP 客戶端

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

原始碼 7: 安裝 dhcpcd

# emerge dhcpcd

非必要:安裝 PPPoE 客戶端

如果您需要 rp-pppoe 來連線至網際網路,您需要安裝它。

原始碼 8: 安裝 rp-pppoe

# USE="-X" emerge rp-pppoe

USE="-X" 將會禁止 xorg-x11 因為依存性而被安裝至系統 (rp-pppoe 有圖型介面工具;如果您想要啟動它們,您可以晚點再重新編譯 rp-pppoe ,但您也可以現在就安裝 xorg-x11 -- 這將會需要更長的編譯時間)。

現在請接著閱讀 設定開機管理員。

10. 設定開機管理程式

10.a. 安裝 PALO

在 PA-RISC 的平台,開機程式叫做 palo。你可能需要先安裝它。

原始碼 1: 安裝 palo

# emerge palo

你可以在 /etc/palo.conf 找到設定檔。以下為設定檔範例:

原始碼 2: /etc/palo.conf 範例

--commandline=2/kernel-2.6.12.2-pa2 root=/dev/sda4
--recoverykernel=/vmlinux.old
--init-partitioned=/dev/sda

第一行將告訴 palo 核心的位置和使用的相關開機參數。2/kernel-2.6.12.2-pa2 代表著在第二個分割區內叫作 /kernel-2.6.12.2-pa2 的核心檔。請注意,核心的路徑和是和開機分割區的相對路徑,而不是根目錄。

第二行將告訴 palo 使用哪一個復原核心。如果這是您第一次的核心安裝,並且沒有恢復核心,請註解掉這行。第三和則是告訴 palo 所在的分割區。

當設定完成時,只需要執行 palo。

原始碼 3: 套用 PALO 設定

# palo

接下來請到 重新啟動系統。

10.b. 重新啟動系統

離開chroot的環境和卸除所有掛載磁區,然後輸入一個您已經期望已久的神奇指令:reboot。

原始碼 4: 離開 chroot, 卸除所有磁區合重新啟動

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

當然請別忘記移除您的開機光碟,否則您將會再次進入開機光碟的環境而非您的新的 Gentoo系統。

在重開機進入您的Gentoo安裝環境後,請繼續完成最終化您的 Gentoo安裝。

11. 最終化您的 Gentoo 安裝

11.a. 使用者管理

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

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

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

群組 說明
audio 可以存取音效裝置
cdrom 可以直接存取光學儲存裝置(ex:光碟機)
floppy 可以直接存取磁碟
games 可以玩遊戲
portage 可以以一般使用者執行 emerge --pretend
usb 可以存取 USB 裝置
plugdev 可以掛載及使用卸除式裝置,如相機及隨身碟
video 可以存取影像擷取器以及使用硬體加速
wheel 可以使用 su

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

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

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

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

12. 然後呢?

12.a. 文件

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

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

如果您有興趣將您的系統最佳化成桌面使用,或著您想要學習如果設定您的系統至一個完整的桌面系統,請閱讀 Gentoo 桌面文件資源。除此之外,你可能也需要 localization guide 讓你的系統使用起來更加舒適。

在 Gentoo Security 上也有豐富的文件值得一讀。

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

12.b. Gentoo 線上

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

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

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

B. 使用 Gentoo

1. Portage 介紹

1.a. 歡迎使用 Portage

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

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

大部分使用者會透過 emerge 工具使用 Portage。這一章並不會重複 emerge man page 中提供的資訊。如果你想要了解完整的 emerge 選項,請查閱 man page:

原始碼 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: 更新 Portage 樹

# emerge --sync

如果因為防火牆的限制讓你不能使用 rsync,你仍然可以使用每天自動產生的 Portage 快照。emerge-webrsync 工具自動下載及安裝最新的快照到你的系統中:

原始碼 3: 執行 emerge-webrsync

# emerge-webrsync

1.c. 維護軟體

搜尋軟體

你可以使用 emerge 內建的搜尋功能來搜尋軟體。預設上,emerge --search 回覆符合搜尋字串的套件名稱(完全或部分符合)。

例如說,搜尋名稱中有 "pdf" 的所有套件:

原始碼 4: 搜尋以 pdf 命名的套件

$ emerge --search pdf

如果你也想要搜尋套件描述,你可以使用 --searchdesc (或 -S):

原始碼 5: 搜尋 pdf 相關套件

$ emerge --searchdesc pdf

當看到輸出內容時,你會發現他給你很多資訊。這些欄位很清楚的命名所以我們不會深入說明他們的意義:

原始碼 6: 'emerge --search' 輸出範例

*  net-print/cups-pdf
Latest version available: 1.5.2
Latest version installed: [ Not Installed ]
Size of downloaded files: 15 kB
Homepage:    http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
Description: Provides a virtual printer for CUPS to produce PDF files.
License:     GPL-2

安裝軟體

一但你找到你喜歡的軟體,你可以使用 emerge 輕鬆的安裝他:只要加上套件名稱。例如說,安裝 gnumeric:

原始碼 7: 安裝 gnumeric

# emerge gnumeric

因為有很多套件都依賴其他套件,任何安裝特定套件的動作可能會導致安裝數個相依套件。別擔心,Portage 會完美的處理相依關係。如果你想要知道當你安裝某個套件時 Portage 可能 會安裝的軟體,加上 --pretend,例如說:

原始碼 8: Pretend to install gnumeric

# emerge --pretend gnumeric

當你要求 Portage 安裝一個套件時,他會從網路上下載需要的原始碼(如果需要的話)並且預設存在 /usr/portage/distfiles。這之後會解壓縮,編譯,然後安裝套件。如果你想要 Portage 只下載原始碼而不安裝,在 emerge 指令後加入 --fetchonly 選項:

原始碼 9: 下載 gnumeric 的原始碼

# emerge --fetchonly gnumeric

尋找已安裝套件的文件

許多套件有提供他們自己的文件。有時候,doc USE 設定決定要不要安裝這些文件。你可以使用 emerge -vp <套件名稱> 指令來檢查是否有 doc USE 設定。

原始碼 10: 檢查 doc USE 設定是否存在

(alsa-lib 當然只是一個範例而已)
# emerge -vp alsa-lib
[ebuild  N    ] media-libs/alsa-lib-1.0.9_rc3  +doc -jack 674 kB

你可以在 /etc/make.conf 檔案中全域啟動或關閉 doc USE 設定,或是在 /etc/portage/package.use 檔案中設定個別套件。USE 設定 這一章包含這些的詳細說明。

在套件安裝完以後,他的文件一般都在 /usr/share/doc 下以套件名稱為名的子目錄下。你也可以用 app-portage/gentoolkit 套件 中的 equery 工具列出所有已安裝的檔案。

原始碼 11: 確認套件文件的位置

# ls -l /usr/share/doc/alsa-lib-1.0.9_rc3
total 28
-rw-r--r--  1 root root  669 May 17 21:54 ChangeLog.gz
-rw-r--r--  1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x  2 root root 8560 May 17 21:54 html
-rw-r--r--  1 root root  196 May 17 21:54 TODO.gz
(或者是,使用 equery 來找你有興趣的檔案:)
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.9_rc3
* Contents of media-libs/alsa-lib-1.0.9_rc3:
/usr
/usr/bin
/usr/bin/alsalisp
(下略)

移除軟體

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

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

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

# emerge --unmerge gnumeric

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

更新系統

為了讓你的系統保持在最佳狀態(更不用說安裝最新的安全性更新),你需要定期更新系統。因為 Portage 只檢查在 Portage 樹中的 ebuilds,首先你需要更新 Portage 樹。當你更新好了以後,你可以使用 emerge --update world 更新你的系統。在底下的範例中,我們也會加上 --ask 讓 Portage 顯示要更新的軟體列表並且詢問你是否繼續:

原始碼 13: 更新你的系統

# emerge --update --ask world

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

原始碼 14: 更新全系統

# emerge --update --deep world

因為你沒有刻意安裝的套件(因為其他套件相依而安裝)也會有安全更新,建議你偶爾執行這個指令。

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

原始碼 15: 執行完整更新

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

存根套件

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

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

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

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

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

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

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

原始碼 17: 安裝 gentoolkit 套件

# emerge gentoolkit

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

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

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

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

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

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

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

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

阻擋的套件

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

[blocks B     ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)

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

!!! Error: the mail-mta/postfix package conflicts with another package.
!!!        both can't be installed on the same system together.
!!!        Please use 'emerge --pretend' to determine blockers.

Ebuild 包含特殊的區域告訴 Portage 關於他的相依性。相依性關係有兩種:宣告在 DEPEND 以及執行期相依,宣告在 RDEPEND。當其中一個相依關係中標記一個套件或虛擬 不 相容,他就成為阻擋套件。

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

也有可能是還沒安裝的兩個套件互相阻擋。在這種很少見的情況下,你應該先找出為什麼需要安裝這兩個套件。大部份的情況裝一個就足夠了。如果不是的話,請送一個錯誤到 Gentoo 錯誤追蹤系統。

封鎖的套件

原始碼 20: Portage 警告封鎖的套件

!!! all ebuilds that could satisfy "bootsplash" have been masked.

原始碼 21: 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。

相依性遺失

原始碼 22: Portage 警告相依性遺失

emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".
!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem.

你輸入要安裝的套件相依在你的系統上不可取得的套件。請檢查 bugzilla 看看這件事被發現了沒,如果沒有的話,請回報他。除非你使用混合的分支這不應該發生,因此這是一個 bug。

模稜兩可的的 Ebuild 名稱

原始碼 23: 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 會告訴你可能符合的讓你選擇。

循環相依

原始碼 24: 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 看看這件事被發現了沒,如果沒有的話,請回報他。

下載失敗

原始碼 25: Portage 警告下載失敗

!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered.  Please see above for details.

Portage 不能下載指定程式的原始碼而會繼續安裝其他的程式(如果可用的話)。這個錯誤可能因為鏡像站還沒正確同步,或是 ebuild 指向錯誤的位置。原始碼存放的伺服器也可能因為一些理由關閉了。

一小時候在看看這個問題是否還存在。

系統 Profile 保護

原始碼 26: Portage warning about profile-protected package

!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.

你已經要求移除屬於系統核心套件一部分的套件。他在 profile 中視為必要的因此不能從系統上移除。

2. USE 參數

2.a. 什麼是 USE 參數?

USE 關鍵字的概念

當您在安裝 Gentoo (或是其他版本,或是作業系統)您將需要依照環境而決定一些選擇。要設定一台伺服器和要設定一台工作站是不一樣的。一個遊戲工作站和一個需要 3D 立體加速的工作站也不同。

這不只是您要選擇安裝什麼套件,但是您也需要某些功能支援於某些套件。如果您不需要 OpenGL,那您為什麼要自找麻煩安裝然後編譯 OpenGL 到您大多數的套件呢呢?如果您不想要使用 KDE,那為什麼要多浪費時間編譯那些可以不用 KDE 也可以完整的執行的套件內的 KDE 支援呢?

為了要幫助使用者決定要安裝/啟用,我們需要使用者簡單的了解他所使用的環境。這將強迫使用者決定他真的要什麼,和了解 Portage 套件管理系統的方便性。

一個 USE 參數的解釋

USE 參數就好像一個包含著相依性支援的關鍵字。如果您定義一個 USE 關鍵字,Portage 將會知道您需要那方面的支援。當然,這也會啟用相關依賴的套件。

讓我們使用一個範例來講解:kde 的關鍵字。如果您的 Use 變數沒有這個,那所有選擇性 的 KDE 支援將 不會 把 KDE 的支援編進去。所有擁有 選擇性的 KDE 相依性套件將不會編入。如果您有將 kde 定義,那麼所有的這些套件將會以滿足相依性安裝。

請正確的定義您所需要的關鍵字。

有那些 USE 關鍵字?

USE 參數總共有分兩種:全區性(Global) 和 區域性(Local)。

  • 一個 全區性 的 USE 參數將被許多套件系統共用。這是一個大家所看到的 USE 參數。
  • 一個 區域性 的 USE 參數將被單一的套件用來選擇某些套件決定。

您可以到我們的 現在清單 查看完整的 USE 變數清單或是電腦上的 /usr/portage/profiles/use.desc。

2.b. 使用 USE 參數

定義永久的 USE 參數

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

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

你系統目前所使用的profile 是由 /etc/make.profile 的符號連結決定的。每一個 profile 屬於另一個更大的profile,最後形成了所有profile 的總和。最上層的 profile 是 base profile (/usr/portage/profiles/base)。

來看看預設的設定:

原始碼 1: 2004.3 profile 中 make.defaults 的加總 USE 變數

(這個範例是在 base,default-linux,default-linux/x86 和 default-linux/x86/2004.3 中設定的總和)
USE="x86 oss apm arts avi berkdb bitmap-fonts crypt cups encode fortran f77
foomaticdb gdbm gif gpm gtk imlib jpeg kde gnome libg++ libwww mad
mikmod motif mpeg ncurses nls oggvorbis opengl pam pdflib png python qt
quicktime readline sdl spell ssl svga tcpd truetype X xml2 xmms xv zlib"

就您所見,這個變數已經包含著許多關鍵字了。請 不要 更改 make.defaults 的檔案。所有的 USE 內的關鍵字將會在每次您更新 Portage 的時候自動被改回預設的方式!

要更改這個預設的設定,您需要在 USE 變數內做更改。您需要更改的是 /etc/make.conf 內的 USE 變數。在這個檔案的變數內,您可以增加您需要的關鍵字或是移除不需要的關鍵字。您可以使用在關鍵字前面加上減號 ("-")。

舉例來說,要移除掉 KDE 和 QT 但是要支援 ldap,您將需要在 /etc/make.conf 內定義類似以下的的變數:

原始碼 2: /etc/make.conf 的範例 USE 設定

USE="-kde -qt ldap"

設定套件自己使用的 USE 設定

有時候你想對一個(或一組)套件使用一個 USE 設定,但是不希望影響到整個系統。為了達成這個,需要先建立 /etc/portage 目錄(如果還沒建立的話),然後編輯 /etc/portage/package.use。

例如說,你不想要整個系統都有 berkdb 支援,但是你想要 mysql 支援,你可以加入:

原始碼 3: /etc/portage/package.use 範例

dev-db/mysql berkdb

你當然可以明確關閉某個程式的 USE 設定。例如說,你不想要 PHP 支援 java:

原始碼 4: /etc/portage/package.use 第二個範例

dev-php/php -java

定義暫時性的變數

有時候您會想要定義暫時性的變數。或許只使用那麼一次。這樣一來您就可以不用編輯 /etc/make.conf 兩次(先設定,編譯完再復原)您可以直接將 USE 定義成環境變數。記得,當你重新安裝或升級這個程式(不管是只升級他或是升級全系統),你的改變會遺失!

以下的範例,我們將暫時從 USE 設定移除 java 來安裝 mozilla。

原始碼 5: 使用 USE 為環境變數

# USE="-java" emerge mozilla

自動 USE 參數

某些套件安裝完成後,額外的 USE 參數如果你沒有明確關閉的話,會被自動啟動。要查看完整的提供 USE 參數的清單,查看 /etc/make.profile/use.defaults及他上層 profile 的 use.defaults:

原始碼 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. 放在 make.defaults 預設的 USE 設定
  2. use.defaults 承接的 USE 設定
  3. 使用者在 /etc/make.conf 定義的 USE 設定
  4. 使用者在 /etc/portage/package.use 定義的 USE 設定
  5. 以環境變數的方式定義的 USE 設定變數

要查看最後的 USE 設定,執行 emerge --info。這將會看到所有相關的變數(包括 USE 變數)和 Portage 需要使用到的內容。

原始碼 7: 執行 emerge --info

# emerge --info

讓您的系統適應新的 USE 旗標

如果您有更改您的 USE 旗標,並且想將整個系統都套用新的設定,使用 emerge 的 --newuse 參數。

原始碼 8: 重新編譯您的系統

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

接下來,執行 Portage 的 depclean 移除就系統上不需要的舊相依性套件。

警告: 執行 emerge --depclean 是一件非常危險的動作,請小心執行。請仔細確認列出來的套件沒有包含著您鎖需要的套件。以下的範例我們將加入 -p 的參數來顯示出將要被移除的列表清單。

原始碼 9: 移除不需要的套件

# emerge -p --depclean

當 depclean 完成後,執行 revdep-rebuild 重新編譯動態連結到已移除套件共享函式庫的套件。revdep-rebuild 是 gentoolkit 套件的一部分;不要忘了先安裝他。

原始碼 10: 執行 revdep-rebuild

# revdep-rebuild

當這些都完成後,你的系統就正在使用新的 USE 設定了。

2.c. 套件相關 USE 設定

查看可用的 USE 設定

讓我們使用 mozilla 的範例:它聽取著什麼 USE 關鍵字?要查看,我們使用 emerge 加上 --pretend 和 --verbose 參數:

原始碼 11: 查看 USE 關鍵字

# emerge --pretend --verbose mozilla
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild   R   ] www-client/mozilla-1.7.12-r2  USE="crypt gnome java mozsvg ssl
truetype xprint -debug -ipv6 -ldap -mozcalendar -mozdevelop -moznocompose
-moznoirc -moznomail -moznoxft -postgres -xinerama" 0 kB

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

原始碼 12: 安裝 gentoolkit

# emerge gentoolkit

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

原始碼 13: 使用 equery 查看使用的 USE 關鍵字

# equery 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.conf 包含各種功能關鍵字,以空白分隔的 FEATURES 變數來開啟或關閉特定 Portage 功能。在一些情況你也要安裝這個功能需要的額外套件。

不是所有 Portage 支援的功能都列在這篇文件?請查閱 make.conf 手冊頁來取得完整的列表。

原始碼 1: 查閱 make.conf 手冊頁

$ man make.conf

如果要找到預設啟動那些功能,執行 emerge --info 並在其中尋找 FEATURES 變數或用 grep:

原始碼 2: 找出那些功能已經設定了

$ emerge --info | grep FEATURES

3.b. 分散編譯

使用 distcc

distcc 是一個讓您可以在多台,不一定同一類型的電腦經由網路分別編譯。 distcc 客戶端傳送給伺服器(執行 distccd)必要的資訊讓它可以幫客戶端編譯原始碼的一部份。這會幫您加快編譯時間。

您可以在 Gentoo Distcc 文件中找到關於 distcc 更詳細的資訊(包括他如何在 Gentoo 上工作)。

安裝 distcc

Diskcc 提供一個圖形化的監視程式讓您監視您的電腦送出去的編譯工作。如果您使用 Gnome 的話,在 USE 設定中加入 'gnome'。然而,如果您不是使用 Gnome 但您想使用它的話,您應該在 USE 設定中加入 'gtk'。

原始碼 3: 安裝 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(兩台遠端電腦):

原始碼 4: 設定 distcc 使用三台可用的 distcc 伺服器

# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"

當然,不要忘記啟動 distccd 伺服器程式:

原始碼 5: 啟動 distcc 伺服器程式

# rc-update add distccd default
# /etc/init.d/distccd start

3.c. 編譯快取

關於 ccache

ccache 是一個快速的編譯器快取。當您編譯程式時,他會立即快取結果,因此當您重新編譯時,編譯的時間減少相當多。在一般的狀況可以加快 5 到 10 倍的編譯時間。

如果您對 ccache 的詳細內容有興趣,請瀏覽 ccache 首頁。

安裝 ccache

要安裝 ccache 的話,執行 emerge ccache:

原始碼 6: 安裝 ccache

# emerge ccache

啟動 Portage 支援

開啟 /etc/make.conf 然後在 FEATURES 變數中加入 ccache。接著新增一個叫 CCACHE_SIZE 的變數並設成 "2G":

原始碼 7: 編輯 /etc/make.conf 中的 CCACHE_SIZE

CCACHE_SIZE="2G"

要檢查 ccache 是否在工作,您可以要求 ccache 提供你他的狀態。因為 Portage 使用不同的 ccache 家目錄,你也要設定 CCACHE_DIR 變數。

原始碼 8: 查看 ccache 狀態

# CCACHE_DIR="/var/tmp/ccache" ccache -s

Portage 預設的家目錄是 /var/tmp/ccache。如果你想要改變到別的目錄,你可以設定 /etc/make.conf 之中的 CCACHE_DIR 變數。

然而,如果你執行 ccache,他預設會用 ${HOME}/.ccache,因此你需要設定 CCACHE_DIR 變數,來取得 Portage 的 ccache 統計。

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

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

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

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

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

建立預編程式套件

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

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

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

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

安裝預編套件

雖然 Gentoo 並不提供,你可以建立一個檔案庫來存放預編套件。如果你想要使用這個檔案庫,你需要設定 PORTAGE_BINHOST 變數讓 Portage 知道他。例如說,如果預編套件在 ftp://buildhost/gentoo :

原始碼 10: 設定 /etc/make.conf 中的 PORTAGE_BINHOST

PORTAGE_BINHOST="ftp://buildhost/gentoo"

當你想要安裝預編套件時,在 emerge 指令的 --usepkg 參數旁加上 --getbinpkg。前面的參數要求 emerge 在下載及編譯原始碼前先嘗試安裝預編套件,而後者告訴 emerge 從先前定義的伺服器下載預編套件。

例如說,用預編套件安裝 gnumeric:

原始碼 11: 安裝 gnumeric 預編套件

# emerge --usepkg --getbinpkg gnumeric

關於 emerge 的預編套件選項可以在 emerge 手冊頁找到:

原始碼 12: 閱讀 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: /etc/inittab 的系統起始

si::sysinit:/sbin/rc sysinit

這行將告訴 init 一定要執行 /sbin/rc sysinit來起始系統。 /sbin/rc 的程序將掌管起始的動作,您也可以說 init 的工作其實不多 -- 它只是指派起始系統的工作給另外一個程序。

第二,init 將執行 /etc/runlevels/boot 內所有的連接。將按照以下定義:

原始碼 2: 繼續系統起始

rc::bootwait:/sbin/rc boot

rc 程序再一次的執行相關工作。但是這是是 rc (boot)將會去執行 /etc/runlevels 的相關目錄。

現在 init 將檢察他的設定檔然後查看他應該執行那個階段。要決定這個,它將會從 /etc/inittab 取以下這行:

原始碼 3: init預設(initdefault)

id:3:initdefault:

在這個例子(大多數的 Gentoo 使用者也會使用),將會從第三個執行階段開始。使用這個資訊,init 將會從 執行階段 3 開始:

原始碼 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 將會決定應該要啟用那些虛擬終端和在各終端應該執行什麼指令:

原始碼 5: 虛擬終端定義

c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

什麼是執行階段(runlevel)?

您已經知道了 init 如何使用號碼來決定該啟用那個執行階段。一個 執行階段 將會代表著您的系統將執行那些程序(執行階段程序或是 起始程序(initscripts))。

在 Gentoo 內共有定義七個執行階段:三個內部執行階段,和四個使用者定義的執行階段。內部的執行階段叫做 sysinit,shoutdown 和 reboot 就和他們的名字一樣:

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

使用 Init Scripts

rc 的程序叫做 init scripts。每個在 /etc/init.d 的程序都可以使用 start,stop,restart,pause,zap, status,ineed,iuse,needsme,usesme 或是 broken 為參數。

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

原始碼 6: 啟用 Postfix

# /etc/init.d/postfix start

注意: 只有 指定 的服務會被停止或是重開。其他相依的程式(那些使用這個服務但是不需要他的)將不會被影響到。

如果您要停止一個服務,但是不是依賴著它的其他服務,您可以使用 pause:

原始碼 7: 停止 Postfix 但是繼續執行其他相依的服務

# /etc/init.d/postfix pause

如果您要查看某個服務的狀態(啟用,停止,暫停﹍)您可以使用 status:

原始碼 8: 關於 postfix 的狀態

# /etc/init.d/postfix status

如果狀態告訴您這個服務正在執行,但是您知道這是錯的,那您將可以使用 zap 將狀態重設為 "停止":

原始碼 9: 重設 postfix 的狀態

# /etc/init.d/postfix zap

如果要查看某個服務的相依性有那些,您可以使用 iuse 或是 ineed。您可以使用 ineed 來觀看服務的相關功能。iuse 則是查看服務是否有被其他服務依賴著。

原始碼 10: 查詢 Postfix 依賴的服務

# /etc/init.d/postfix ineed

類似的,您可以查詢那些服務需要那些服務(needsme)或是(usesme):

原始碼 11: 需要用到 Postfix 的服務

# /etc/init.d/postfix needsme

最後您可以查看依賴著某個服務但是壞損的其他服務:

原始碼 12: 查詢 Postifx 需要但是損毀的相依性

# /etc/init.d/postfix broken

4.b. 使用 rc-update

什麼是 rc-update?

Gentoo 的 init 系統使用的是相依性列表來決定那個服務需要先啟用。這是一個複雜的工作,所以我們不會讓我們的使用者手動完成這項工作。所以我們建立了相關的執行階段工具和 init 工具方便管理。

使用 rc-update,您可以從執行階段新增或是移除 init 程序。rc-update 的工具將自動讓 depscan.sh 程序重新建立相依性資料。

新增或是移除服務

您已經在安裝 Gentoo 時將 init 程序加入過 "default" 的執行階段了。當時您應該對 "default" 沒有任何了解,但是您現在應該知道了它的意義。rc-update 程序需要第二個參數來告訴它要執行的動作:add,del 或是 show。

要增加或是移除一個 init 程序,只需要在 rc-update 後面放入 add 或是 del 的參數,然後接著就是要加入的 init 程序的名字。舉例來說:

原始碼 13: 執行階段移除 Postfix

# rc-update del postfix default

rc-update show 的指令將會0按照執行順序顯示出所有可能的 init 程序清單:

原始碼 14: 顯示 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 伺服器時加數您需要的參數:

原始碼 15: /etc/conf.d/apache2 的變數定義

APACHE2_OPTS="-D PHP4"

這種設定檔包含的變數(就和 /etc/make.conf 類似),是為了要讓服務的設定更加簡易。它也以註解的方式提供著一些相關的資料和變數用法。

4.d. 編寫 Init 程序

我需要嗎?

不。Gentoo 提供了這些 init 程序,所以您不需要自己編寫一個。但是,如果您安裝了非 Portage 提供的服務,那麼您就需要編寫一個類似 init 的程序。

如果不是針對 Gentoo 所設計的程序,請不要使用:Gentoo 的 init 程序和其他版本的 init 程序不相容!

規劃

以下為一個 init 程序的規劃。

原始碼 16: Basic layout of an init script

#!/sbin/runscript
depend() {
(相依性資訊)
}
start() {
(啟動服務的相關指令)
}
stop() {
(停止服務的相關指令)
}
restart() {
(重新啟動服務的相關指令)
}

任何 init 程序 都需要 start() 功能的定義。其他的則是非必需。

相依性

您總共有兩種相依性可以定義:use 和 need。就如我們之前提到的, need 的相依性比 use 來的嚴厲。然後使用 virtual 來選擇所依賴的相依性。

virtual 是一個提供服務的相依性,但是並不是完全由這個服務提供。您的 init 程序可以依賴著系統記錄器,但是我們提供著許多系統記錄器(metalogd,syslog-ng, sysklogd,﹍)當您無法 need 所有的(執行全部的系統記錄器並不合理)我們將確定這些服務可以 提供 一個虛擬相依性。

現在讓我們來看看一個 postfix 服務所依賴的相依性。

原始碼 17: 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 的設定為範例:

原始碼 18: Portmap 服務的 depend() 功能

depend() {
need net
before inetd
before xinetd
}

您也可以使用 "*" 來選擇同一個執行階段內所有的服務,但是我們並不建議。

原始碼 19: 設定成為第一個同執行階段的 init 程序

depend() {
before *
}

符合標準的功能

depend() 之後,您將需要定義 start() 的功能。這個將包含著所有相關啟動服務的指令。我們建議您使用 ebegin 和 eend 功能來通知使用者正在發生什麼事:

原始碼 20: 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,我們有提供著一個很棒的說明頁讓您查閱:

原始碼 21: 查詢更多關於start-stop-daemon 的說明頁

# man start-stop-daemon

其他您可以定義的功能為:stop() 和 restart()。您不一定要定義這些功能!如果您使用 start-stop-daemon,我們 init 系統將會自動填入這些功能。

Gentoo 的 init script 語法是以 Bourne Again Shell (bash) 為基礎,所以你可以在你的 init script 中自由使用和 bash 相容的架構。

加入自訂選項

如果您想要讓您的 init 程序支援更多我們已經提供的選項,您應該將這些選項加入到 opts 變數,然後建立一個功能將此功能的命名為 opt 變數內所定義的。舉例來說,要提供一個 restartdely 的功能:

原始碼 22: 提供 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 執行階段為這次的範例:

原始碼 23: 建立一個執行階段目錄

# mkdir /etc/runlevels/offline

然後加入相關的起始程序到剛建立完成的目錄內。舉例來說,如果除了 net.eth0 以外,您想要將其他 default 執行階段的內容都複製到新的執行階段:

原始碼 24: 加入相關起始程序

(把所有預設執行階段的服務複製到 offline 執行階段)
# cd /etc/runlevels/default
# for service in *; do rc-update add $service offline; done
(將不需要的服務從 offline 執行階段移除)
# rc-update del net.eth0 offline
(顯示 offline 執行階段啟動的服務)
# rc-update show offline
(部分的輸出)
acpid | offline
domainname | offline
local | offline
net.eth0 |

現在編輯您的開機程式設定檔然後加入一個新的 offline 執行階段。舉例來說,在 /boot/grub/grub.conf:

原始碼 25: 加入 offline 執行階段

title Gentoo Linux Offline Usage
root (hd0,0)
kernel hd(0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline

噹啷!完成了。當您重新啟動系統然後選擇剛加入的選項, offline 將會被執行而不是本來的 default。

使用 bootlevel

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

5. 環境變數

5.a. 系統變數?

這是什麼

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

重要的範例

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

變數 說明
PATH 這個變數包含用冒號分隔的目錄列表,讓系統尋找可執行檔。如果您輸入一個可執行檔 (例如 ls,rc-update 或 emerge)但是這個檔案不在列表中的 目錄,您的系統不會執行它(除非您輸入完整的路徑,如 /bin/ls)。
ROOTPATH 這個變數和 PATH 有相同功能,但是這裡面包含的目錄是根使用者數入指令時 才會尋找。
LDPATH 這個變數包含以冒號分隔的目錄列表,讓動態連結檔在裡面搜尋函式庫。
MANPATH 這個變數包含以冒號分隔的目錄列表,讓 man 指令搜尋手冊頁。
INFODIR 這個變數包含以冒號分隔的目錄列表,讓 info 搜尋資訊頁。
PAGER 這個變數包含顯示檔案內容的程式路徑(例如 less 或 more)。
EDITOR 這個變數包含編輯的程式路徑(例如 nano 或 vi)。
KDEDIRS 這個變數包含以冒號分隔的目錄列表,設定 KDE 的主要路徑。
CLASSPATH 這個變數包含以冒號分隔的目錄列表,設定 Java 程式的路徑。
CONFIG_PROTECT 這個變數包含以空白分隔的目錄列表,這些目錄在 Portage 更新時需要被保護。
CONFIG_PROTECT_MASK 這個變數包含以空白分隔的目錄列表,這些目錄更新 Portage 時不要被保護。

底下是所有的變數的設定範例:

原始碼 1: Example definitions

PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:."
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf /
/usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ /
/usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf"

5.b. 定義全域變數

/etc/env.d 目錄

為了要集中管理這些變數的設定,Gentoo 使用 /etc/env.d 目錄。在目錄中您會發現許多檔案,例如 00basic,05gcc 等。這裡面包含檔案名稱中所提到的程式需要用的變數。

例如,當您安裝 gcc 後,ebulid 會建立一個叫做 05gcc 的檔案,包含下面的變數設定:

原始碼 2: /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 )然後在裡面輸入設定:

原始碼 3: /etc/env.d/99local

http_proxy="proxy.server.com:8080"

藉著將您自己的變數設定放到這個檔案中,您可以很快找到哪些變數是您自己設定的。

env-update 指令稿

在 /etc/env.d 中的數個檔案同時定義了 PATH 變數。這並沒有錯:當您執行 env-update,他會把數個設定同時加到系統設定中,因此讓軟體套件(或使用者)加入他們自己的設定而不會干擾已經存在的設定。

env-update 指令稿將會以 /etc/env.d 中的檔案名稱以字母順序依序加入系統設定中。檔案名稱開頭必需要是兩位數的數字。

原始碼 4: env-update 的新增順序

         00basic        99kde-env       99local
+-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

變數的連結不一定會發生,只有這些變數有:KDEDIRS,PATH, CLASSPATH,LDPATH,MANPATH,INFODIR,INFOPATH, ROOTPATH,CONFIG_PROTECT,CONFIG_PROTECT_MASK, PRELINK_PATH 和 PRELINK_PATH_MASK。其他的變數使用最後定義的值 (依 /etc/env.d 中檔案的字典順序)。

當您執行 env-update,他會建立所有的系統變數然後寫入 /etc/profile.env 中(這檔案被 /etc/profile 使用)。他也會從 LDPATH 讀取資訊然後建立 /etc/ld.so.conf,之後,他會執行 ldconfig 重新建立動態連結使用的 /etc/ld.so.cache 檔案。

如果您希望 env-update 在您執行它後立刻作用,執行下面的指令來更新。自行安裝 Gentoo 的使用者可能會記得安裝過程中執行過:

原始碼 5: 更新環境變數

# env-update && source /etc/profile

注意: 上面的指令只更新你目前終端機,新啟動 consoles,以其他的孩子的環境變數。因此,如果你在 X11,你需要在你每一個新開啟的終端機輸入 source /etc/profile,或是重新啟動 X,讓所有終端機使用新的環境變數。如果你使用圖形化的登入管理員,你需要先變成 root,然後輸入 /etc/init.d/xdm restart。如果不是的話,你要先離開再進入 X,讓所有他生成的孩子都使用新的變數。

5.c. 定義局部變數

使用者自行設定

您或許不想要定義全域變數。例如您可能要加入 /home/my_user/bin 以及目前的工作目錄(你所在的目錄)到 PATH 變數中,但是您不想要其他使用者在他們的 PATH 也有這個設定。如果您想要定義區域變數,您可以加到 ~/.bashrc 或 ~/.bash_profile:

原始碼 6: 在 ~/.bashrc 中額外增加局部 PATH 設定

(冒號後面什麼都不加代表目前的工作目錄)
PATH="${PATH}:/home/my_user/bin:"

當您重新登入後,您的 PATH 變數就會更新了。

有期限的設定

有的時候需要更嚴格的定義。例如您可能需要從您剛剛建立的暫時目錄執行程式,但您不想輸入完整的路徑或是編輯 ~/.bashrc 只為了在這一小段時間使用。

在這種情況下,您只要使用 export 指令設定 PATH 變數。只要您不登出, PATH 將會使用目前暫時的設定。

原始碼 7: 設定有期限的變數

# export PATH="${PATH}:/home/my_user/tmp/usr/bin"

C. 使用Portage

1. 檔案和資料夾

1.a. Portage 檔案

設定指令

Portage 含有一個預設的設定檔,放在 /etc/make.globals。當你打開來看,你將注意到所有的 Portage 設定配置是以變數的形式處理。後面將會敘述哪些變數 Portage 會聽從,還有他們各代表什麼意思。

因為許多設定指令在不同的電腦架構之間並不相同,在你的 profile 中,Portage 也有一個預設的設定檔案:make.defaults。關於 profiles 和 /etc/make.profile 資料夾,待會我們將解釋更多。

如果你打算變更設定變數,不要修改 /etc/make.globals 或 make.defaults。請使用優先權較上面檔案高的 /etc/make.conf。你會發現有個 /etc/make.conf.example。正如他名字,這不過是個樣本 - Portage 並不會讀取這個檔案。

你也可以用環境變數來定義 Portage 設定變數,但是我們並不建議這麼做。

Profile 特定資訊

我們與 /etc/make.profile 資料夾已有過邂逅。但這並不是一個真正的資料夾,只是一個連到 /usr/portage/profiles 其中之一的符號連結。你也可以在別的地方建立你自己的 profiles 然後指向他。該符號連結所指向的 profile,將是你的系統所依賴的。

一個 profile 包含著給 Portage 的特定電腦架構資訊,像是一個與該 profile 相符合系統的套件列表,一個不運作(或被 mask 掉)、給該 profile 用的套件列表等等。

使用者專用設定

當你想要推翻 Portage 中,與軟體安裝有關的特性,你可以開始編輯 /etc/portage 之中的檔案。強烈建議您使用 /etc/portage 中的檔案,千萬不要 以環境變數覆蓋該特性。

你可以建立以下檔案在 /etc/portage 之中:

  • package.mask 列出你不想讓 Portage 安裝的套件。
  • package.unmask 列出你想讓 Portage 能夠安裝的套件,即使 Gentoo 開發 者強烈建議你不要 emerge 他們。
  • package.keywords 列出你想讓 Portage 能夠安裝的套件,即使該套件(還) 沒有被認為適合你的系統或電腦架構。
  • package.use 列出你想給特定套件使用的 USE 旗標,而不必讓整個系統使 用該 USE 旗標。

可以在 Portage man page 找到更多關於 /etc/portage 資料夾的資訊,和可建立的檔案的完整列表。

原始碼 1: 閱讀 Portage man page

$ man portage

改變 Portage 檔案 & 資料夾路徑

之前提到的設定檔並不能存在別的地方 - Portage 總是會到這些地方找這些設定檔。然而因為各種目的:建立資料夾、存放原始碼、Portage 樹狀目錄路徑等等,Portage 還有許多其他的路徑設定。

這些目的都有個眾所皆知的預設存放路徑,但可以透過編輯/etc/make.conf 來改成你自己的品味。這章剩下的部分將解釋哪些特定目的路定 Portage 會去使用,以及如何在你的檔案系統中變更他們。

然而這份文件並不想被當做參考資料來使用。如果你需要百分之百範圍的解說,請查閱 Portage 和 make.conf 的 man page:

原始碼 2: 閱讀 Portage 和 make.conf 的 man pages

$ man portage
$ man make.conf

1.b. 檔案儲存

Portage 樹狀目錄

Portage 樹狀目錄預設路徑是 /usr/portage。這是由 PORTDIR 變數所定義。當你把 Portage 樹狀目錄存在別的地方(透過變更此變數),不要忘記跟著改變 /etc/make.profile 符號連結。

如果你修改了 PORTDIR 變數,你可能也想改變下列的變數,因為他們不會注意到 PORTDIR 改變。這是由於 Portage 處理變數的方式:PKGDIR、DISTDIR、RPMDIR。

預先編譯好的二進位檔

即使 Portage 預設不使用預先編譯好的二進位檔,但 Portage 對他們有廣泛的支援。當你要求 Portage 以預先編譯好套件工作時,他將到 /usr/portage/packages 尋找他們。這個路徑由 PKGDIR 變數定義。

原始碼

應用程式原始碼預設儲存在 /usr/portage/distfiles。這個路徑由 DISTDIR 變數定義。

RPM 檔案

即使 Portage 不能使用 RPM 檔案,但可以使用 ebuild 指令產生他們。(請看 Ebuild 程式)。 Portage 預設存放 RPM 檔案的地方在 /usr/portage/rpm ,他是以 RPMDIR 變數來定義。

Portage 資料庫

Portage 在 /var/db/pkg 中儲存系統的狀態(那些套件已經安裝,什麼檔案屬於什麼套件,...)。不要手動修改裏面的檔案!這可能會破壞 Portage 對系統的了解。

Portage 快取

Portage 的快取(包括修改時間,virtuals,相依資訊,...) 是儲存在 /var/cache/edb。這個位置只是快取而已:如果你當時並沒有在執行任何和 Portage 有關的程式,你可以把他清除。

1.c. 編譯軟體

Portage 暫存檔案

Portage 的暫存檔案預設上放在 /var/tmp。這定義於 PORTAGE_TMPDIR 變數。

如果你改變了 PORTAGE_TMPDIR 變數,你可能也想改變下列的變數,因為他們不會注意到 PORTAGE_TMPDIR 改變。這是由於 Portage 處理變數的方式:BUILD_PREFIX。

編譯資料夾

Portage 在 /var/tmp/portage 裡面建立專用的編譯資料夾,讓各個套件在裡面 emerge。這個路徑由 BUILD_PREFIX 變數定義。

Live 檔案系統路徑

預設上,Portage 安裝所有檔案到當前的檔案系統 (/),但你可以設定 ROOT 環境變數來改變他。當你想要建立一個新的編譯鏡像,這是很有用的。

1.d. 日誌特性

Ebuild 日誌

Portage 可以建立各個 ebuild 的日誌,但只有當 PORT_LOGDIR 變數已設置到一個 Portage 可寫入的路徑(portage 使用者)。預設上,這個變數並無設定。

2. 經由變數來設定

2.a. Portage 設定

如前所述,我們可以透過許多變數來調整 Portage 的行為,這些變數定義在 /etc/make.conf。請參考 make.conf 的 man page,裡面有更詳細而完整的資訊。

原始碼 1: 參考 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 的設定:

原始碼 2: 獲得 CONFIG_PROTECT 的設定

$ emerge --info | grep 'CONFIG_PROTECT='

更多關於 Portage 設定檔防護的資訊可以從 emerge 獲得:

原始碼 3: 得到更多關於設定檔防護的資訊

$ 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: 更多關於 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:

原始碼 5: 更多關於 nice 的資訊

$ man nice

輸出行為

NOCOLOR,預設為 "false",設定 Portage 是否該取消彩色輸出。

3. 混用不同分支的軟體

3.a. 選擇一個分支

穩定分支

變數 ACCEPT_KEYWORDS 定義您的系統使用的軟體分支,預設是軟體在您系統架構下的穩定分支,例如 x86。

我們建議您只使用穩定分支(the stable branch)。但是,如果您不是很在意穩定性的問題,而且您願意幫助 Gentoo 偵測臭蟲,回報給 http://bugs.gentoo.org,請您繼續閱讀這份文件。

測試分支

如果您想要使用最新的軟體,您可以考慮選用測試分支(the testing branch)。要讓 Portage 使用測試分支,在您的系統架構前加上 ~。

測試分支就如同他所說的 - 測試。如果一個套件在測試中,這代表發展者覺得他可以運作,但是還沒有詳細的測試。你可以成為第一個發現錯誤的人,在這種狀況你可以回報錯誤讓發展者知道

要小心的是,你可能會捧到一些不穩定的問題,不完美的套件管理(例如錯誤/遺失相依性) ,過於頻繁的更新(導致要花很多時間編譯)或毀損的套件。如過你不清楚 Gentoo 如何運作及如何去修復,我們建議你停留在穩定而且測試過的分枝。

舉例來說,要選擇 x86 架構下的測試分支,編輯 /etc/make.conf,並做如下設定:

原始碼 1: 設定 ACCEPT_KEYWORDS 變數

ACCEPT_KEYWORDS="~x86"

如果您現在要更新您的系統了,您會發現 一大堆 套件都需要升級。必須提醒您的是:當您用測試分支更新完您的系統之後,沒有辦法可以輕易地將系統改回使用官方建議的穩定分支(當然,使用備份例外)。

3.b. 混合使用穩定和測試分支

檔案 package.keywords

您可以要求 Portage 針對特定的套件使用測試分支,而系統其他所有的套件仍使用穩定分支。如果您想要這樣的功能,將您希望使用測試分支的套件類別和名稱加到檔案 /etc/portage/package.keywords 裡面。例如,要使用 gnumeric 的測試分支:

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

app-office/gnumeric ~x86

測試特定版本

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

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

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

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

=app-office/gnumeric-1.2.13 ~x86

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

檔案 package.unmask

Gentoo 發展者支援這些檔案的使用。請在練習時小心使用。和 package.unmask 及 package.mask 相關的要求並不會回應。

當一個套件被 Gentoo 開發者封鎖時,在檔案 package.mask 內會陳述套件被封鎖的理由(預設放在 /usr/portage/profiles),如果您仍然想要使用這個套件,將紀錄該套件的那行文字,原封不動 地加到檔案 /etc/portage/package.unmask 內。

舉例來說,如果 =net-mail/hotwayd-0.8 被封鎖了,您可以在 package.unmask 內加入完全相同的文字,而將其解封鎖:

原始碼 4: /etc/portage/package.unmask

=net-mail/hotwayd-0.8

檔案 package.mask

當您不希望 Portage 將某個套件或是套件的某特定版本列入考量範圍,您可以自己將該套件封鎖起來,這只需要在檔案 /etc/portage/package.mask 中加入相對應的紀錄。

例如,如果您不希望 Portage 安裝比 gentoo-sources-2.6.8.1 更新版的 kernel sources,您可以將下列一行文字加入 package.mask:

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

>sys-kernel/gentoo-sources-2.6.8.1

4. 附加的Portage工具

4.a. etc-update

etc-update 是一個幫助合併 ._cfg0000_<名稱> 檔案的工具。他提供互動式的合併設定,也可以自動處理明顯的改變。 ._cfg0000_<名稱> 檔案是由 Portage 在他想要把檔案複寫到被 CONFIG_PROTECT 變數保護的目錄時產生的。

執行 etc-update 相當的直觀:

原始碼 1: 執行 etc-update

# etc-update

在合併明顯的改變後,你會看到需要更新的受保護檔案列表。在底下有兩個選項:

原始碼 2: etc-update 選項

Please select a file to edit by entering the corresponding number.
(-1 to exit) (-3 to auto merge all remaining files)
(-5 to auto-merge AND not use 'mv -i'):

如果你輸入 -1,etc-update 會離開不做任何改變。輸入 -3 或 -5 的話,所有列在上面的設定檔都會用新的覆蓋。因此先選擇不要自動更新的設定檔相當重要。這是很簡單的一件事情,只要輸入列在設定檔左邊的號碼就好。

我們用 /etc/pear.conf 設定檔當作範例:

原始碼 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。

在這裡更深入的說明互動是並沒有意義。為了完整的理由,我們會列出在你互動合併兩個檔案時可以用的指令。你會看到兩行(原來的,以及新建議的)和你可以輸入下列指令的提示符號:

原始碼 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 手冊頁取得更多資訊:

原始碼 5: 閱讀 dispatch-conf 手冊頁

$ man dispatch-conf

4.c. quickpkg

使用 quickpkg 你可以建立已經安裝在你系統上軟體的套件檔。這檔案可以當作預先編好的套件。執行 quickpkg 相當直觀:只要加入你想製作的套件名。

例如說,打包 curl,arts 和 procps:

原始碼 6: quickpkg 使用範例

# quickpkg curl arts procps

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

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

5.a. 使用 Portage 樹子集合

排除套件/類別

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

你需要在 /etc/make.conf 檔案中的 RSYNC_EXCLUDEFROM 變數加入檔案,檔案中包含你想要排除的套件名稱樣式。

原始碼 1: 在 /etc/make.conf 定義排除檔案

RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes

原始碼 2: 在 /etc/portage/rsync_excludes 設定排除所有的遊戲

games-*/*

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

5.b. 加入非官方套件

定義 Portage Overlay 目錄

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

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

使用多個 Overlay

對於開發多個 overlay 的重度使用者,在更新 Portage tree 前測試或是使用多個來源的非官方 ebuild,app-portage/gentoolkit-dev 套件提供你 gensync,幫助你保持 overlay 在最新的狀態。

你可以用 gensync 一次更新所有 Overlay,或更新其中幾個。每個 Overlay 要在 /etc/gensync/ 目錄中放一個 .syncsource 檔案,包含 Overlay 位置,名稱,ID 等等。

假設你有兩個叫作 java (發展中的 java ebuild) 以及 entapps (你為工作開發的軟體),你可以像底下範例更新 overlay:

原始碼 3: 使用 gensync 更新一些 overlay

# gensync java entapps

5.c. 非 Portage 維護的軟體

使用 Portage 和自己維護的軟體

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

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

原始碼 4: package.provided 範例

sys-kernel/vanilla-sources-2.6.11.6

6. Ebuild的應用方式

6.a. Emerge 與 Ebuild

ebuild 程式是 Portage 系統較低層的操控介面。你可以透過給予 ebuild 檔案,使用這個程式去執行特定動作。例如,你可以單獨執行各個 merge 步驟。

使用 ebuild 大多是為了開發;更多關於 ebuild 的資訊因此可以在 開發者手冊中找到。然而,我們將解釋在 merge 一個確切的軟體名稱時,什麼 ebuild 動作會被 Portage 請求,還有如何執行一些 ebuilds 支援的後端配置。

6.b. 手動安裝軟體

抓取原始碼 & 驗證 checksum

當你使用 ebuild 程式且給他一個 ebuild 檔案,他將驗證所有內涵檔案的 checksums 是否與 Manifest 附帶的,或與 files/digest-<name>-<version> 檔案中的 checksums 相同。這會在下載原始碼之後執行。

使用 ebuild 抓取原始碼, 請執行:

原始碼 1: 抓取原始碼

# ebuild path/to/ebuild fetch

如果 ebuild 的 md5sum 不符合列在 Manifest 檔案裡面的那份,或是下載的原始碼不符合列在 files/digest-<package> 檔案中的那些 checksum,你將收到像是這樣的錯誤訊息:

原始碼 2: Ebuild checksum 錯誤

!!! File is corrupt or incomplete. (Digests do not match)
>>> our recorded digest: db20421ce35e8e54346e3ef19e60e4ee
>>>  your file's digest: f10392b7c0b2bbc463ad09642606a7d6

接著會指出錯誤的檔案。

如果你確定你下載的原始碼和 ebuild 本身正確無誤,你可以使用 ebuild 的 digest 功能重新建立 Manifest 和 digest-<package>。

原始碼 3: 重新建立 Manifest and digest

# ebuild path/to/ebuild digest

解開原始碼包裹

想解開 /var/tmp/portage(或你在 /etc/make.conf 指定的其他目錄路徑)中的原始碼檔案, 可以使用 ebuild 的 unpack 功能:

原始碼 4: 解開原始碼包裹

# ebuild path/to/ebuild unpack

這將執行 ebuild 的 src_unpack() 函式(如果沒有定義 src_unpack() 函式,預設會單純解壓縮)。在這個步驟也會套用所有必須的修補檔。

編譯原始碼

在 merge 程序中,下個步驟就是編譯原始碼。ebuild 的 compile 功能是去執行 ebuild 檔案中的 src_compile() 函式。如果有需要,這也包含著 configure 步驟。

原始碼 5: 編譯原始碼

# ebuild path/to/ebuild compile

如果你想改變編譯指令,建議您編輯 ebuild 檔案中的 src_compile() 函式。然而,你也可以讓 Portage 以為 ebuild 程式已經完成編譯步驟了。自己執行所有必須的命令然後在工作目錄建立一個叫做 .compiled 的空檔案。

原始碼 6: 通知 Portage 編譯工作完成了

# touch .compiled

安裝暫存路徑中的檔案

下個步驟 Portage 將會安裝暫存目錄中的所有必要檔案。這個目錄將會包含所有要被 merge 到 Live 檔案系統的檔案。你可以跑 ebuild 的 install 功能來完成這個動作,他會執行 ebuild 檔案中的 src_install() 函式:

原始碼 7: 安裝檔案

# ebuild path/to/ebuild install

Merge 檔案到 Live 檔案系統

最後一個步驟是把所有檔案 merge 到 Live 檔案系統和登記他們到 Portage 後端。 ebuild 將這個步驟稱做 "qmerge",而且包含下列步驟:

  • 若有指定,將會執行 pkg_preinst() 函式
  • 複製所有檔案到 Live 檔案系統
  • 登記檔案到 Portage 後端
  • 若有指定,將會執行 pkg_postinst() 函式

執行 ebuild 的 qmerge 功能以達成這些步驟:

原始碼 8: Merge 檔案到 Live 檔案系統

# ebuild path/to/ebuild qmerge

清除暫存目錄

最後,你可以使用 ebuild 的 clean 功能清除暫存資料夾:

原始碼 9: 清除暫存目錄

# ebuild path/to/ebuild clean

6.c. 額外的 ebuild 特性

執行所有 Merge 相關命令

使用 ebuild 的 merge 功能,你可以一次執行 fetch、unpack、compile、install、qmerge 命令:

原始碼 10: 安裝軟體

# ebuild path/to/ebuild merge

執行設定動作

某些程式包含對你系統更進一步設定的指令。這些指令可以與人互動,也因此不會自動執行。使用 ebuild 的 config 功能來執行列在 ebuild 檔案裡(非必要)config() 函式中的設定步驟:

原始碼 11: 設定套件

# ebuild path/to/ebuild config

建立一個 (RPM) 套件

你可以叫 Portage 由 ebuild 檔案建立一個二進位的套件,即使是 RPM 檔案。使用 ebuild 的 package 或 rpm 功能去建立這些檔案。然而這兩個功能有些不同:

  • package 功能與 merge 功能非常相像,在建立套件之前,會執行所有必備的動作 (fetch、unpack、compile、install)
  • rpm 功能會把執行 ebuild 的 install 功能之後所建立的檔案 包成 RPM 套件。

原始碼 12: 建立套件

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

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

6.d. 更多資訊

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

原始碼 13: Man pages

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

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

D. Gentoo 網路設定

1. 新手上路

1.a. Getting started

注意: 這篇文件假設你已成功的設定核心,和它的網路設備模組並且知道介面名稱. 我們並且假設你現在在設定eth0,但是也可以是eth1,wlan0,或其他.

注意: 這篇文章適用 baselayout-1.11.11 或更新的版本.

要開始設定你的網路卡,你需要告訴Gentoo RC系統相關的資訊. 做一個符號連結從 net.lo 到 net.eth0 在 /etc/init.d 目錄以完成這項動作

原始碼 1: 做一個符號連結從 net.eth0 到 net.lo

# cd /etc/init.d
# ln -s net.lo net.eth0

Gentoo's RC 系統現在知道這個介面了.它一樣也需要知道如何設定這個介面.所有的網路介面設定都在 /etc/conf.d/net這個檔案完成.接下來是一個用dhcp和靜態ip的範例設定.

原始碼 2: /etc/conf.d/net範例

# 使用 DHCP
config_eth0=( "dhcp" )
# 設定靜態 IP 使用 CIDR 標記法
config_eth0=( "192.168.0.7/24" )
routes_eth0=( "default via 192.168.0.1" )
# 設定靜態 IP 使用網路遮罩標記法
config_eth0=( "192.168.0.7 netmask 255.255.255.0" )
routes_eth0=( "default gw 192.168.0.1" )

注意: 如果你沒有為你的接面設定的話,我們會假定你使用dhcp取得ip.

注意: CIDR 表示無階級跨網域路由 (Classless InterDomain Routing). 原來, IPv4 位址被分成 A, B, C三個等級. 早期的分類系統並沒有想像到 Internet 的巨大發展,就造成了獨立位址會被用光的危機. CIDR 是一個地址表示規格容許一個 IP 位址去表示很多 IP 位址. A CIDR IP 位址可以看起來很像一般的 IP 位址除了它結束的地方多了一個反斜線和一個數字; 一個範例,192.168.0.0/16. CIDR 的詳細描述在 RFC 1519.

現在我們已經完成設定這個介面,我們可以使用以下的命令來啟動和停止它.

原始碼 3: 啟動和停止網路介面

# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop

重要: 在我們想要對網路除錯時,我們建議設定 RC_VERBOSE="yes" 在 /etc/conf.d/rc 檔案,我們就可以得到關於發生什麼事情的更多資訊.

.現在我們已經成功開始和停止我們的網路介面,你也許會想要讓它在Gentoo啟動的時候也啟動. 下面就是做法.最後一個"rc" 命令叫 Gentoo 去啟動任何的程式在當時的runlevel還沒有啟動的.

原始碼 4: 設定一個網路介面在開機時啟動

# rc-update add net.eth0 default
# rc

2. 進階設定

2.a. 進階設定

config_eth0 變數是網路介面設定的核心。他是一個高階的網路介面(例子中是 eth0)設定列表。在列表中的每個指令依序執行。當最後一個指令成功後網路介面就視為可以用了。

這是內建指令的列表。

指令 說明
null 不做任何事
noop 如果網路介面啟動而且有一個位址,那就成功離開設定
an IPv4 or IPv6 address 為這個介面加上一個網路位址
dhcp, adsl or apipa (或是第三方模組提供的自訂指令) 執行這個指令的模組。例如說 "dhcp" 會執行 dhcp 模組,是 dhcpcd,udhcpc, dhclient 或 pump 其中一個。

如果有一個失敗了,你可以指定 fallback 指令。fallback需要完全符合設定的結構。

你可以把這些指令連在一起。底下是一些實際的範例。

原始碼 1: 設定範例

# 加上三個 IPv4 位址
config_eth0=(
"192.168.0.2/24"
"192.168.0.3/24"
"192.168.0.4/24"
)
# 加上一個 IPv4 位址及兩個 IPv6 位址
config_eth0=(
"192.168.0.2/24"
"4321:0:1:2:3:4:567:89ab"
"4321:0:1:2:3:4:567:89ac"
)
# 使用核心指定的位址,如果網路介面停止的話改用 DHCP。
# DHCP 失敗的話由 APIPA 指定一個位址。
config_eth0=(
"noop"
"dhcp"
)
fallback_eth0=(
"null"
"apipa"
)

注意: 當使用 ifconfig 模組並且加上超過一個位址,每個位址會建立一個別名。上面的例子你會有 eth0,eth0:1 和 eth0:2 這幾個介面。你不能對多出來的介面做任何事。因為核心和其他程式會把 eth0:1 和 eth0:2 當作 eth0。

重要: fallback 中的順序相當重要!如果你沒有在 apipa 之前指定 null,他只有在 noop 指令失敗時才會做。

注意: APIPA 和 DHCP 稍後會討論。

2.b. 網路相依性

/etc/init.d 中的 可以依賴某個網路介面或是任一個(net),net 可以在 /etc/conf.d/rc 中的 RC_NET_STRICT_CHECKING 變數定義代表那些東西。

說明
none net 服務總是被認為啟動了
no 這基本上代表除了 net.lo 以外,任一個 net.* 服務啟 動才算。這個可以給同時有無線網路及有線網路的筆記型電腦使用者使用,因為某一 時間只要其中之一介面啟動了,net 服務就被視為啟動。
lo 這和 no 相同,但是 net.lo 也被考慮在內。這對於不在意哪 個介面啟動的使用者很有用。
yes 所有的網路介面啟動了 net 服務才算啟動。

但是,net.br0 要依賴 net.eth0 還是 net.eth1?net.eth1 可能是一個無線網路或 ppp 裝置,需要在橋接前先做設定。這不能由 /etc/init.d/net.br0 完成,因為他只是一個到 net.lo 的符號連結。

解答是在 /etc/conf.d/net 做一個你自己的 depend() 函數。

原始碼 2: /etc/conf.d/net 中 net.br0 相依關係

# 你可以使用任何在目前檔案的相依關係 (use, after, before)
depend_br0() {
need net.eth0 net.eth1
}

要取得更多關於相依性的討論。參考 寫 Init Scripts。

2.c. 變數名稱及設定值

變數名稱是動態的。他們的結構通常是 variable_${interface|mac|essid|apmac} 。例如說,dhcpcd_eth0 變數代表 eth0 的 dhcpcd 設定。而 dhcpcd_essid 則是任何介面連到這個 ESSID 時的 dhcpcd 設定。

然而,並沒有簡單的法則決定介面的名稱。實際上,許多無線網路介面除了 ethx 以外,也會用像 wlanx,rax 之類的名稱。而且一些使用者定義的介面,像橋接,可以給 foo 之類的自訂名稱。為了讓生活更加有趣,無線網路結點可以在名稱中有非英文,數字的字元 - 因為你要對每個 ESSID 設定參數,這一點相當重要。

Gentoo 在網路設定的缺點是使用 bash 變數 - 不能使用任何數字,英文字母以外的東西。為了突破這個限制,我們把所有非數字,英文字母的字元轉成 _ 字元。

另一個不方便的地方是變數的值 - 需要跳脫一些字元。這可以在需要跳脫的字元前加上 / 字元來完成。底下是需要像這樣跳脫的字元列表:",' 和 /。

在範例中為了讓 ESSID 包含最多種的字元,我們使用這個 My "/ NET ESSID:

原始碼 3: 變數名稱範例

# 這可以運作,但是領域名稱是不合法的
dns_domain_My____NET="My /"// NET"
# 上面的例子是當連到 ESSID 是 My "/ NET 的 AP 時,
#把領域名稱設成 My "/ NET

3. 網路模組

3.a. 網路模組

我們現在支援模組化的網路 script,這代表可以輕鬆的支援新的網路介面和設定模組,而且同時和原來的保持相容性。

如果模組需要的套件已經安裝,他就會自動載入。但是如果你指定一個還沒安裝套件的模組,那你會收到一個錯誤訊息,告訴你要安裝哪個套件。理想上,只有在你安裝兩個以上提供相同功能的套件,而且你比較喜歡某一個時,才需要用模組設定。

注意: 這裡討論的設定,除非特別說明,都是在 /etc/conf.d/net 中。

原始碼 1: 模組優先權

# 想用 iproute2 而不是 ifconfig
modules=( "iproute2" )
# 你也可以為一個介面指定不同的模組
# 在底下的例子我們比較想用 udhcpc 而不是 dhcpcd
modules_eth0=( "udhcpc" )
# 你也可以指定不要用哪個模組 - 例如說你可能想
# 使用 linux-wlan-ng 來控制無線網路設定
# 但是你仍然想對每一個 ESSID 做設定
modules=( "!iwconfig" )

3.b. 網路介面管理

我們目前提供兩種不同的網路管理程式:ifconfig 及 iproute2。你可以用這兩個其中之一來做任何種類的網路設定。

ifconfig 是目前 Gentoo 預設使用的,並且包含在系統 profile 之中。 iproute2 是更有威力及彈性的套件,但是預設並不包含他。

原始碼 2: 安裝 iproute2

# emerge sys-apps/iproute2
# 如果兩個都安裝的話,使用 iproute2
modules=( "iproute2" )

因為 ifconfig 和 iproute2 都是做很類似的事,我們讓這兩個可以使用共同的基本設定。例如說底下兩段程式碼不管對那種都適用。

原始碼 3: ifconfig 和 iproute2 範例

config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
# 我們也可以指定廣播位址
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )

3.c. DHCP

DHCP 是一種從 DHCP 伺服器取得網路資訊(IP 位址,DNS 伺服器,閘道器等等)的方法。這代表如果網路上有一個 DHCP 伺服器,你只要告訴客戶端使用 DHCP 然後他們就會自己把網路設好。當然,如果在使用 DHCP 前必需要用無線網路,PPP 等其他事的話你必需要去設定。

DHCP 功能可以由 dhclient,dhcpcd,pump 或是 udhcpc 提供。每一種 DHCP 模組都有他的好處和壞處 - 底下是快速的簡介。

DHCP 模組 套件 優點 缺點
dhclient net-misc/dhcp 由 ISC,和製作 BIND DNS 軟體的同一批人做的。設定非常有彈性。 設定相當複雜,軟體非常肥大,沒辦法從 DHCP 取得 NTP 伺服器,預設不送主機名稱。
dhcpcd net-misc/dhcpcd Gentoo 一直以來的預設套件,不依賴任何其他工具 不再被上游維護,有些時候很慢,當租約無限久時不會變成系統服務
pump net-misc/pump 輕巧,不依賴任何其他工具 不再被上游維護,不可靠,尤其是在透過數據機時,不能從 DHCP 取得 NIS 伺服器
udhcpc net-misc/udhcp 輕巧 - 最小的 DHCP 客戶端,為嵌入式系統而做的軟體 未知 - 沒有任何套件預設使用他,不能定義三秒以上的 timeout

如果你安裝一種以上的 DHCP 客戶端,你需要指定用那一個 - 否則預設是有 dhcpcd 可以用的話就用他。

要送給 DHCP 客戶端自訂的選項,使用 module_eth0="..."(把 module 改成你在用的 DHCP 模組,例如說 dhcpcd_eth0)

我們嘗試讓 DHCP 相對來說不可知 - 因此在 dhcp_eth0 變數中支援下列指令。預設是不用任何一個。

  • release - 釋放 IP 讓他可以重複使用
  • nodns - 不要複寫 /etc/resolv.conf
  • nontp - 不要複寫 /etc/ntp.conf
  • nonis - 不要複寫 /etc/yp.conf

原始碼 4: /etc/conf.d/net 的 DHCP 範例

# 只有在你安裝一種以上 DHCP 模組才需要
modules=( "dhcpcd" )
config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10" # 十秒後 Timeout
dhcp_eth0="release nodns nontp nonis" # 只取得位址

注意: dhcpcd,udhcpc 和 pump 預設會傳送目前的主機名稱給 DHCP 伺服器,所以你不用去指定他。

3.d. ADSL 連線

首先我們要安裝 ADSL 軟體。

原始碼 5: Install the rp-pppoe package

# emerge net-dialup/rp-pppoe

警告: baselayout-1.11.x 目前只支援 PPPOE。我們希望以後的版本可以支援 PPPOA。

現在要更新 /etc/conf.d/net,設定 eth0 為 ADSL 連接的網路介面,並且輸入使用者名稱。

原始碼 6: 在 /etc/conf.d/net 設定 eth0 使用 ADSL

config_eth0=( "adsl" )
adsl_user_eth0="username"

最後你要在 /etc/ppp/pap-secrets 定義使用者名稱及密碼。

原始碼 7: /etc/ppp/pap-secrets 範例

# * 非常重要
"username"  *  "password"

3.e. APIPA (自動取得虛擬 IP)

APIPA 藉由發送arp,詢問在 169.254.0.0-169.254.255.255 中隨機的一個位址來找到一個可以用的 IP。如果沒有收到就是可以用,接著就會把網路介面指定這個 IP。

這只有在沒有 DHCP 伺服器並且沒有連到網際網路,及其他電腦也用 APIPA 時才適用。

為了支援 APIPA,安裝 net-misc/iputils or net-analyzer/arping。

原始碼 8: /etc/conf.d/net 的 APIPA 設定

# 先試 DHCP - 失敗的話再用 APIPA
config_eth0=( "dhcp" )
fallback_eth0=( "apipa" )
# 只使用 APIPA
config_eth0=( "apipa" )

3.f. 頻寬合併

要使用頻寬合併,先安裝 net-misc/ifenslave

頻寬合併用來增加網路頻寬。如果你有兩個連到同一網路的網路介面,你可以把這兩個連結在一起,讓應用程式只看到一個網路介面,但實際上他們正同時使用兩個介面。

原始碼 9: /etc/conf.d/net 頻寬合併設定

# 把介面連在一起
slaves_bond0="eth0 eth1 eth2"
# 你或許不想給連結的介面 IP
config_bond0=( "null" )
# 因為 eth0,eth1 和 eth2 需要額外的設定,要在相依性中加入這三個
depend_bond0() {
need net.eth0 net.eth1 net.eth2
}

3.g. 橋接 (802.1d 支援)

橋接的支援要先安裝 net-misc/bridge-utils

橋接是用來兩個網路連接在一起。例如說,你有一台伺服器透過 ADSL 連到網際網路,還有一張無線網路卡讓其他的電腦可以連到網際網路。你可以用橋接把這兩個連在一起。

原始碼 10: /etc/conf.d/net 橋接設定

# 設定橋接 - "man btctl" 取得更多資訊
brctl_br0=( "setfd 0" "sethello 0" "stp off" )
# 增加要橋接在 br0 的 port
bridge_br0="eth0 eth1"
# 你可以設定成 null 讓 dhcp 不會啟動
config_eth0=( "null" )
config_eth1=( "null" )
# 最後給橋接器一個位址 - 你也可以用 DHCP
config_br0=( "192.168.0.1/24" )
# 因為 eth0,eth1 需要額外的設定,要在相依性中加入這三個
depend_br0() {
need net.eth0 net.eth1
}

重要: 要設定橋接,你可以參考 變數名稱 文件。

3.h. MAC 位址

如果你用 sys-apps/baselayout-1.11.14 或更新的版本,你不用安裝任何東西就可以改變網路介面的 MAC 位址。然而,如果你使用比上面提到更舊的版本,你需要安裝 net-analyzer/macchanger 才能有這個功能。

原始碼 11: MAC 改變範例

# 指定網路介面的 MAC 位址
mac_eth0="00:11:22:33:44:55"
# 隨機決定最後三個位元組
mac_eth0="random-ending"
# 在所有品牌,同一種網路類型內(光纖,銅線,無線網路)隨機決定
mac_eth0="random-samekind"
# 在所有品牌,所有網路類型內(光纖,銅線,無線網路)隨機決定
mac_eth0="random-anykind"
# 完全隨機 - 警告:一些由這方法做出來的 MAC 位址可能不能正常工作
mac_eth0="random-full"

3.i. Tunnel

你需要裝任何東西就可以使用 tunnel 了,因為網路介面管理會幫你做這些事。

原始碼 12: /etc/conf.d/net 的 tunnel 設定

# GRE tunnels
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"
# IPIP tunnels
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"
# 設定介面
config_vpn0=( "192.168.0.2 peer 192.168.1.1" )

3.j. VLAN (802.1q 支援)

安裝好 net-misc/vconfig 後,就可以支援 VLAN 了。

虛擬區網 (Virtual LAN) 是讓一組網路裝置運作時,有如他們連到同一段區網一樣 - 但實際上可能不是。VLAN 成員即使是連在同一個實體區域網路,也只能看到同一 VLAN 的成員。

原始碼 13: /etc/conf.d/net VLAN 設定

# 像這樣指定 VLAN 號碼
# 確定 VLAN ID 前面沒有加上 0
vlans_eth0="1 2"
# 你也可以修改 VLAN 的設定值
# 看 vconfig 手冊頁取得更多資訊
vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )
# 如同一般的設定方式設定 vlan
config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )

重要: 要設定 VLAN,你可以參考 變數名稱 文件。

4. 無線網路

4.a. 介紹

目前我們支援用 wireless-tools 或 wpa_supplicant 來設定無線網路。要記得最重要的一點是無線網路的設定是全域為主,而不是以介面為主。

wpa_suppliant 是最好的選擇,但是他並不支援所有裝置。要看他所有支援的裝置請查看 wpa_supplicant 網站。此外,wpa_supplicant 目前只能連線到你已經設定的 SSID。

wireless-tools 幾乎支援所有的裝置,但是不能連到只使用 WPA 的 AP。

警告: 目前 baselayout 不支援 linux-wlan-ng。因為 linux-wlan-ng 有著和其他完全不同的設定方式。搖傳 linux-wlan-ng 開發者要把他們的設定變成 wireless-tools - 這代表可以在 baselayout 中使用 linux-wlan-ng。

4.b. WPA Supplicant

WPA Supplicant 是讓你連接到使用 WPA 的 AP 的套件。因為還在測試中,他的設定過程常常改變 - 但是大部份情況都可以正常工作。

原始碼 1: 安裝 wpa_supplicant

# emerge net-wireless/wpa_supplicant

重要: 核心中要啟動 CONFIG_PACKET 才能讓 wpa_supplicant 工作。

現在要設定 /etc/conf.d/net 優先使用 wpa_supplicant 而不是 wireless-tools (兩個都安裝的話,預設會用 wireless-tools)。

原始碼 2: /etc/conf.d/net 設定 wpa_supplicant

# 使用 wpa_supplicant 而不是 wireless-tools
modules=( "wpa_supplicant" )
# 因為他的偵測不是很好,所以要告訴 wpa_supplicant
# 要使用哪個驅動程式
wpa_supplicant_eth0="-Dmadwifi"

注意: 如果你用 host-ap 驅動程式,你需要讓網路卡進入管理模式,讓 wpa_supplicant 可以正確使用。在 /etc/conf.d/net 中加上 iwconfig_eth0="mode managed" 來啟動。

很簡單不是嗎?然而,根據你要連線 AP 的安全程度,還有一些 wpa_supplicant 的設定要調整。底下的例子是從 wpa_supplicant 提供的 /etc/wpa_supplicant.conf.example 簡化而來的。

原始碼 3: /etc/wpa_supplicant.conf 設定

# 不有改變這行,否則他不能工作
ctrl_interface=/var/run/wpa_supplicant
# 確保只有 root 可以讀取 WPA 設定
ctrl_interface_group=0
# 讓 wpa_supplicant 搜尋及選擇 AP
ap_scan=1
# 簡單的例子:WPA-PSK, PSK 使用 ASCII 密碼,只要密碼正確就允許
network={
ssid="simple"
psk="very secret passphrase"
# 越高的優先權越快被使用
priority=5
}
# 和前一個一樣,但是指定 SSID (適用
# 不廣播 SSID 的 AP)
network={
ssid="second ssid"
scan_ssid=1
psk="very secret passphrase"
priority=2
}
# 只用 WPA-PSK。任何有效的密碼組合都允許
network={
ssid="example"
proto=WPA
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP WEP104 WEP40
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
priority=2
}
# 明文連線 (不用 WPA,IEEE 802.1X)
network={
ssid="plaintext-test"
key_mgmt=NONE
}
# Shared WEP key 連接 (不用 WPA,IEEE 802.1X)
network={
ssid="static-wep-test"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
}
# Shared WEP key 連接 (不用 WPA,IEEE 802.1X) 使用
# IEEE 802.11 Shared key 認證
network={
ssid="static-wep-test2"
key_mgmt=NONE
wep_key0="abcde"
wep_key1=0102030405
wep_key2="1234567890123"
wep_tx_keyidx=0
priority=5
auth_alg=SHARED
}
# IBSS/ad-hoc 網路加上 WPA-None/TKIP
network={
ssid="test adhoc"
mode=1
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="secret passphrase"
}

4.c. Wireless Tools

初始設定及管理模式

Wireless Tools 提供通用的方法設定無線網路介面使用 WEP 安全等級。雖然 WEP 是脆弱的安全防護,但他也是最普及的。

Wireless Tools 設定是由一些主要的變數控制的。底下的設定檔說明所有你需要知道的東西。要牢記在心理的是不設定代表 "連結到訊號最強,未加密的 AP" we will always try and connect you to something.

原始碼 4: 安裝 wireless-tools

# emerge net-wireless/wireless-tools

注意: 雖然你可以把設定存在 /etc/conf.d/wireless,但是指南中建議你存在 /etc/conf.d/net。

重要: 你會需要查閱 變數名稱 文件。

原始碼 5: /etc/conf.d/net iwconfig 設定範例

# 使用 iwconfig 而不是 wpa_supplicant
modules=( "iwconfig" )
# 設定叫作 ESSID1 及 ESSID2 AP 的 WEP key
# 你最多可以設四個 WEP key,但是只有第一個有作用
# 所以我們用預設的索引 [1] 設定 [1] key
# 然後再把 [1] 設成使用的 key
# 我們這樣做讓你可以設定其他的 ESSID 使用一個以上的 WEP key
# key 前面加上 s: 代表是 ASCII key,不然的話 HEX key
# enc open 指定 open security (較安全)
# enc restricted 指定 restricted security (較不安全)
key_ESSID1="[1] s:yourkeyhere key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"
# 底下只在掃描可用 AP 時有用
# 有時候找到不只一個可以用的 AP
# 所以們要定義連線的優先順序
preferred_aps=( "ESSID1" "ESSID2" )

AP 選擇的詳細設定

你可以加上一些額外參數來做 AP 選擇的細部設定,但是一般來說這並不需要。

你可以決定是不是只連到優先的 AP。預設如果每個設定都失敗了,會連線到未加密的 AP。這可以用 associate_order 變數控制。這是每個參數控制的說明。

說明
any 預設行為
preferredonly 只會連到在優先列表上可見的 AP
forcepreferred 即使掃描時沒找到,還是會依優先順序強制連到 AP
forcepreferredonly 不要掃描 AP - 只依序連到每一個
forceany forcepreferred 加上連到任何可見的 AP

最後還有 blacklist_aps 及 unique_ap 選擇。blacklist_aps 和 preferred_aps 運作方法差不多。unique_ap 設定 yes 或 no 決定第二個無線網路介面可不可以連到同一個 AP。

原始碼 6: blacklist_aps 及 unique_ap 範例

# 有時候你不想連到特定 AP
blacklist_aps=( "ESSID3" "ESSID4" )
# 如果你有一個以上的無線網路卡,你可以設定允不允許
# 每張卡連到同一個 AP
# 可以設定 "yes" 及 "no"
# 預設是 "yes"
unique_ap="yes"

Ad-Hoc 及 Master 模式

如果你想要在管理模式連線 AP 失敗時設定成 Ad-Hoc 模式,也可以做的到。

原始碼 7: 失敗後進入 ad-hoc 模式

adhoc_essid_eth0="This Adhoc Node"

要如何連到 Ad-Hoc 網路或是用 Master 模式執行,成為 AP?這裡就是這樣做的設定!你可能需要向下面這樣指定 WEP key。

原始碼 8: ad-hoc/master 設定範例

# 設定模式 - 可以是 managed (預設),ad-hoc 或 master
# 不是全部裝置都支援所有模式
mode_eth0="ad-hoc"
# 設定介面的 ESSID
# 在 managed 模式,這除了強迫介面連到指定的 ESSID 外就沒其他的作用了
essid_eth0="This Adhoc Node"
# 如果沒有指定頻道的話,會使用頻道 3
channel_eth0="9"

重要: 底下是從 NetBSD 文件 中找到的 BSD wavelan 文件複製過來的。一共有 14 個頻道可以用:1-11 在北美是合法的,歐洲則是 1-13,法國是 10-13,日本只有 14。如果你不確定的話,請查閱你的卡或 AP 附的文件。確定你選的頻道和 AP 所使用的(或其他在 ad-hoc 網路中的卡)一樣。在北美及歐洲大部份賣出的網路卡是用頻道 3,法國則是 11,日本是 14。

Wireless Tools 疑難排解

有一些變數可以在裝置或環境有問題時,幫你啟動無線網路。這是你可以嘗試使用的變數列表。

變數 預設值 說明
iwconfig_eth0   查看 iwconfig 手冊頁了解送到 iwconfig 設定的細節
iwpriv_eth0   查看 iwpriv 手冊頁了解送到 iwpriv 設定的細節
sleep_scan_eth0 0 在嘗試掃描前睡眠幾秒。當驅動程式/軔體在裝置可以使用前,要花一些使間啟動時使 用。
sleep_associate_eth0 5 當介面從一個 AP 移到另一個 AP 時要等幾秒
associate_test_eth0 MAC 有些驅動程式在失去或嘗試連線時不會重設 MAC 位址到無效的, 有些驅動程式在失去或嘗試連線時不會重設 quality level。可以設定的值有 MAC,quality 和 all。
scan_mode_eth0   一些驅動程式需要在 ad-hoc 模式掃描。所以如果掃描失敗了,試試看把他設成 ad-hoc
iwpriv_scan_pre_eth0   在開始掃描前送一些 iwpriv 的指令。查閱 iwpriv 手冊頁取得更多資訊。
iwpriv_scan_post_eth0   在掃描後送一些 iwpriv 的指令。查閱 iwpriv 手冊頁取得更多資訊。

4.d. 針對每一個 ESSID 做網路設定

有時候當你連到 ESSID1 時你會用固定 IP,而連到 ESSID2 時使用 DHCP 。事實上大部份的模組指令可以針對不同的 ESSID 做設定。底下就說明如何設定。

注意: 在你使用 WPA Supplicant 或 Wireless Tools 時才有作用。

重要: 你會需要參閱 變數名稱文件。

原始碼 9: override network settings per ESSID

config_ESSID1=( "192.168.0.3/24 brd 192.168.0.255" )
routes_ESSID1=( "default via 192.168.0.1" )
config_ESSID2=( "dhcp" )
fallback_ESSID2=( "192.168.3.4/24" )
fallback_route_ESSID2=( "default via 192.168.3.1" )
# 我們也可以定義 DNS 還有其他東西
# 這意:如果沒有說的話,DHCP 會覆蓋這些設定
dns_servers_ESSID1=( "192.168.0.1" "192.168.0.2" )
dns_domain_ESSID1="some.domain"
dns_search_domains_ESSID1="search.this.domain search.that.domain"
# 由 AP 的 MAC 位址來區別
# 在你到別的地方,但是確有相同的 ESSID 時很有用
config_001122334455=( "dhcp" )
dhcpcd_001122334455="-t 10"
dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )

5. 新增功能

5.a. 標準函數連結

有四個定義好的函數在 start/stop 動作時會啟動。這些函數開頭都是網路介面的名稱,以便控制多個網路介面。

preup() 和 predown() 函數應該回傳 0,表示接下來的介面設定或取消設定可以繼續,如果 preup() 回傳不為 0 的數值,會結束網路介面的設定。如果 predown() 回傳不為 0 的數值,將會不允許繼續這個網路介面的取消設定。

postup() 及 postdown() 函數會忽略回傳值,因為如果他們有錯誤的話,也沒有什麼要做的。

${IFACE} 是設成要啟動/關閉的網路介面。${IFVAR} 是把 ${IFACE} 轉換成 bash 可以接受的變數名稱。

原始碼 1: pre/post up/down function 範例

preup() {
# 在啟動前測試網路線是否已接上。
# 這只在某些網路卡有作用,並且需要安裝 mii-diag 套件
if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# 在啟動前測試網路線是否已接上。
# 這只在某些網路卡有作用,並且需要安裝 ethtool 套件
if ethtool ${IFACE} | grep -q 'Link detected: no'; then
ewarn "No link on ${IFACE}, aborting configuration"
return 1
fi
# 記得回傳 0 代表成功
return 0
}
predown() {
# script 中預設的是測試是否使用 NFS 當作根目錄,在這種情況不允許停止網路介面。
# 注意如果你指定一個 predown() 函數,會蓋掉這個判斷。底下就是這個
#script,如果你還需要他的話...
if is_net_fs /; then
eerror "root filesystem is network mounted -- can't stop ${IFACE}"
return 1
fi
# 記得回傳 0 代表成功
return 0
}
postup() {
# 這個函數的用處例如說註冊動態 DNS 服務。
# 另一個例子是在網路卡啟動後傳送/接收郵件。
return 0
}
postdown() {
# 這個函數只是為了完整放在這裡...
# 我還沒想到什麼巧妙的事情可以做的 ;-)
return 0
}

5.b. 無線網路函數連結

注意: 這對 WPA Supplicant 不能工作 - 但是 ${ESSID} 和 ${ESSIDVAR} 變數在 postup() 函數內可以用。

這裡定義兩個結合函數在相關的函數附近被呼叫。這些函數開頭都是網路介面的名稱,以便控制多個網路介面。

preassociate() 函數應該回傳 0,表示接下來的介面設定或取消設定可以繼續,如果 preup 回傳不為 0 的數值,會結束網路介面的設定。如果 preassociate() 回傳不為 0 的數值,將會不允許繼續這個網路介面的取消設定。

preassociate() 函數會忽略回傳值,因為如果他們有錯誤的話,也沒有什麼要做的。

${ESSID} 是設成你連線 AP 的 ESSID。${ESSIDVAR} 是 ${ESSID} 轉換成 bash 可以接受的變數名稱。

原始碼 2: pre/post 結合函數

preassociate() {
# 底下加了 leap_user_ESSID 及 leap_pass_ESSID 兩個變數
# 當這些都對你要連線的 ESSID 設好後,執行 CISCO LEAP script
local user pass
eval user=/"/$/{leap_user_${ESSIDVAR}/}/"
eval pass=/"/$/{leap_pass_${ESSIDVAR}/}/"
if [[ -n ${user} && -n ${pass} ]]; then
if [[ ! -x /opt/cisco/bin/leapscript ]]; then
eend "For LEAP support, please emerge net-misc/cisco-aironet-client-utils"
return 1
fi
einfo "Waiting for LEAP Authentication on /"${ESSID}/""
if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
ewarn "Login Failed for ${user}"
return 1
fi
fi
return 0
}
postassociate() {
# 這個函數只是為了完整放在這裡...
# 我還沒想到什麼巧妙的事情可以做的 ;-)
return 0
}

注意: ${ESSID} 及 ${ESSIDVAR} 在 predown() 還有 postdown() 函數不能使用

6. 網路管理

6.a. 網路管理

如果你和你的電腦經常在移動,你可能會沒有網路線或無線網路可以用。而且,你可能希望在你插上網路線或是找到無線網路時網路自動啟動。

這裡你可以找到一些幫你完成的工具。

注意: 這份文件只介紹 ifplugd,但時還有其他像 quickswitch 的工具你可以參考。

6.b. ifplugd

ifplugd 是一個在網路線接上或拔掉時自動啟動,停止網路介面的服務。他也會在新的無線網路結點在範圍內時幫你管理無線網路。

原始碼 1: 安裝 ifplugd

# emerge sys-apps/ifplugd

設定 ifplugd 相當的直觀。設定檔是放在 /etc/conf.d/ifplugd。執行 man ifplugd 取得詳細的變數資訊。

原始碼 2: ifplug 設定範例

# 設定要監視的介面
INTERFACES="eth0"
AUTO="no"
BEEP="yes"
IGNORE_FAIL="yes"
IGNORE_FAIL_POSITIVE="no"
IGNORE_RETVAL="yes"
POLL_TIME="1"
DELAY_UP="0"
DELAY_DOWN="0"
API_MODE="auto"
SHUTDOWN="no"
WAIT_ON_FORK="no"
MONITOR="no"
ARGS=""
# 對某個介面加上 ifplugd 的額外參數
# 注意當像這樣的變數設定時,全域變數會被忽略
#
MONITOR_wlan0="yes"
DELAY_UP_wlan0="5"
DELAY_DOWN_wlan0="5"

這份文件是以 Creative Commons - 姓名標示-相同方式分享 授權條款發布

Gentoo Linux HPPA 手冊相关推荐

  1. Gentoo Linux 2005.0 x86 手冊

    內容: 安裝 Gentoo 這個部份將帶領您進行 Gentoo 的安裝. 關於 Gentoo Linux 安裝步驟. 不熟悉 Gentoo 的使用者並不了解 Gentoo 的選擇. 使用 Univer ...

  2. Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安装手冊(一抹曦阳)

    Oracle 10g 10.2.0.1 在Oracle Linux 5.4 32Bit RAC安装手冊(一抹曦阳).pdf下载地址 ,step by step http://download.csdn ...

  3. NS2 教學手冊 ( NS2 Learning Guide)

    转载自:NS2 教学手册(柯志亨网站资源) NS2 教學手冊 ( NS2 Learning Guide) [快速連結區] My works  中文影音教學區  Q&A for my works ...

  4. 柯志亨老师-- NS2 教學手冊

    感谢柯志亨老师! NS2教學手冊( NS2 Learning Guide) [快速連結區] My works中文影音教學區Q&A for my worksMy BookMy TalksForu ...

  5. Gentoo Linux的安装

    1. 有关Gentoo Linux的安装 1.a. 介绍 欢迎! 首先,欢迎使用Gentoo Linux系统!你将进入选择和性能的世界中.Gentoo处处给用户提供选择.当安装Gentoo时,这点你会 ...

  6. gentoo linux 分区_小白安装Gentoo Linux操作系统——磁盘分区

    磁盘分区规划 在日常安装Gentoo Linux操作系统前需要对系统使用的磁盘分区进行规划,规划原则需考虑磁盘容量.系统规模与用途. 现阶段个人PC的磁盘容量已近乎TB级别,磁盘容量已不再成为系统安装 ...

  7. Loopback測试软件AX1用户手冊 V3.1

    点击:AX1 软件下载 1. 什么是AX1 AX1程序是基于windows的PC程序,用来评估 iinChip™的性能,也即是wiznet的硬件TCP/IP芯片. AX1通过网络与iinChip™评估 ...

  8. Gentoo Linux: /var/db/pkg 这个文件夹很重要![转]推荐阅读

    来自 http://www.aiview.com/2008/03/gentoo_linux_deleted_var_db_pkg.html 前段时间折腾tmpfs 文件系统,不小心弄丢了/var/db ...

  9. Gentoo Linux 学习笔记1

    Gentoo Linux是一个基于portage进行包管理的Linux发行版,最早版本始于2002年.其官方官网为http://www.gentoo.org 目前,Gentoo Linux已经在在互联 ...

最新文章

  1. html点击按钮执行php代码,php代码在html文件里面执行的示例
  2. zookeeper入门系列
  3. 用代码证明自己闲的蛋疼(四)——简易坑爹版学生管理系统
  4. Spring安全示例教程
  5. 阿里云产品专家解读链路追踪(Tracing Analysis)
  6. mysql describe 作为字段_mysql中的describe语法 以及查看 当前库中所有表和字段信息...
  7. 网络工程师考试试题讲解视频教程
  8. Java快速对接微信登录
  9. meta标签属性及其功能
  10. 如何将QQ群文件快速下载,怎么快速下载QQ中的文件,QQ群文件下载
  11. Android 集成友盟统计
  12. 手机连接笔记本开启的WiFi一直显示正在获取IP中
  13. 大学一年级(行走的皮卡丘)
  14. 学习软件之epub阅读器推荐
  15. 背包九讲之一:01背包问题
  16. UUID和GUID的区别
  17. JAVA AJAX教程第一章-初始AJAX
  18. ntfs磁盘 0字节 0byte 文件目录损坏且无法读取 RAW chkdsk失败
  19. Ubuntu-Unattended upgrade in progress during shutdown
  20. javascript ipz127

热门文章

  1. latex如何安装包
  2. 如何把视频里的声音提取出来,4种有效方法学起来
  3. jqgrid 常见操作
  4. 抖音排名seo优化账号矩阵技术工具源码搭建
  5. 华为q1设置虚拟服务器,华为Q1路由器设置上网步骤 手机设置路由器的方法
  6. WADL(REST) 基础
  7. 基于Simulink、Simscape、S-Function联合的机械臂仿真
  8. 华为鸿蒙系统内部消息,鸿蒙系统上线?华为内部人员:山寨网站
  9. 为了让刚接触的朋友了解并使用 mastercam,本文我就把它出程序的原理过程描述一下
  10. onenote导入html文件,如何批量导入 Windows 的文件夹树状结构和 HTML 文件到 OneNote 里...