AMD64位系统文档
时间:2005-09-14
来源:互联网
基本与i386相同,出处来自http://www.gentoo.org/AMD64英文版内容。
Gentoo Linux/AMD64 手册
内容:
* 安装 Gentoo
在这一章中将会为您简介在这一部分的安装步骤。
1. 关于 Gentoo Linux 安装步骤。
这章将为您介绍这个部份所使用的安装方式。
2. 选择适合的安装方式
安装 Gentoo 有许多方式。您可以使用我们的 minimal Installation CD来安装,或者使用 Universal Installation CD 也可以。
3. 设定网路
为了能够下载到最新版的原始档,您将要先作一些设定。
4. 准备磁碟
为了要安装 Gentoo,您一定要建立一些所需的分割区。这章的内容将为您解释如何设定磁碟分割。
5. Gentoo 安装档案
Gentoo 安装需要使用到 stage 档案。在这章内容我们将为您解释如何解开一个 stage 压缩档然后再 chroot 到系统内。
6. 安装 Gentoo 基础系统
不论您是选择那一个 stage 的压缩档,到最后您将会拥有一个 Gentoo 的基础系统。这章将会为您解释如何到达完成安装的过程。
7. 设定核心
Linux kernel 是每个版本的核心。这章将解释如何编译您的核心。
8. 设定您的系统
您将需要编辑一些重要的设定档。这章将解释这些重要设定档的功能以及设定。
9. 安装必要的系统工具
就如之前所提的,Gentoo 的哲学是选择。这章将带领您选择并且安装一些重要的工具。
10. 设定开机管理程式
在这章中,我们将会为您简介GRUB开机管理程式和一些用来设定GRUB的必要程序步骤。
11. 最终化您的 Gentoo 安装
到这个步骤时,您已经差不多要完成安装过程了。我们只需要建立一个(或多个)系统使用者。
12. 然后呢?
现在您的 Gentoo 系统已经完成安装了,然后呢?
* 使用 Gentoo
学习如何使用 Gentoo:安装软体,变量,Portage 的行为等等。
1. Portage 介绍
这一章在简介一些使用者在维护自己系统上的软体的一些简单的步骤
2. USE 参数
USE 参数对于 Gentoo 非常的重要。在这章内,您将会学习如何使用 USE 参数和了解 USE 参数如何跟您的系统互动。
3. Portage 功能
包括了Portage拥有的特色,就像是软体的编译和快取等等。
4. 起始程序(Initscripts)
Gentoo 使用一份非常特别的起始程序,包含着其他功能如相依性和虚拟起始程序。这章将解释所有的概念和如何使用它们。
5. 环境变数
使用 Gentoo,您可以很简单的管理系统上的环境变数。这章将解释如何管理的方法,也解释着一些常用的变数。
* 使用Portage
学习如何使用 Gentoo:安装软体,变量,Portage 的行为等等。
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 2005.0 手册,里面包含了无网路环境的安装指南。
请注意,如果您打算使用 GRP (Gentoo 参考平台,一套供即时使用的预编套件),您 一定 要按照 Gentoo 2005.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 的硬体清单。
硬体需求
CPU 任一种 AMD64 CPU*
内存 64 MB
磁碟空间 1.5 GB (不包含置换分割区)
置换分割区 至少 256 MB
注意: *有 EM64T 功能的 Intel 微处理器可能也可以工作,但是还测试过。
您应该在继续前查看 Gentoo AMD64 项目
2.b. Gentoo 安装过程
介绍
Gentoo Linux 可以使用三个 stage 压缩档之一来安装。stage 档是包含了最小环境的压缩档。
* stage1 档案中只包含了编译器,Portage (Gentoo 的软体管理系统) 以及一些编译器及 Portage 需要的套件。
* stage2 档案包含所谓 bootstrap 好的系统,提供一个可以开始编译其他应用程式,让 Gentoo 完全弄好的最小环境。
* stage3 档案包含预先编译好的最小系统,几乎可以使用了。只要选择某类程式中要安装 哪一个程式。
为了帮你 stage 档,我们写下了每一个 stage 档主要的优点及缺点。
使用 Stage1 安装
当你想要从头 bootstrap 及编译整个系统时使用 stage1。
从 stage1 开始,您将拥有完全的自订设定以及选择性的编译功能的系统。这将让 stage1 的安装适合高阶使用者。如果您想要知道 Gentoo Linux 是如何架构的,您也应该要使用 stage1。
Stage1 优点及缺点
+ 让您可以完全自订和将系统的效能完全依照您的需求
+ 适合知道自己在做些什么的高阶使用者
+ 让您了解 Gentoo 的内部架构
- 需要长时间完成安装
- 如果您不打算调整系统设定,这样是浪费时间
- 安装过程中需要网路
使用 Stage2 安装
stage2 是从 bootstrap 好的 "半编译完成" 环境建立整个系统。
Stage2 安装让你可以掠过 bootstrap 过程,如果你对于我们的最佳化设定满意的话就用他吧。
Stage2 优点及缺点
+ 不需要 bootstrap
+ 和 stage1 比较来快速许多
+ 您还是可以最佳化系统设定
- 您无法像在 stage1 时自订那么多设定
- 仍然不是最快安装 Gentoo 的方法
- 您将要接受我们为您调整过的 bootstrap
- 安装过程中需要网路
使用 Stage3 安装
stage3 安装档包含了基本已编译好的 Gentoo 系统。你只需要选择编译一些我们有
选择使用 stage3 将会是安装 Gentoo Linux 最快的一个方法,这也代表着您将要选择我们为您所做的系统调整以及设定(老实说,我们完善的设定足以让系统保持在完好的效率以及稳定度下)。如果您想要使用已编译完成的套件或是在无网路连线的情 stage3。
Stage3 优点及缺点
+ 安装 Gentoo Linux 最快速的方法
- 您无法为系统进行调整 - 已经编译好了
您或许有兴趣知道,如果您
2.c. Gentoo Installation CD
介绍
Gentoo Installation CD 为可开机的光碟。他将侦测您的硬体然后套用相关的驱动程式。这是由 Gentoo 开发员针对多种架构而维护的。
所有的 Installation CD 将会让您可以开机进入安装,设定网路,启始化分割区,然后从网路进行 Gentoo 的安装。我们目前提供两种 Installation CD,除非你要用最新的套件包作网路安装,这两种都适合用来安装 Gentoo。
如果你想在有网路的状 Gentoo,请依照 Gentoo 2005.0 手册 中列出的安装步骤。
我们目前提供的两种 Installation CD 是:
* Gentoo Minimal Installation CD,一个极简,有废话的可开机光碟,目的是提供 开机,设定网路,以及接着安装 Gentoo。
* Gentoo Universal Installation CD,除了和 Minimal Installation CD 差不多功能的开机光碟外, 还包含 stage1 及数个 stage3 (对不同的子架构作最佳化)压缩档。
为了帮你 Installation CD,我们列出每一种 Installation CD 的主要优点及缺点。
Gentoo's Minimal Installation CD
Minimal Installation CD 的名称是 install-amd64-minimal-2005.0.iso,只有 75 MB 大。你可以使用这个 Installation CD 来安装 Gentoo,但是需要连接网际网路。
Minimal Installation CD 优点及缺点
+ 最小的下载光碟
+ 您可以网路下载 stage1,stage2,stage3
- 不包含 stage 档案,有 Portage,有预先编好的套件,因此不适合非网路安装。
Gentoo 的 Universal Installation CD
Universal Installation CD 名称是 install-amd64-universal-2005.0.iso,他占满了一整片 352 MB 的光碟。你可以用这片光碟安装 Gentoo,此外还可以用他进行无网路安装,可能是你想在你目前用的电脑以外的安装 Gentoo 就会用到了
我们提供一份"预设"光盘,都适合所有架构的子架构,并且也针对各子架构自订化(CD2)(如 Athlon-XP,G4,等等。)。
Universal Installation CD 优点及缺点
+ 包含着所有您需要的。您可以不用网路连线进行安装。
- 要下载的档案庞大
其他光碟
你或许已经发现在镜像站上有所谓的 套件光碟。这些并不是 Installation CD,而是在无网路安装时可以使用的资源。他包含预先编译好的套件(俗称 GRP 包),让你可以方便,轻松的在安装好 Gentoo 后安装额外的程式(象是 OpenOffice.org,KDE,GNOME,...)。
2.d. 下载,烧录,然后使用 Gentoo Installation CD 开机
下载然后烧录 Installation CD
您将选择使用 Gentoo Installation CD。我们将要先下载 Installation CD 然后烧录为光碟。我们之前谈过有一些可用的 Installation CD,但是您要到那里下载呢?
你可以从我们的 镜像站 取得任何一种的 Installation CD (套件光碟也是,如果你需要的话)。 Installation CD 是放在 releases/amd64/2005.0/livecd 目录下。
目录中你可以看到俗称的 ISO 档。他们是完整的光碟影像档,你可以把他们烧到光碟上。
如果您害怕您下载的档案有损毁,您可以透过我们提供的 MD5 checksum (如 install-amd64-minimal-2005.0.iso.md5)并且使用 MD5 checksum 检查。在 Linux/Unix 环境下您可以使用 md5sum 工具或者是 Windows 下的 md5sum。
另外一个检查的方法则是使用 GnuPG 的签名档来检查我们所提供的档案(结尾为 .asc)。下载签名档然后取得公錀:
原始码 1: 取得公錀
$ gpg --keyserver pgp.mit.edu --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)。
使用 Installation CD 开机
当您完成光碟的烧录,我们现在要将它用来开机了。移除光碟,将您的系统重新启动至 BIOS。这通常是按 DEL,F1,或是 ESC,依照您的 BIOS。再 BIOS 里面,将 boot order 将 CD-ROM 的位址放到 hard disk 前面。这项设定通常会再 "CMOS Setup" 的目录里面。如果您有做此项动作,系统重新启动时将会略过光碟机直接从硬碟开机。
现在将安装光碟放到光碟机内然后重新启动。您应该会看到一个开机提示符号。在此,您可以按下 Enter 使用预设的设定进行开机步骤,或是自行输入 Installation CD 的开机选项。先选择核心,随后为开机选项。当完成时按下 Enter。
选择核心?错,我们在 Installation CD 上提供多个核心让您使用。预设的为 gentoo。其他的核心则是针对特定硬体需要提供支援,而 -nofb 的变数将关闭 framebuffer。
以下的列表为我们所提供的核心以及简介:
核心 介绍
gentoo 预设核心并且支援 K8 CPUs 搭配 NUMA
gentoo-nofb 和 gentoo 一样,但是针对 gen.x86-64 编译了 SMP 支持
注意: 有些 Installation CD 提供其他的核心,或是有提供这份文件所告知提供的核心。如果要在开机时查看可用的核心列表,请在开始的画面按下 F1。
您也可以提供核心参数。它们将代表着各个选择行开启(或是关闭)的设定。以下的清单将会解释所有可用的核心选项。
原始码 3: 可供选择的开机选项
- agpgart 加载 agpgart (如果您遇到使 graphics 上的问题或被锁上,使用这个选项)
- acpi=on 加载 ACPI firmware 支持
- ide=nodma 强制关闭故障 IDE 装置的 DMA
- doscsi 扫描 scsi 装置 (可能伤害到一些以太网路卡)
- dopcmcia 为 PCMCIA 光碟启动 pcmcia 服务
- nofirewire 关闭 initrd 中的 firewire 模块 (如 firewire 光碟等等)
- nokeymap 关闭 non-us 键盘配置的 keymap selection
- docache 快取整个执行部份光碟到记忆体中,允许您卸载 /mnt/cdrom 来挂载其他光碟
- nodetect 让 hwsetup/kudzu 和 hotplug 不要执行
- nousb 关闭 initrd 加载 usb 模块,关闭 hotplug
- nodhcp dhcp 不会自动启动如果侦测到 nic
- nohotplug 停止载入 hotplug 服务
- noapic 关闭 apic (如果遇到硬体问题如 nics, scsi 等等,可尝试这个选项)
- noevms 取消载入 EVMS2 模块
- nolvm2 取消载入 LVM2 模块
- hdx=stroke 允许您分割整个硬碟,即使您的 BIOS 无法处理大容量硬碟
- noload=module1[,module2[...]] 取消载入特定核心模组
注意: 有些 Installation CD 提供更多其他开机参数,或是有提供这份文件所列表的。如果要完整的开机参数清单,请在开机画面时按下 F2。
现在启动您的光碟,选择核心(如果您对预设的 gentoo 核心不是很满意)和开机参数。举例来说,我们将以 gentoo 核心,使用 dopcmcia 为核心参数:
原始码 4: 使用 Installation CD 开启
boot: gentoo dopcmcia
您会看到一个开机欢迎画面和 progress bar。如果您安装的 Gentoo 使用 non-US 键盘,请确认您按下 F2 转换到文字模式,并且遵照提示。如果在 10 秒内有作出选择,默认值 (US 键盘) 会被选起,然后开机程序会继续。一旦开机程序完成,您会自动登入为 "Live" Gentoo Linux 的 "root",最高权限使用者。您应该会有一个 root ("#")介面出现在目前的操控台。您可以使用 Alt-F2,Alt-F3, Alt-F4 来回切换。如要回到刚才的画面请按 Alt-F1。
现在请从 其他硬体设定 继续。
其他硬体设定
当 Installation CD 开启时,它将会尝试侦测所有系统上的硬体然后载入相关的核心模组来支援您的硬体。在大部份的例子,它做的相当不错。但是,在某些情 PCi 的自动侦测错过了系统上某些硬体,您将需要手动载入它们。
以下的例子我们将载入 8319too 模块(支援某种网路介面):
原始码 5: 载入核心模组
# modprobe 8139too
如果你需要 PCMCIA 的支援,激活 pcmcia init script:
原始码 6: 激活 PCMCIA init script
# /etc/init.d/pcmcia start
选择性:微调硬碟效能
如果您是一个高阶使用者,您或许想要使用 hdparm 微调您的 IDE 硬盘。使用 -tT 的参数将让您测试硬碟的效能(请多执行几次来确定比较正确的数值):
原始码 7: 测试磁碟效能
# hdparm -tT /dev/hda
要微调,您可以使用以下任何范例(或是自行测试)。请将 /dev/hda 更改为您所要微调的磁碟:
原始码 8: 微调硬碟效能
激活 DMA: # hdparm -d 1 /dev/hda
激活 DMA + 安全的增加效能选项: # hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hda
选择性:使用者帐号
如果您打算给予其他人安装环境的权限,或是使用非 root 的权限执行 irssi (安全考量)您将需要建立相关的使用者帐号和更改 root 密码。
要更改 root 密码,使用 passwd 工具:
原始码 9: 更改 root 密码
# passwd
New password: (输入新密码)
Re-enter password: (再次输入新密码)
要建立使用者帐号,我们先需要输入他们的帐号然后密码。我们将使用 useradd 和 passwd 完成这些工作。下面的例子,我们将建立一个使用者叫做 "john"。
原始码 10: 建立一个使用者帐号
# useradd -m -G users john
# passwd john
New password: (输入 john 的密码)
Re-enter password: (再次输入 john 的密码)
您也可以利用 su 从 root 更便道您刚建立的帐号:
原始码 11: 更换使用者
# su john -
选择性:在安装过程中检视文件
如果你想要在安装过程中检视 Gentoo 手册(从 CD 或是线上),确定你已经建立使用者帐号(参阅选择性:使用者帐号选择性:使用者帐号)。然后按下 Alt-F2 开启新的终端机并且登入。
如果你想要检视 CD 上的文件,你可以马上执行 links2 来阅读:
原始码 12: 检视 CD 上的文件
# links2 /mnt/cdrom/docs/handbook/html/index.html
然而,如果你因为线上的 Gentoo 手册比较新而想要阅读他。你也可以使用 links2 ,但是你需要先完成设定您的网路这一章(否则你不能连接网际网路来检视文件):
原始码 13: 检视线上文件
# links2 http://www.gentoo.org/doc/en/handbook/handbook-x86.xml
你可以按下 Alt-F1 回到原来的终端机。
选择性:开启 SSH 服务器
如果您想在安装过程中让其他使用者使用您的电脑(或许是帮忙您安装 Gentoo 的人),您将需要建立一个使用者帐号给他们,提供您的 root 密码给他们(只有 在您 完全信任 的状
要开启 SSH 服务器,执行以下指令:
原始码 14: 开启 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
[email protected]:8080
测试网路
或许您会想要尝试 ping 网路公司的 DNS 服务器(可以在 /etc/resolv.conf)或是您所选的网址,这只是为了查看您的封包是否能传送网路,DNS 解析是否正常,等等﹍
原始码 4: 测试网路
# ping -c 3 http://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 系统上的第一个 IDE 磁盘,/dev/hda 如果您的系统使用 SCSI 磁盘,那您的第一个磁碟将会是 /dev/sda。
以上的区块装置代表着磁碟的介面。使用者可以不用担心您的磁碟是否为 IDE,SCSI 或是其他,并且使用程式来使用这些区块装置。这个程式可以在磁碟上写入多个随机的 512 byte 区块。
分割区和 Slices
理论上虽然您可以使用整个磁碟放置您的 Linux 系统,但是实务上几乎有人这么做。整个磁碟将会被分为其他小一点的大小,方便更好的管理。在 amd64 的系统上叫做 分割区(partitions)。
分割区
分割区总共有三类:primary,extended 和 logical。
一个 primary 分割区是一个包含 MBR(Master Boot Record)的分割区。一个 MBR 非常小(512 byte)只能定义成四个分割区(从 /dev/hda1 到 /dev/hda4)。
一个 extended 分割区是一个特别的 primary 分割区(意思是说 extended 分割区一定要从四个可用的 primary 分割区内扩展)而可以建立更多的分割区。这种分割区原本是不存在的,但是四个分割区太少了,它会诞生是因为要扩展而不会遗失反向相容。
一个 logical 分割区是在 extended 分割区内。他们的定义不是放在 MBR,但是是放在 extended 分割区。
4.b. 策划一个分割区计画
预设的分割区策划
如果您不打算策划一个分割计画,您可以使用我们手册内的分割区策划:
分割区 档案系统 大小 说明
/dev/hda1 ext2 32M 开机分割区(Boot partition)
/dev/hda2 (swap) 512M Swap 分割区
/dev/hda3 ext3 磁碟剩下的空间 根 或是 主分割区(Root partition)
如果您有兴趣多了解一个分割区(或是 logical 容量)应该多大,或是您需要几个分割区(或是容量),请继续读下去。不然请从 使用 fdisk 分割您的磁碟 。
多少和多大?
多少分割区通常是按照您的使用环境。举例来说,如果您有很多个使用者,您就会因为安全问题和能够简易备份将您的 /home 分开。如果您将 Gentoo 安装为邮件伺服器那您的 /var应该分开,因为邮件通常释放在 /var。选择好的档案系统将会提升您的效能。游戏伺服器因为大多数的游戏伺服器都是安装在 /opt 所以通常会将 /opt 分开。原因很和 /home 类似:安全问题和备份。你一定会想分给 /usr 比较大的空间:不只是因为他包含大部份的程式,Portage 树,除了他储存的各种原始码知外,本身需要 500 Mb 的空间。
如您所见,不同的方式是彼此相依的。不同的分割区或是容量将会有以下优点:
* 您可以选择适合个别分割区的档案系统提高效能
* 您的系统不会因为一个分割区或是容量失效而完全终止
* 如果必要,档案系统检查所费的时间将会减少,并且可以以平行方式进行(虽然这个优点 比较适合多分割区)
* 安全性可以因为某些分割区以分割成唯读而加强,nosuid(setuid机会被略过), noexec(执行档将会被掠过)等等。
但是,多个分割区也有一个很大的缺点:如果有完好的设定,您将会看到一个分割区上的空间不够或是一个分割区上的空间太多。SCSI 和 SATA 也有最多 15 个分割区的限制。
以范例来分割,我们将使用一个 20GB 的硬碟,为手提电脑的示范(包含着网页伺服器,邮件伺服器,gnome,﹍):
原始码 1: 档案系统使用范例
$ df -h
Filesystem Type Size Used Avail Use% Mounted on
/dev/hda5 ext3 509M 132M 351M 28% /
/dev/hda2 ext3 5.0G 3.0G 1.8G 63% /home
/dev/hda7 ext3 7.9G 6.2G 1.3G 83% /usr
/dev/hda8 ext3 1011M 483M 477M 51% /opt
/dev/hda9 ext3 2.0G 607M 1.3G 32% /var
/dev/hda1 ext2 51M 17M 31M 36% /boot
/dev/hda6 swap 516M 12M 504M 2% <not mounted>
(预留 2GB 空间)
这边的 /usr 的分割区是快用完的(占用83%),但是当所有的软体已经安装完毕后,/usr 就不会再急速的增加。关于 /var,大部份的人或许会认为分配给 /var 的空间太大。但是,Gentoo 将会在 /var/tmp/portage 内进行所有档案的编译,所以您如果打算同时编译大的程式如 KDE 和 OpenOffice.org,那么/var 最好是有 3GB 以上的剩余空间。
4.c. 使用 fdisk 分割您的磁碟
以下部份将解释如何使用之前所策划的进行分割:
分割区 说明
/dev/hda1 开机分割区
/dev/hda2 Swap 分割区
/dev/hda3 主分割区(Root)
请按照个人所需更改您的分割架构。
查看目前的规划的分割区
fdisk 是一个强大并且受欢迎的磁碟分割工具。使用您的磁碟上的 fdisk (按照我们的范例,我们将使用/dev/hda):
原始码 2: 开始 fdisk
# fdisk /dev/hda
当 fdisk 开始后,您将会看到以下的画面:
原始码 3: fdisk 接口
Command (m for help):
按下 p 显示您得磁碟目前的分割区设定:
原始码 4: 范例分割区设定
Command (m for help): p
Disk /dev/hda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 14 105808+ 83 Linux
/dev/hda2 15 49 264600 82 Linux swap
/dev/hda3 50 70 158760 83 Linux
/dev/hda4 71 2184 15981840 5 Extended
/dev/hda5 71 209 1050808+ 83 Linux
/dev/hda6 210 348 1050808+ 83 Linux
/dev/hda7 349 626 2101648+ 83 Linux
/dev/hda8 627 904 2101648+ 83 Linux
/dev/hda9 905 2184 9676768+ 83 Linux
Command (m for help):
这个磁碟包含着七个 Linux 档案系统(显示为 "Linux")和一个 swap 分割区(显示为 "Linux Swap")。
移除所有分割区
我们将要先把已经存在的分割区一除掉。按下 d 删除。举例来说要删除已经存在的 /dev/hda1:
原始码 5: 删除一个分割区
Command (m for help): d
Partition number (1-4): 1
这个分割区将会被显示为删除。当您输入 p 的时候您将会看不到所删除的分割区,但是只会在您储存后发挥功效。如果误杀了某个分割区然后想要重来,按下q 然后 enter 您的分割区将不会被删除。
现在,假设您想要删除所有系统上的分割区,请先按 d 然后要删除的分割区编号再按下 p 刷新分割区列表。最后您将会将所有的分割区删除:
原始码 6: 空的分割区列表
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
Command (m for help):
现在您的分割区列表已经空了,我们可以开始建立分割区了。我们将会使用之前所讨论到的预设的分割计画。当然,如果您有自己的分割计画,请按照我们的方式以此类推!
建立开机分割区
我们将要先建立一个小的开机分割区。按下 n 建立一个分割区然后按下 p 选择 primary partition,再按下 1 选择第一个 primary 分割区。当您看到 first cylinder 时,按下 enter,然后看到 last cylinder 输入 +32M 来建立一个 32 MByte 大小的分割区:
原始码 7: 建立开机分割区
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (按下 Enter)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M
现在,当您按下 p 时,您将会看到以下的显示:
原始码 8: 已建立的开机分割区
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 14 105808+ 83 Linux
我们将需要将这个分割区设定为可开机。按下 a 的开关让可开机旗标放在这个分割区上。如果您再按一次 p,您将会看到 "Boot" 栏位有一个 *。
建立 Swap 分割区
现在我们需要建立 swap 分割区。按下 n 建立一个新的分割区,然后 p 告诉 fdisk 您要一个 primary 分割区。然后按下 2 建立第二个 primary 分割区。当您看到 first cylinder,按下 enter。然后当您看到 last cylinder,输入 +512M 来建立一个 512MB 大小的分割区。当您完成的时候,按下 t 来选择分割区类别。接着输入 82 将分割区类别选为 "Linux Swap"。当您完成的时候,按下p 应该会看到类似以下的画面:
原始码 9: 建立 swap 分割区后的列表
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 14 105808+ 83 Linux
/dev/hda2 15 81 506520 82 Linux swap
建立主分割区(Root)
最后,我们需要建立主分割区。按下 n 建立一个新的分割区,然后 p 告诉 fdisk 您要一个 primary 分割区。然后输入 3 建立第三个 primary 分割区,在我们的例子为 /dev/hda3。当您看到 first cylinder,按下 enter。当您看到 last cylinder,按下 enter 来使用剩余的空间。完成这些步骤后,按下 p 您应该会看到类似以下的列表:
原始码 10: 建立主分割区后的列表
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 14 105808+ 83 Linux
/dev/hda2 15 81 506520 82 Linux swap
/dev/hda3 82 3876 28690200 83 Linux
储存分割区规划
要储存然后离开 fdisk,按下 w。
原始码 11: 储存然后离开 fdisk
Command (m for help): w
现在您的分割区已经建立完成了,您可以从 建立档案系统 继续。
4.d. 建立档案系统
介绍
现在您的分割区已经建立完成了,我们接下来需要把档案系统放到它们上面。如果您不在乎要使用那种档案系统,满意使用我们手册内的范例,请从 将档案系统套用到分割区上 继续。不然请继续阅读学习关于更多可用的档案系统﹍
档案系统?
我们提供多个档案系统。有些在 amd64 的架构上是稳定的,有些则不是。ext2 和 ext3 为稳定的。 jfs 和 reiserfs 则需要更多的测试。如果您想要常识,您可以试试看其他未支援的档案系统。
ext2 是一个旧的 Linux 档案系统,有日志功能. 启用的时间通常需要很久。目前有许多 日志型态 的档案系统可以以更快的速度及更好的效率完成系统启用和检查。
ext3 为 ext2 的日志版,提供了 metadata 日志系统 并且可以快速地使用日志系统复原。ext3 是个相当不错并且可靠的档案系统. 它有额外的 hashed b-tree 索引功能将会开启几乎在任何情ext3 是一个很棒的档案系统。
ReiserFS 整体来说是个相当不错的系统,它处理小型档案(少于4kb)时效能会比 ext2 和 ext3 来的好。他使用的是 B*-tree 为基础的档案系统. 另外也能很有效率地处理大型档案。Linux 核心版本 2.4.18+ 后,ReiserFS 是一个相当有值得推荐的系统, 从很少,到很多档案。ReiserFS 都可以处理的非常好。开机分割区并不建议使用此档案系统。
XFS 是一个 metadata 日志系统,并且拥有完整的功能及针对延展性最佳化。如果您使用高速 SCSI或是纤维的储存装置,并且有持续不断的电源供应,我们才推荐您使用 XFS。 如果有,请使用其他档案系统。因为 XFS 大量的将要转送的资料快取在记忆体中,设计不好的程式(的确有一些程式在写入磁碟时不做一般的预防措施)可能当系统意外断电时损失大量的资料。
JFS 是 IBM 发展的高效能日志系统。目前虽然已经可以算是个完成品,关于他的稳地度并有太多的优点及缺点。
将档案系统套用到分割区上
要把档案系统建立到一个分割区或是容量上可使用一些为个别档案系统所设计的工具:
档案系统 建立指令
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs
以我们的范例来说,开机分割区(在我们的例子里为 /dev/hda1)为 ext2 和主分割区(在我们的例子为 /dev/hda3)为 ext3,您将要使用:
原始码 12: 将档案系统套用到分割区上
# mke2fs /dev/hda1
# mke2fs -j /dev/hda3
现在档案系统已经建立到我们刚建立完成的分割区上了。
启用 Swap 分割区
mkswap 是用来起始 swap 分割区的指令:
原始码 13: 建立 swap 签名
# mkswap /dev/hda2
要启用 swap,使用 swapon 指令:
原始码 14: 激活 swap
# swapon /dev/hda2
现在使用上面的指令建立然后启动 swap。
4.e. 挂载
现在您的分割区已经起始和放置档案系统了,接下来我们该把这些分割区挂载起来。使用 mount 的指令。不要忘了建立相关的挂载目录,以我们的分割来说只挂载主分割区和开机分割区:
警告: 由于 e2fsprogs 套件中的某个臭虫,如果您使用 ext3 档案系统,您需要明确的使用 mount -t ext3 选项。
原始码 15: 挂载分割区
# mount /dev/hda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/hda1 /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
选择您所需要的
接下来的步骤您将需要将您选择的 stage 压缩档安装到您的系统上。您可以从网路下载,或是从我们的 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 压缩档。如果您有 links2 ,您就可以马上连接到 Gentoo 对映站 然后选择最靠近您的位置。
如果有 links2 的话,应该会有 lynx 可以用。假如要透过 proxy,设定 http_proxy 和 ftp_proxy 变量:
原始码 4: 设定 lynx proxy 信息
# export http_proxy="http://proxy.server.com
ort"
# export ftp_proxy="http://proxy.server.com
ort"
我们假设你有 links2 可以使用。
选择releases/的目录,接着是您所使用的架构(如 x86/)最后则是 Gentoo 的版本(2005.0)最后您就可以看到适合您的架构所使用的 Stage 压缩档位于 stages/的列表(他们也许会被放在不同子架构中的子目录中)。选择一个然后按下 D 开始下载。当下载完成时,按下Q 离开浏览器。
原始码 5: 使用 links2游览对映站
# links2 http://www.gentoo.org/main/en/mirrors.xml
(如果你想要使用 proxy:)
# links2 -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml
如果您想要检查下载的压缩档是否正确,您可以使用 md5sum 然后以 MD5 checksum 输出进行比较。例如说,检查 stage 压缩档是否正确:
原始码 6: 检查 stage 压缩档是否下载正确
# md5sum -c stage1-x86-2005.0.tar.bz2.md5
stage1-x86-2005.0.tar.bz2: OK
解开 Stage 压缩档
现在解开您刚刚下载到系统上的压缩档。我们使用最简单的 GNU 的 tar 方式进行:
原始码 7: 解开 Stage 压缩档
# tar -xvjpf stage?-*.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 压缩档
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 压缩档。我们将使用 GNU 的 tar 工具。确定您也使用着一样的参数(-xvjpf)!同样的,v 选项是可以自由选择的,而且在某些 tar 版本并不支援。在下面的范例,我们将使用 stage3-<子架构>-2005.0.tar.bz2。要记得将压缩档档名换成您所选择的档名。
原始码 11: 解开 Stage 压缩档
# tar -xvjpf /mnt/cdrom/stages/stage3-<子架构>-2005.0.tar.bz2
现在 stage 已经安装完成了,请从 安装 Portage 继续。
5.d. 安装 Portage
解压缩 Portage 快照
现在你需要安装 Portage 快照,里面是告诉 Portage 那些软体可以安装,那些 profiles 可以使用等等的档案集合。
下载及安装 Portage 快照
进入你挂在档案系统的目录(一般都是 /mnt/gentoo):
原始码 12: 进入挂载点
# cd /mnt/gentoo
激活 links2(或是 lynx),然后连线到 Gentoo 镜像站列表。选择离你最近的站台,进入 snapshots/ 目录。选择一个 Portage 快照然后按下 D 就可以下载了。
原始码 13: 浏览 Gentoo 镜像站列表
# links2 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
警告: 虽然这会对一些非 Stage1 的使用者有兴趣,但是非 stage1 的使用者 不应该 更改 make.conf 内的 CHOST 的设定。这样会造成系统不稳。再一次提醒:这只适用于 stage1 的使用者。
CHOST 的变数将定义着 gcc 针对架构所需要编译的参数。可能性为:
架构 子架构 CHOST 设定
x86 i386 i386-pc-linux-gnu
x86 i486 i486-pc-linux-gnu
x86 i586 i586-pc-linux-gnu
x86 i686 and above (incl. athlon) i686-pc-linux-gnu
alpha alpha-unknown-linux-gnu
ppc powerpc-unknown-linux-gnu
ppc64 powerpc64-unknown-linux-gnu
sparc sparc-unknown-linux-gnu
sparc64 sparc-unknown-linux-gnu
hppa (通用) hppa-unknown-linux-gnu
hppa pa7000 hppa1.1-unknown-linux-gnu
hppa pa8000 或以上 hppa2.0-unknown-linux-gnu
mips mips-unknown-linux-gnu
amd64 x86_64-pc-linux-gnu
请确定您使用的是对的CHOST设定。举例来说,对于sparc64的CHOST 仍然是sparc-unknown-linux-gnu并且有 sparc64-unknown-linux-gnu
想要在 bootstrap 时加上 NPTL 支援的人,如果用 x86 系统, CHOST 要设成 i586-pc-linux-gnu 或更高。
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
-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
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 档案系统
将 /proc 档案系统挂载到 /mnt/gentoo/proc 让安装过程中即使是在 chrooted 的环境也可以取得新提供的资讯。
原始码 4: 挂载 /proc
# mount -t proc none /mnt/gentoo/proc
进入新的系统环境
现在所有的分割区都已经初步设定好了而且基本的系统也安装完毕,现在是用 变换根目录进入新的系统环境的时候了。这代表我们从目前的安装环境 (安装光碟或是其他的安装媒体)进入您安装的系统(就是已经安装的分割区)。
变换根目录动作在三步骤内完成。首先我们会用 chroot 让根目录从 / (目前安装的媒体)变换到 /mnt/gentoo (或您安装的分割区)。然后用 env-update 建立新的环境,这将会建立基本的系统变数。最后,我们用 source 把这些变数载入到记忆体。
原始码 5: 进入新的环境
# chroot /mnt/gentoo /bin/bash
# env-update
* Caching service dependencies...
# source /etc/profile
恭喜!您现在在新的 Gentoo Linux 环境当中了。不过离安装完毕还有一段时间,这就是为什么安装指南还有下面这些部份 :-)
更新 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 核心有更好的整合性。
你可以用下面的指令来看你现在是用哪个 profile:
原始码 7: 查看系统 profile
# ls -FGg /etc/make.profile
lrwxrwxrwx 1 48 Apr 8 18:51 /etc/make.profile -> ../usr/portage/profiles/default-linux/x86/2005.0/
如果你是用上面提到三种架构之一,预设提供给你的 profile 是使用 Linux 2.6 基础的系统。预设建议你这么做,但是你也可以选择使用别种 profile。
一些使用者会想要安装较旧的 Linux 2.4 profile。如果你有一个如此做的好理由,你首先要确认是否有额外的 profile 可以用。在 x86 系统,可以使用下面的指令来查询:
原始码 8: 查看是否有额外的 profile
# ls -d /usr/portage/profiles/default-linux/x86/2005.0/2.4
/usr/portage/profiles/default-linux/x86/2005.0/2.4
上面的例子显示有额外的 2.4 profile (也就是说,他有抱怨找不到档案或目录)。建议你使用预设值就好,和如果你想要换过去的话,你可依下面的步骤操作:
原始码 9: 换到 2.4 profile
(确定你使用正确的架构,底下的例子是适用 x86 的)
# ln -snf /usr/portage/profiles/default-linux/x86/2005.0/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
设定 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 找到。
原始码 10: 检视可用的 USE 参数
# less /usr/portage/profiles/use.desc
(你可以使用方向键来卷动,按下 'q' 离开)
下面是一个 USE 的设定,在以 KDE 为基础的系统中支援 DVD, ALSA 以及烧录机。
原始码 11: 开启 /etc/make.conf
# nano -w /etc/make.conf
原始码 12: USE 设定
USE="-gtk -gnome qt kde dvd alsa cdr"
自由选择:GLIBC Locales
你可能只会需要在你的系统上使用一种或两种 locale。在目前编译完 glibc 后所有可用的 locale 都会被建立。你可以启动 userlocales USE 设定并且在 /etc/locales.build 指定你需要的 locales。请做这个动作,除非您知道您要选择那一种locales。
原始码 13: 为 glibc 激活 userlocales USE 设定
# mkdir /etc/portage
# echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
现在指定你想要使用的 locale:
原始码 14: nano -w /etc/locales.build
# nano -w /etc/locales.build
下面是一个locales的范例,用来同时取得English (United States)和 German (Germany)和其他的字型格式(如UTF-8)。
原始码 15: 指定你的 locale
en_US/ISO-8859-1
en_US.UTF-8/UTF-8
de_DE/ISO-8859-1
de_DE@euro/ISO-8859-15
6.b. Stage1,Stage2 和 Stage3 的不同
现在先坐下来回想一下之前的步骤。我们要求您选择 stage1,stage2 或 stage3 并且提醒您您的选择对之后的安装步骤很重要。嗯,现在是您
* 如果您选择 stage1,接下来您要做这一节全部的步骤从 Stage1 到 Stage2 的过程 开始
* 如果您选择 stage2 您只要略过第一步骤,立即从第二部份 Stage2 到 Stage3 的过程 开始
* 如果你选择 stage3 那请接着阅读升级 baselayout 套件。
6.c. Stage1 到 Stage2 的过程
介绍 Bootstrapping
所以您 :-)
在这个步骤中,我们会 bootstrap 您的 Gentoo 系统。这会花很长一段时间,但是您会得到一个针对您的机器完全最佳化的系统。
Bootstrapping 代表编译 GNU C 函式库、GNU C 编译器以及其他重要的软体。
在开始之前,你可能会想要先下载必须的原始档。如果您不想要阅读这些的话,从 Bootstrapping 您的系统 继续。
自由选择:先下载原始码
如果您之前不曾复制全部的原始码,bootstrap script 会下载所有必要的档案。如果您想要先下载原始码然后再执行 bootstrap (例如您并不想在编译时让您的网路一直保持连线) ,使用bootstrap script 的 -f 选项,这将会下载(Fetch)所有的原始码。
原始码 16: 下载必须的原始码
# cd /usr/portage
# scripts/bootstrap.sh -f
Bootstrapping 您的系统
好啦,在您的键盘敲下底下的指令来启动 bootstrap,然后给您自己找些娱乐吧,找点自己喜欢的事情做,因为这一步骤将会花费一些时间完成。
原始码 17: Bootstrapping 您的系统
# cd /usr/portage
# scripts/bootstrap.sh
接下来继续下一步骤 Stage2 到 Stage3 的过程。
6.d. Stage2 到 Stage3 的过程
介绍
如果您正在阅读这一部份,那您已经有一个 bootstrap 好的系统(可能是您之前执行 bootstrap 或是您使用 stage2)。现在是编译所有系统套件的时候了。
所有系统套件?不,不完全是。在这一步骤中,您将会编译有其他选择的系统套件。一些套件有多种选择 (例如 system loggers),因为 Gentoo 代表选择,我们不会强迫您一定要使用哪一种。
自由选择:看会做哪些事
如果您想要知道哪些套件会被安装,执行 emerge --pretend --emptytree system。这将会列出所有要编译的程式。因为这相当的多,您应该使用 less 或 more 来上下浏览。
原始码 18: 看 'emerge system' 会做什么
# emerge --pretend --emptytree system | less
要注意的是,如果你有改过预设的 CFLAGS/CXXFLAGS 设定,使用 emerge --pretend --newuse system 就足够了。他会重新编译被 USE Flag 变动而影响到的套件(和我们建立 stage2 档案时的 USE Flag 比对)。如果你也改 USE 设定,那你为什么要用 stage2 安装?
自由选择:下载原始码
如果您想要 emerge 在开始之前先下载原始码(例如您并不想在编译时让您的网路一直保持连线),您可以使用 emerge 的 --fetchonly 参数来帮您下载所有的原始码。
原始码 19: 下载原始码
# emerge --fetchonly --emptytree system
编译系统
执行 emerge --emptytree system 来开始编译系统。然后让您自己忙于某些事情,因为这到完成会花很长一段时间。
原始码 20: 编译系统
# emerge --emptytree system
同样的,如果你修改预设 CFLAGS 和 CXXFLAGS 设定,使用 --newuse 就够了。
您现在可以安全地略过任何警告来更新您的设定档(执行 etc-update)。当您的 Gentoo 系统已经完全安装完毕,重开机后,查看我们的 设定档案保护。
当编译过程完成后,请从 设定核心 继续。
6.e. 升级 baselayout
baselayout 套件在 Gentoo 2005.0 发表后有显着的更新。一些设定档已经移动,而有一些的语法改变了。handbook 中使用新的设定档。因此建议你在进行下一步骤时先更新他。
原始码 21: 更新 baselayout
# rm /etc/conf.d/net
(确定有留着 nsswitch.conf 档案)
# touch /etc/nsswitch.conf
# CONFIG_PROTECT="-*" emerge baselayout
请从 设定核心 继续。
7. 设定核心
7.a. 时区
为了让您的系统知道它的位置在那里,您将需要设定您的系统时区。到 /usr/share/zoneinfo 寻找您的时区,然后使用 ln 建立一个连接到 /etc/localtime 的符号连结。
原始码 1: 设定时区资讯
# ls /usr/share/zoneinfo
(假设您要使用 GMT)
# ln -sf /usr/share/zoneinfo/GMT /etc/localtime
7.b. 安装核心原始码
选择一个核心
Linux 的核心是所有版本的最中心,也是最重要的。他位于使用者程式和系统硬体之间。 Gentoo 提供使用者很多可用的核心原始码。您可以到 Gentoo 核心 指南 查看我们所提供的核心。
使用 AMD64 系统的使用者,我们提供着 gentoo-sources (v2.6 核心,针对 amd64 相关修正稳定度,效能,和硬体支援)。
选择适合您的核心原始档然后使用 emerge 安装。
下面的例子我们将安装 vanilla-sources-2.4.24(因为这个核心原始码适合无网路状态的安装)。当然,请更换为您想要安装的核心:
原始码 2: 安装核心原始码
# emerge gentoo-sources
当您查看 /usr/src 您将会看到一个 linux 的连接连到您所选的核心:
原始码 3: 观看核心原始码目录连接
# ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-2.6.11-gentoo-r3
如果您碰到的不是这样(例:连接连到其他的核心目录)您将需要在继续往下之前更改连接:
原始码 4: 更改核心连接目录
# rm /usr/src/linux
# cd /usr/src
# ln -s linux-2.6.11-gentoo-r3 linux
现在我们该设定以及编译您的核心了。您可以使用 genkernel 完成此项步骤,并且将会以和 Installation CD 一样的通用的方式进行编译。我们将先解释如何手动编译因为这是自订您的环境的最佳方法。
如果您想要手动编译您的核心,请从 预设:手动设定 继续。如果您想要使用 genkernel 请从 其他选择:使用 genkernel 继续。
7.c. 预设:手动设定
介绍
手动设定核心常常被 Linux 使用者认为最难完成的步骤。虽然不假 -- 但是当您手动编译几次核心后,您应该不会觉得它有多难
但是,唯一 的重点就是:您必须要了解您的系统才可以开始手动编译。系统上多数的资料可以安装 pciutils (emerge pciutils),从里面包含的 lspci 取得。你可以在 chroot 的环境下执行 lspci,不过可能会碰到一些 lspci 丢出来的警告(象是 pcilib: cannot open /sys/bus/pci/devices)。此外,你也可以在 未 chroot 执行,两个结果都一样。您也可以执行 lsmod 看看安装光碟使用那些核心模组(这是一个不错的暗示教您该开启那个选项)。
现在到您的核心原始码目录然后执行 make menuconfig。这将会启动一个 ncurses 的设定选单。
原始码 5: 开始 menuconfig
# cd /usr/src/linux
# make menuconfig
您将会看到一大串的设定部份。我们将列出一些您一定要启用的选项(不然 Gentoo 无法完善地工作)。
必须开启的选项
首先,开启 development and experimental code/drivers。您将需要这个,不然您将无法看见一些其他重要的程式码或是驱动程式。
原始码 6: 选择 experimental code/drivers, General setup
Code maturity level options --->[*] Prompt for development and/or incomplete code/drivers
General setup --->[*] Support for hot-pluggable devices
现在,进入 General Setup。因为预设使用 2.6 而且只有这版本支援 AMD64,我们会启动 support for hot-pluggable devices 让 udev 使用。
现在到 File Systems 然后选择要支援的档案系统。记得不要将它们编成模组(Module),否则您的 Gentoo 系统将无法挂载您的分割区。另外还要勾选 Virtual memory 和 /proc file system,请 不要 选取 /dev file system support,因为 Gentoo/AMD64 现在预设使用 udev。
原始码 7: 选择相关档案系统
Pseudo Filesystems --->[*] /proc file system support
[ ] /dev file system support (OBSOLETE)[*] 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 连线到网路或是数据机拨接,您将需要以下的核心选项:
原始码 8: 选择 PPPoE 相关驱动程式
Device Drivers --->
Network 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 时需要,但是这两个压缩的选项不会造成错误。
如果您需要,不要忘了为您的网路卡加入核心的支援。
如果您的系统有多个 CPU,您应该启用 "Symmetric multi-processing support":
原始码 9: 启用 SMP 支持
Processor type and features --->[*] Symmetric multi-processing support
如果你使用 USB 输入装置(像是键盘或滑鼠)不要忘记开启他:
原始码 10: 激活 USB 输入装置支援
Device Drivers --->
USB Support --->
<*> USB Human Interface Device (full HID) support[*] HID input layer support
当您完成核心设定时,请从 编译和安装 继续。
编译和安装
现在您的核心已经设定完成了,我们该来编译然后安装它。离开核心设定,然后开始编译程序:
原始码 11: 编译核心
# make && make modules_install
当核心完成编译时,将核心映像档复制到 /boot:
原始码 12: 安装核心
# cp arch/x86_64/boot/bzImage /boot/kernel-2.6.11-gentoo-r3
您也可以将您的核心设定档备份到 /boot,以防万一
原始码 13: 备份您的核心设定档
# cp .config /boot/config-2.6.11-gentoo-r3
现在请从 安装分开的核心模组 继续。
7.d. 其他选择:使用 genkernel
如果您正在读这个部份,那您应该是选择使用我们的 genkernel 程序来为您设定核心。
现在您的核心原始码已经安装了,我们该使用 genkernel 程序来自动帮您编译核心。genkernel 是利用类似 Installation CD 的核心设定来进行工作的。这代表着当您使用 genkernel 编译您的核心,您的系统大致上会在开机时侦测所有的硬体,就和我们的 Installation CD 一样。因为 genkernel 不需要手动核心设定,所以适合不会编译核心的使用者。
现在让我们来看看如何使用 genkernel。首先,安装 genkernel:
原始码 14: 安装 genkernel
# emerge genkernel
现在,编译您的核心原始码。如果您是透过 grp 安装 genkerenl,直接执行 genkernel all。请注意,当 genkernel 正在编译所有硬体支援时,等待的时间会有点久!
如果您的开机分割区有使用 ext2 或是 ext3 为档案系统,您将需要使用 genkernel --menuconfig all 手动设定,然后在核心内加入您所使用的档案系统支援( 不能 编成模组)。
原始码 15: 执行 genkernel
# genkernel all
当 genkernel 完成的时候,一个核心映像档,一套模组和一个 initial root disk (initrd)将会被建立。我们将在稍后设定开机程式时使用核心映像档和 initrd。写下核心和 initrd 的档名方便您稍后设定开机程式。initrd 将会在开起到"真正的"系统之前马上侦测硬体支援(就和 Installation CD 一样)。
原始码 16: 查看已建立的核心映像档名和 initrd
# ls /boot/kernel* /boot/initrd*
现在,为了要让我们的系统更像 Installation CD,我们需要安装 coldplug。当 initrd 自动侦测硬体时,coldplug将会自动侦测其他的硬体。要安装然后开启 coldplug ,请按照以下输入:
原始码 17: 安装和开启 coldplug
# emerge coldplug
# rc-update add coldplug default
# rc-update add coldplug boot
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 分割区(如: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"
现在加入 domainname script 到预设的 runlevel 中:
原始码 10: 将 domainname 加到预设 runlevel
# rc-update add domainname default
设定网路
在您觉得 "嗯,我现在已经弄好了" 之前,您要记得在您刚开始安装 Gentoo 时设定的网路只是在安装过程中使用。现在您要为您的 Gentoo 系统设定网路。
注意: 更详细的网路资讯,包括进阶的主题如频宽合并,桥接, 802.11q VLAN 及无线网路等包含在 Gentoo 网路设定 部份。
所有的网路设定都集合在 /etc/conf.d/net。如果您不知道如何设定的话,您会觉得这些语法相当不熟悉或是不了解,但不用担心,我们会解释每件您该需要的讯息 包含许多不同设定的指令范例可以在 /etc/conf.d/net.example 找到。
预设是使用 DHCP,他并不需要做任何设定。
如果你因为要指定 DHCP 选项或是你有使用 DHCP 而要设定网路,用你习惯的浏览器开启 /etc/conf.d/net(范例中使用 nano)。
原始码 11: 开启 /etc/conf.d/net 来编辑
# nano -w /etc/conf.d/net
你会看到底下这些:
原始码 12: 预设 /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:
原始码 13: 手动设定 eth0 的 IP 信息
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
routes_eth0=( "default gw 192.168.0.1" )
要使用 DHCP 并且指定 DHCP 选项,设定 config_eth0 及 dhcp_eth0:
原始码 14: 自动取得 eth0 的 IP
config_eth0=( "dhcp" )
dhcp_eth0="nodns nontp nonis"
请参阅 /etc/conf.d/net.example 中完整的选项列表。
如果您有数个网路介面,对 iface_eth1,iface_eth2 等变数重复上面的步骤。
现在储存设定然后离开,继续下面的步骤。
开机时自动启动网路
让您的网路介面开机时自动启动,您要把底下这些加入预设的 runlevel 中。如果您使用 PCMCIA 介面则跳过这一步骤,PCMCIA 是由 PCMCIA 激活 script 来启动。
原始码 15: 加入 net.eth0 到预设的 runlevel
# rc-update add net.eth0 default
如果您有数个网路介面,您要建立对应的 net.eth1,net.eth2 等。您可以使用 ln 来完成:
原始码 16: 建立额外的 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 然后填入这些设定:
原始码 17: 开启 /etc/hosts
# nano -w /etc/hosts
原始码 18: 填入网路资讯
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:
原始码 19: 适合单一电脑或是有完整反解的电脑的 /etc/hosts
127.0.0.1 localhost tux
储存设定然后离开,继续下面的步骤。
如果您有 PCMCIA,您可以继续进行 系统资讯。 PCMCIA 使用者继续下面的主题。
非必要:让 PCMCIA 工作
注意: pcmcia-cs 只可以在 x86, amd64 和 ppc 平台上使用。
PCMCIA 使用者首先要安装 pcmcia-cs 套件,包含打算使用 2.6 核心的使用者(虽然他们将不会使用套件内的驱动程式)。然后使用 USE="-X" 来避免现阶段的 XFree86 安装:
原始码 20: 安装 pcmcia-cs
# USE="-X" emerge pcmcia-cs
当 pcmcia-cs 安奘好以后,新增 pcmcia 到预设 runlevel:
原始码 21: 新增 pcmcia 到预设 runlevel
# rc-update add pcmcia default
8.c. 系统资讯
Root密码
我们藉由输入以下指令来更改Root密码
原始码 22: 设定Root密码
# passwd
如果您希望让Root能够从文字介面登入,请增加tts/0到/etc/securetty:
原始码 23: 增加 tts/0 to /etc/securetty
# echo "tts/0" >> /etc/securetty
系统资讯
Gentoo 使用 /etc/rc.conf 来设定整个系统的一般设定。开启 /etc/rc.conf 然后享受里面完善的注解
原始码 24: 开启 /etc/rc.conf
# nano -w /etc/rc.conf
当你设定 /etc/rc.conf 好以后,存档然后离开。
就如同您所看到的,这个档案有完善的注解让您设定必要的参数。你可以设定系统使用 unicode 及定义预设的编辑器还有显示管理员(像 kdm 和 gdm)。
Gentoo 使用 /etc/conf.d/keymaps 来处理键盘设定。编辑他设定你的键盘。
原始码 25: 开启 /etc/conf.d/keymaps
# nano -w /etc/conf.d/keymaps
特别要注意 KEYMAP 变量,如果您设定错误的 KEYMAP 当您再用键盘输入时会得到错误的结果。
注意: 以 USB 为主的 SPARC 系统或相容的系统可能要选择 i386 keymap (例如 "us") 而不是 "sunkeymap"。
PPC 在大部份的系统上使用 x86 的 keymaps。想要使用 ADB keymaps 的使用者将需要在开机时启用核心内的 ADB keycode sendings 然后在 /etc/conf.d/keymaps 内设定一个 mac/ppc keymap。
当你设定 /etc/conf.d/keymaps 好以后,存档然后离开。
Gentoo 使用 /etc/conf.d/clock 设定系统时钟,根据你的需求编辑他。
原始码 26: 开启 /etc/conf.d/clock
# nano -w /etc/conf.d/clock
如果你的硬体时钟是使用 UTC,你需要在档案中加入 CLOCK="local",不然你会发现时间偏移了。
当你设定好 /etc/conf.d/clock 后,存档然后离开。
如果你不是在 IBM POWER5 或 JS20 系统上安装 Gentoo,接着继续 安装必需的系统工具。
设定 Console
注意: 下面这一部分适用 IBM POWER5 及 JS20 硬体平台。
如果你打算在 LPAR 或 JS20 blade 上安装 Gentoo,你需要取消 /etc/inittab 中 hvc 那几行的注解,让虚拟 Console 可以产生登入提示符号。
原始码 27: 在 /etc/inittab 中启动 hvc 支持
hvc:12345:respawn:/sbin/agetty -nl /bin/bashlogin 9600 hvc0 vt220
接着继续 安装必需的系统工具。
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 工具
# emerge 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 -- 这将会需要更长的编译时间)。
现在请接着阅读 设定开机管理员。
Gentoo Linux/AMD64 手册
内容:
* 安装 Gentoo
在这一章中将会为您简介在这一部分的安装步骤。
1. 关于 Gentoo Linux 安装步骤。
这章将为您介绍这个部份所使用的安装方式。
2. 选择适合的安装方式
安装 Gentoo 有许多方式。您可以使用我们的 minimal Installation CD来安装,或者使用 Universal Installation CD 也可以。
3. 设定网路
为了能够下载到最新版的原始档,您将要先作一些设定。
4. 准备磁碟
为了要安装 Gentoo,您一定要建立一些所需的分割区。这章的内容将为您解释如何设定磁碟分割。
5. Gentoo 安装档案
Gentoo 安装需要使用到 stage 档案。在这章内容我们将为您解释如何解开一个 stage 压缩档然后再 chroot 到系统内。
6. 安装 Gentoo 基础系统
不论您是选择那一个 stage 的压缩档,到最后您将会拥有一个 Gentoo 的基础系统。这章将会为您解释如何到达完成安装的过程。
7. 设定核心
Linux kernel 是每个版本的核心。这章将解释如何编译您的核心。
8. 设定您的系统
您将需要编辑一些重要的设定档。这章将解释这些重要设定档的功能以及设定。
9. 安装必要的系统工具
就如之前所提的,Gentoo 的哲学是选择。这章将带领您选择并且安装一些重要的工具。
10. 设定开机管理程式
在这章中,我们将会为您简介GRUB开机管理程式和一些用来设定GRUB的必要程序步骤。
11. 最终化您的 Gentoo 安装
到这个步骤时,您已经差不多要完成安装过程了。我们只需要建立一个(或多个)系统使用者。
12. 然后呢?
现在您的 Gentoo 系统已经完成安装了,然后呢?
* 使用 Gentoo
学习如何使用 Gentoo:安装软体,变量,Portage 的行为等等。
1. Portage 介绍
这一章在简介一些使用者在维护自己系统上的软体的一些简单的步骤
2. USE 参数
USE 参数对于 Gentoo 非常的重要。在这章内,您将会学习如何使用 USE 参数和了解 USE 参数如何跟您的系统互动。
3. Portage 功能
包括了Portage拥有的特色,就像是软体的编译和快取等等。
4. 起始程序(Initscripts)
Gentoo 使用一份非常特别的起始程序,包含着其他功能如相依性和虚拟起始程序。这章将解释所有的概念和如何使用它们。
5. 环境变数
使用 Gentoo,您可以很简单的管理系统上的环境变数。这章将解释如何管理的方法,也解释着一些常用的变数。
* 使用Portage
学习如何使用 Gentoo:安装软体,变量,Portage 的行为等等。
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 2005.0 手册,里面包含了无网路环境的安装指南。
请注意,如果您打算使用 GRP (Gentoo 参考平台,一套供即时使用的预编套件),您 一定 要按照 Gentoo 2005.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 的硬体清单。
硬体需求
CPU 任一种 AMD64 CPU*
内存 64 MB
磁碟空间 1.5 GB (不包含置换分割区)
置换分割区 至少 256 MB
注意: *有 EM64T 功能的 Intel 微处理器可能也可以工作,但是还测试过。
您应该在继续前查看 Gentoo AMD64 项目
2.b. Gentoo 安装过程
介绍
Gentoo Linux 可以使用三个 stage 压缩档之一来安装。stage 档是包含了最小环境的压缩档。
* stage1 档案中只包含了编译器,Portage (Gentoo 的软体管理系统) 以及一些编译器及 Portage 需要的套件。
* stage2 档案包含所谓 bootstrap 好的系统,提供一个可以开始编译其他应用程式,让 Gentoo 完全弄好的最小环境。
* stage3 档案包含预先编译好的最小系统,几乎可以使用了。只要选择某类程式中要安装 哪一个程式。
为了帮你 stage 档,我们写下了每一个 stage 档主要的优点及缺点。
使用 Stage1 安装
当你想要从头 bootstrap 及编译整个系统时使用 stage1。
从 stage1 开始,您将拥有完全的自订设定以及选择性的编译功能的系统。这将让 stage1 的安装适合高阶使用者。如果您想要知道 Gentoo Linux 是如何架构的,您也应该要使用 stage1。
Stage1 优点及缺点
+ 让您可以完全自订和将系统的效能完全依照您的需求
+ 适合知道自己在做些什么的高阶使用者
+ 让您了解 Gentoo 的内部架构
- 需要长时间完成安装
- 如果您不打算调整系统设定,这样是浪费时间
- 安装过程中需要网路
使用 Stage2 安装
stage2 是从 bootstrap 好的 "半编译完成" 环境建立整个系统。
Stage2 安装让你可以掠过 bootstrap 过程,如果你对于我们的最佳化设定满意的话就用他吧。
Stage2 优点及缺点
+ 不需要 bootstrap
+ 和 stage1 比较来快速许多
+ 您还是可以最佳化系统设定
- 您无法像在 stage1 时自订那么多设定
- 仍然不是最快安装 Gentoo 的方法
- 您将要接受我们为您调整过的 bootstrap
- 安装过程中需要网路
使用 Stage3 安装
stage3 安装档包含了基本已编译好的 Gentoo 系统。你只需要选择编译一些我们有
选择使用 stage3 将会是安装 Gentoo Linux 最快的一个方法,这也代表着您将要选择我们为您所做的系统调整以及设定(老实说,我们完善的设定足以让系统保持在完好的效率以及稳定度下)。如果您想要使用已编译完成的套件或是在无网路连线的情 stage3。
Stage3 优点及缺点
+ 安装 Gentoo Linux 最快速的方法
- 您无法为系统进行调整 - 已经编译好了
您或许有兴趣知道,如果您
2.c. Gentoo Installation CD
介绍
Gentoo Installation CD 为可开机的光碟。他将侦测您的硬体然后套用相关的驱动程式。这是由 Gentoo 开发员针对多种架构而维护的。
所有的 Installation CD 将会让您可以开机进入安装,设定网路,启始化分割区,然后从网路进行 Gentoo 的安装。我们目前提供两种 Installation CD,除非你要用最新的套件包作网路安装,这两种都适合用来安装 Gentoo。
如果你想在有网路的状 Gentoo,请依照 Gentoo 2005.0 手册 中列出的安装步骤。
我们目前提供的两种 Installation CD 是:
* Gentoo Minimal Installation CD,一个极简,有废话的可开机光碟,目的是提供 开机,设定网路,以及接着安装 Gentoo。
* Gentoo Universal Installation CD,除了和 Minimal Installation CD 差不多功能的开机光碟外, 还包含 stage1 及数个 stage3 (对不同的子架构作最佳化)压缩档。
为了帮你 Installation CD,我们列出每一种 Installation CD 的主要优点及缺点。
Gentoo's Minimal Installation CD
Minimal Installation CD 的名称是 install-amd64-minimal-2005.0.iso,只有 75 MB 大。你可以使用这个 Installation CD 来安装 Gentoo,但是需要连接网际网路。
Minimal Installation CD 优点及缺点
+ 最小的下载光碟
+ 您可以网路下载 stage1,stage2,stage3
- 不包含 stage 档案,有 Portage,有预先编好的套件,因此不适合非网路安装。
Gentoo 的 Universal Installation CD
Universal Installation CD 名称是 install-amd64-universal-2005.0.iso,他占满了一整片 352 MB 的光碟。你可以用这片光碟安装 Gentoo,此外还可以用他进行无网路安装,可能是你想在你目前用的电脑以外的安装 Gentoo 就会用到了
我们提供一份"预设"光盘,都适合所有架构的子架构,并且也针对各子架构自订化(CD2)(如 Athlon-XP,G4,等等。)。
Universal Installation CD 优点及缺点
+ 包含着所有您需要的。您可以不用网路连线进行安装。
- 要下载的档案庞大
其他光碟
你或许已经发现在镜像站上有所谓的 套件光碟。这些并不是 Installation CD,而是在无网路安装时可以使用的资源。他包含预先编译好的套件(俗称 GRP 包),让你可以方便,轻松的在安装好 Gentoo 后安装额外的程式(象是 OpenOffice.org,KDE,GNOME,...)。
2.d. 下载,烧录,然后使用 Gentoo Installation CD 开机
下载然后烧录 Installation CD
您将选择使用 Gentoo Installation CD。我们将要先下载 Installation CD 然后烧录为光碟。我们之前谈过有一些可用的 Installation CD,但是您要到那里下载呢?
你可以从我们的 镜像站 取得任何一种的 Installation CD (套件光碟也是,如果你需要的话)。 Installation CD 是放在 releases/amd64/2005.0/livecd 目录下。
目录中你可以看到俗称的 ISO 档。他们是完整的光碟影像档,你可以把他们烧到光碟上。
如果您害怕您下载的档案有损毁,您可以透过我们提供的 MD5 checksum (如 install-amd64-minimal-2005.0.iso.md5)并且使用 MD5 checksum 检查。在 Linux/Unix 环境下您可以使用 md5sum 工具或者是 Windows 下的 md5sum。
另外一个检查的方法则是使用 GnuPG 的签名档来检查我们所提供的档案(结尾为 .asc)。下载签名档然后取得公錀:
原始码 1: 取得公錀
$ gpg --keyserver pgp.mit.edu --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)。
使用 Installation CD 开机
当您完成光碟的烧录,我们现在要将它用来开机了。移除光碟,将您的系统重新启动至 BIOS。这通常是按 DEL,F1,或是 ESC,依照您的 BIOS。再 BIOS 里面,将 boot order 将 CD-ROM 的位址放到 hard disk 前面。这项设定通常会再 "CMOS Setup" 的目录里面。如果您有做此项动作,系统重新启动时将会略过光碟机直接从硬碟开机。
现在将安装光碟放到光碟机内然后重新启动。您应该会看到一个开机提示符号。在此,您可以按下 Enter 使用预设的设定进行开机步骤,或是自行输入 Installation CD 的开机选项。先选择核心,随后为开机选项。当完成时按下 Enter。
选择核心?错,我们在 Installation CD 上提供多个核心让您使用。预设的为 gentoo。其他的核心则是针对特定硬体需要提供支援,而 -nofb 的变数将关闭 framebuffer。
以下的列表为我们所提供的核心以及简介:
核心 介绍
gentoo 预设核心并且支援 K8 CPUs 搭配 NUMA
gentoo-nofb 和 gentoo 一样,但是针对 gen.x86-64 编译了 SMP 支持
注意: 有些 Installation CD 提供其他的核心,或是有提供这份文件所告知提供的核心。如果要在开机时查看可用的核心列表,请在开始的画面按下 F1。
您也可以提供核心参数。它们将代表着各个选择行开启(或是关闭)的设定。以下的清单将会解释所有可用的核心选项。
原始码 3: 可供选择的开机选项
- agpgart 加载 agpgart (如果您遇到使 graphics 上的问题或被锁上,使用这个选项)
- acpi=on 加载 ACPI firmware 支持
- ide=nodma 强制关闭故障 IDE 装置的 DMA
- doscsi 扫描 scsi 装置 (可能伤害到一些以太网路卡)
- dopcmcia 为 PCMCIA 光碟启动 pcmcia 服务
- nofirewire 关闭 initrd 中的 firewire 模块 (如 firewire 光碟等等)
- nokeymap 关闭 non-us 键盘配置的 keymap selection
- docache 快取整个执行部份光碟到记忆体中,允许您卸载 /mnt/cdrom 来挂载其他光碟
- nodetect 让 hwsetup/kudzu 和 hotplug 不要执行
- nousb 关闭 initrd 加载 usb 模块,关闭 hotplug
- nodhcp dhcp 不会自动启动如果侦测到 nic
- nohotplug 停止载入 hotplug 服务
- noapic 关闭 apic (如果遇到硬体问题如 nics, scsi 等等,可尝试这个选项)
- noevms 取消载入 EVMS2 模块
- nolvm2 取消载入 LVM2 模块
- hdx=stroke 允许您分割整个硬碟,即使您的 BIOS 无法处理大容量硬碟
- noload=module1[,module2[...]] 取消载入特定核心模组
注意: 有些 Installation CD 提供更多其他开机参数,或是有提供这份文件所列表的。如果要完整的开机参数清单,请在开机画面时按下 F2。
现在启动您的光碟,选择核心(如果您对预设的 gentoo 核心不是很满意)和开机参数。举例来说,我们将以 gentoo 核心,使用 dopcmcia 为核心参数:
原始码 4: 使用 Installation CD 开启
boot: gentoo dopcmcia
您会看到一个开机欢迎画面和 progress bar。如果您安装的 Gentoo 使用 non-US 键盘,请确认您按下 F2 转换到文字模式,并且遵照提示。如果在 10 秒内有作出选择,默认值 (US 键盘) 会被选起,然后开机程序会继续。一旦开机程序完成,您会自动登入为 "Live" Gentoo Linux 的 "root",最高权限使用者。您应该会有一个 root ("#")介面出现在目前的操控台。您可以使用 Alt-F2,Alt-F3, Alt-F4 来回切换。如要回到刚才的画面请按 Alt-F1。
现在请从 其他硬体设定 继续。
其他硬体设定
当 Installation CD 开启时,它将会尝试侦测所有系统上的硬体然后载入相关的核心模组来支援您的硬体。在大部份的例子,它做的相当不错。但是,在某些情 PCi 的自动侦测错过了系统上某些硬体,您将需要手动载入它们。
以下的例子我们将载入 8319too 模块(支援某种网路介面):
原始码 5: 载入核心模组
# modprobe 8139too
如果你需要 PCMCIA 的支援,激活 pcmcia init script:
原始码 6: 激活 PCMCIA init script
# /etc/init.d/pcmcia start
选择性:微调硬碟效能
如果您是一个高阶使用者,您或许想要使用 hdparm 微调您的 IDE 硬盘。使用 -tT 的参数将让您测试硬碟的效能(请多执行几次来确定比较正确的数值):
原始码 7: 测试磁碟效能
# hdparm -tT /dev/hda
要微调,您可以使用以下任何范例(或是自行测试)。请将 /dev/hda 更改为您所要微调的磁碟:
原始码 8: 微调硬碟效能
激活 DMA: # hdparm -d 1 /dev/hda
激活 DMA + 安全的增加效能选项: # hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hda
选择性:使用者帐号
如果您打算给予其他人安装环境的权限,或是使用非 root 的权限执行 irssi (安全考量)您将需要建立相关的使用者帐号和更改 root 密码。
要更改 root 密码,使用 passwd 工具:
原始码 9: 更改 root 密码
# passwd
New password: (输入新密码)
Re-enter password: (再次输入新密码)
要建立使用者帐号,我们先需要输入他们的帐号然后密码。我们将使用 useradd 和 passwd 完成这些工作。下面的例子,我们将建立一个使用者叫做 "john"。
原始码 10: 建立一个使用者帐号
# useradd -m -G users john
# passwd john
New password: (输入 john 的密码)
Re-enter password: (再次输入 john 的密码)
您也可以利用 su 从 root 更便道您刚建立的帐号:
原始码 11: 更换使用者
# su john -
选择性:在安装过程中检视文件
如果你想要在安装过程中检视 Gentoo 手册(从 CD 或是线上),确定你已经建立使用者帐号(参阅选择性:使用者帐号选择性:使用者帐号)。然后按下 Alt-F2 开启新的终端机并且登入。
如果你想要检视 CD 上的文件,你可以马上执行 links2 来阅读:
原始码 12: 检视 CD 上的文件
# links2 /mnt/cdrom/docs/handbook/html/index.html
然而,如果你因为线上的 Gentoo 手册比较新而想要阅读他。你也可以使用 links2 ,但是你需要先完成设定您的网路这一章(否则你不能连接网际网路来检视文件):
原始码 13: 检视线上文件
# links2 http://www.gentoo.org/doc/en/handbook/handbook-x86.xml
你可以按下 Alt-F1 回到原来的终端机。
选择性:开启 SSH 服务器
如果您想在安装过程中让其他使用者使用您的电脑(或许是帮忙您安装 Gentoo 的人),您将需要建立一个使用者帐号给他们,提供您的 root 密码给他们(只有 在您 完全信任 的状
要开启 SSH 服务器,执行以下指令:
原始码 14: 开启 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

测试网路
或许您会想要尝试 ping 网路公司的 DNS 服务器(可以在 /etc/resolv.conf)或是您所选的网址,这只是为了查看您的封包是否能传送网路,DNS 解析是否正常,等等﹍
原始码 4: 测试网路
# ping -c 3 http://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 系统上的第一个 IDE 磁盘,/dev/hda 如果您的系统使用 SCSI 磁盘,那您的第一个磁碟将会是 /dev/sda。
以上的区块装置代表着磁碟的介面。使用者可以不用担心您的磁碟是否为 IDE,SCSI 或是其他,并且使用程式来使用这些区块装置。这个程式可以在磁碟上写入多个随机的 512 byte 区块。
分割区和 Slices
理论上虽然您可以使用整个磁碟放置您的 Linux 系统,但是实务上几乎有人这么做。整个磁碟将会被分为其他小一点的大小,方便更好的管理。在 amd64 的系统上叫做 分割区(partitions)。
分割区
分割区总共有三类:primary,extended 和 logical。
一个 primary 分割区是一个包含 MBR(Master Boot Record)的分割区。一个 MBR 非常小(512 byte)只能定义成四个分割区(从 /dev/hda1 到 /dev/hda4)。
一个 extended 分割区是一个特别的 primary 分割区(意思是说 extended 分割区一定要从四个可用的 primary 分割区内扩展)而可以建立更多的分割区。这种分割区原本是不存在的,但是四个分割区太少了,它会诞生是因为要扩展而不会遗失反向相容。
一个 logical 分割区是在 extended 分割区内。他们的定义不是放在 MBR,但是是放在 extended 分割区。
4.b. 策划一个分割区计画
预设的分割区策划
如果您不打算策划一个分割计画,您可以使用我们手册内的分割区策划:
分割区 档案系统 大小 说明
/dev/hda1 ext2 32M 开机分割区(Boot partition)
/dev/hda2 (swap) 512M Swap 分割区
/dev/hda3 ext3 磁碟剩下的空间 根 或是 主分割区(Root partition)
如果您有兴趣多了解一个分割区(或是 logical 容量)应该多大,或是您需要几个分割区(或是容量),请继续读下去。不然请从 使用 fdisk 分割您的磁碟 。
多少和多大?
多少分割区通常是按照您的使用环境。举例来说,如果您有很多个使用者,您就会因为安全问题和能够简易备份将您的 /home 分开。如果您将 Gentoo 安装为邮件伺服器那您的 /var应该分开,因为邮件通常释放在 /var。选择好的档案系统将会提升您的效能。游戏伺服器因为大多数的游戏伺服器都是安装在 /opt 所以通常会将 /opt 分开。原因很和 /home 类似:安全问题和备份。你一定会想分给 /usr 比较大的空间:不只是因为他包含大部份的程式,Portage 树,除了他储存的各种原始码知外,本身需要 500 Mb 的空间。
如您所见,不同的方式是彼此相依的。不同的分割区或是容量将会有以下优点:
* 您可以选择适合个别分割区的档案系统提高效能
* 您的系统不会因为一个分割区或是容量失效而完全终止
* 如果必要,档案系统检查所费的时间将会减少,并且可以以平行方式进行(虽然这个优点 比较适合多分割区)
* 安全性可以因为某些分割区以分割成唯读而加强,nosuid(setuid机会被略过), noexec(执行档将会被掠过)等等。
但是,多个分割区也有一个很大的缺点:如果有完好的设定,您将会看到一个分割区上的空间不够或是一个分割区上的空间太多。SCSI 和 SATA 也有最多 15 个分割区的限制。
以范例来分割,我们将使用一个 20GB 的硬碟,为手提电脑的示范(包含着网页伺服器,邮件伺服器,gnome,﹍):
原始码 1: 档案系统使用范例
$ df -h
Filesystem Type Size Used Avail Use% Mounted on
/dev/hda5 ext3 509M 132M 351M 28% /
/dev/hda2 ext3 5.0G 3.0G 1.8G 63% /home
/dev/hda7 ext3 7.9G 6.2G 1.3G 83% /usr
/dev/hda8 ext3 1011M 483M 477M 51% /opt
/dev/hda9 ext3 2.0G 607M 1.3G 32% /var
/dev/hda1 ext2 51M 17M 31M 36% /boot
/dev/hda6 swap 516M 12M 504M 2% <not mounted>
(预留 2GB 空间)
这边的 /usr 的分割区是快用完的(占用83%),但是当所有的软体已经安装完毕后,/usr 就不会再急速的增加。关于 /var,大部份的人或许会认为分配给 /var 的空间太大。但是,Gentoo 将会在 /var/tmp/portage 内进行所有档案的编译,所以您如果打算同时编译大的程式如 KDE 和 OpenOffice.org,那么/var 最好是有 3GB 以上的剩余空间。
4.c. 使用 fdisk 分割您的磁碟
以下部份将解释如何使用之前所策划的进行分割:
分割区 说明
/dev/hda1 开机分割区
/dev/hda2 Swap 分割区
/dev/hda3 主分割区(Root)
请按照个人所需更改您的分割架构。
查看目前的规划的分割区
fdisk 是一个强大并且受欢迎的磁碟分割工具。使用您的磁碟上的 fdisk (按照我们的范例,我们将使用/dev/hda):
原始码 2: 开始 fdisk
# fdisk /dev/hda
当 fdisk 开始后,您将会看到以下的画面:
原始码 3: fdisk 接口
Command (m for help):
按下 p 显示您得磁碟目前的分割区设定:
原始码 4: 范例分割区设定
Command (m for help): p
Disk /dev/hda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 14 105808+ 83 Linux
/dev/hda2 15 49 264600 82 Linux swap
/dev/hda3 50 70 158760 83 Linux
/dev/hda4 71 2184 15981840 5 Extended
/dev/hda5 71 209 1050808+ 83 Linux
/dev/hda6 210 348 1050808+ 83 Linux
/dev/hda7 349 626 2101648+ 83 Linux
/dev/hda8 627 904 2101648+ 83 Linux
/dev/hda9 905 2184 9676768+ 83 Linux
Command (m for help):
这个磁碟包含着七个 Linux 档案系统(显示为 "Linux")和一个 swap 分割区(显示为 "Linux Swap")。
移除所有分割区
我们将要先把已经存在的分割区一除掉。按下 d 删除。举例来说要删除已经存在的 /dev/hda1:
原始码 5: 删除一个分割区
Command (m for help): d
Partition number (1-4): 1
这个分割区将会被显示为删除。当您输入 p 的时候您将会看不到所删除的分割区,但是只会在您储存后发挥功效。如果误杀了某个分割区然后想要重来,按下q 然后 enter 您的分割区将不会被删除。
现在,假设您想要删除所有系统上的分割区,请先按 d 然后要删除的分割区编号再按下 p 刷新分割区列表。最后您将会将所有的分割区删除:
原始码 6: 空的分割区列表
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
Command (m for help):
现在您的分割区列表已经空了,我们可以开始建立分割区了。我们将会使用之前所讨论到的预设的分割计画。当然,如果您有自己的分割计画,请按照我们的方式以此类推!
建立开机分割区
我们将要先建立一个小的开机分割区。按下 n 建立一个分割区然后按下 p 选择 primary partition,再按下 1 选择第一个 primary 分割区。当您看到 first cylinder 时,按下 enter,然后看到 last cylinder 输入 +32M 来建立一个 32 MByte 大小的分割区:
原始码 7: 建立开机分割区
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (按下 Enter)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M
现在,当您按下 p 时,您将会看到以下的显示:
原始码 8: 已建立的开机分割区
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 14 105808+ 83 Linux
我们将需要将这个分割区设定为可开机。按下 a 的开关让可开机旗标放在这个分割区上。如果您再按一次 p,您将会看到 "Boot" 栏位有一个 *。
建立 Swap 分割区
现在我们需要建立 swap 分割区。按下 n 建立一个新的分割区,然后 p 告诉 fdisk 您要一个 primary 分割区。然后按下 2 建立第二个 primary 分割区。当您看到 first cylinder,按下 enter。然后当您看到 last cylinder,输入 +512M 来建立一个 512MB 大小的分割区。当您完成的时候,按下 t 来选择分割区类别。接着输入 82 将分割区类别选为 "Linux Swap"。当您完成的时候,按下p 应该会看到类似以下的画面:
原始码 9: 建立 swap 分割区后的列表
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 14 105808+ 83 Linux
/dev/hda2 15 81 506520 82 Linux swap
建立主分割区(Root)
最后,我们需要建立主分割区。按下 n 建立一个新的分割区,然后 p 告诉 fdisk 您要一个 primary 分割区。然后输入 3 建立第三个 primary 分割区,在我们的例子为 /dev/hda3。当您看到 first cylinder,按下 enter。当您看到 last cylinder,按下 enter 来使用剩余的空间。完成这些步骤后,按下 p 您应该会看到类似以下的列表:
原始码 10: 建立主分割区后的列表
Command (m for help): p
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 14 105808+ 83 Linux
/dev/hda2 15 81 506520 82 Linux swap
/dev/hda3 82 3876 28690200 83 Linux
储存分割区规划
要储存然后离开 fdisk,按下 w。
原始码 11: 储存然后离开 fdisk
Command (m for help): w
现在您的分割区已经建立完成了,您可以从 建立档案系统 继续。
4.d. 建立档案系统
介绍
现在您的分割区已经建立完成了,我们接下来需要把档案系统放到它们上面。如果您不在乎要使用那种档案系统,满意使用我们手册内的范例,请从 将档案系统套用到分割区上 继续。不然请继续阅读学习关于更多可用的档案系统﹍
档案系统?
我们提供多个档案系统。有些在 amd64 的架构上是稳定的,有些则不是。ext2 和 ext3 为稳定的。 jfs 和 reiserfs 则需要更多的测试。如果您想要常识,您可以试试看其他未支援的档案系统。
ext2 是一个旧的 Linux 档案系统,有日志功能. 启用的时间通常需要很久。目前有许多 日志型态 的档案系统可以以更快的速度及更好的效率完成系统启用和检查。
ext3 为 ext2 的日志版,提供了 metadata 日志系统 并且可以快速地使用日志系统复原。ext3 是个相当不错并且可靠的档案系统. 它有额外的 hashed b-tree 索引功能将会开启几乎在任何情ext3 是一个很棒的档案系统。
ReiserFS 整体来说是个相当不错的系统,它处理小型档案(少于4kb)时效能会比 ext2 和 ext3 来的好。他使用的是 B*-tree 为基础的档案系统. 另外也能很有效率地处理大型档案。Linux 核心版本 2.4.18+ 后,ReiserFS 是一个相当有值得推荐的系统, 从很少,到很多档案。ReiserFS 都可以处理的非常好。开机分割区并不建议使用此档案系统。
XFS 是一个 metadata 日志系统,并且拥有完整的功能及针对延展性最佳化。如果您使用高速 SCSI或是纤维的储存装置,并且有持续不断的电源供应,我们才推荐您使用 XFS。 如果有,请使用其他档案系统。因为 XFS 大量的将要转送的资料快取在记忆体中,设计不好的程式(的确有一些程式在写入磁碟时不做一般的预防措施)可能当系统意外断电时损失大量的资料。
JFS 是 IBM 发展的高效能日志系统。目前虽然已经可以算是个完成品,关于他的稳地度并有太多的优点及缺点。
将档案系统套用到分割区上
要把档案系统建立到一个分割区或是容量上可使用一些为个别档案系统所设计的工具:
档案系统 建立指令
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs
以我们的范例来说,开机分割区(在我们的例子里为 /dev/hda1)为 ext2 和主分割区(在我们的例子为 /dev/hda3)为 ext3,您将要使用:
原始码 12: 将档案系统套用到分割区上
# mke2fs /dev/hda1
# mke2fs -j /dev/hda3
现在档案系统已经建立到我们刚建立完成的分割区上了。
启用 Swap 分割区
mkswap 是用来起始 swap 分割区的指令:
原始码 13: 建立 swap 签名
# mkswap /dev/hda2
要启用 swap,使用 swapon 指令:
原始码 14: 激活 swap
# swapon /dev/hda2
现在使用上面的指令建立然后启动 swap。
4.e. 挂载
现在您的分割区已经起始和放置档案系统了,接下来我们该把这些分割区挂载起来。使用 mount 的指令。不要忘了建立相关的挂载目录,以我们的分割来说只挂载主分割区和开机分割区:
警告: 由于 e2fsprogs 套件中的某个臭虫,如果您使用 ext3 档案系统,您需要明确的使用 mount -t ext3 选项。
原始码 15: 挂载分割区
# mount /dev/hda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/hda1 /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
选择您所需要的
接下来的步骤您将需要将您选择的 stage 压缩档安装到您的系统上。您可以从网路下载,或是从我们的 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 压缩档。如果您有 links2 ,您就可以马上连接到 Gentoo 对映站 然后选择最靠近您的位置。
如果有 links2 的话,应该会有 lynx 可以用。假如要透过 proxy,设定 http_proxy 和 ftp_proxy 变量:
原始码 4: 设定 lynx proxy 信息
# export http_proxy="http://proxy.server.com

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

我们假设你有 links2 可以使用。
选择releases/的目录,接着是您所使用的架构(如 x86/)最后则是 Gentoo 的版本(2005.0)最后您就可以看到适合您的架构所使用的 Stage 压缩档位于 stages/的列表(他们也许会被放在不同子架构中的子目录中)。选择一个然后按下 D 开始下载。当下载完成时,按下Q 离开浏览器。
原始码 5: 使用 links2游览对映站
# links2 http://www.gentoo.org/main/en/mirrors.xml
(如果你想要使用 proxy:)
# links2 -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml
如果您想要检查下载的压缩档是否正确,您可以使用 md5sum 然后以 MD5 checksum 输出进行比较。例如说,检查 stage 压缩档是否正确:
原始码 6: 检查 stage 压缩档是否下载正确
# md5sum -c stage1-x86-2005.0.tar.bz2.md5
stage1-x86-2005.0.tar.bz2: OK
解开 Stage 压缩档
现在解开您刚刚下载到系统上的压缩档。我们使用最简单的 GNU 的 tar 方式进行:
原始码 7: 解开 Stage 压缩档
# tar -xvjpf stage?-*.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 压缩档
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 压缩档。我们将使用 GNU 的 tar 工具。确定您也使用着一样的参数(-xvjpf)!同样的,v 选项是可以自由选择的,而且在某些 tar 版本并不支援。在下面的范例,我们将使用 stage3-<子架构>-2005.0.tar.bz2。要记得将压缩档档名换成您所选择的档名。
原始码 11: 解开 Stage 压缩档
# tar -xvjpf /mnt/cdrom/stages/stage3-<子架构>-2005.0.tar.bz2
现在 stage 已经安装完成了,请从 安装 Portage 继续。
5.d. 安装 Portage
解压缩 Portage 快照
现在你需要安装 Portage 快照,里面是告诉 Portage 那些软体可以安装,那些 profiles 可以使用等等的档案集合。
下载及安装 Portage 快照
进入你挂在档案系统的目录(一般都是 /mnt/gentoo):
原始码 12: 进入挂载点
# cd /mnt/gentoo
激活 links2(或是 lynx),然后连线到 Gentoo 镜像站列表。选择离你最近的站台,进入 snapshots/ 目录。选择一个 Portage 快照然后按下 D 就可以下载了。
原始码 13: 浏览 Gentoo 镜像站列表
# links2 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
警告: 虽然这会对一些非 Stage1 的使用者有兴趣,但是非 stage1 的使用者 不应该 更改 make.conf 内的 CHOST 的设定。这样会造成系统不稳。再一次提醒:这只适用于 stage1 的使用者。
CHOST 的变数将定义着 gcc 针对架构所需要编译的参数。可能性为:
架构 子架构 CHOST 设定
x86 i386 i386-pc-linux-gnu
x86 i486 i486-pc-linux-gnu
x86 i586 i586-pc-linux-gnu
x86 i686 and above (incl. athlon) i686-pc-linux-gnu
alpha alpha-unknown-linux-gnu
ppc powerpc-unknown-linux-gnu
ppc64 powerpc64-unknown-linux-gnu
sparc sparc-unknown-linux-gnu
sparc64 sparc-unknown-linux-gnu
hppa (通用) hppa-unknown-linux-gnu
hppa pa7000 hppa1.1-unknown-linux-gnu
hppa pa8000 或以上 hppa2.0-unknown-linux-gnu
mips mips-unknown-linux-gnu
amd64 x86_64-pc-linux-gnu
请确定您使用的是对的CHOST设定。举例来说,对于sparc64的CHOST 仍然是sparc-unknown-linux-gnu并且有 sparc64-unknown-linux-gnu
想要在 bootstrap 时加上 NPTL 支援的人,如果用 x86 系统, CHOST 要设成 i586-pc-linux-gnu 或更高。
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
-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
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 档案系统
将 /proc 档案系统挂载到 /mnt/gentoo/proc 让安装过程中即使是在 chrooted 的环境也可以取得新提供的资讯。
原始码 4: 挂载 /proc
# mount -t proc none /mnt/gentoo/proc
进入新的系统环境
现在所有的分割区都已经初步设定好了而且基本的系统也安装完毕,现在是用 变换根目录进入新的系统环境的时候了。这代表我们从目前的安装环境 (安装光碟或是其他的安装媒体)进入您安装的系统(就是已经安装的分割区)。
变换根目录动作在三步骤内完成。首先我们会用 chroot 让根目录从 / (目前安装的媒体)变换到 /mnt/gentoo (或您安装的分割区)。然后用 env-update 建立新的环境,这将会建立基本的系统变数。最后,我们用 source 把这些变数载入到记忆体。
原始码 5: 进入新的环境
# chroot /mnt/gentoo /bin/bash
# env-update
* Caching service dependencies...
# source /etc/profile
恭喜!您现在在新的 Gentoo Linux 环境当中了。不过离安装完毕还有一段时间,这就是为什么安装指南还有下面这些部份 :-)
更新 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 核心有更好的整合性。
你可以用下面的指令来看你现在是用哪个 profile:
原始码 7: 查看系统 profile
# ls -FGg /etc/make.profile
lrwxrwxrwx 1 48 Apr 8 18:51 /etc/make.profile -> ../usr/portage/profiles/default-linux/x86/2005.0/
如果你是用上面提到三种架构之一,预设提供给你的 profile 是使用 Linux 2.6 基础的系统。预设建议你这么做,但是你也可以选择使用别种 profile。
一些使用者会想要安装较旧的 Linux 2.4 profile。如果你有一个如此做的好理由,你首先要确认是否有额外的 profile 可以用。在 x86 系统,可以使用下面的指令来查询:
原始码 8: 查看是否有额外的 profile
# ls -d /usr/portage/profiles/default-linux/x86/2005.0/2.4
/usr/portage/profiles/default-linux/x86/2005.0/2.4
上面的例子显示有额外的 2.4 profile (也就是说,他有抱怨找不到档案或目录)。建议你使用预设值就好,和如果你想要换过去的话,你可依下面的步骤操作:
原始码 9: 换到 2.4 profile
(确定你使用正确的架构,底下的例子是适用 x86 的)
# ln -snf /usr/portage/profiles/default-linux/x86/2005.0/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
设定 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 找到。
原始码 10: 检视可用的 USE 参数
# less /usr/portage/profiles/use.desc
(你可以使用方向键来卷动,按下 'q' 离开)
下面是一个 USE 的设定,在以 KDE 为基础的系统中支援 DVD, ALSA 以及烧录机。
原始码 11: 开启 /etc/make.conf
# nano -w /etc/make.conf
原始码 12: USE 设定
USE="-gtk -gnome qt kde dvd alsa cdr"
自由选择:GLIBC Locales
你可能只会需要在你的系统上使用一种或两种 locale。在目前编译完 glibc 后所有可用的 locale 都会被建立。你可以启动 userlocales USE 设定并且在 /etc/locales.build 指定你需要的 locales。请做这个动作,除非您知道您要选择那一种locales。
原始码 13: 为 glibc 激活 userlocales USE 设定
# mkdir /etc/portage
# echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
现在指定你想要使用的 locale:
原始码 14: nano -w /etc/locales.build
# nano -w /etc/locales.build
下面是一个locales的范例,用来同时取得English (United States)和 German (Germany)和其他的字型格式(如UTF-8)。
原始码 15: 指定你的 locale
en_US/ISO-8859-1
en_US.UTF-8/UTF-8
de_DE/ISO-8859-1
de_DE@euro/ISO-8859-15
6.b. Stage1,Stage2 和 Stage3 的不同
现在先坐下来回想一下之前的步骤。我们要求您选择 stage1,stage2 或 stage3 并且提醒您您的选择对之后的安装步骤很重要。嗯,现在是您
* 如果您选择 stage1,接下来您要做这一节全部的步骤从 Stage1 到 Stage2 的过程 开始
* 如果您选择 stage2 您只要略过第一步骤,立即从第二部份 Stage2 到 Stage3 的过程 开始
* 如果你选择 stage3 那请接着阅读升级 baselayout 套件。
6.c. Stage1 到 Stage2 的过程
介绍 Bootstrapping
所以您 :-)
在这个步骤中,我们会 bootstrap 您的 Gentoo 系统。这会花很长一段时间,但是您会得到一个针对您的机器完全最佳化的系统。
Bootstrapping 代表编译 GNU C 函式库、GNU C 编译器以及其他重要的软体。
在开始之前,你可能会想要先下载必须的原始档。如果您不想要阅读这些的话,从 Bootstrapping 您的系统 继续。
自由选择:先下载原始码
如果您之前不曾复制全部的原始码,bootstrap script 会下载所有必要的档案。如果您想要先下载原始码然后再执行 bootstrap (例如您并不想在编译时让您的网路一直保持连线) ,使用bootstrap script 的 -f 选项,这将会下载(Fetch)所有的原始码。
原始码 16: 下载必须的原始码
# cd /usr/portage
# scripts/bootstrap.sh -f
Bootstrapping 您的系统
好啦,在您的键盘敲下底下的指令来启动 bootstrap,然后给您自己找些娱乐吧,找点自己喜欢的事情做,因为这一步骤将会花费一些时间完成。
原始码 17: Bootstrapping 您的系统
# cd /usr/portage
# scripts/bootstrap.sh
接下来继续下一步骤 Stage2 到 Stage3 的过程。
6.d. Stage2 到 Stage3 的过程
介绍
如果您正在阅读这一部份,那您已经有一个 bootstrap 好的系统(可能是您之前执行 bootstrap 或是您使用 stage2)。现在是编译所有系统套件的时候了。
所有系统套件?不,不完全是。在这一步骤中,您将会编译有其他选择的系统套件。一些套件有多种选择 (例如 system loggers),因为 Gentoo 代表选择,我们不会强迫您一定要使用哪一种。
自由选择:看会做哪些事
如果您想要知道哪些套件会被安装,执行 emerge --pretend --emptytree system。这将会列出所有要编译的程式。因为这相当的多,您应该使用 less 或 more 来上下浏览。
原始码 18: 看 'emerge system' 会做什么
# emerge --pretend --emptytree system | less
要注意的是,如果你有改过预设的 CFLAGS/CXXFLAGS 设定,使用 emerge --pretend --newuse system 就足够了。他会重新编译被 USE Flag 变动而影响到的套件(和我们建立 stage2 档案时的 USE Flag 比对)。如果你也改 USE 设定,那你为什么要用 stage2 安装?
自由选择:下载原始码
如果您想要 emerge 在开始之前先下载原始码(例如您并不想在编译时让您的网路一直保持连线),您可以使用 emerge 的 --fetchonly 参数来帮您下载所有的原始码。
原始码 19: 下载原始码
# emerge --fetchonly --emptytree system
编译系统
执行 emerge --emptytree system 来开始编译系统。然后让您自己忙于某些事情,因为这到完成会花很长一段时间。
原始码 20: 编译系统
# emerge --emptytree system
同样的,如果你修改预设 CFLAGS 和 CXXFLAGS 设定,使用 --newuse 就够了。
您现在可以安全地略过任何警告来更新您的设定档(执行 etc-update)。当您的 Gentoo 系统已经完全安装完毕,重开机后,查看我们的 设定档案保护。
当编译过程完成后,请从 设定核心 继续。
6.e. 升级 baselayout
baselayout 套件在 Gentoo 2005.0 发表后有显着的更新。一些设定档已经移动,而有一些的语法改变了。handbook 中使用新的设定档。因此建议你在进行下一步骤时先更新他。
原始码 21: 更新 baselayout
# rm /etc/conf.d/net
(确定有留着 nsswitch.conf 档案)
# touch /etc/nsswitch.conf
# CONFIG_PROTECT="-*" emerge baselayout
请从 设定核心 继续。
7. 设定核心
7.a. 时区
为了让您的系统知道它的位置在那里,您将需要设定您的系统时区。到 /usr/share/zoneinfo 寻找您的时区,然后使用 ln 建立一个连接到 /etc/localtime 的符号连结。
原始码 1: 设定时区资讯
# ls /usr/share/zoneinfo
(假设您要使用 GMT)
# ln -sf /usr/share/zoneinfo/GMT /etc/localtime
7.b. 安装核心原始码
选择一个核心
Linux 的核心是所有版本的最中心,也是最重要的。他位于使用者程式和系统硬体之间。 Gentoo 提供使用者很多可用的核心原始码。您可以到 Gentoo 核心 指南 查看我们所提供的核心。
使用 AMD64 系统的使用者,我们提供着 gentoo-sources (v2.6 核心,针对 amd64 相关修正稳定度,效能,和硬体支援)。
选择适合您的核心原始档然后使用 emerge 安装。
下面的例子我们将安装 vanilla-sources-2.4.24(因为这个核心原始码适合无网路状态的安装)。当然,请更换为您想要安装的核心:
原始码 2: 安装核心原始码
# emerge gentoo-sources
当您查看 /usr/src 您将会看到一个 linux 的连接连到您所选的核心:
原始码 3: 观看核心原始码目录连接
# ls -l /usr/src/linux
lrwxrwxrwx 1 root root 12 Oct 13 11:04 /usr/src/linux -> linux-2.6.11-gentoo-r3
如果您碰到的不是这样(例:连接连到其他的核心目录)您将需要在继续往下之前更改连接:
原始码 4: 更改核心连接目录
# rm /usr/src/linux
# cd /usr/src
# ln -s linux-2.6.11-gentoo-r3 linux
现在我们该设定以及编译您的核心了。您可以使用 genkernel 完成此项步骤,并且将会以和 Installation CD 一样的通用的方式进行编译。我们将先解释如何手动编译因为这是自订您的环境的最佳方法。
如果您想要手动编译您的核心,请从 预设:手动设定 继续。如果您想要使用 genkernel 请从 其他选择:使用 genkernel 继续。
7.c. 预设:手动设定
介绍
手动设定核心常常被 Linux 使用者认为最难完成的步骤。虽然不假 -- 但是当您手动编译几次核心后,您应该不会觉得它有多难
但是,唯一 的重点就是:您必须要了解您的系统才可以开始手动编译。系统上多数的资料可以安装 pciutils (emerge pciutils),从里面包含的 lspci 取得。你可以在 chroot 的环境下执行 lspci,不过可能会碰到一些 lspci 丢出来的警告(象是 pcilib: cannot open /sys/bus/pci/devices)。此外,你也可以在 未 chroot 执行,两个结果都一样。您也可以执行 lsmod 看看安装光碟使用那些核心模组(这是一个不错的暗示教您该开启那个选项)。
现在到您的核心原始码目录然后执行 make menuconfig。这将会启动一个 ncurses 的设定选单。
原始码 5: 开始 menuconfig
# cd /usr/src/linux
# make menuconfig
您将会看到一大串的设定部份。我们将列出一些您一定要启用的选项(不然 Gentoo 无法完善地工作)。
必须开启的选项
首先,开启 development and experimental code/drivers。您将需要这个,不然您将无法看见一些其他重要的程式码或是驱动程式。
原始码 6: 选择 experimental code/drivers, General setup
Code maturity level options --->[*] Prompt for development and/or incomplete code/drivers
General setup --->[*] Support for hot-pluggable devices
现在,进入 General Setup。因为预设使用 2.6 而且只有这版本支援 AMD64,我们会启动 support for hot-pluggable devices 让 udev 使用。
现在到 File Systems 然后选择要支援的档案系统。记得不要将它们编成模组(Module),否则您的 Gentoo 系统将无法挂载您的分割区。另外还要勾选 Virtual memory 和 /proc file system,请 不要 选取 /dev file system support,因为 Gentoo/AMD64 现在预设使用 udev。
原始码 7: 选择相关档案系统
Pseudo Filesystems --->[*] /proc file system support
[ ] /dev file system support (OBSOLETE)[*] 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 连线到网路或是数据机拨接,您将需要以下的核心选项:
原始码 8: 选择 PPPoE 相关驱动程式
Device Drivers --->
Network 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 时需要,但是这两个压缩的选项不会造成错误。
如果您需要,不要忘了为您的网路卡加入核心的支援。
如果您的系统有多个 CPU,您应该启用 "Symmetric multi-processing support":
原始码 9: 启用 SMP 支持
Processor type and features --->[*] Symmetric multi-processing support
如果你使用 USB 输入装置(像是键盘或滑鼠)不要忘记开启他:
原始码 10: 激活 USB 输入装置支援
Device Drivers --->
USB Support --->
<*> USB Human Interface Device (full HID) support[*] HID input layer support
当您完成核心设定时,请从 编译和安装 继续。
编译和安装
现在您的核心已经设定完成了,我们该来编译然后安装它。离开核心设定,然后开始编译程序:
原始码 11: 编译核心
# make && make modules_install
当核心完成编译时,将核心映像档复制到 /boot:
原始码 12: 安装核心
# cp arch/x86_64/boot/bzImage /boot/kernel-2.6.11-gentoo-r3
您也可以将您的核心设定档备份到 /boot,以防万一
原始码 13: 备份您的核心设定档
# cp .config /boot/config-2.6.11-gentoo-r3
现在请从 安装分开的核心模组 继续。
7.d. 其他选择:使用 genkernel
如果您正在读这个部份,那您应该是选择使用我们的 genkernel 程序来为您设定核心。
现在您的核心原始码已经安装了,我们该使用 genkernel 程序来自动帮您编译核心。genkernel 是利用类似 Installation CD 的核心设定来进行工作的。这代表着当您使用 genkernel 编译您的核心,您的系统大致上会在开机时侦测所有的硬体,就和我们的 Installation CD 一样。因为 genkernel 不需要手动核心设定,所以适合不会编译核心的使用者。
现在让我们来看看如何使用 genkernel。首先,安装 genkernel:
原始码 14: 安装 genkernel
# emerge genkernel
现在,编译您的核心原始码。如果您是透过 grp 安装 genkerenl,直接执行 genkernel all。请注意,当 genkernel 正在编译所有硬体支援时,等待的时间会有点久!
如果您的开机分割区有使用 ext2 或是 ext3 为档案系统,您将需要使用 genkernel --menuconfig all 手动设定,然后在核心内加入您所使用的档案系统支援( 不能 编成模组)。
原始码 15: 执行 genkernel
# genkernel all
当 genkernel 完成的时候,一个核心映像档,一套模组和一个 initial root disk (initrd)将会被建立。我们将在稍后设定开机程式时使用核心映像档和 initrd。写下核心和 initrd 的档名方便您稍后设定开机程式。initrd 将会在开起到"真正的"系统之前马上侦测硬体支援(就和 Installation CD 一样)。
原始码 16: 查看已建立的核心映像档名和 initrd
# ls /boot/kernel* /boot/initrd*
现在,为了要让我们的系统更像 Installation CD,我们需要安装 coldplug。当 initrd 自动侦测硬体时,coldplug将会自动侦测其他的硬体。要安装然后开启 coldplug ,请按照以下输入:
原始码 17: 安装和开启 coldplug
# emerge coldplug
# rc-update add coldplug default
# rc-update add coldplug boot
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 分割区(如: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"
现在加入 domainname script 到预设的 runlevel 中:
原始码 10: 将 domainname 加到预设 runlevel
# rc-update add domainname default
设定网路
在您觉得 "嗯,我现在已经弄好了" 之前,您要记得在您刚开始安装 Gentoo 时设定的网路只是在安装过程中使用。现在您要为您的 Gentoo 系统设定网路。
注意: 更详细的网路资讯,包括进阶的主题如频宽合并,桥接, 802.11q VLAN 及无线网路等包含在 Gentoo 网路设定 部份。
所有的网路设定都集合在 /etc/conf.d/net。如果您不知道如何设定的话,您会觉得这些语法相当不熟悉或是不了解,但不用担心,我们会解释每件您该需要的讯息 包含许多不同设定的指令范例可以在 /etc/conf.d/net.example 找到。
预设是使用 DHCP,他并不需要做任何设定。
如果你因为要指定 DHCP 选项或是你有使用 DHCP 而要设定网路,用你习惯的浏览器开启 /etc/conf.d/net(范例中使用 nano)。
原始码 11: 开启 /etc/conf.d/net 来编辑
# nano -w /etc/conf.d/net
你会看到底下这些:
原始码 12: 预设 /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:
原始码 13: 手动设定 eth0 的 IP 信息
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
routes_eth0=( "default gw 192.168.0.1" )
要使用 DHCP 并且指定 DHCP 选项,设定 config_eth0 及 dhcp_eth0:
原始码 14: 自动取得 eth0 的 IP
config_eth0=( "dhcp" )
dhcp_eth0="nodns nontp nonis"
请参阅 /etc/conf.d/net.example 中完整的选项列表。
如果您有数个网路介面,对 iface_eth1,iface_eth2 等变数重复上面的步骤。
现在储存设定然后离开,继续下面的步骤。
开机时自动启动网路
让您的网路介面开机时自动启动,您要把底下这些加入预设的 runlevel 中。如果您使用 PCMCIA 介面则跳过这一步骤,PCMCIA 是由 PCMCIA 激活 script 来启动。
原始码 15: 加入 net.eth0 到预设的 runlevel
# rc-update add net.eth0 default
如果您有数个网路介面,您要建立对应的 net.eth1,net.eth2 等。您可以使用 ln 来完成:
原始码 16: 建立额外的 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 然后填入这些设定:
原始码 17: 开启 /etc/hosts
# nano -w /etc/hosts
原始码 18: 填入网路资讯
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:
原始码 19: 适合单一电脑或是有完整反解的电脑的 /etc/hosts
127.0.0.1 localhost tux
储存设定然后离开,继续下面的步骤。
如果您有 PCMCIA,您可以继续进行 系统资讯。 PCMCIA 使用者继续下面的主题。
非必要:让 PCMCIA 工作
注意: pcmcia-cs 只可以在 x86, amd64 和 ppc 平台上使用。
PCMCIA 使用者首先要安装 pcmcia-cs 套件,包含打算使用 2.6 核心的使用者(虽然他们将不会使用套件内的驱动程式)。然后使用 USE="-X" 来避免现阶段的 XFree86 安装:
原始码 20: 安装 pcmcia-cs
# USE="-X" emerge pcmcia-cs
当 pcmcia-cs 安奘好以后,新增 pcmcia 到预设 runlevel:
原始码 21: 新增 pcmcia 到预设 runlevel
# rc-update add pcmcia default
8.c. 系统资讯
Root密码
我们藉由输入以下指令来更改Root密码
原始码 22: 设定Root密码
# passwd
如果您希望让Root能够从文字介面登入,请增加tts/0到/etc/securetty:
原始码 23: 增加 tts/0 to /etc/securetty
# echo "tts/0" >> /etc/securetty
系统资讯
Gentoo 使用 /etc/rc.conf 来设定整个系统的一般设定。开启 /etc/rc.conf 然后享受里面完善的注解
原始码 24: 开启 /etc/rc.conf
# nano -w /etc/rc.conf
当你设定 /etc/rc.conf 好以后,存档然后离开。
就如同您所看到的,这个档案有完善的注解让您设定必要的参数。你可以设定系统使用 unicode 及定义预设的编辑器还有显示管理员(像 kdm 和 gdm)。
Gentoo 使用 /etc/conf.d/keymaps 来处理键盘设定。编辑他设定你的键盘。
原始码 25: 开启 /etc/conf.d/keymaps
# nano -w /etc/conf.d/keymaps
特别要注意 KEYMAP 变量,如果您设定错误的 KEYMAP 当您再用键盘输入时会得到错误的结果。
注意: 以 USB 为主的 SPARC 系统或相容的系统可能要选择 i386 keymap (例如 "us") 而不是 "sunkeymap"。
PPC 在大部份的系统上使用 x86 的 keymaps。想要使用 ADB keymaps 的使用者将需要在开机时启用核心内的 ADB keycode sendings 然后在 /etc/conf.d/keymaps 内设定一个 mac/ppc keymap。
当你设定 /etc/conf.d/keymaps 好以后,存档然后离开。
Gentoo 使用 /etc/conf.d/clock 设定系统时钟,根据你的需求编辑他。
原始码 26: 开启 /etc/conf.d/clock
# nano -w /etc/conf.d/clock
如果你的硬体时钟是使用 UTC,你需要在档案中加入 CLOCK="local",不然你会发现时间偏移了。
当你设定好 /etc/conf.d/clock 后,存档然后离开。
如果你不是在 IBM POWER5 或 JS20 系统上安装 Gentoo,接着继续 安装必需的系统工具。
设定 Console
注意: 下面这一部分适用 IBM POWER5 及 JS20 硬体平台。
如果你打算在 LPAR 或 JS20 blade 上安装 Gentoo,你需要取消 /etc/inittab 中 hvc 那几行的注解,让虚拟 Console 可以产生登入提示符号。
原始码 27: 在 /etc/inittab 中启动 hvc 支持
hvc:12345:respawn:/sbin/agetty -nl /bin/bashlogin 9600 hvc0 vt220
接着继续 安装必需的系统工具。
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 工具
# emerge 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 -- 这将会需要更长的编译时间)。
现在请接着阅读 设定开机管理员。
作者: LiEn 发布时间: 2005-09-14
10. 设定开机管理程式
10.a.
介绍
现在您的核心已经设定和已经编译好相关的系统设定档了,是时候该安装一个程式来驱动开机时所需要的核心。这个程式叫做 开机程式。
选择性: Framebuffer
如果 您的核心有设定 framebuffer 的支援(或是您使用 genkernel 的预设核心设定),您可以在开机管理原设定中加入 vga 及/或 video 参数来启动设定。
64 位元的系统需要用 vesafb 驱动程式,所以需要设定 VGA 参数。 vga 参数设定 vesafb 在你的萤幕上使用的解析度及色深。如同 /usr/src/linux/Documentation/fb/vesafb.txt (当你安装核心套件时就会有这个档案)中说的,你要传一个对应解析度及色深的 VESA 编号。
底下列出你需要在 vga 参数中设定的编号及相对应的解析度及色深。
640x480 800x600 1024x768 1280x1024
256 0x301 0x303 0x305 0x307
32k 0x310 0x313 0x316 0x319
64k 0x311 0x314 0x317 0x31A
16M 0x312 0x315 0x318 0x31B
video 参数设定 frambuffer 装置设定。需要给它 frambuffer 装置(2.6 核心使用 vesafb,2.4 核心使用 vesa),接着是你想要启动的控制参数。全部的变数都列在 /usr/src/linux/Documentation/fb/vesafb.txt 之中,但我们会告诉你三个最常用到的选项。
选项 说明
ywrap 假设显示卡可以循环使用记忆体(例如说当到结尾时自动从开头继续)
mtrr 设定 MTRR 缓存器
更多的资讯可以在 /usr/src/linux/Documentation/fb/vesafb.txt 找到。
最后这两个参数可能会像 vga=0x318 video=vesafb:mtrr,ywrap 或 video=vesafb:mtrr,ywrap,1024x768-32@85。请记得(或是写下)您适用的数值;您稍后将需要到它。
现在继续安装 GRUB。
10.b. 使用 GRUB
了解 GRUB 的意义
了解 GRUB 的关键就是必须了解 GRUB 如何看待相关的硬碟和分割区。您的 Linux 分割区 /dev/hda1 大部份将会被 GRUB 解释为 (hd0,0)。请注意 hd0,0 外面的括号 - 它们是不可或缺的。
硬碟的计算是从 0 而不是 "a" 开始。请特别注意硬碟,GRUB 将不会计算 atapi-ide 光碟机和烧录机等装置。(在正常的情 bios 设定 SCSI 磁碟开机,不然它们将取得比 ide 磁碟更高的号码。当你要求 BIOS 从不同的硬碟开机时,那个 硬碟会被视为 hd0。
假如您有一个在 /dev/hda 的硬碟,在 /dev/hdb 的光碟机,在 /dev/hdc 的烧录机,第二棵硬碟在 /dev/hdd 和有任何 SCSI 装置。 /dev/hdd7 将会被翻译成 (hd1,6)。这或许听起来有点诡异,但是我们将可以利用 GRUB 提供的 tab 完成结构(tab complete mechanism)让您设定许多硬碟和分割区时方便许多。
差点忘记了,我们现在该安装 GRUB 了。
安装 GRUB
要安装 GRUB,我们需要先安装它。
原始码 1: 安装 GRUB
# emerge grub
虽然 GRUB 已安装完成,我们还需要为它编写一个设定档并且将 GRUB 程式安装在 MBR,如此一来 GRUB 将自动的开启到您新建立的系统核心。使用 nano (或是其他的编辑器)建立一个 /boot/grub/grub.conf 档案:
原始码 2: 建立 /boot/grub/grub.conf
# nano -w /boot/grub/grub.conf
现在我们将要开始编写grub.conf。您将会在下面找到两个按照我们的范例所使用的 grub.conf 设定档,使用的是核心 kernel-2.6.11-gentoo-r3。我们只会在第一个 grub.conf 内进行注解。
* 第一个 grub.conf 适用于有使用 genkernel 编译核心的使 用者
* 第二个 grub.conf 适用于使用 genkernel 的使用者
注意: 如果您的根目录档案系统是 JFS,您 必须要 赞 kernel 指令行中加入 "ro",因为 JFS 在它允许可读写挂载之前,需要重读它的记录档。
原始码 3: 未使用 genkernel 的 grub.conf
# 将为开机预设。0为第一,1为第二,以此类推。
default 0
# 使用预设前等待的开机秒数。
timeout 30
# 将漂亮又肥大的 splash-image 启用:)
# 如果您有安装显示卡,请注解这行
splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo Linux 2.6.11
# 储存核心档的分割区(或是作业系统)
root (hd0,0)
kernel /kernel-2.6.11-gentoo-r3 root=/dev/hda3
# 以下四行为 Windows 系统适合的双重开机。
# 在我们的例子,Windows是放在 /dev/hda6
title=Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1
原始码 4: genkernel 使用者适用的 grub.conf
default 0
timeout 30
splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo Linux 2.6.11
root (hd0,0)
kernel /kernel-2.6.11-gentoo-r3 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev
initrd /initrd-2.6.11-gentoo-r3
# 如果您想要双重系统开机的话
title=Windows XP
root (hd0,5)
makeactive
chainloader +1
注意: 在核心那一行最后的 udev 试用来解 udev (预设就是这样)时,在某些 genkernel 版本中的 bug。
注意: 如果您使用不同的分割设定或是核心档案,请依个人的设定更改。但是请确认所有 GRUB 相关的装置(如(hd0,0))和挂载点有相连的,而非 root。换句话说, (hd0,0)/grub/splash.xpm.gz 实际上是放在 /boot/grub/splash.xpm.gz 因为 (hd0,0) 是 /boot。
如果您需要自行输入任何参数给核心,只要将他们放在 kernel 的指令后面。我们已经传送了一个(root=/dev/hda3 或是 real_root=/dev/hda3),但是您也可以传送其他的指令。举例来说,我们使用 video 来设定之前提过的 framebuffer:
genkernel 使用者应该要知道他们的新使用的和 Installation CD 一样。举例来说,如果您有 SCSI 装置,您应该在核心选项后面加入 doscsi。
现在储存 grub.conf 档案然后离开。你接下来需要把 GRUB 安装到 MBR(Master Boot Record) ,让他开机时自动执行。
GRUB 开发员建议使用 grub-install。然而,如果因为一些原因让 grub-install 不能正常工作,你依然可以选择手动安装 GRUB。
接下来继续 预设:使用 grub-install 设定 GRUB 或是 另一种选择:手动设定 GRUB
预设:使用 grub-install 设定 GRUB
你需要输入 grub-install 指令来安装 GRUB。然而,因为你是在 chrooted 的环境,grub-install 并不能顺利执行。我们需要更新 /etc/mtab (这个档案包含了所有已挂载的档案系统的资讯)幸运的,有一个方便的方法来完成 - 只要将 /proc/mounts 复制到 /etc/mtab 就好了:
原始码 5: 更新 /etc/mtab
# cp /proc/mounts /etc/mtab
现在可以使用 grub-install 安装 GRUB。
原始码 6: 执行 grub-install
# grub-install /dev/hda
如果您有更多关于 GRUB 的问题,请参考 GRUB FAQ 或是 GRUB 说明。
接下来继续 重新开机系统。
另一种选择:手动设定 GRUB
接下来输入 grub 来开始设定。你可以看到 grub 的提示符号 grub> 。现在,你需要输入正确的指令来安装 GRUB 开机纪录到硬碟中。
原始码 7: 激活 GRUB shell
# grub
注意: 如果你的系统有软碟机,可以在上面的指令加入 --no-floppy 选项来避免 grub 侦测 (不存在的) 软碟机。
在设定范例档中我们想要安装 GRUB 让他可以从开机分割区 /dev/hda1 读取资讯,还有安装 GRUB 开机纪录到硬碟的 MBR (主开机纪录) 让我们打开电脑后所看到的第一个东西就是 GRUB。当然,如果你有依照安装时的范例设定档,依据你的设定改变指令。
GRUB 的自动完成技巧可以在 GRUB 内使用。例如说,如果你输入 "root (" 然后按下 TAB,你会看到装置列表(例如说 hd0)。如果你输入 "root (hd0," 再按下 TAB,你会看到所有可以选择的分割区列表(例如说 hd0,0)。
藉着使用 tab 自动完成,设定 GRUB 不再是那么困难了。所以现在继续设定 GRUB 吧
原始码 8: 安装 GRUB 到 MBR
grub> root (hd0,0) (指定你的 /boot 分割区位置)
grub> setup (hd0) (安装 GRUB 到 MBR)
grub> quit (离开 GRUB shell)
注意: 如果你想要安装 GRUB 到某一个分割区而不是 MBR,你需要改变 setup 指令指向正确的分割区。例如说,你想要把 GRUB 安装到 /dev/hda3,那指令就变成 setup (hd0,2)。然而很少使用者需要知道这个。
如果您有关于 GRUB 的问题,请参考 GRUB FAQ 或是 GRUB 说明。
接着继续重开机系统。
10.c. 重新开机系统
离开 chrooted 的环境然后卸载所有挂载的分割区。接着输入你已经等很久的神奇指令: reboot。
原始码 9: 卸载所有分割区然后重新开机
# exit
# cd
# umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo
# reboot
当然,不要忘了移除可开机的 CD,否则等一下会从 CD 开机而不是你刚装好的 Gentoo 系统。
重开机好了以后,接着完成 完成你的 Gentoo 安装。
11. 最终化您的 Gentoo 安装
11.a. 使用者管理
加入一个每天使用的使用者
在 Unix/Linux 系统下登入成 root 工作是危险的,并应该尽量的避免。所以我们 强烈的建议您新增另一个使用者来应付日常的使用。
使用者所在的群组定义了使用者可以执行那些工作?底下的表格列出许多你会想用的重要群组:
群组 说明
audio 可以存取音效装置
cdrom 可以直接存取光学储存装置(ex:光驱)
floppy 可以直接存取磁碟
games 可以玩游戏
usb 可以存取 USB 装置
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 桌面文件资源。
在 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 更新你的系统:
原始码 13: 更新你的系统
# emerge --update 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。以下为一个简短的列表:
原始码 1: 简短的可用 USE 参数
gtk - Adds support for x11-libs/gtk+ (The GIMP Toolkit)
gtk2 - Use gtk+-2.0.0 over gtk+-1.2 in cases where a program supports both.
gtkhtml - Adds support for gnome-extra/gtkhtml
guile - Adds support for dev-util/guile (interpreter for Scheme)
icc - Use the Intel C++ Compiler if the package supports it
icc-pgo - Enable PGO data generation or use when use icc.
imap - Adds support for IMAP
2.b. 使用 USE 参数
定义永久的 USE 参数
在我们希望您了解 USE 参数的重要性后,您现在需要定义您自己的 USE 参数了。
就如之前所提到的,所有的 USE 参数都是定义到 USE 的变数内。为了要方便使用者可以搜寻和选择 USE 参数,我们已经提供了 预设的 USE 设定。这个设定包含着我们认为适合 Gentoo 使用者常用的。预设的变数是定义在 make.defaults 档案。
你系统目前所使用的profile 是由 /etc/make.profile 的符号连结 profile 属于另一个更大的profile,最后形成了所有profile 的总和。最上层的 profile 是 base profile (/usr/portage/profiles/base)。
来看看预设的设定:
原始码 2: 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 gtk2 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 内定义类似以下的的变数:
原始码 3: /etc/make.conf 的范例 USE 设定
USE="-kde -qt ldap"
设定套件自己使用的 USE 设定
有时候你想对一个(或一组)套件使用一个 USE 设定,但是不希望影响到整个系统。为了达成这个,需要先建立 /etc/portage 目录(如果还建立的话),然后编辑 /etc/portage/package.use。
例如说,你不想要整个系统都有 berkdb 支持,但是你想要 mysql 支持,你可以加入:
原始码 4: /etc/portage/package.use 范例
dev-db/mysql berkdb
你当然可以明确关闭某个程式的 USE 设定。例如说,你不想要 PHP 支持 java:
原始码 5: /etc/portage/package.use 第二个范例
dev-php/php -java
定义暂时性的变数
有时候您会想要定义暂时性的变数。或许只使用那么一次。这样一来您就可以不用编辑 /etc/make.conf 两次(先设定,编译完再复原)您可以直接将 USE 定义成环境变数。记得,当你重新安装或升级这个程式(不管是只升级他或是升级全系统),你的改变会遗失!
以下的范例,我们将暂时从 USE 设定移除 java 来安装 mozilla。
原始码 6: 使用 USE 为环境变数
# USE="-java" emerge mozilla
自动 USE 参数
某些套件安装完成后,额外的 USE 参数如果你有明确关闭的话,会被自动启动。要查看完整的提供 USE 参数的清单,查看 /etc/make.profile/use.defaults及他上层 profile 的 use.defaults:
原始码 7: 简短版本的 /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. /etc/make.profile/use.defaults 承接的 USE 设定
3. 使用者在 /etc/make.conf 定义的 USE 设定
4. 使用者在 /etc/portage/package.use 定义的 USE 设定
5. 以环境变数的方式定义的 USE 设定变数
要查看最后的 USE 设定,执行 emerge --info。这将会看到所有相关的变数(包括 USE 变量)和 Portage 需要使用到的内容。
原始码 8: 执行 emerge --info
# emerge --info
让您的系统适应新的 USE 旗标
如果您有更改您的 USE 旗标,并且想将整个系统都套用新的设定,使用 emerge 的 --newuse 参数。
原始码 9: 重新编译您的系统
# emerge --update --deep --newuse world
接下来,执行 Portage 的 depclean 移除就系统上不需要的旧相依性套件。
警告: 执行 emerge --depclean 是一件非常危险的动作,请小心执行。请仔细确认列出来的套件有包含着您锁需要的套件。以下的范例我们将加入 -p 的参数来显示出将要被移除的列表清单。
原始码 10: 移除不需要的套件
# emerge -p --depclean
当 depclean 完成后,执行 revdep-rebuild 重新编译动态连结到已移除套件共享函式库的套件。revdep-rebuild 是 gentoolkit 套件的一部分;不要忘了先安装他。
原始码 11: 执行 revdep-rebuild
# revdep-rebuild
当这些都完成后,你的系统就正在使用新的 USE 设定了。
2.c. 套件相关 USE 设定
查看可用的 USE 设定
让我们使用 mozilla 的范例:它听取着什么 USE 关键字?要查看,我们使用 emerge 加上 --pretend 和 --verbose 参数:
原始码 12: 查看 USE 关键字
# emerge --pretend --verbose mozilla
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild N ] net-www/mozilla-1.5-r1 +java +crypt -ipv6 -gtk2 +ssl +ldap
+gnome -debug +mozcalendar -mozaccess -mozxmlterm -moznoirc -moznomail
-moznocompose -moznoxft
除了emerge 以外还有别的软体可以完成类似查询的工作。事实上,我们有一个特别的套件叫做 equery。这是包含在 gentoolkit 的套件内。首先,安装 gentoolkit:
原始码 13: 安装 gentoolkit
# emerge gentoolkit
现在执行 equery 然后使用参数查看某个套件的 USE 关键字。举例来说 gnumeric 套件:
原始码 14: 使用 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 提供你他的状态:
原始码 8: 查看 ccache 状态
# ccache -s
在非 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 Howto 取得更多资讯。
安装预编套件
虽然 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 手册页找到:
10.a.
介绍
现在您的核心已经设定和已经编译好相关的系统设定档了,是时候该安装一个程式来驱动开机时所需要的核心。这个程式叫做 开机程式。
选择性: Framebuffer
如果 您的核心有设定 framebuffer 的支援(或是您使用 genkernel 的预设核心设定),您可以在开机管理原设定中加入 vga 及/或 video 参数来启动设定。
64 位元的系统需要用 vesafb 驱动程式,所以需要设定 VGA 参数。 vga 参数设定 vesafb 在你的萤幕上使用的解析度及色深。如同 /usr/src/linux/Documentation/fb/vesafb.txt (当你安装核心套件时就会有这个档案)中说的,你要传一个对应解析度及色深的 VESA 编号。
底下列出你需要在 vga 参数中设定的编号及相对应的解析度及色深。
640x480 800x600 1024x768 1280x1024
256 0x301 0x303 0x305 0x307
32k 0x310 0x313 0x316 0x319
64k 0x311 0x314 0x317 0x31A
16M 0x312 0x315 0x318 0x31B
video 参数设定 frambuffer 装置设定。需要给它 frambuffer 装置(2.6 核心使用 vesafb,2.4 核心使用 vesa),接着是你想要启动的控制参数。全部的变数都列在 /usr/src/linux/Documentation/fb/vesafb.txt 之中,但我们会告诉你三个最常用到的选项。
选项 说明
ywrap 假设显示卡可以循环使用记忆体(例如说当到结尾时自动从开头继续)
mtrr 设定 MTRR 缓存器
更多的资讯可以在 /usr/src/linux/Documentation/fb/vesafb.txt 找到。
最后这两个参数可能会像 vga=0x318 video=vesafb:mtrr,ywrap 或 video=vesafb:mtrr,ywrap,1024x768-32@85。请记得(或是写下)您适用的数值;您稍后将需要到它。
现在继续安装 GRUB。
10.b. 使用 GRUB
了解 GRUB 的意义
了解 GRUB 的关键就是必须了解 GRUB 如何看待相关的硬碟和分割区。您的 Linux 分割区 /dev/hda1 大部份将会被 GRUB 解释为 (hd0,0)。请注意 hd0,0 外面的括号 - 它们是不可或缺的。
硬碟的计算是从 0 而不是 "a" 开始。请特别注意硬碟,GRUB 将不会计算 atapi-ide 光碟机和烧录机等装置。(在正常的情 bios 设定 SCSI 磁碟开机,不然它们将取得比 ide 磁碟更高的号码。当你要求 BIOS 从不同的硬碟开机时,那个 硬碟会被视为 hd0。
假如您有一个在 /dev/hda 的硬碟,在 /dev/hdb 的光碟机,在 /dev/hdc 的烧录机,第二棵硬碟在 /dev/hdd 和有任何 SCSI 装置。 /dev/hdd7 将会被翻译成 (hd1,6)。这或许听起来有点诡异,但是我们将可以利用 GRUB 提供的 tab 完成结构(tab complete mechanism)让您设定许多硬碟和分割区时方便许多。
差点忘记了,我们现在该安装 GRUB 了。
安装 GRUB
要安装 GRUB,我们需要先安装它。
原始码 1: 安装 GRUB
# emerge grub
虽然 GRUB 已安装完成,我们还需要为它编写一个设定档并且将 GRUB 程式安装在 MBR,如此一来 GRUB 将自动的开启到您新建立的系统核心。使用 nano (或是其他的编辑器)建立一个 /boot/grub/grub.conf 档案:
原始码 2: 建立 /boot/grub/grub.conf
# nano -w /boot/grub/grub.conf
现在我们将要开始编写grub.conf。您将会在下面找到两个按照我们的范例所使用的 grub.conf 设定档,使用的是核心 kernel-2.6.11-gentoo-r3。我们只会在第一个 grub.conf 内进行注解。
* 第一个 grub.conf 适用于有使用 genkernel 编译核心的使 用者
* 第二个 grub.conf 适用于使用 genkernel 的使用者
注意: 如果您的根目录档案系统是 JFS,您 必须要 赞 kernel 指令行中加入 "ro",因为 JFS 在它允许可读写挂载之前,需要重读它的记录档。
原始码 3: 未使用 genkernel 的 grub.conf
# 将为开机预设。0为第一,1为第二,以此类推。
default 0
# 使用预设前等待的开机秒数。
timeout 30
# 将漂亮又肥大的 splash-image 启用:)
# 如果您有安装显示卡,请注解这行
splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo Linux 2.6.11
# 储存核心档的分割区(或是作业系统)
root (hd0,0)
kernel /kernel-2.6.11-gentoo-r3 root=/dev/hda3
# 以下四行为 Windows 系统适合的双重开机。
# 在我们的例子,Windows是放在 /dev/hda6
title=Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1
原始码 4: genkernel 使用者适用的 grub.conf
default 0
timeout 30
splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo Linux 2.6.11
root (hd0,0)
kernel /kernel-2.6.11-gentoo-r3 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev
initrd /initrd-2.6.11-gentoo-r3
# 如果您想要双重系统开机的话
title=Windows XP
root (hd0,5)
makeactive
chainloader +1
注意: 在核心那一行最后的 udev 试用来解 udev (预设就是这样)时,在某些 genkernel 版本中的 bug。
注意: 如果您使用不同的分割设定或是核心档案,请依个人的设定更改。但是请确认所有 GRUB 相关的装置(如(hd0,0))和挂载点有相连的,而非 root。换句话说, (hd0,0)/grub/splash.xpm.gz 实际上是放在 /boot/grub/splash.xpm.gz 因为 (hd0,0) 是 /boot。
如果您需要自行输入任何参数给核心,只要将他们放在 kernel 的指令后面。我们已经传送了一个(root=/dev/hda3 或是 real_root=/dev/hda3),但是您也可以传送其他的指令。举例来说,我们使用 video 来设定之前提过的 framebuffer:
genkernel 使用者应该要知道他们的新使用的和 Installation CD 一样。举例来说,如果您有 SCSI 装置,您应该在核心选项后面加入 doscsi。
现在储存 grub.conf 档案然后离开。你接下来需要把 GRUB 安装到 MBR(Master Boot Record) ,让他开机时自动执行。
GRUB 开发员建议使用 grub-install。然而,如果因为一些原因让 grub-install 不能正常工作,你依然可以选择手动安装 GRUB。
接下来继续 预设:使用 grub-install 设定 GRUB 或是 另一种选择:手动设定 GRUB
预设:使用 grub-install 设定 GRUB
你需要输入 grub-install 指令来安装 GRUB。然而,因为你是在 chrooted 的环境,grub-install 并不能顺利执行。我们需要更新 /etc/mtab (这个档案包含了所有已挂载的档案系统的资讯)幸运的,有一个方便的方法来完成 - 只要将 /proc/mounts 复制到 /etc/mtab 就好了:
原始码 5: 更新 /etc/mtab
# cp /proc/mounts /etc/mtab
现在可以使用 grub-install 安装 GRUB。
原始码 6: 执行 grub-install
# grub-install /dev/hda
如果您有更多关于 GRUB 的问题,请参考 GRUB FAQ 或是 GRUB 说明。
接下来继续 重新开机系统。
另一种选择:手动设定 GRUB
接下来输入 grub 来开始设定。你可以看到 grub 的提示符号 grub> 。现在,你需要输入正确的指令来安装 GRUB 开机纪录到硬碟中。
原始码 7: 激活 GRUB shell
# grub
注意: 如果你的系统有软碟机,可以在上面的指令加入 --no-floppy 选项来避免 grub 侦测 (不存在的) 软碟机。
在设定范例档中我们想要安装 GRUB 让他可以从开机分割区 /dev/hda1 读取资讯,还有安装 GRUB 开机纪录到硬碟的 MBR (主开机纪录) 让我们打开电脑后所看到的第一个东西就是 GRUB。当然,如果你有依照安装时的范例设定档,依据你的设定改变指令。
GRUB 的自动完成技巧可以在 GRUB 内使用。例如说,如果你输入 "root (" 然后按下 TAB,你会看到装置列表(例如说 hd0)。如果你输入 "root (hd0," 再按下 TAB,你会看到所有可以选择的分割区列表(例如说 hd0,0)。
藉着使用 tab 自动完成,设定 GRUB 不再是那么困难了。所以现在继续设定 GRUB 吧
原始码 8: 安装 GRUB 到 MBR
grub> root (hd0,0) (指定你的 /boot 分割区位置)
grub> setup (hd0) (安装 GRUB 到 MBR)
grub> quit (离开 GRUB shell)
注意: 如果你想要安装 GRUB 到某一个分割区而不是 MBR,你需要改变 setup 指令指向正确的分割区。例如说,你想要把 GRUB 安装到 /dev/hda3,那指令就变成 setup (hd0,2)。然而很少使用者需要知道这个。
如果您有关于 GRUB 的问题,请参考 GRUB FAQ 或是 GRUB 说明。
接着继续重开机系统。
10.c. 重新开机系统
离开 chrooted 的环境然后卸载所有挂载的分割区。接着输入你已经等很久的神奇指令: reboot。
原始码 9: 卸载所有分割区然后重新开机
# exit
# cd
# umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo
# reboot
当然,不要忘了移除可开机的 CD,否则等一下会从 CD 开机而不是你刚装好的 Gentoo 系统。
重开机好了以后,接着完成 完成你的 Gentoo 安装。
11. 最终化您的 Gentoo 安装
11.a. 使用者管理
加入一个每天使用的使用者
在 Unix/Linux 系统下登入成 root 工作是危险的,并应该尽量的避免。所以我们 强烈的建议您新增另一个使用者来应付日常的使用。
使用者所在的群组定义了使用者可以执行那些工作?底下的表格列出许多你会想用的重要群组:
群组 说明
audio 可以存取音效装置
cdrom 可以直接存取光学储存装置(ex:光驱)
floppy 可以直接存取磁碟
games 可以玩游戏
usb 可以存取 USB 装置
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 桌面文件资源。
在 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 更新你的系统:
原始码 13: 更新你的系统
# emerge --update 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。以下为一个简短的列表:
原始码 1: 简短的可用 USE 参数
gtk - Adds support for x11-libs/gtk+ (The GIMP Toolkit)
gtk2 - Use gtk+-2.0.0 over gtk+-1.2 in cases where a program supports both.
gtkhtml - Adds support for gnome-extra/gtkhtml
guile - Adds support for dev-util/guile (interpreter for Scheme)
icc - Use the Intel C++ Compiler if the package supports it
icc-pgo - Enable PGO data generation or use when use icc.
imap - Adds support for IMAP
2.b. 使用 USE 参数
定义永久的 USE 参数
在我们希望您了解 USE 参数的重要性后,您现在需要定义您自己的 USE 参数了。
就如之前所提到的,所有的 USE 参数都是定义到 USE 的变数内。为了要方便使用者可以搜寻和选择 USE 参数,我们已经提供了 预设的 USE 设定。这个设定包含着我们认为适合 Gentoo 使用者常用的。预设的变数是定义在 make.defaults 档案。
你系统目前所使用的profile 是由 /etc/make.profile 的符号连结 profile 属于另一个更大的profile,最后形成了所有profile 的总和。最上层的 profile 是 base profile (/usr/portage/profiles/base)。
来看看预设的设定:
原始码 2: 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 gtk2 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 内定义类似以下的的变数:
原始码 3: /etc/make.conf 的范例 USE 设定
USE="-kde -qt ldap"
设定套件自己使用的 USE 设定
有时候你想对一个(或一组)套件使用一个 USE 设定,但是不希望影响到整个系统。为了达成这个,需要先建立 /etc/portage 目录(如果还建立的话),然后编辑 /etc/portage/package.use。
例如说,你不想要整个系统都有 berkdb 支持,但是你想要 mysql 支持,你可以加入:
原始码 4: /etc/portage/package.use 范例
dev-db/mysql berkdb
你当然可以明确关闭某个程式的 USE 设定。例如说,你不想要 PHP 支持 java:
原始码 5: /etc/portage/package.use 第二个范例
dev-php/php -java
定义暂时性的变数
有时候您会想要定义暂时性的变数。或许只使用那么一次。这样一来您就可以不用编辑 /etc/make.conf 两次(先设定,编译完再复原)您可以直接将 USE 定义成环境变数。记得,当你重新安装或升级这个程式(不管是只升级他或是升级全系统),你的改变会遗失!
以下的范例,我们将暂时从 USE 设定移除 java 来安装 mozilla。
原始码 6: 使用 USE 为环境变数
# USE="-java" emerge mozilla
自动 USE 参数
某些套件安装完成后,额外的 USE 参数如果你有明确关闭的话,会被自动启动。要查看完整的提供 USE 参数的清单,查看 /etc/make.profile/use.defaults及他上层 profile 的 use.defaults:
原始码 7: 简短版本的 /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. /etc/make.profile/use.defaults 承接的 USE 设定
3. 使用者在 /etc/make.conf 定义的 USE 设定
4. 使用者在 /etc/portage/package.use 定义的 USE 设定
5. 以环境变数的方式定义的 USE 设定变数
要查看最后的 USE 设定,执行 emerge --info。这将会看到所有相关的变数(包括 USE 变量)和 Portage 需要使用到的内容。
原始码 8: 执行 emerge --info
# emerge --info
让您的系统适应新的 USE 旗标
如果您有更改您的 USE 旗标,并且想将整个系统都套用新的设定,使用 emerge 的 --newuse 参数。
原始码 9: 重新编译您的系统
# emerge --update --deep --newuse world
接下来,执行 Portage 的 depclean 移除就系统上不需要的旧相依性套件。
警告: 执行 emerge --depclean 是一件非常危险的动作,请小心执行。请仔细确认列出来的套件有包含着您锁需要的套件。以下的范例我们将加入 -p 的参数来显示出将要被移除的列表清单。
原始码 10: 移除不需要的套件
# emerge -p --depclean
当 depclean 完成后,执行 revdep-rebuild 重新编译动态连结到已移除套件共享函式库的套件。revdep-rebuild 是 gentoolkit 套件的一部分;不要忘了先安装他。
原始码 11: 执行 revdep-rebuild
# revdep-rebuild
当这些都完成后,你的系统就正在使用新的 USE 设定了。
2.c. 套件相关 USE 设定
查看可用的 USE 设定
让我们使用 mozilla 的范例:它听取着什么 USE 关键字?要查看,我们使用 emerge 加上 --pretend 和 --verbose 参数:
原始码 12: 查看 USE 关键字
# emerge --pretend --verbose mozilla
These are the packages that I would merge, in order:
Calculating dependencies ...done!
[ebuild N ] net-www/mozilla-1.5-r1 +java +crypt -ipv6 -gtk2 +ssl +ldap
+gnome -debug +mozcalendar -mozaccess -mozxmlterm -moznoirc -moznomail
-moznocompose -moznoxft
除了emerge 以外还有别的软体可以完成类似查询的工作。事实上,我们有一个特别的套件叫做 equery。这是包含在 gentoolkit 的套件内。首先,安装 gentoolkit:
原始码 13: 安装 gentoolkit
# emerge gentoolkit
现在执行 equery 然后使用参数查看某个套件的 USE 关键字。举例来说 gnumeric 套件:
原始码 14: 使用 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 提供你他的状态:
原始码 8: 查看 ccache 状态
# ccache -s
在非 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 Howto 取得更多资讯。
安装预编套件
虽然 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 手册页找到:
作者: LiEn 发布时间: 2005-09-14
原始码 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 使用测试分支,在您的系统架构前加上 ~。
测试分支就如同他所说的 - 测试。如果一个套件在测试中,这代表发展者觉得他可以运作,但是还有详细的测试。你可以成为第一个发现错误的人,在这种状
举例来说,要选择 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 时排除类别/套件来达成这个功能。
预设上,rsync 会检查 /etc/portage/rsync_excludes 的内容(如果存在的话),里面包含了你不要 rsync 更新的类别或套件。
然而要注意的是这可能导致相依性问题,因为套件可能相依被排除的套件。
5.b. 加入非官方套件
定义 Portage Overlay 目录
你可以要求 Portage 使用非官方,但是以透过 Portage 树使用的 ebuild。建立一个新目录(例如说 /usr/local/portage)来存放其他人提供的 ebuild。使用和官方 Portage 树相同的目录架构!
然后在 /etc/make.conf 中定义 PORTDIR_OVERLAY 指向你使用的目录。现在当你使用 Portage 时,他也会将这些 ebuild 纳入考虑,而且下次你执行 emerge --sync 时不会移除/覆盖这些 ebuild。
5.c. 非 Portage 维护的软体
使用 Portage 和自己维护的软体
在某些情 Portage 自动完成这些过程,虽然是 Portage 已经提供这些软体了。已知的例子是核心原始码和 nvidia 驱动程式。你可以作一些设定让 Portage 知道某个套件已经手动装到系统上了。这个过程叫做 注入 而且透过 /etc/portage/profile/package.provided 档案 Portage 支援这个功能。
举例来说,如果你想要告诉 Portage vanilla-sources-2.6.11.6 你已经手动装好了,把底下几行加到 /etc/portage/profile/package.provided:
原始码 1: package.provided 范例
sys-kernel/vanilla-sources-2.6.11.6
6. Ebuild的应用方式
6.a. Emerge 与 Ebuild
ebuild 程式是 Portage 系统较低层的操控介面。你可以透过给予 ebuild 档案,使用这个程式去执行特定动作。例如,你可以单独执行各个 merge 步骤。
使用 ebuild 大多是为了开发;更多关于 ebuild 的资讯因此可以在 开发者手册中找到。然而,我们将解释在 merge 一个确切的软体名称时,什么 ebuild 动作会被 Portage 请求,还有如何执行一些 ebuilds 支援的后端配置。
6.b. 手动安装软体
抓取原始码 & 验证 checksum
当你使用 ebuild 程式且给他一个 ebuild 档案,他将验证所有内涵档案的 checksums 是否与 Manifest 附带的,或与 files/digest-<name>-<version> 档案中的 checksums 相同。这会在下载原始码之后执行。
使用 ebuild 抓取原始码, 请执行:
原始码 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,这代表可以轻松的支援新的网路介面和设定模组,而且同时和原来的保持相容性。
如果模组需要的套件已经安装,他就会自动载入。但是如果你指定一个还安装套件的模组,那你会收到一个错误讯息,告诉你要安装哪个套件。理想上,只有在你安装两个以上提供相同功能的套件,而且你比较喜欢某一个时,才需要用模组设定。
原始码 1: 模组优先权
# 想用 iproute2 而不是 ifconfig
modules=( "iproute2" )
# 你也可以为一个介面指定不同的模组
# 在底下的例子我们比较想用 udhcpc 而不是 dhcpcd
modules_eth0=( "udhcpc" )
# 你也可以指定不要用哪个模组 - 例如说你可能想
# 使用 linux-wlan-ng 来控制无线网路设定
# 但是你仍然想对每一个 ESSID 做设定
modules=( "!iwconfig" )
3.b. 网路介面管理
我们目前提供两种不同的网路管理程式:ifconfig 及 iproute2。你可以用这两个其中之一来做任何种类的网路设定。
ifconfig 是目前 Gentoo 预设使用的,并且包含在系统 profile 之中。iproute2 是更有威力及*性的套件,但是预设并不包含他。
原始码 2: 安装 iproute2
# emerge sys-apps/iproute2
# 如果两个都安装的话,使用 iproute2
modules=( "iproute2" )
因为 ifconfig 和 iproute2 都是做很类似的事,我们让这两个可以使用共同的基本设定。例如说底下两段程式码不管对那种都适用。
原始码 3: ifconfig 和 iproute2 范例
config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
# 我们也可以指定广播位址
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )
3.c. DHCP
DHCP 是一种从 DHCP 伺服器取得网路资讯(IP 地址,DNS 服务器,闸道器等等)的方法。这代表如果网路上有一个 DHCP 服务器,你只要告诉客户端使用 DHCP 然后他们就会自己把网路设好。当然,如果在使用 DHCP 前必需要用无线网路,ppp 等其他事的话你必需要去设定。
DHCP 功能可以由 dhclient,dhcpcd,pump 或是 udhcpc 提供。每一种 DHCP模组都有他的好处和坏处 - 底下是快速的简介。
DHCP 模块 套件 优点 缺点
dhclient net-misc/dhcp 由 ISC,和制作 BIND DNS 软体的同一批人做的。设定非常有*性。 设定相当复杂,软体非常肥大,办法从 DHCP 取得 NTP 服务器,预设不送主机名称。
dhcpcd net-misc/dhcpcd Gentoo 一直以来的预设套件,不依赖任何其他工具 不再被上游维护,有些时候很慢,当租约无限久时不会变成系统服务
pump net-misc/pump 轻巧,不依赖任何其他工具 不再被上游维护,不可靠,尤其是在透过数据机时,不能从 DHCP 取得 NIS 服务器
udhcpc net-misc/udhcp 轻巧 - 最小的 DHCP 客户端,为嵌入式系统而做的软体 未知 - 有任何套件预设使用他,不能定义三秒以上的 timeout
如果你安装一种以上的 DHCP 客户端,你需要指定用那一个 - 否则预设是有 dhcpcd 可以用的话就用他。
要送给 DHCP 客户端自订的选项,使用 module_eth0="..." (把 module 改成你在用的 DHCP 模块,例如说 dhcpcd_eth0)
我们尝试让 DHCP 相对来说不可知 - 因此在 dhcp_eth0 变数中支援下列指令。预设是不用任何一个。
* release - 释放 IP 让他可以重复使用
* nodns - 不要复写 /etc/resolv.conf
* nontp - 不要复写 /etc/ntp.conf
* nonis - 不要复写 /etc/yp.conf
原始码 4: /etc/conf.d/net 的 DHCP 范例
# 只有在你安装一种以上 DHCP 模组才需要
modules=( "dhcpcd" )
config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10" # 十秒后 Timeout
dhcp_eth0="release nodns nontp nonis" # 只取得位址
注意: dhcpcd,udhcpc 和 pump 预设会传送目前的主机名称给 DHCP 服务器,所以你不用去指定他。
3.d. ADSL 联机
首先我们要安装 ADSL 软件。
原始码 5: Install the rp-pppoe package
# emerge net-dialup/rp-pppoe
警告: baselayout-1.11.x 目前只支援 PPPOE。我们希望以后的版本可以支援 PPPOA。
现在要设定 eth0 为 ADSL 连接的网路介面,并且输入使用者名称。
原始码 6: 设定 eth0 使用 ADSL
config_eth0=( "adsl" )
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 地址
你不用安装任何东西就可以改变网路介面的 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 的数值,会结束网路介面的设定。如果 predown 回传不为 0 的数值,将会不允许继续这个网路介面的取消设定。
postassociate 函数会忽略回传值,因为如果他们有错误的话,也有什么要做的。
${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"
$ 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 使用测试分支,在您的系统架构前加上 ~。
测试分支就如同他所说的 - 测试。如果一个套件在测试中,这代表发展者觉得他可以运作,但是还有详细的测试。你可以成为第一个发现错误的人,在这种状
举例来说,要选择 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 时排除类别/套件来达成这个功能。
预设上,rsync 会检查 /etc/portage/rsync_excludes 的内容(如果存在的话),里面包含了你不要 rsync 更新的类别或套件。
然而要注意的是这可能导致相依性问题,因为套件可能相依被排除的套件。
5.b. 加入非官方套件
定义 Portage Overlay 目录
你可以要求 Portage 使用非官方,但是以透过 Portage 树使用的 ebuild。建立一个新目录(例如说 /usr/local/portage)来存放其他人提供的 ebuild。使用和官方 Portage 树相同的目录架构!
然后在 /etc/make.conf 中定义 PORTDIR_OVERLAY 指向你使用的目录。现在当你使用 Portage 时,他也会将这些 ebuild 纳入考虑,而且下次你执行 emerge --sync 时不会移除/覆盖这些 ebuild。
5.c. 非 Portage 维护的软体
使用 Portage 和自己维护的软体
在某些情 Portage 自动完成这些过程,虽然是 Portage 已经提供这些软体了。已知的例子是核心原始码和 nvidia 驱动程式。你可以作一些设定让 Portage 知道某个套件已经手动装到系统上了。这个过程叫做 注入 而且透过 /etc/portage/profile/package.provided 档案 Portage 支援这个功能。
举例来说,如果你想要告诉 Portage vanilla-sources-2.6.11.6 你已经手动装好了,把底下几行加到 /etc/portage/profile/package.provided:
原始码 1: package.provided 范例
sys-kernel/vanilla-sources-2.6.11.6
6. Ebuild的应用方式
6.a. Emerge 与 Ebuild
ebuild 程式是 Portage 系统较低层的操控介面。你可以透过给予 ebuild 档案,使用这个程式去执行特定动作。例如,你可以单独执行各个 merge 步骤。
使用 ebuild 大多是为了开发;更多关于 ebuild 的资讯因此可以在 开发者手册中找到。然而,我们将解释在 merge 一个确切的软体名称时,什么 ebuild 动作会被 Portage 请求,还有如何执行一些 ebuilds 支援的后端配置。
6.b. 手动安装软体
抓取原始码 & 验证 checksum
当你使用 ebuild 程式且给他一个 ebuild 档案,他将验证所有内涵档案的 checksums 是否与 Manifest 附带的,或与 files/digest-<name>-<version> 档案中的 checksums 相同。这会在下载原始码之后执行。
使用 ebuild 抓取原始码, 请执行:
原始码 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,这代表可以轻松的支援新的网路介面和设定模组,而且同时和原来的保持相容性。
如果模组需要的套件已经安装,他就会自动载入。但是如果你指定一个还安装套件的模组,那你会收到一个错误讯息,告诉你要安装哪个套件。理想上,只有在你安装两个以上提供相同功能的套件,而且你比较喜欢某一个时,才需要用模组设定。
原始码 1: 模组优先权
# 想用 iproute2 而不是 ifconfig
modules=( "iproute2" )
# 你也可以为一个介面指定不同的模组
# 在底下的例子我们比较想用 udhcpc 而不是 dhcpcd
modules_eth0=( "udhcpc" )
# 你也可以指定不要用哪个模组 - 例如说你可能想
# 使用 linux-wlan-ng 来控制无线网路设定
# 但是你仍然想对每一个 ESSID 做设定
modules=( "!iwconfig" )
3.b. 网路介面管理
我们目前提供两种不同的网路管理程式:ifconfig 及 iproute2。你可以用这两个其中之一来做任何种类的网路设定。
ifconfig 是目前 Gentoo 预设使用的,并且包含在系统 profile 之中。iproute2 是更有威力及*性的套件,但是预设并不包含他。
原始码 2: 安装 iproute2
# emerge sys-apps/iproute2
# 如果两个都安装的话,使用 iproute2
modules=( "iproute2" )
因为 ifconfig 和 iproute2 都是做很类似的事,我们让这两个可以使用共同的基本设定。例如说底下两段程式码不管对那种都适用。
原始码 3: ifconfig 和 iproute2 范例
config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )
# 我们也可以指定广播位址
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )
3.c. DHCP
DHCP 是一种从 DHCP 伺服器取得网路资讯(IP 地址,DNS 服务器,闸道器等等)的方法。这代表如果网路上有一个 DHCP 服务器,你只要告诉客户端使用 DHCP 然后他们就会自己把网路设好。当然,如果在使用 DHCP 前必需要用无线网路,ppp 等其他事的话你必需要去设定。
DHCP 功能可以由 dhclient,dhcpcd,pump 或是 udhcpc 提供。每一种 DHCP模组都有他的好处和坏处 - 底下是快速的简介。
DHCP 模块 套件 优点 缺点
dhclient net-misc/dhcp 由 ISC,和制作 BIND DNS 软体的同一批人做的。设定非常有*性。 设定相当复杂,软体非常肥大,办法从 DHCP 取得 NTP 服务器,预设不送主机名称。
dhcpcd net-misc/dhcpcd Gentoo 一直以来的预设套件,不依赖任何其他工具 不再被上游维护,有些时候很慢,当租约无限久时不会变成系统服务
pump net-misc/pump 轻巧,不依赖任何其他工具 不再被上游维护,不可靠,尤其是在透过数据机时,不能从 DHCP 取得 NIS 服务器
udhcpc net-misc/udhcp 轻巧 - 最小的 DHCP 客户端,为嵌入式系统而做的软体 未知 - 有任何套件预设使用他,不能定义三秒以上的 timeout
如果你安装一种以上的 DHCP 客户端,你需要指定用那一个 - 否则预设是有 dhcpcd 可以用的话就用他。
要送给 DHCP 客户端自订的选项,使用 module_eth0="..." (把 module 改成你在用的 DHCP 模块,例如说 dhcpcd_eth0)
我们尝试让 DHCP 相对来说不可知 - 因此在 dhcp_eth0 变数中支援下列指令。预设是不用任何一个。
* release - 释放 IP 让他可以重复使用
* nodns - 不要复写 /etc/resolv.conf
* nontp - 不要复写 /etc/ntp.conf
* nonis - 不要复写 /etc/yp.conf
原始码 4: /etc/conf.d/net 的 DHCP 范例
# 只有在你安装一种以上 DHCP 模组才需要
modules=( "dhcpcd" )
config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10" # 十秒后 Timeout
dhcp_eth0="release nodns nontp nonis" # 只取得位址
注意: dhcpcd,udhcpc 和 pump 预设会传送目前的主机名称给 DHCP 服务器,所以你不用去指定他。
3.d. ADSL 联机
首先我们要安装 ADSL 软件。
原始码 5: Install the rp-pppoe package
# emerge net-dialup/rp-pppoe
警告: baselayout-1.11.x 目前只支援 PPPOE。我们希望以后的版本可以支援 PPPOA。
现在要设定 eth0 为 ADSL 连接的网路介面,并且输入使用者名称。
原始码 6: 设定 eth0 使用 ADSL
config_eth0=( "adsl" )
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 地址
你不用安装任何东西就可以改变网路介面的 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 的数值,会结束网路介面的设定。如果 predown 回传不为 0 的数值,将会不允许继续这个网路介面的取消设定。
postassociate 函数会忽略回传值,因为如果他们有错误的话,也有什么要做的。
${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"
作者: LiEn 发布时间: 2005-09-14
晕,看来我是多此一举,在gentoo.linuxsir.org里有部分相拟内容。
作者: LiEn 发布时间: 2005-09-14
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28