有关Gentoo Linux的安装

宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述有关Gentoo Linux的安装相关的知识,希望能为你提供帮助。
1. 有关Gentoo Linux的安装1.a. 介绍
欢迎!
首先,欢迎使用Gentoo Linux系统!你将进入选择和性能的世界中。Gentoo处处给用户提供选择。当安装Gentoo时,这点你会经常感受到。你可以选择自己编译多少软件,可以选择怎样安装Gentoo,可以选择使用什么系统日志程序等等。
Gentoo是一个快速和现代的半发行版,设计理念干净灵活。Gentoo是由无数的自由软件编译而成,决不会向用户隐瞒什么。 Portage,Gentoo使用的软件包管理系统,是用python编码而成,方便你简单的查看和修改源代码。Gentoo的软件包管理系统使用源代码 (虽然也包括对预编译软件包的支持),在配置系统行为时采用普通文本文件。换句话说,处处都是向你开放的。
理解Gentoo中的面向用户的选择理念是很重要的。我们不会强迫你作任何你不喜欢的事情,如果你觉的我有的话,请告诉我们。
安装过程的步骤如何?
Gentoo的安装可以看成是一个需要10步的程序,分别对应第2章到第11章,每一步都会带领你到一个新的状态:

  • 第一步后,你处于一个准备安装Gentoo的工作环境中
  • 第二步后,你的网络连接已经准备好(在某些情况下这步是可选的)
  • 第三步后,你的硬盘已经初始化完毕,准备好了Gentoo的小窝
  • 第四步后,你的安装环境已经准备好了,并准备chroot到一个新的系统环境中
  • 第五步后,在所有Gentoo安装中相同的核心的软件包已经安装完毕
  • 第六步后,你已经编译好了你的Linux内核
  • 第七步后,你已经写好绝大多数的Gentoo系统配置文件
  • 第八步后,必要的系统工具(你可以从列表中选择)已经安装完毕
  • 第九步后,你选择的启动程序已经安装和配置好,你可以登录进入你新的Gentoo系统中
  • 第十步后,你可以在你新的Gentoo系统环境中遨游了
每次你准备作出特定的选择时,我们都会尽力从正反两方面向你解释这些选择。我们也会从一个默认的选择继续,这将会在标题中以“默认:”来标识出来。千万不要认为默认的选择是我们推荐的选择,这些之是我们认为绝大多数用户会采纳的选择。
有些时候从一个可选的步骤继续下去,这样的步骤我们在标题中以“可选:”表示出来,也就是说它们不是安装Gentoo必须的。但是,一些可选的步骤是根据你前面的选择决定的,这种情况下,我们在你作出那个选择和这个可选步骤的前面都告诉你一声。
我的选择是什么?
你可以采用不同的方法来安装Gentoo。你可以下载我们的LiveCD(安装CD)开始安装,从一个已有发行版中安装,从一个启动CD(如 Knoppix)中安装,从一个网络启动环境中安装,从一个启动软盘中安装……这篇文档覆盖了使用我们的LiveCD和一些情况下的网络启动等安装方法。 对于其他安装方法,请阅读替代安装方案中获得帮助。如果你觉的这篇安装指南太详细了,那么请使用我们在文档资源里的与你的架构相关的快速安装指南。
你还有几种可能:你可以从底层编译你的整个系统,或者快速安装预编译软件包得到你的Gentoo系统。当然,你还可以有个折衷的处理,就是从一个初步准备好的系统开始,而不需要编译所有的东西。
困难?
如果你在安装(或者安装文档)中发现问题,请查看我们Gentoo发行工程项目的勘误,访问我们bug跟踪系统并检查这个bug是否已经提交。如果没有,请提交一份bug报告,这样我们可以注意到这个问题。不要惧怕负责(你的)bug的开发人员,通常情况下他们不会吃人的:-)
虽然你已经注意到了,这篇文档现在已经根据架构分开了,但是它也会包含对其他架构的引用。这是由于Gentoo手册的大部分使用源代码,而这些源代码在所有的架构中是通用的(防止重复工作和开发资源紧缺)。我们将尽可能小的避免混淆用户。
如果你不确认这个问题是否是一个用户相关的问题(尽管已经仔细阅读文档你仍然犯的一些错误)或者软件相关的问题(尽管已经仔细测试安装/文档我们仍然犯的 一些错误),你可以随时加入irc.gentoo.net里的#gentoo频道参加讨论。当然,我们任何时候都欢迎你 :)
如果你有与Gentoo相关的问题,请查看我们文档资源里的常见问题问答。你也可以查看我们论坛里的FAQs。如果你仍然找不到答案,你可以去在irc.freenode.net上的#gentoo频道讨论。 我们中的一些人可是一直坐在IRC里的异形哦 :-)
1.b. 预编译还是编译所有的?
Gentoo的参考平台是什么?
Gentoo参考平台,从小型的到GRP,都是用户(也就是你喽!)在Gentoo安装过程中可以用来加快安装进程的预编译软件包的一个快照。GRP包含 了一个可以完全正常工作的Gentoo安装时所需要的所有软件包。它们不仅在安装基本系统时可以加快速度,并且所有的大型编译(如KDE、xorg- x11、GNOME、OpenOffice、Mozilla……)也都有GRP软件包。
但是,Gentoo发行版永远都不会去维护这些预编译软件包。它们只在每个Gentoo发行时随带发行的快照,只是用于在短时间内安装出一个功能完整的系统环境。你然后可以在你的Gentoo环境中工作的同时后台更新你的系统。
Portage是怎样处理GRP软件包的
你的Portage树(一系列的ebuilds,也就是包含一个软件包的所有信息的文件,如软件包的描述、主页、源代码网址、编译说明、依赖性等)必须和GRP系列同步:已有ebuilds的版本必须和它们相对应的GRP软件包相符合。
由于这个原因,如果你要使用GRP的安装方法,你将必须使用一个Portage快照,而不是和最新的Portage树同步更新。
有可用的GRP软件包吗?
不是所有的架构都提供GRP软件包。这并不意味着GRP不支持这些架构,只是我们没有足够的资源来编译和测试这些GRP软件包。
现在,我们只提供如下架构的GRP软件包:
  • x86架构(x86,i686,pentium3,pentium4,athlon-xp)。注 意:x86和i686的GRP软件包(比如packages-x86-2004.2.iso)在我们的镜像中能找到,但是 pentium3,pentium4和athlon-xp的GRP软件包只能通过bittorent获得。
  • amd64架构(amd64)
  • sparc架构(sparc32,sparc64)
  • ppc架构(G3,G4,G5)
  • alpha架构(alpha,alphaev5,alphaev56,alphaev6)
  • mips架构
  • hppa架构
3. 配置你的网络3.a. 你可以不使用网络,但是……
谁可以不需要网络
根据你安装Gentoo时采用的介质,你可以或者不能不需要网络(或者因特网)继续。不不,我们是说真的,决不会玩弄你的:-)
一般来说你需要网络(和因特网)。但是,Gentoo也提供了不需要网络连接的安装方式,这个唯一的例外就是使用Gentoo通用LiveCD。
为什么我需要网络?
从因特网上安装Gentoo可以提供一个完全最新的Gentoo安装。你将可以基于最新的Portage树(我们提供一系列的软件包和软件管理工具)来安装,这也是网络安装收到欢迎的一个原因。但是,有些人不能或者不愿意使用一个活动的网络连接来安装Gentoo。
如果你正是处于这种情况,你将需要使用Gentoo通用LiveCD。这种LiveCD里包含有源代码、Portage树的一个快照和安装Gentoo基本系统和其他的工具。当然这种方法也有其代价,就是你不能获得最新的软件,当然这些区别会很小。 minimal.
如果你要使用这样的一种同样LiveCD,进行无网络安装,跳过这章的其余部分,从磁盘准备继续。否则,从下面的网络配置部分继续。
可选:配置代理
如果你需要通过代理进入因特网,你可能需要在安装中设置代理信息。设置代理是很简单的一件事清:你只需要定义一个包含代理服务器信息的变量即可。
大多数情况下,你可以使用服务器主机名来定义这个变量。作为例子,我们假设代理服务器叫做proxy.gentoo.org,端口为8080。
代码 1: 定义代理服务器
(如果代理通过HTTP协议)
# export http_proxy="http://proxy.gentoo.org:8080"
(如果代理通过FTP协议)
# export ftp_proxy="ftp://proxy.gentoo.org:8080"
(如果代理通过RSYNC协议)
# export RSYNC_PROXY="proxy.gentoo.org:8080"
如果你的代理需要用户名和密码,你应该给这个变量定义使用如下的语法格式:
代码 2: 给代理服务器变量添加用户名/密码
http://username:password@server
比如,对于我们前面的HTTP代理,我们将使用用户名“john”和密码“f00b_r”:
代码 3: 授权的代理
# export http_proxy="http://john:f00b_r@proxy.gentoo.org:8080"
3.b. 自动检测网络
可能已经可以工作?
如果你的系统处于一个有DHCP服务器的以太网中,很可能你的网络配置已经自动完成。如果确实如此,你应该可以使用到LiveCD里很多网络相关的命令如ssh、scp、ping、irssi、wget和links等。
如果网络已经配置好了,命令/sbin/ifconfig应该列出除开lo等的网络接口,如eth0:
代码 4: /sbin/ifconfig列出工作中的网络配置
# /sbin/ifconfig
eth0Link encap:EthernetHWaddr 00:50:BA:8F:61:7A
inet addr:192.168.0.2Bcast:192.168.0.255Mask:255.255.255.0
inet6 addr: fe80::50:ba8f:617a/10 Scope:Link
UP BROADCAST RUNNING MULTICASTMTU:1500Metric:1
RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0
TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0
【有关Gentoo Linux的安装】collisions:1984 txqueuelen:100
RX bytes:485691215 (463.1 Mb)TX bytes:123951388 (118.2 Mb)
Interrupt:11 Base address:0xe800
测试网络
你可能想试着测试一下你的ISP的域名服务器(在/etc/resolv.conf里)和选择的一个网址,以确认一下你的数据包可以到达网络中,DNS域名解析也能正确工作等……
代码 5: 进一步测试网络
# ping -c 3 www.yahoo.com
你现在可以使用你的网络了吗?如果可以,你可以跳过这一节的其他部分,从磁盘准备继续。如果还不行,那实在倒霉,你还得继续努力了:-)
3.c. 自动配置网络
如果网络还不能立即工作,一些安装介质允许你使用net-setup(常规网络)或者adsl-setup(ADSL用户)或者pptp(PPTP用户,仅用于x86系统)。
如果你的安装介质不包含上述提到的任何一个工具,或者网络仍然不起作用,从手动配置网络继续。
  • 常规的以太网用户应该从默认:使用net-setup继续
  • ADSL用户应该从另一种办法:使用RP-PPPoE继续
  • PPTP用户应该从另一种办法:使用PPTP继续
默认:使用net-setup
如果网络没有自动配置好,最简单的办法是运行net-setup脚本来设置网络:
代码 6: 运行脚本net-setup
# net-setup eth0
net-setup将会问你一些关于网络环境的问题。当所有完成后,你应该就有了一个可以工作的网络连接,然后可以按照前面提到的办法测试一下你的网络。如果测试成功,祝贺你!你现在已经准备好安装Gentoo了,跳过这节的其他部分,从磁盘准备继续。
如果网络仍然不能工作,从手动配置网络继续。
另一种方法:使用RP-PPPoE
假设你需要使用PPPoE连接到因特网上,LiveCD(任何版本)里包含了方便设置的rp-pppoe。使用它提供的adsl-setup脚本可以配置网络连接。程序将会提示你输入连接到adsl调制解调器的以太网设备、用户名、密码、DNS服务器的IP地址和是否需要设置基本的防火墙。
代码 7: 使用rp-pppoe
# adsl-setup
# adsl-start
如果出现什么问题的话,查看/etc/ppp/pap-secrets或者/etc/ppp/chap-secrets来检查确认已经正确的输入用户名和密码,并要确认你使用的是正确的以太网设备。如果以太网设备不存在,你将必须加载准备的网络模块。那种情况下你应该从手动配置网络继续,那里我们解释了怎样加载正确的网络模块。
如果一切正常,从磁盘准备继续。
另一种方法:使用PPTP
如果你需要PPTP支持,你可以使用LiveCD提供的pptpclient。但是首先你得确认配置准确。编辑/etc/ppp/pap-secrets或者/etc/ppp/chap-secrets,使其包含正确的用户名/密码:
代码 8: 编辑/etc/ppp/chap-secrets
# nano -w /etc/ppp/chap-secrets
然后根据需要调整/etc/ppp/options.pptp:
代码 9: 编辑/etc/ppp/options.pptp
# nano -w /etc/ppp/options.pptp
当所有这些完成后,运行pptp(并带上你不能在options.pptp里设置的参数)来连接到服务器:
代码 10: 连接到一个拨号服务器
# pptp < server ip>
现在可以从磁盘准备继续。
3.d. 手动配置网络
加载准确的网络模块
当LiveCD启动时,它会尝试检测你的硬件设备并加载准确的内核模块(驱动)来支持这些硬件。大多数情况下,它会做的很漂亮。但是,一些情况下,它可能没有自动加载你需要的模块。
如果net-setup或者adsl-setup失败了,那么有可能你的网卡没有立即检测到。这意味着你需要手动为它加载正确的内核模块。
使用ls来查看我们给网络提供了什么内核模块:
代码 11: 搜索提供的模块
# ls /lib/modules/`uname -r`/kernel/drivers/net
如果你找到一个适合你网卡的驱动,使用modprobe来加载这个内核模块:
代码 12: 使用modprobe来加载内核模块
(作为例子,我们加载模块pcnet32)
# modprobe pcnet32
然后使用ifconfig来检查网卡是否已经检测到。一个检测到的网卡会有类似如下的结果:
代码 13: 测试网卡的存在,成功!
# ifconfig eth0
eth0Link encap:EthernetHWaddr FE:FD:00:00:00:00
BROADCAST NOARP MULTICASTMTU:1500Metric: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)
但是如果你收到如下错误信息,那么你的网卡还是没有检测到:
代码 14: 测试网卡的存在,失败!
# ifconfig eth0
eth0: error fetching interface information: Device not found
如果在你的系统中有多个网卡名为eth0、eth1等。确认你要使用的网卡可以工作正常,并且在这篇文档里使用的都是准确的网卡。我们假设使用的网卡是eth0。
假设你现在网卡已经检测到了,你可以再次尝试使用net-setup或者adsl-setup(现在应该可以工作了),但是为了你们其中的一些“顽固分子”,这里我们将解释怎样手动配置网络。
根据你的网络设置来选择下面的章节:
  • 使用DHCP来自动设置IP
  • 如果你有一个无线网卡的话,无线网络的准备
  • 理解网络名词解释了对于网络你应该知道的信息
  • 使用ifconfig和route解释了怎样手动设置网络
使用DHCP
DHCP(动态主机配置协议)使得自动获得网络信息(IP地址、网络掩码、广播地址、网关、域名服务器等)成为可能。但这个只在你的网络中有一个DHCP服务器的情况下才可以使用这种方法。要通过一个网络接口自动获得这些网络信息,使用dhcpcd:
代码 15: 使用dhcpcd
# dhcpcd eth0
一些网络管理员需要你使用
DHCP服务器提供的主机名和域名。
这种情况下,使用
# dhcpcd -HD eth0
如果这个工作正常(尝试ping一些因特网上的服务器,如Google)的话,那么一切设置和准备完毕。你可以跳过这节余下的部分,从磁盘准备继续。
无线网络的准备
注释: 不是所有的LiveCD都由iwconfig这个命令。如果你的没有,仍然可以按照linux-wlan-ng项目里的说明获得这些扩展功能。
如果你使用的是一个无线(802.11)网卡,你可能在继续之前配置无线设置。使用iwconfig来查看当前你的网卡的无线设置,会出现类似如下的信息:
代码 16: 显示当前无线设置
# iwconfig eth0
eth0IEEE 802.11-DSESSID:"GentooNode"
Mode:ManagedFrequency:2.442GHzAccess Point: 00:09:5B:11:CC:F2
Bit Rate:11Mb/sTx-Power=20 dBmSensitivity=0/65535
Retry limit:16RTS thr:offFragment thr:off
Power Management:off
Link Quality:25/10Signal level:-51 dBmNoise level:-102 dBm
Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx
excessive retries:237 Invalid misc:350282 Missed beacon:84

注释: 一些无线网卡可能使用设备名wlan0而不是eth0。
对于大多数用户来说,这里可能只有两个重要的设置需要我们来修改:ESSID(aks无线网络名称)或者WEP密匙。如果ESSID和列出的访问点 (Access Point)地址已经是你的访问点,而你又没有在使用WEP,那么你的无线设置是正常的。如果你要改变你的ESSID,或者增加一个WEP密匙,你可以执 行以下命令:
代码 17: 修改ESSID和/或添加WEP密匙
(这将网络名称改为“GentooNode”)
# iwconfig eth0 essid GentooNode

(这设置了一个16进制的WEP密匙)
# iwconfig eth0 key 1234123412341234abcd

(这设置了一个ASCII密是,以“s:”开头)
# iwconfig eth0 key s:some-password
然后你可以使用iwconfig来确认你的无线设置。一旦无线可以正常工作,你可以按照下节(理解网络名词)描述的说明或者使用前面提到过的net-setup工具来设置IP级别网络选项。
理解网络名词
注释: 如果你知道你的IP地址、广播地址、网络掩码和域名解析服务器,那么你可以跳过这一节,从使用ifconfig和route继续。
如果上面的方法都失败了,你就得自己手动配置网络了。不要怕,这一点都不困难。但是我们先来给你解释一些网络名词,这样你将可以更好的根据你的需要来设置网络。当你阅读完这一小节的话,你将会理解什么时网关,网络掩码是用来做什么的,广播地址的格式是怎样的,和为什么你需要域名解析服务器。
在一个网络中,主机是由它们的IP地址(因特网协议地址)来标识的。这样的一个地址是由四个处于0到255之间的数字组合而成的,至少我们是这样感觉的。实际上,这样的一个IP地址是由32位字元(0和1)组成,让我们来看个例子:
代码 18: IP地址的样例
IP地址 (数字):192.168.0.2
IP地址 (字元):11000000 10101000 00000000 00000010
-------- -------- -------- --------
19216802
这样的一个IP地址在所有可以访问到的网络中必须是唯一的(也就是说,你能达到的主机都必须有唯一的IP地址)。要区别一个网络中不同的主机,以及这个网络外的主机,IP地址分为了两部分:网络部分和主机部分。
而分开这些的就是网络掩码,也是由一系列的1后面加上一系列的0。用1标识的那部分IP地址就是网络部分,其余的就是主机部分。通常,网络掩码也可以写成IP地址的形式。
代码 19: 网络/主机分离的例子
IP-address:19216802
11000000 10101000 00000000 00000010
Netmask:11111111 11111111 11111111 00000000
2552552550
+--------------------------+--------+
NetworkHost
换句话说,192.168.0.14是我们样例网络中的一部分,而192.168.1.2不是。
广播地址是你的网络中具有相同网络部分的IP地址,但是只有那些1为主机部分。你的网络中的每个主机都会监视这个IP地址,也就是说这个地址用来广播数据包。
代码 20: 广播地址
IP-address:19216802
11000000 10101000 00000000 00000010
Broadcast:11000000 10101000 00000000 11111111
1921680255
+--------------------------+--------+
NetworkHost
要想去因特网上冲浪,你必须知道网络中那台主机可以共享网络连接。这个主机就叫做网关。既然它是一台普通的主机,它也就有一个普通的IP地址(如192.168.0.1)。
我们前面提到过每个主机都有它自己的IP地址。如果你要通过一个名字(而不是IP地址)来访问这台主机,你需要一个能将名字(如dev.gentoo.org)转换为IP地址(如64.5.62.82)的服务。这样的一个服务就叫做域名服务。要使用这种服务,你必须在/etc/resolv.conf里定义必须的域名服务器。
有些情况下,你的网关也担当域名服务器的角色。否则的话,你将必须输入你的ISP提供的域名服务器。
总的说来,在继续配置之前你必须获得如下的信息:
网络项目
样例
你的IP地址
192.168.0.2
网络掩码
255.255.255.0
广播地址
192.168.0.255
网关
192.168.0.1
域名解析服务器
195.130.130.5, 195.130.130.133
使用ifconfig和route
设置网络包括了三个步骤。首先,我们使用ifconfig给自己分配一个IP地址。然后,我们使用route来设定路由的网关。在接着,我们在/etc/resolv.conf里设置域名服务器的IP地址后就结束了。
你需要有你的IP地址、广播地址和网络掩码才可以分配IP地址。然后执行下面的命令,其中将${IP_ADDR}换成你的IP地址,${BROADCAST}换为你的广播地址和${NETMASK}换成你的网络掩码:
代码 21: 使用ifconfig
# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up
现在使用route来设置路由,其中将${GATEWAY}换成你的网关的IP地址:
代码 22: 使用route
# route add default gw ${GATEWAY}
现在便可以用你最喜欢的编辑器(如我么使用nano)打开/etc/resolv.conf:
代码 23: 创建/etc/resolv.conf
# nano -w /etc/resolv.conf
然后按照下面的模板填入你的域名服务器的IP地址。确认将${NAMESERVER1}和${NAMESEVER2}换成准确的域名服务器地址:
代码 24: /etc/resolv.conf的模板
nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}
4. 磁盘准备4.a. 块设备的介绍
块设备
我们将来看看Gentoo Linux和Linux上磁盘相关方面的问题,包括文件系统、分区和块设备。然后,只有你熟悉了磁盘和文件系统的细节,你才将可以在Gentoo Linux的安装中正确的设置分区和文件系统哦。
我们将从介绍块设备开始。最为人所知的块设备很可能是Linux系统的第一个IDE驱动器,也就是/dev/hda。如果你的系统使用SCSI驱动器,那么你的第一个硬盘驱动器就是/dev/sda。
上面的块设备其实是磁盘的接口的抽象概念。用户编程时不需要担心你的驱动器是IDE、SCSI或者别的什么,也可以使用这些块设备和你的磁盘交流。程序可以简单的以一连串连续和随机存取的512字节块来定位存储。
分区
虽然理论上是可以用整个磁盘来放置你的Linux系统,但是实际的操作几乎很少如此。反而,整个磁盘将会被分为几个更小更方便管理的块设备。在x86系统上,它们被称作为分区。
分区分为三种:主分区、扩展分区和逻辑分区。
一个主分区是在MBR(主引导记录)上有其记录信息的分区。因为MBR很小(512字节),所以只能定义三个主分区(比如/dev/hda1到/dev/hda4。
一个扩展分区是一种特别的主分区(也就是扩展分区必须是四个可能主分区中的一个),它能包含更多的分区。这样的一个分区实际上并不存在,但是因为四个分区实在太少,为扩展分区表而又不会失去向后兼容能力,就引入了这个概念。
一个逻辑分区是扩展分区里的一个分区。它们的定义不是放在MBR里,但是在扩展分区里声明的。
高级存储
x86的LiveCD提供了对EVMS和LVM2的支持。EVMS和LVM2可以增加对你的分区设置的灵活性。在这个安装说明中,我们将集中于“常规”分区,但是了解可以支持EVMS和LVM2也是很有用的。
4.b. 设计分区表
默认的分区策略
如果你对为你的系统设计一个分区策略没什么兴趣的话,你可以使用我们在这本书里介绍的分区策略:
分区
文件系统
大小
描述
/dev/hda1
ext2
32M
启动分区
/dev/hda2
(swap)
512M
交换分区
/dev/hda3
ext3
Rest of the disk
根分区
如果你感兴趣于一个分区应该多大,或者你需要多少分区,继续读下去。否则从使用fdisk对你的磁盘分区继续。
多少?多大?
分区的数量主要根据你的环境所定。比如说,如果你有多个用户,你将会愿意使/home单独出来,这样不仅增加了安全性还方便备份。如果你安装Gentoo是用作邮件服务器,你的/var应该单独出来,因为它里面存储了所有的邮件。然后文件系统的选择将会提高系统的性能。游戏服务器将有一个单独的/pot,因为绝大多数的游戏服务器都安装在此,原因同/home的一样:安全性和备份。
就同你看到的,这很大程度上取决于你要达到的目标。单独的分区或者卷有如下优点:
  • 你可以为每个分区或者卷选择最好的文件系统
  • 如果一个废弃的工具连续的向一个分区或者卷写入文件,这个系统不会用光所有的磁盘空间
  • 如果需要,文件系统的检查的是件可以减少,因此多个检查可以并行进行(虽然这个优势在多磁盘比多分区中明显的多)
  • 通过只读、nosuid(可以忽略setuid的特性)、noexec(可以忽略可执行的特性)等挂载一些分区或者卷,可以增强安全性。
但是,多分区也有一个很大的缺点:如果没有合理配置,你可能导致在一个系统里导致一个分区过多的剩余空间而另一个分区没有空间。
作为分区的一个样例,我们给你看看一个示范笔记本(包含网站服务器、邮件服务器、gnome……)上20Gb磁盘的分区表:
代码 1: 文件系统使用样例
FilesystemTypeSizeUsed Avail Use% Mounted on
/dev/hda5ext3509M132M351M28% /
/dev/hda2ext35.0G3.0G1.8G63% /home
/dev/hda7ext37.9G6.2G1.3G83% /usr
/dev/hda8ext31011M483M477M51% /opt
/dev/hda9ext32.0G607M1.3G32% /var
/dev/hda1ext251M17M31M36% /boot
/dev/hda6swap516M12M504M2% < not mounted>
(还有2Gb的未分区空间留作后用)
这里/usr用的很充分(使用了83%),但是一旦所有的软件都已经安装了,/usr就不会继续增长下去了。对于/var来说,人们可能认为分配的空间太多了。但是,Gentoo是在/var/tmp/portage里编译所有的软件,因此你至少应该让/var在不编译大软件的情况下留有1G的剩余空间,而在编译KDE和OpenOffice.org时则需要3G的剩余空间才可以对你不会造成问题。
4.c. 使用fdisk对磁盘分区
下面的部分将会解释怎样创建前面提到的样例分区表,也就是:
分区
描述
/dev/hda1
启动分区
/dev/hda2
交换分区
/dev/hda3
根分区
根据你自己的意愿来改变你的分区表。
查看当前分区布局
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 BootStartEndBlocksIdSystem
/dev/hda1114105808+83Linux
/dev/hda2154926460082Linux swap
/dev/hda3507015876083Linux
/dev/hda4712184159818405Extended
/dev/hda5712091050808+83Linux
/dev/hda62103481050808+83Linux
/dev/hda73496262101648+83Linux
/dev/hda86279042101648+83Linux
/dev/hda990521849676768+83Linux

Command (m for help):
这个已分区的磁盘配置用来放置七个Linux文件系统(每个都有一个相对应的分区,以“Linux”出现)和一个交换分区(以“Linux swap”出现)。
删除所有分区
首先,我们将从这个磁盘上删掉所有已有的分区。输入d来删掉一个分区。比如,删掉已有的分区/dev/hda1:
代码 5: 删除一个分区
Command (m for help): d
Partition number (1-4): 1
这个分区已经准备删除。在你输入p以后将不再出现,但是直到你做的这些修改保存了,它才回被真正删除掉。如果你犯了点小失误,不想保存任何修改就退出,立即输入q并输入enter,你的分区就不会删除了。
现在,假设你确实要删掉你系统上所有的分区,重复的输入p来列出分区然后输入d和标号来删掉分区。最后,你将会得到一个什么都没有的分区表:
代码 6: 一个空的分区表
Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device BootStartEndBlocksIdSystem

Command (m for help):
现在,在内存中的分区表已经空了,我们将准备创建分区。我们将使用前面讨论过的默认分区策略。当然,如果你不想使用相同的分区策略,不要死板的按照这些说明来做!
创建启动分区
我们首先来创建一个小的启动分区。输入n来创建一个新的分区,然后输入p选择一个主分区,接着输入1来选择第一个主分区。当提示第一个扇区时,点击enter。当提示最后的扇区时,输入+32M来创建一个大小为32Mbyte的分区。
代码 7: 创建启动分区
Command (m for help): n
Command action
eextended
pprimary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (Hit 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 BootStartEndBlocksIdSystem
/dev/hda1114105808+83Linux
我们需要这个分区可以启动。输入a在这个分区上切换可启动标签。如果你再输入p,你将会注意到在“Boot”栏有一个*。
创建交换分区
现在我们来创建交换分区。要做这个,输入n创建一个新分区,然后输入p来告诉fdisk你需要一个主分区。然后输入2来创建第二个主分区,在这里也就是/dev/hda2。当提示第一个扇区时,点击enter。当提示最后一个扇区时,输入+512M来创建一个大小为512MB的交换分区。做完这些之后,输入t来设定分区类型,2来选择你刚才创建的分区,然后输入82将分区类型设置为“Linux Swap”。完成这些步骤后,输入p应该可以看到类似如下的分区表:
代码 9: 创建一个交换分区后的分区表
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 BootStartEndBlocksIdSystem
/dev/hda1 *114105808+83Linux
/dev/hda2158150652082Linux swap
创建根分区
最后,让我们来创建根分区。要做这个,输入n创建一个信分区,然后输入p来告诉fdisk你需要一个主分区。然后输入3来创建第三个主分区,在这里也就是/dev/hda3。当提示第一个扇区时,点击enter。当提示最后一个扇区时,点击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 BootStartEndBlocksIdSystem
/dev/hda1 *114105808+83Linux
/dev/hda2158150652082Linux swap
/dev/hda38238762869020083Linux
保存分区表
输入w保存分区表和退出fdisk。
代码 11: 保存并退出fdisk
Command (m for help): w
现在你的分区已经创建完成,你可以从创建文件系统继续。
4.d. 创建文件系统
简介
现在分区已创建完成,该到给它们文件系统的时候了。如果你并不关心要选择什么样的文件系统,对本书中的默认设置很满意的话,从给分区创建文件系统继续。否则,继续读下去,学习已有文件系统的相关知识……
文件系统?
Linux内核支持各种各样的文件系统,我们着里将解释ext2、ext3、ReiserFS、XFS和JFS,因为这些文件系统在Linux系统中很常见的。
ext2是一个可靠的真正的文件系统,但不支持元数据日志功能,这意味着启动时的日常文件系统检查将会消耗比较多的时间。现在已经有了很多 新一代的日志文件系统可供选择,它们在稳定性检查时非常快,在和同等的非日志文件系统比较中越来越受到大家的喜爱。在启动系统时碰巧文件系统处于不稳定状 态时,日志式文件系统可以防止出现长时间的延迟。
ext3就是ext2文件系统的日志式版本,提供了用于快速恢复的元数据日志功能和其他的增强日志模式(如全数据和顺序数据日志)。 ext3是一个很好的可靠的文件系统,它有一个额外的杂乱b-tree检索选项,使得在几乎任何情况下都可以有很高的性能。一句话,ext3确实是个很优 秀的文件系统。
ReiserFS是一个基于B*-tree的文件系统,在处理小文件(小于4k的文件)时,相比较ext2和ext3来说,有极其优秀的表 现,常常是它们的10到15倍的性能表现。ReiserFS调整能力极强,也由元数据日志功能。对于高于2.4.18版本的内核来说,ReiserFS是 一个可靠和有用的文件系统,可以同时用于多种用途和如大文件系统、小文件很多、大文件和包含极大量文件的文件夹等极端例子中。
XFS是一个具有稳定和对可伸缩性加强的元数据日志功能的文件系统。我们只在使用高端SCSI和/或纤维通道存储(fibre channel storage)和不稳定电源供应这些情况下推荐使用这个。因为XFS在RAM中进行了强劲的流量缓冲,设计不合理的程序(那些在往磁盘写入文件时没有进 行合理预测危险的程序,现在很多程序都属于此类)在系统不稳定时会对数据处理失去控制。
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
现在为你新创建的分区(或者扩展卷)创建文件系统。
激活交换分区
mkswap是用来初始化交换分区的命令:
代码 13: 创建交换分区标识
# mkswap /dev/hda2
使用swapon来激活这个交换分区:
代码 14: 激活交换分区
# swapon /dev/hda2
现在已经创建并激活交换空间了。
4.e. 挂载
现在你的分区已经初始化并都使用了一个文件系统,该到挂在这些分区的时候了。使用mount命令来做这个。当然不要忘了给每个你创建的分区创建必要的挂载文件夹。作为一个例子,我们来挂载根分区和启动分区:
代码 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。我们首先创建挂载点/mnt/gentoo/proc,然后挂载上这个文件系统:
代码 16: 创建挂载点 /mnt/gentoo/proc
# mkdir /mnt/gentoo/proc
# mount -t proc none /mnt/gentoo/proc
5. 安装Gentoo安装文件5.a. 安装一个Stage包
正确的设置日期/时间
在继续之前,你需要检查和更新一下你的系统日期/时间。一个配置错误的时钟可能在将来导致很奇怪的结果。
运行date确认一下当前时间:
代码 1: 确认日期/时间
# date
Sun Apr 25 16:21:18 CEST 2004
如果日期/时间显示错误,使用date MMDDhhmmYYYY语句(M是月份,D是日期,m是分钟,Y是年份)更新它。比如说,设定时间为2004年4月25日16时21分:
代码 2: 设定日期/时间
# date 042516212004
做出你的选择
下一步你需要做的是在你的系统上安装一个你所选择的stage包。你可以从因特网上下载一个需要的包,或者如果你从Gentoo的通用LiveCD启动的话就从LiveCD里复制过去一个。
  • 默认:使用从因特网上下载的Stage
  • 替换办法:使用LiveCD里的一个Stage
5.b. 默认:使用从因特网上下载的Stage
下载Stage包
进入你将文件系统所挂载的Gentoo的挂载点(很可能是/mnt/gentoo):
代码 3: 进入Gentoo挂载点
# cd /mnt/gentoo
根据你的安装介质不同,你可以用已有的几种工具去下载一个stage。如果你有lynx,这样你可以马上浏览网页Gentoo镜像列表选择一个离你最近的镜像。然后选择文件夹releases/,根据你的架构(如x86)和Gentoo版本(如2004.1)选择,只到进入stages文件夹。那里你将看到你的架构的所有已有的stage文件。选择一个,并输入D来下载。完成下载后,输入Q退出浏览器。
注释: Gentoo Hardened stage包(用于x86架构上)是2004.0发行版的一部分。

代码 4: 使用lynx浏览镜像列表
# lynx http://www.gentoo.org/main/en/mirrors.xml
如果你没有lynx,那你应该使用links2来处理。links2并lynx更强大,但却有些小问题。其中的一个就是它不能使用我们前面声明的proxy变量。如果你许要设置一个代理服务器,使用links2 -http-proxy proxy.server.com:8080代替。然后,既然links2和lynx是相似的,你可以按照使用lynx一样的步骤完成这个过程。
代码 5: 使用links2浏览镜像列表
(Without proxy)# links2 http://www.gentoo.org/main/en/mirrors.xml
(With proxy)# links2 -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml
如果你要检查下载的stage包的完整性,你可以使用md5sum,然后将其输出和镜像提供的MD5码对比。
代码 6: 检查一个stage包的完整性
# md5sum -c stage1-x86-20040412.tar.bz2.md5
stage1-x86-20040412.tar.bz2: OK
解开Stage包
下载解开下载到你系统的stage包。我们使用GNU的tar命令来完成,这是最简单的方法:
代码 7: 解开stage
# tar -xvjpf stage?-*.tar.bz2

注释: 你可以忽略任何有关./proc的警告"No such file for directory"。还有,"Error exit delayed from previous errors"这样的信息也可以忽略。
确保你使用和我们一样的命令参数(-xvjpf)。x表示解开(Extract),v表示详细信息(Verbose)(这个是可选的),j表示用bzip2解压缩,p表示保留权限还有f表示我们要解开一个文件,而不是一个标准输入。
stage安装完后,从安装Portage继续。
5.c. 替代办法:使用LiveCD里的一个stage
解开Stage包
CD里的stage都放在/mnt/cdrom/stages文件夹里。使用ls查看里面存在的stage列表:
代码 8: 列出已有的stage
# ls /mnt/cdrom/stages
如果系统回应表示错误,你可能需要先把CD-ROM挂载上:
代码 9: 挂载CD-ROM
# ls /mnt/cdrom/stages
ls: /mnt/cdrom/stages: No such file or directory
# mount /dev/cdroms/cdrom0 /mnt/cdrom
# ls /mnt/cdrom/stages
然后进入你的Gentoo挂载点(一般情况下是/mnt/gentoo):
代码 10: 进入文件夹/mnt/gentoo
# cd /mnt/gentoo
现在我们解开你选择的stage包。我们将使用GNU tar工具做这个。确认你使用了相同的命令参数(-xvjpf)!在下面的例子中,我们解开stage包stage3-< subarch> -20040412.tar.bz2。记住将包的名字换成你的stage的名字。
代码 11: 解开stage包
# tar -xvjpf /mnt/cdrom/stages/stage3-< subarch> -20040412.tar.bz2

注释: 你可以忽略任何有关./proc的警告"No such file for directory"。还有,"Error exit delayed from previous errors"这样的信息也可以忽略。
stage安装完后,从安装Portage继续。
5.d. 安装Portage
有无网络?
如果你没有一个可以使用的网络连接,你必须使用我们的LiveCD提供的一个portage快照。如果后面你要使用预编译的软件包和加快安装速度,你必须使用LiveCD提供的portage快照。其他的用户则可以等会使用emerge下载一个完全新的Portage树。
从下面一个正确的地方继续:
  • 从LiveCD中安装一个Portage快照和源代码(用于无网络安装或者GRP安装)
  • 配置编译选项(所有其他的安装方法)
从LiveCD中安装一个Portage快照和源代码
在通用LiveCD里有一个Portage的快照。你读到这些,我们可以假设你正在使用这种LiveCD。要安装这个快照,可以看看/mnt/cdrom/snapshots里有什么快照:
代码 12: 查看文件夹/mnt/cdrom/snapshots的内容
# ls /mnt/cdrom/snapshots
现在按照下面的方法解开这个快照。再一次提起,确认你使用了正确的tar的命令参数。还有,参数-C是大写的C,而不是c。在下面这个例子中,我们使用portage-20040413.tar.bz2作为快照的名字。确认你已经换成你的快照的名字。
代码 13: 解开一个Portage快照
# tar -xvjf /mnt/cdrom/snapshots/portage-20040413.tar.bz2 -C /mnt/gentoo/usr
你还需要从CD里复制所有的源代码:
代码 14: 复制源代码
# mkdir /mnt/gentoo/usr/portage/distfiles
# cp /mnt/cdrom/distfiles/* /mnt/gentoo/usr/portage/distfiles/
现在你的Portage快照已经安装了,从配置编译参数继续。
5.e. 配置编译参数
介绍
你可以设定一些可以影响Portage行为的变量来优化Gento。这些变量都可以作为环境变量设置(使用export),但是不能保持不变。为保存你的设定,Portage给你提供了一个给Portage的配置文件/etc/make.conf。这就是我们现在要编辑的文件。
注释: 所有可以使用的变量的带注释的列表可以在/mnt/gentoo/etc/make.conf.example里找到。你只需要设定里面提到的这些变量,就可以成功完成Gentoo的安装。
打开你最喜欢的编辑器(这个指南中我们使用nano),这样我们可以替换我们将要讨论的优化变量。
代码 15: 打开/etc/make.conf
# nano -w /mnt/gentoo/etc/make.conf
你很可能已经注意到了,文件make.conf.example的结构就同平常文家一样:注释行都以"#"开头,其他行使用VARIABLE="content"语法定义变量。我们将要讨论一下其中的一些。
CHOST
警告: 虽然这个对非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和上面所有的(包括athlon)
i686-pc-linux-gnu
alpha

alpha-unknown-linux-gnu
ppc

powerpc-unknown-linux-gnu
sparc

sparc-unknown-linux-gnu
hppa
(generic)
hppa-unknown-linux-gnu
hppa
pa7000
hppa1.1-unknown-linux-gnu
hppa
pa8000 and above
hppa2.0-unknown-linux-gnu
mips

mips-unknown-linux-gnu
amd64

x86_64-pc-linux-gnu
CFLAGS和CXXFLAGS
变量CFLAGS和CXXFLAGS分别定义了gcc的C编译器和C++编译器的优化参数。虽然我们在这里进行了一般性的定义这些变量,如果你在编译每个软件时分别优化这些参数,你将获得最大的性能。这里的原因就是每个程序都是不一样的。
在make.conf里,你应该定义你认为是可以使你系统一般情况下最能有反应的优化参数。不要在这个变量山放一些测试性的设置;太多的优化也可能导致程序不正常(失败,或者更糟,不起作用)。
我们不会解释所有的这些优化选项。如果你想知道所有的,阅读GNU在线手册或者gccinfo页面(info gcc只能在一个可以工作的Linux系统起作用)。文件make.conf.example里也包含了不少的例子和信息;不要忘了也阅读它。
第一个设置就是参数-march=,这个指定了目标架构的名字。文件make.conf.example描述了可能的选项(以注释出现)。比如,对于x86的Athlon Xp架构来说:
代码 16: GCC的march设定
# AMD64用户不要使用athlon-xp
-march=athlon-xp
第二个设置是参数-O(是大写O,不是零),这个指定了gcc的分类优化选项。可选的分类有s(用于优化大小)、0(零,不优化)、1、2或者3以获得更多的速度优化参数(每类都包含前面的相同参数,并加上一些额外的)。比如说,对于分类2优化选项来说:
代码 17: GCC的O设定
-O2
其他的常用优化参数有-pipe(使用管道而不是临时文件来在不同stage的完成之间联系)和-fomit-frame-pointer(这个不会保存注册函数

    推荐阅读