1.a. 介绍
欢迎!
首先,欢迎使用Gentoo Linux系统!你将进入选择和性能的世界中。Gentoo处处给用户提供选择。当安装Gentoo时,这点你会经常感受到。你可以选择自己编译多少软件,可以选择怎样安装Gentoo,可以选择使用什么系统日志程序等等。
Gentoo是一个快速和现代的半发行版,设计理念干净灵活。Gentoo是由无数的自由软件编译而成,决不会向用户隐瞒什么。 Portage,Gentoo使用的软件包管理系统,是用Python编码而成,方便你简单的查看和修改源代码。Gentoo的软件包管理系统使用源代码 (虽然也包括对预编译软件包的支持),在配置系统行为时采用普通文本文件。换句话说,处处都是向你开放的。
理解Gentoo中的面向用户的选择理念是很重要的。我们不会强迫你作任何你不喜欢的事情,如果你觉的我有的话,请告诉我们。
安装过程的步骤如何?
Gentoo的安装可以看成是一个需要10步的程序,分别对应第2章到第11章,每一步都会带领你到一个新的状态:
每次你准备作出特定的选择时,我们都会尽力从正反两方面向你解释这些选择。我们也会从一个默认的选择继续,这将会在标题中以“默认:”来标识出来。千万不要认为默认的选择是我们推荐的选择,这些之是我们认为绝大多数用户会采纳的选择。
有些时候从一个可选的步骤继续下去,这样的步骤我们在标题中以“可选:”表示出来,也就是说它们不是安装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软件包:
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:[email protected]:8080" |
3.b. 自动检测网络
可能已经可以工作?
如果你的系统处于一个有DHCP服务器的以太网中,很可能你的网络配置已经自动完成。如果确实如此,你应该可以使用到LiveCD里很多网络相关的命令如ssh、scp、ping、irssi、wget和links等。
如果网络已经配置好了,命令/sbin/ifconfig应该列出除开lo等的网络接口,如eth0:
代码 4: /sbin/ifconfig列出工作中的网络配置 |
# /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:50:BA:8F:61:7A inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::50:ba8f:617a/10 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0 TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0 collisions:1984 txqueuelen:100 RX bytes:485691215 (463.1 Mb) TX bytes:123951388 (118.2 Mb) Interrupt:11 Base address:0xe800 |
测试网络
你可能想试着测试一下你的ISP的域名服务器(在/etc/resolv.conf里)和选择的一个网址,以确认一下你的数据包可以到达网络中,DNS域名解析也能正确工作等……
代码 5: 进一步测试网络 |
# ping -c 3 www.yahoo.com |
你现在可以使用你的网络了吗?如果可以,你可以跳过这一节的其他部分,从磁盘准备继续。如果还不行,那实在倒霉,你还得继续努力了:-)
3.c. 自动配置网络
如果网络还不能立即工作,一些安装介质允许你使用net-setup(常规网络)或者adsl-setup(ADSL用户)或者pptp(PPTP用户,仅用于x86系统)。
如果你的安装介质不包含上述提到的任何一个工具,或者网络仍然不起作用,从手动配置网络继续。
默认:使用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 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) |
但是如果你收到如下错误信息,那么你的网卡还是没有检测到:
代码 14: 测试网卡的存在,失败! |
# ifconfig eth0 eth0: error fetching interface information: Device not found |
如果在你的系统中有多个网卡名为eth0、eth1等。确认你要使用的网卡可以工作正常,并且在这篇文档里使用的都是准确的网卡。我们假设使用的网卡是eth0。
假设你现在网卡已经检测到了,你可以再次尝试使用net-setup或者adsl-setup(现在应该可以工作了),但是为了你们其中的一些“顽固分子”,这里我们将解释怎样手动配置网络。
根据你的网络设置来选择下面的章节:
使用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 eth0 IEEE 802.11-DS ESSID:"GentooNode" Mode:Managed Frequency:2.442GHz Access Point: 00:09:5B:11:CC:F2 Bit Rate:11Mb/s Tx-Power=20 dBm Sensitivity=0/65535 Retry limit:16 RTS thr:off Fragment thr:off Power Management:off Link Quality:25/10 Signal level:-51 dBm Noise level:-102 dBm Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:237 Invalid misc:350282 Missed beacon:84 |
注释: 一些无线网卡可能使用设备名wlan0而不是eth0。 |
对于大多数用户来说,这里可能只有两个重要的设置需要我们来修改:ESSID(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 -------- -------- -------- -------- 192 168 0 2 |
这样的一个IP地址在所有可以访问到的网络中必须是唯一的(也就是说,你能达到的主机都必须有唯一的IP地址)。要区别一个网络中不同的主机,以及这个网络外的主机,IP地址分为了两部分:网络部分和主机部分。
而分开这些的就是网络掩码,也是由一系列的1后面加上一系列的0。用1标识的那部分IP地址就是网络部分,其余的就是主机部分。通常,网络掩码也可以写成IP地址的形式。
代码 19: 网络/主机分离的例子 |
IP-address: 192 168 0 2 11000000 10101000 00000000 00000010 Netmask: 11111111 11111111 11111111 00000000 255 255 255 0 +--------------------------+--------+ Network Host |
换句话说,192.168.0.14是我们样例网络中的一部分,而192.168.1.2不是。
广播地址是你的网络中具有相同网络部分的IP地址,但是只有那些1为主机部分。你的网络中的每个主机都会监视这个IP地址,也就是说这个地址用来广播数据包。
代码 20: 广播地址 |
IP-address: 192 168 0 2 11000000 10101000 00000000 00000010 Broadcast: 11000000 10101000 00000000 11111111 192 168 0 255 +--------------------------+--------+ Network Host |
要想去因特网上冲浪,你必须知道网络中那台主机可以共享网络连接。这个主机就叫做网关。既然它是一台普通的主机,它也就有一个普通的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.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的一样:安全性和备份。
就同你看到的,这很大程度上取决于你要达到的目标。单独的分区或者卷有如下优点:
但是,多分区也有一个很大的缺点:如果没有合理配置,你可能导致在一个系统里导致一个分区过多的剩余空间而另一个分区没有空间。
作为分区的一个样例,我们给你看看一个示范笔记本(包含网站服务器、邮件服务器、gnome……)上20Gb磁盘的分区表:
代码 1: 文件系统使用样例 |
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来说,人们可能认为分配的空间太多了。但是,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 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”出现)和一个交换分区(以“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 Boot Start End Blocks Id System
Command (m for help): |
现在,在内存中的分区表已经空了,我们将准备创建分区。我们将使用前面讨论过的默认分区策略。当然,如果你不想使用相同的分区策略,不要死板的按照这些说明来做!
创建启动分区
我们首先来创建一个小的启动分区。输入n来创建一个新的分区,然后输入p选择一个主分区,接着输入1来选择第一个主分区。当提示第一个扇区时,点击enter。当提示最后的扇区时,输入+32M来创建一个大小为32Mbyte的分区。
代码 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): (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 Boot Start End Blocks Id System /dev/hda1 1 14 105808+ 83 Linux |
我们需要这个分区可以启动。输入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 Boot Start End Blocks Id System /dev/hda1 * 1 14 105808+ 83 Linux /dev/hda2 15 81 506520 82 Linux 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 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 |
保存分区表
输入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.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里复制过去一个。
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快照和源代码
在通用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(这个不会保存注册函数时不需要的frame指针)。
你定义CFLAGS和CXXFLAGS时,你应该是将不同的优化参数组合在一起,就同下面这个例子一样:
代码 18: 定义变量CFLAGS和CXXFLAGS |
CFLAGS="-march=athlon-xp -pipe -O2" # AMD64用户不应该使用athlon-xp CXXFLAGS="${CFLAGS}" # 给两个变量使用相同的设置 |
MAKEOPTS
你可以通过使用MAKEOPTS来定义安装一个软件时可以允许发生的并行编译数。建议是你系统的CPU数加上1。
代码 19: 给一个通用单CPU系统的MAKEOPTS |
MAKEOPTS="-j2" |
6.a. Chrooting
可选:选择镜像
如果你是从一个Gentoo LiveCD启动的,你可以使用mirrorselect来更新/etc/make.conf,使得下载Portage和源代码可以使用更快的镜像(当然是在你有一个可以工作的网络环境的条件下):
代码 1: 选择快速的镜像点 |
# mirrorselect -a -s4 -o | grep -ve '^Netselect' >> /mnt/gentoo/etc/make.conf |
如果因为某些原因,mirrorselect失败了,不要惊慌。这一步完全是供选择的,默认的值也已经够了。
复制DNS信息
在我们进入新的环境之前还有一件事清要做,那就是复制/etc/resolv.conf里的DNS信息。你需要做这一步以确保进入新的环境后网络仍然可以工作。/etc/resolve.conf里包含了你的网络所需的域名解析服务器。
代码 2: 复制DNS信息 |
(参数"-L"是必须的,确保不是复制一个符号链接过去) # cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf |
进入新的环境
现在,所有的分区已经初始化过了,基本的环境也已经安装了,该到使用chrooting进入我们新安装的环境里了。这意味着我们从当前的安装环境(LiveCD或者其他的安装介质)转移到你的安装系统(也就是初始后的分区)。
这个chrooting过程三步可以完成。首先,我们使用chroot将根目录从/(在安装介质上的)转移到/mnt/gentoo(你的分区上)。然后我们将使用env-update来创建一个新的环境,主要是创建环境变量。最后我们使用source将这些变量载入内存中。
代码 3: Chrooting到一个新的环境 |
# chroot /mnt/gentoo /bin/bash # env-update * Caching service dependencies... # source /etc/profile |
恭喜!你现在已经进入你自己的Gentoo Linux环境里了。当然远未结束,这也是为什么安装过程还有一些章节:-)
可选:更新Portage
如果在上一节中,你还没有安装一个Portage的快照,你必须从因特网上下载一个最近的Portage树。emerge sync就是做这个的。其他的用户应该跳过这一节从配置USE变量继续。
代码 4: 更新Portage |
# emerge sync |
Portage使用RSYNC协议来更新Portage树。如果上述命令由于你的防火墙设置的原因失败了,使用emerge-webrsync来通过一个普通的HTTP协议下载和安装一个portage快照。
代码 5: 使用emerge-webrsync更新portage |
# emerge-webrsync |
如果你收到一个新版的portage发行和你应该更新你的Portage的警告,你应该忽略这个。在你安装过程的后面将会更新你的Portage。
配置USE变量
USE是Gentoo提供给其用户的一个非常有用的变量。一些程序可以带上或者不带上对某些选项的 支持来编译。比如说,有些程序可以带上gtk的支持来编译,或者带上qt的支持。其他的可以带上或者不带上SSL的支持。一些程序甚至可以带上 frambuffer的支持(svgalib)而不是X11的支持(X-server)来编译。
大部分的发行版编译他们的软件时尽量的能带上更多的支持,这增加了程序的大小和启动时间,更不要提一大堆依赖性的问题。而在Gentoo中,你可以定义一个软件包编译时带上什么选项。这就是USE所做的。
在USE变量中,你定义了映射在编译选项的关键词。比如说,ssl将会在支持它的程序里编译时带上这个支持。-X将会去掉X-服务器的支持(注意前面的小提示)。gnome gtk -kde -qt将会在编译软件时带上gnome(和gtk)的支持,而不是kde(和qt)的支持,使得你的系统完全集中在GNOME上。
默认的USE设置放置在/etc/make.profile/make.defaults里。你在/etc/make.conf的修改将会覆盖默认的设置。如果你添加某参数到USE设置上,这个参数就会添加到默认的参数列表中。如果你从USE去掉某个参数(在这个参数前添加一个负号),这个参数就会从参数列表中去掉(如果这个参数在默认参数列表中)。不要改动/etc/make.profile文件夹里的任何东西;每次更新Portage的时候它都会被重新覆盖。
关于USE的一个完整的描述可以在Gentoo手册的第二部分第一段:USE参数中找到。你的系统中所存在的USE参数的完整描述可以在/usr/portage/profiles/use.desc找到。
代码 6: 查看已有的USE参数 |
# less /usr/portage/profiles/use.desc |
作为一个例子,我们给你看看一个支持DVD、ALSA和CD刻录的基于KDE的系统的USE设置:
代码 7: 打开/etc/make.conf |
# nano -w /etc/make.conf |
代码 8: USE设置 |
USE="-gtk -gnome qt kde dvd alsa cdr" |
可选:使用分布式编译
如果你有兴趣使用一系列的系统来帮助你编译你的系统,你可以参看我们的DistCC指南。通过使用distcc你可以使用几个系统的处理能力来帮助你的安装。
6.b. Stage1,Stage2和Stage3之间的不同之处
现在我们坐下来看看前面的步骤。我们前面要求过你从stage1、stage2或stage3作一个选择,并且警告你这个选择对以后的安装步骤是很重要的。就是这样的,现在就是你的选择决定以后步骤的第一个地方。
6.c. 从Stage1进行到Stage2
Bootstrapping的介绍
好,你决定从源码编译任何东西?好的,那么:-)
在这一步,你将会bootstrap你的Gentoo系统。这个将会花很长的时间2,但是结果将会是得到一个根据你特定机器和特定需求而从根本优化过的系统。
Bootstrapping意思是编译GNU C库、GNU编译器和几个其他的关键系统程序。
在开始bootstrap之前,我们列出两个你可能需要或者不需要的可选选项。如果你不想看这些,从Bootstrapping系统继续。
可选:减少编译时间
如果你要加快bootstrapping这个过程,你可以暂时的去掉java支持。这意味着GNU编译器和GNU C库编译时不带上对java的支持(这会大大减少编译的时间)。虽然这意味着你将不会有GNU Java编译器(gcj),这并不表明你的系统不同使用java程序和其他java相关的东西。
在开始bootstrap的脚本之前定义USE="-java"来暂时去掉对java的支持。
代码 9: 去掉对java的支持 |
# export USE="-java" |
千万记住在bootstapping后重新设定这个变量:
代码 10: 重新设定USE |
# unset USE |
可选:先下载源代码包
如果之前你没有将所有的源代码复制过来,那么boostrap的脚本将会下载所有必须的文件。如果你一直有网络链接,就不用谈论此事了:-) 但是如果你要先下载源代码,然后bootstrap你的系统(比如你不要让你的因特网链接在编译的时候一直开着),使用bootstrap脚本时带上-f选项,这个将会取得(也就是字母f)所有的源代码。
代码 11: 现在必须的源代码 |
# cd /usr/portage # scripts/bootstrap.sh -f |
Bootstrap你的系统
好了,拿起你的键盘,输入下面几个命令来开始bootstrap。然后去找点别的事情玩玩,因为这个步骤将会花掉很长的时间才能完成。
代码 12: Bootstrap你的系统 |
# cd /usr/portage # scripts/bootstrap.sh |
如果你以前已经在/etc/make.conf里改动过CHOST设置,你必须重新初始化一些变量,使gcc可以运行更快点:
代码 13: 重新初始化环境变量 |
# source /etc/profile |
现在可以继续下一个步骤从Stage2进行到Stage3了。
6.d. 从Stage2进行到Stage3
介绍
你读这个的时候,你已经有了一个bootstrap过的系统(不管你是因为在先前bootstrap过,还是使用stage2)。然后该到编译所有系统软件的时候了。
所有的系统软件?不是,不是这样的。在这步里,你将会编译没有其他选择的系统软件包。一些系统软件包有几个选择(如系统日志工具),而对于Gentoo来说,重视的就是选择,我们不会强求你什么的。
可选:查看要做的工作
如果你想知道将会安装什么软件,执行emerge --pretend system。这个会列出所有将会编译的软件。因为这个列表很长,你应该使用一个pager如less或者more,以方便可以前后查看这个列表。
代码 14: 查看'emerge system'将会做什么 |
# emerge --pretend system | less |
可选:下载源代码
如果你在继续之前想让emerge下载所有的源代码(比如你不想在编译所有软件时保持你的因特网连接一直开着),你可以使用emerge的--fetchonly选项,这个可以下载所有的源代码。
代码 15: 获得源代码 |
# emerge --fetchonly system |
编译系统
执行emerge system开始编译系统。然后去做点别的事情,因为这个步骤也需要花掉很长的时间来完成。
代码 16: 编译系统 |
# emerge system |
现在你可以安全的忽略有关更新配置文件的警告(运行etc-update)。你的Gentoo系统完全安装和启动后,一定要读读在保护配置文件上的文档。
.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内核指南中得到一个全面的有关列表和描述。
对于我们已有的x86架构的系统,在其他内核当中,vanilla-sources(linux内核开发者用作开发的默认内核源码)、gentoo-sources(带很多增强性能补丁的内核源码)、gentoo-dev-sources(带增强性能补丁和改进的2.6版本的内核源码)、xfs-sources(带最新XFS支持的内核源码)、gs-sources(用作服务器的内核源码)、gaming-sources(优化改进游戏性能的内核源码)、development-sources(2.6版本的vanlla内核源码),……
如果你使用的是对网络依赖很小的安装,你不可以选择所有的上述版本,因为我们只提供其中的一部分。如果是这种情况,你被限制而只能使用gentoo-sources、vanilla-sources、development-sources或gentoo-dev-sources。
选择你的内核源码,并用emerge安装。
代码 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.4.25-gentoo |
如果不是这样(比如,符号链接指向一个不同的内核源码),在继续之前改变这个符号链接:
代码 4: 改变内核源码的符号链接 |
# rm /usr/src/linux # cd /usr/src # ln -s linux-2.4.25-gentoo linux |
现在该到配置和编译你的内核源码的时候了。你可以使用genkernel来做,这个会编译出一个同liveCD相似的通用内核。我们先来解释一下“手动”配置,因为这是优化你的系统环境的最好方法。
如果你要手动配置你的内核,现在我们就可以从默认:手动配置继续。如果你要使用genkernel,那你则应该读读另一个选择:使用genkernel。
7.c. 默认:手动配置
介绍
手动配置内核常常被看作是每个Linux用户最难的一课。然而事实并非如此,配置完几次内核后,你甚至都不记得这麻烦;)
但是,有件事是真的:在手动配置你的内核之前,你必须对你的系统很了解。大部分的信息可以通过查看/proc/pci里的内容收集到(如果可以也可用lspci)。你也可以运行lsmod来看看LiveCD使用的内核模块(这会给你选择启用模块时一个非常好的提示)。
现在,进入你的内核源码所在文件夹,并执行make menuconfig。这会启动一个基于ncurses的配置菜单。
代码 5: 运用menuconfig |
# cd /usr/src/linux # make menuconfig |
你会看到几个配置选项。首先我们列出一些必须启用的选项(否则Gentoo不会运作,或者在没有其他办法下无法正常的运作)。
激活必须的选项
首先,激活development and experimental code/drivers的使用。你需要这个,否则一些非常重要的代码/驱动无法显示出来:
代码 6: 选择experimental code/drivers |
Code maturity level options ---> [*] Prompt for development and/or incomplete code/drivers |
确认是使用正确的处理器类型编译:
代码 7: 选择正确的处理器类型 |
Processor type and features ---> Subarchitecture Type (PC Compatible) ---> (根据你的系统改变) Processor family (Athlon/Duron/K7) ---> |
现在,到File Systems里,选择你使用的文件系统的支持。不要将他们编译为模块,否则你的Gentoo系统无法挂载你的分区。另外,也选上Virtual memory、/proc file system、/dev file system和Automatically mount at boot:
代码 8: 选择必须的文件系统 |
File systems ---> [*] Virtual memory file system support (former shm fs) [*] /proc file system support [*] /dev file system support (EXPERIMENTAL) [*] Automatically mount at boot
(除非你使用2.6内核,否则去掉下面这个) [ ] /dev/pts file system for Unix98 PTYs
(选择下面你系统所需的一个或多个的选项) <*> Reiserfs support <*> Ext3 journalling file system support <*> JFS filesystem support <*> Second extended fs support <*> XFS filesystem support |
注释: 2.6内核的用户将会在Pseudo filesystems(File systems的一部分)里找到上面提到的一些选项。 |
如果你使用PPPoE连接到因特网,或者你使用一个拨号的调制解调器,你将需要选中内核中的下面选项:
代码 9: 选择PPPoE所需的驱动 |
Network device support ---> <*> PPP (point-to-point protocol) support <*> PPP support for async serial ports <*> PPP support for sync tty ports |
注释: 2.6内核的用户将会在Networking suport(Device Drivers的一部分)中找到上面提到的选项。 |
这两个压缩选项并什么害处,但也不是绝对的需要,选项PPP over Ethernet也是这样的,它可能只会在配置为内核模式的PPPoE时被rp-pppoe用到。
如果你需要它,不要忘了在你的内核中包含对你网卡的支持。
如果你有一个支持多线程的Intel CPU,或者你有一个多CPU系统,你应该启用"Symmetric muti-processing support":
代码 10: 启用SMP支持 |
Processor type and features ---> [*] Symmetric multi-processing support |
如果你已经配置完内核,从编译和安装继续。
编译和安装
既然你的内核已经配置完了,该到编译和安装它的时候了。退出配置,并运行make dep && make bzImage modules modules_install:
代码 11: 编译内核 |
(对于2.4内核) # make dep && make bzImage modules modules_install
(对于2.6内核) # make && make modules_install |
内核编译完成后,将内核的镜像拷贝到/boot:
代码 12: 安装内核 |
# cp arch/i386/boot/bzImage /boot/kernel-2.4.25-gentoo # cp System.map /boot/System.map-2.4.25-gentoo |
将你的内核配置文件也拷贝到/boot也是很明智的,以防万一 :)
代码 13: 备份你的内核配置 |
# cp .config /boot/config-2.4.25-gentoo |
现在从安装不同的内核模块继续。
7.d. 另一个选择:使用genkernel
如果你正在读这个章节,你已经选择使用我们的genkernel脚本来给你配置内核。
既然你的内核源码树已经安装,可以用我们的genkernel脚本来为你自动编译一个内核。genkernel配置内核就同我们的LiveCD内核的配置几乎一样。这意味着你使用genkernel来编译你的内核,你的系统将会在启动时检测出你所有的硬件,这就同LiveCD一样。因为genkernel不需要任何内核手动配置,这对于一些不大适应编译自己内核的用户来说,是一个绝好的处理办法。
现在,让我们来看看如何使用genkernel。首先,安装genkernel:
代码 14: 安装genkernel |
# emerge genkernel |
现在,运行genkernel all来编译你的内核。这里我们要注意到,因为genkernel编译一个支持几乎所有硬件的内核,编译的完成将会占用很长的时间。
注意到,如果你的boot分区没有使用ext2或者ext3作为文件系统,你需要用genkernel --menuconfig all来手动配置你的内核,并在内核中加上你的文件系统的支持(不要编译为模块)。
代码 15: 运行genkernel |
# genkernel all |
一旦genkernel完成,一个模块很全的内核和一个initial root disk(initrd)将会被创建。我们将在文档后面的配置启动程序时使用这个内核和initrd。在写启动程序的配置文件时,就直接写下这个内核和initrd的名字。initrd将会在机器启动后和“真实”系统启动前运行,执行硬件的自动检测(就同LiveCD一样)。
代码 16: 检查新创建的内核镜像和initrd的名字 |
# ls /boot/kernel* /boot/initrd* |
现在,让我们再来执行一个步骤--安装hotplug,使得我们的系统更像LiveCD。当initrd自动检测到系统启动需要的硬件时,hotplug会自动检测到其他所有的东西。安装和启用hotplug,输入以下命令:
代码 17: 安装和启用hotplug |
# emerge hotplug # rc-update add hotplug default |
7.e. 安装不同的内核模块
安装额外的模块
如果准确的话,你应该给你系统其他的硬件安装ebuilds。这里有一些你可以安装的内核相关的ebuilds:
Ebuild |
目的 |
命令 |
nvidia-kernel |
给XFree86提供NVIDIA图形加速 |
emerge nvidia-kernel |
nforce-net |
NVIDIA NForce(2)主板集成的网卡 |
emerge nforce-net |
nforce-audio |
NVIDIA NForce(2)主板集成的声卡 |
emerge nforce-audio |
e100 |
Intel e100 Fast Ethernet Adapters |
emerge e100 |
e1000 |
Intel e1000 Gigabit Ethernet Adapters |
emerge e1000 |
emu10k1 |
Creative Sound Blaster Live!/Audigy支持 |
emerge emu10k1 |
ati-drivers |
给XFree86提供ATI Radeon 8500+/FireGL图形加速 |
emerge ati-drivers |
ati-drivers-extra |
ATI图形化工具 |
emerge ati-drivers-extra |
可能会意识到,其中的一些ebuilds会出现比较大的依赖性问题。为确认安装一个ebuilds需要什么软件包,可以使用emerge --pretend。比如,对于emu10k1软件包:
代码 18: 查看全面的软件包安装列表 |
# emerge --pretend emu10k1 |
如果你不喜欢要安装的软件包,使用emerge --pretend --verbose来看看检查依赖性时所用的USE参数:
代码 19: 查看USE参数的使用 |
# emerge --pretend --verbose emu10k1 ... [ebuild N ] media-sound/aumix-2.8 +gpm +nls +gtk +gnome +alsa -gtk2 |
在前面这个例子中,你可以看到,emu10k1的一个依赖的软件包(aumix)使用了gtk和gnome这两个USE参数,而gtk(依赖于XFree)也得跟着一起编译。
如果你不想所有的这些都被编译,取消所有的USE参数选择,如:
代码 20: 取消所有的USE参数来安装emu10k1 |
# USE="-gpm -nls -gtk -gnome -alsa" emerge --pretend emu10k1 |
如果你对所得的结果满意,去掉--pretend来开始安装emu10k1。
配置模块
你应该在/etc/modules.autoload.d/kernel-2.4(或者kernel-2.6)中列出你要自动加载的模块。如果你需要,也可以给这些模块添加额外的选项。
查看所有已有的模块,可以运行下面的find命令。不要忘了将"<kernel version>"换成你刚编译的内核的版本:
代码 21: 查看所有已有的模块 |
# find /lib/modules/<kernel version>/ -type f -iname '*.o' -or -iname '*.ko' |
比如,为自动加载3c59x.o模块,编辑kernel-2.4或者kernel-2.6文件,并输入模块的名字。
代码 22: 编辑/etc/modules.autoload.d/kernel-2.4 |
(2.4内核的例子) # nano -w /etc/modules.autoload.d/kernel-2.4 |
代码 23: /etc/modules.autoload.d/kernel-2.4 或者 kernel-2.6 |
3c59x |
现在运行modules-update来提交对/etc/modules.conf文件的修改:
代码 24: 运行modules-update |
# modules-update |
8.a. 文件系统信息
fstab是什么?
在Linux下,系统所要用的分区都必须列表于文件/etc/fstab中。这个文件包含了这些分区的挂载点(在系统目录树结构中的位置),挂载方法(特殊的选项)和挂载的时间(是否自动挂载,是否可以用户挂载等)。 etc.).
创建/etc/fstab
/etc/fstab使用一种特殊的语法格式。每行都包含七个由空白键(whitespace键、tab键或者两者的混合)分开的字段,每一个字段都有它自己的意思:
就这样用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 noauto 1 2 |
现在,为了改进性能,大部分用户会添加一个noatime挂载选项,这个由于不更新分区的存取时间(一般来说你并不需要它)而致使系统更快: Now, to improve performance, most users would want to add the noatime option as mountoption, which results in a faster system since access times aren't registered (you don't need those generally anyway):
代码 3: /etc/fstab中/boot行改进的一个例子 |
/dev/hda1 /boot ext2 noauto,noatime 1 2 |
如果我们继续,我们将添加下面三行来结束(给/boot、/和交换分区):
代码 4: /etc/fstab中的三行 |
/dev/hda1 /boot ext2 noauto,noatime 1 2 /dev/hda2 none swap sw 0 0 /dev/hda3 / ext3 noatime 0 1 |
为完成这个,你还应该给/proc、tmpfs(必须)和你的光驱(当然,如果你有其他的分区或驱动器,也可加上)添加一些挂载选项:
代码 5: /etc/fstab的一个完整例子 |
/dev/hda1 /boot ext2 noauto,noatime 1 2 /dev/hda2 none swap sw 0 0 /dev/hda3 / ext3 noatime 0 1
none /proc proc defaults 0 0 none /dev/shm tmpfs defaults 0 0
/dev/cdroms/cdrom0 /mnt/cdrom auto noauto,user 0 0 |
auto使得mount自动检测文件系统(对于可卸载的设备推荐使用,因为它们可以有不同的文件系统),user使得非超级用户可以使用CD驱动器。
现在就用上面的这个例子创建你的/etc/fstab。如果你是一个SPARC用户,你还应该添加下面一行当你的/etc/fstab:
代码 6: 添加openprom文件系统到/etc/fstab |
none /proc/openprom openpromfs defaults 0 0 |
如果你需要usbfs,添加下面一行到/etc/fstab:
代码 7: 添加usbfs文件系统到/etc/fstab |
none /proc/bus/usb usbfs defaults 0 0 |
重新看一下你的/etc/fstab,保存并退出,继续我们的安装。
8.b. 网络信息
主机名、域名等
用户的一个选择就是给他(她)的机器命名。这看起来很简单,但是很多的用户却有困难为它们的Linux机器找到一个很好的名字。为加快这个进度,你应该知道不管什么名字到以后都可以重新修改的。一般来说,你可以称你的机器为tux,域名为homenetwork。
我们在下一个例子中将会用到这些值。首先我们设定主机名:
代码 8: 设定主机名 |
# echo tux > /etc/hostname |
接着我们来设定域名:
代码 9: 设定域名 |
# echo homenetwork > /etc/dnsdomainname |
如果你有一个NIS域(如果你不知道这是什么,那你就没有),你也需要定义一个:
代码 10: 设定NIS域名 |
# echo nis.homenetwork > /etc/nisdomainname |
现在添加domainname脚本到默认运行级别:
代码 11: 添加domainname到默认运行级别 |
# rc-update add domainname default |
配置你的网络
在准备说“嘿,我们已经有了”之前,你应该记住在gentoo安装初期设置好网络也是为了安装。现在你将准备为你的Gentoo系统永久的配置好网络。
所有的网络信息可以在/etc/conf.d/net里收集到。这个文件使用直接但并对不知怎么手动配置网络的用户并不直观的语法。但是不用怕,我们将一一解释:)
首先用你喜欢的编辑器(这里以nano为例)打开文件/etc/conf.d/net:
代码 12: 打开/etc/conf.d/net准备编辑 |
# nano -w /etc/conf.d/net |
你找到的第一个变量是iface_eth0,它使用如下语法:
代码 13: iface_eth0语法 |
iface_eth0="<your ip address> broadcast <your broadcast address> netmask <your netmask>" |
如果你使用DHCP(自动获取IP),你应该设定iface_eth0为dhcp。如果你使用rp-pppoe(如用作ADSL拨号),设定其为up。如果你需要手动设置网络,而又对上述名词不熟悉,在没有完成这些之前请先阅读理解网络名词。
这样我们给出三个例子;第一个例子使用DHCP,第二个使用静态IP(192.168.0.2)和网络掩码为255.255.255.0,broadcast为192.168.0.255和网关为192.168.0.1,第三个只是激活给rp-pppoe使用的接口:
代码 14: /etc/conf.d/net的例子 |
(对于DHCP) iface_eth0="dhcp"
(对于静态IP) iface_eth0="192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0" gateway="eth0/192.168.0.1"
(对于rp-pppoe) iface_eth0="up" |
如果你有几个网络接口,创建额外的iface_eth变量,就像iface_eth1、iface_eth2等。变量gateway不需要重新设定,因为每台电脑只能使用一个网关。
现在可以保存配置并退出,以继续下面的安装和配置。
在启动时自动启用网络
为在启动时激活网络接口,你必须添加这些到默认的运行级别。如果你有PCMCIA接口,你应该跳过这块儿,因为PCMCIA接口是由PCMCIA启动脚本启动。
代码 15: 添加net.eth0到默认的运行级别 |
# rc-update add net.eth0 default |
如果你有几个网络接口,你需要为它们准确的创建net.eth1、net.eth2等启动脚本。你可以使用ln来做这个:
代码 16: 创建额外的启动脚本 |
# cd /etc/init.d # ln -s net.eth0 net.eth1 # rc-update add net.eth1 default |
写下网络信息
现在你需要告诉Linux有关你的网络。这个在/etc/hosts里定义并帮助将无法被你的域名解析服务器解析的主机名解析出IP地址。打比方说,如果你的内网由三台PC机组成: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 |
如果你的机器是单独的(或者域名解析服务器可以处理所有的域名解析),一行就足够了:
代码 19: 单机或者全解析的机器的/etc/hosts |
127.0.0.1 localhost |
保存并退出编辑器,继续下面的过程。
如果你没有PCMCIA,你可以从系统信息继续。对于PCMCIA用户,应该读读下面有关PCMCIA的信息。
可选:启用PCMCIA
注释: pcmcia-cs之存在于x86、amd64和ppc平台。 |
PCMCIA用户首先应该安装pcmcia-cs软件包。为避免这个时候装上XFree86,参数USE="-X"是必须的:
代码 20: 安装pcmcia-cs |
# USE="-X" emerge pcmcia-cs |
当pcmcia-cs装上后,添加pcmcia到默认的运行级别:
代码 21: 添加pcmcia到默认的运行级别 |
# rc-update add pcmcia default |
8.c. 系统信息
Gentoo使用/etc/rc.conf作为通用的系统范围的配置。打开/etc/rc.conf,然后好好看看这个文件里的注解:)
代码 22: 打开/etc/rc.conf |
# nano -w /etc/rc.conf |
就同你看到的,这个文件注解很丰富,可以帮助你设定必须的配置变量。对KEYMAP设定要特别注意:如果你选择错误的KEYMAP,你将会对你的键盘输入得到的结果很奇怪。
注释: 基于USB的SPARC系统和SPARC克隆机的用户可能需要选择一个i386的键盘布局(如“us”)来代替“sunkeymap”。 |
PPC在大部分系统上使用x86的键盘布局。需要在启动时使用ADB键盘布局的用户必须在内核中启用ADB keycode sendings,并在rc.conf设定一个mac/ppc键盘布局。
9.a. 作出你的选择
介绍
既然你的内核已经配置和编译好,必须的系统配置文件也已经正确的写好,该到为开机启动linux内核安装一个程序。这样一个程序叫做启动程序。对于x86架构来说,Gentoo Linux提供了GRUB和LILO。但是在我们安装其中之一时,我们首先告诉你怎样配置framebuffer(以防你需要它)。有了framebuffer,你可以在(有限的)有图形化性能(如使用Gentoo提供的漂亮的bootsplash图像)下运行Linux命令行。
可选:Framebuffer
如果你已经为你的内核配置好framebuffer支持(或者你使用genkernel的默认内核配置),如果要使用framebuffer,你还必须添加一个vga语句到你的启动程序配置文件。下面这个表给出了你可以使用的vga值。在这个配置例子中,我们使用800x600 @ 16bpp,也就是788。
|
640x480 |
800x600 |
1024x768 |
1280x1024 |
8 bpp |
769 |
771 |
773 |
775 |
16 bpp |
785 |
788 |
791 |
794 |
32 bpp |
786 |
789 |
792 |
795 |
记住(或者写下)你需要的值,后面一会儿你就会需要它。
现在从安装GRUB或者LILO继续。
9.b. 默认:使用GRUB
理解GRUB的专有名词
理解GRUB最严格的一部分是熟悉GRUB怎样引用磁盘驱动器和分区。你的Linux分区/dev/hda1在GRUB下叫做(hd0,0)。注意,在hd0,0周围的括号是必须的。
磁盘驱动器是从0开始计数而不是“a”,分区是从0开始计数而不是1。我们也注意到hd设备,只是算上硬盘,而不包括atapi-ide设备,如 CDROM光驱和刻录机。同样的结构也适用于scsi驱动器。(一般情况下,它们的计数会比ide设备高,除非在bios里设定从scsi设备启动。)
假设你有一个磁盘驱动器在/dev/hda,一个CDROM播放器在/dev/hdb,一个刻录机在/dev/hdd,没有SCSI磁盘驱动器;那么/dev/hdd7在这里就会翻译为(hd1,6)。这看起来很搞笑,但它确实如此,但是我们也可看到,GRUB提供了一个tab补全机制,这对有很多磁盘驱动器又被GRUB的计数理论所迷惑的人来说很方便。
我们感受完这些后,该到安装GRUB的时候了。
安装GRUB
安装GRUB之前首先emerge这个软件包:
代码 1: 安装GRUB |
# emerge grub |
输入grub开始配置GRUB。你将会到一个grub>命令提示符下。现在,你需要输入正确的命令来安装GRUB启动记录到硬盘上。
代码 2: 开始GRUB shell |
# grub |
注释: 如果你的系统没有任何软盘驱动器,在上个命令下添加--no-floppy选项,防止grub检测(不存在的)软盘驱动器。 |
在这个配置例子中,我们安装GRUB后,它将从boot分区/dev/hda1读出它的信息,把GRUB的启动记录安装到MBR上,这样我们打开电脑立刻看到的就是GRUB提示符。当然,如果你在安装过程中没有根据配置例子中所做的安装,需要类似的改变一下命令。
GRUB的tab补全机制可以在GRUB里使用。比如说,你输入“root (”再加上一个Tab键,你将会看到一个设备列表(如hd0)。如果你输入“root (hd0,”再加上一个Tab键,你将会得到所存在的分区列表供你选择(如hd0,0)。
通过使用tab补全,设置GRUB应该不会那么难了。现在,让我们继续配置GRUB:-)
代码 3: Installing GRUB in the 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会自动启动你最新建的内核。用nano(如果可以,也可用其他的编辑器)创建文件/boot/grub/grub.conf:
代码 4: 创建/boot/grub/grub.conf |
# nano -w /boot/grub/grub.conf |
现在我们继续写一份grub.conf。在下面你将会发现有两个这个例子可用的grub.conf,内核镜像是kernel-2.4.25-gentoo。我们只对第一个grub.conf详细注解一下。
代码 5: 适用于非genkernel用户的grub.conf |
# 这个列出默认的启动选项,0表示第一个,1表示第二个等等。 default 0 # 默认列表启动前需要等待的秒数。 timeout 30 # 非常漂亮和大的splash图像来增加点情趣:) # 如果你没有安装显卡,注解掉这一行 splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo Linux 2.4.25 # 内核镜像(或操作系统)所在的分区位置 root (hd0,0) kernel /kernel-2.4.25-gentoo root=/dev/hda3
# 下面三行只用于带有Windows操作系统的双启动。 # 在这个例子中,Windows位于/dev/hda6. title=Windows XP rootnoverify (hd0,5) chainloader +1 |
代码 6: 适用于genkernel用户的grub.conf |
default 0 timeout 30 splashimage=(hd0,0)/grub/splash.xpm.gz
title=Gentoo Linux 2.4.25 root (hd0,0) kernel /kernel-2.4.25-gentoo root=/dev/ram0 init=/linuxrc real_root=/dev/hda3 initrd /initrd-2.4.25-gentoo
# 只用于双启动 title=Windows XP root (hd0,5) chainloader +1 |
注释: 如果你使用不同的分区和/或者内核镜像,相应的进行调整。但是,要确保任何的GRUB设备(如(hd0,0))对应于挂载点,而不是根目录。换句话说,既然(hd0,0)是/boot,那么(hd0,0)/grub/splash.xmp.gz对应于/boot/grub/splash.xpm.gz。 |
如果你需要给内核传递其他的参数,只需简单的在内核命令后面加上就行。我们已经传递了一个选项(root=/dev/hda3或者real_root=/dev/hda3),但是你也可以传递别的。作为一个例子,我们给前面讨论过的framebuffer使用vga语句:
代码 7: 添加vga语句作为一个内核选项 |
title=Gentoo Linux 2.4.25 root (hd0,0) kernel /kernel-2.4.25-gentoo root=/dev/hda3 vga=788 |
genkernel用户应该只到他们的内核使用同LiveCD一样的启动选项。比如说,如果你有SCSI设备,你应该添加doscsi内核选项。
现在保存grub.conf文件并退出。到目前为止,GRUB已经全面的配置完毕,你可以从安装必须的系统工具继续。
如果你对GRUB有更多的问题,请参见GRUB常见问题回答或者GRUB手册。
9.c. 另一个选择:使用LILO
安装LILO
LILO,全名LInuxLOader,是一个可靠和真正的Linux启动程序。但是它缺乏一些GRUB有的特点(这也是为什么GRUB收到流行的原 因)。而LILO仍然使用的原因是因为在某些系统中,GRUB不能工作,而LILO可以。当然,它也经常使用到,因为一些人理解和习惯用它。总 之,Gentoo支持两者,而明显的你选择使用LILO。
安装LILO是一件轻而易举的事情,只需使用emerge。
代码 8: 安装LILO |
# emerge --usepkg lilo |
配置LILO
你必须创建/etc/lilo.conf来配置LILO。启动你最喜欢的编辑器(在这个手册里我们为保持一致性,使用nano)创建这个文件。
代码 9: 创建/etc/lilo.conf |
# nano -w /etc/lilo.conf |
在几个章节前,我们已经告诉你要记住你所创建的内核镜像的名字。在下面这个lilo.conf的例子中,我们假设内核镜像名字为kernel-2.4.25-gentoo。我们在这个例子中也使用同样的分区。这也分成两个部分:
代码 10: /etc/lilo.conf样例 |
boot=/dev/hda # 安装LILO到MBR prompt # 给用户选择其他启动选项的机会 timeout=50 # 在启动默认选项之前等待5秒钟 default=gentoo # 当时间过了后,启动“gentoo”选项 # 只用于你使用framebuffer的情况。否则去掉这一行: vga=788 # Framebuffer设置。根据你的喜好调整
# 适用于非genkernel用户 image=/boot/kernel-2.4.25-gentoo label=gentoo # 给这个启动选项一个名字 read-only # 根目录启动时只读。不要改变此项! root=/dev/hda3 # 根目录所在位置
# 适用于genkernel用户 image=/boot/kernel-2.4.25-gentoo label=gentoo read-only root=/dev/ram0 append="init=/linuxrc real_root=/dev/hda3" initrd=/boot/initrd-2.4.25-gentoo
# 下面两行仅用于带有Windows操作系统的双启动 # 在这个例子中,Windows位于/dev/hda6。 other=/dev/hda6 label=windows |
注释: 如果你使用不同的分区表和/或者内核镜像,相应的进行修改。 |
如果你要传递额外的选项给内核,在启动选项中添加一条append语句。作为一个例子,我们添加vga=788语句来启用framebuffer:
代码 11: 使用append来添加内核选项 |
image=/boot/kernel-2.4.25-gentoo label=gentoo read-only root=/dev/hda3 append="vga=788" |
genkernel用户应该知道他们的内核使用同LiveCD一样的启动选项。比如说,如果你有SCSI设备,你应该添加doscsi内核选项。
现在保存文件并退出。为完成LILO的安装和配置,你必须运行/sbin/lilo,这样LILO将会把/etc/lilo.conf应用到你的系统里(如把自己安装到磁盘里)。记住,每次你安装一个新的内核,你都得重新运行/sbin/lilo。
代码 12: 完成LILO的安装 |
# /sbin/lilo |
10.a. 系统日志工具
前面我们提到什么是stage3时,我们说过它包含了所有的必须的系统工具,以至于我们不能给我们的用户一个选择。我们也说过我们以后将会安装一些别的工具。现在,我们就准备开始了:)
你需要决定安装的第一个工具是给你的系统提供日志事务。Unix和Linux有非常优秀的日志能力的历史,只要你愿意,你可以在日志文件里记下你系统上发生的所有事情。这个通过系统日志工具来实现。
Gentoo提供了几个系统日志工具供你选择。这里有sysklogd(传统的系统日志伺服器)、syslog-ng(一个高级的系统日志工具)、metalog(一个可以高度配置的系统日志工具)。其他的也可能通过Portage得到,我们的软件包几乎每天都会有所增加。
如果你不知道选哪个,就使用syslog-ng,因为这个很强大,并且自带非常好的默认设置。
安装你选择的系统日志工具,只需emerge它,然后用rc-update添加其到默认的运行级别。下面这个例子就是安装syslog-ng。当然你可以换成你的系统日志工具:
代码 1: 安装一个系统日志工具 |
# emerge syslog-ng # rc-update add syslog-ng default ` |
10.b. 可选:Cron伺服器
下一个就是cron伺服器。虽然这个只是可选,也不是你系统必须的,但是安装一个是个不错的选择。但是什么是cron伺服器呢?伺服器执行计划的命令。如果你要有规律(比如说每天、每周或每月)的执行一些命令,这个将会很方便。
Gentoo提供了三个可选的cron伺服器:dcron、fcron和vixie-cron。就同安装一个系统日志工具一样安装其中一个。但是,dcron和fcron需要额外的配置命令,也就是crontab /etc/crontab。如果你不知道选择哪个,就使用vixie-cron。
我们对无网络安装只提供了vixie-cron。如果你需要安装其他的cron伺服器,你必须等会儿,在以后安装上。
代码 2: 安装一个cron伺服器 |
# emerge vixie-cron # rc-update add vixie-cron default (只在使用dcron或fcron时需要) # crontab /etc/crontab |
10.c. 文件系统工具
根据你使用的文件系统,你需要安装一个必须的文件系统工具(检测文件系统的完整性,创建额外的文件系统等)。
下面这个表列出了你使用一个特定的文件系统所需要的工具:
文件系统 |
工具 |
安装命令 |
XFS |
xfsprogs |
emerge xfsprogs |
ReiserFS |
reiserfsprogs |
emerge reiserfsprogs |
JFS |
jfsutils |
emerge jfsutils |
如果你不需要用rp-pppoe来连接到因特网上,从结束你的Gentoo安装继续。否则从可选:网络工具继续。
10.d. 可选:网络工具
如果你要使用rp-pppoe连接到因特网,你需要安装它。
代码 3: 安装rp-pppoe |
# USE="-X" emerge rp-pppoe |
使用USE="-x"将会阻止因为依赖性(rp-pppoe有一个可视化工具;如果你需要这些,你可以稍后在XFree安装后重新编译rp-pppoe,而安装和编译XFree将会花掉很长的时间)而安装XFree。
11.a. 用户管理
设定超级用户的密码
在你忘记之前,输入以下命令设定超级用户密码:
代码 1: 设定超级用户密码 |
# passwd |
如果你需要超级用户能够通过串行终端登录,添加tts/0到文件/etc/securetty:
代码 2: 添加tts/0到/etc/securetty |
# echo "tts/0" >> /etc/securetty |
给日常使用添加一个普通用户
在一个Unix/Linux系统上以超级用户身份工作是危险的和应该尽量避免的。因此,强烈推荐给日常使用添加一个用户。
比如,创建一个属于wheel组(可以通过命令su切换到超级用户)、users组(所有用户的默认组)和audio组(可以使用音频设备)的名为john的用户:
代码 3: 给日常使用创建一个用户 |
# useradd john -m -G users,wheel,audio -s /bin/bash # passwd john Password: (给john设定密码) Re-enter password: (重新输入密码以确认) |
如果一个用户需要以超级用户身份做某项工作,他们可以通过使用su -来暂时获得超级用户权限。另一个方法是使用sudo软件包,如果配置准确,也是很安全的一种方法。
11.b. 重启和享受你的新系统
重启
祝贺你!你的Gentoo系统已经可以使用。退出chroot的环境,并卸载所有已挂载的分区。然后输入一条你期盼已久的神奇的命令:reboot。
代码 4: 重启系统 |
# exit # cd / # umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo # reboot |
当然,不要忘了卸载启动光盘,否则开机启动仍然进入启动CD,而不是你新的Gentoo系统。
OldWorld PPC用户会在MacOS中启动,因为他们的启动程序还没有安装。这些用户应该阅读可选:配置BootX。MIPS用户将需要在他们的MIPS PROM上再做一些工作才能使Gentoo正常运作。这些用户应该阅读可选:使Gentoo/MIPS运作。
GRP用户可以从可选:安装GRP软件包继续,其余的可以在下一步做什么?完成。
可选:配置BootX
重要: 这个子章节只适用于要使用BootX作为启动程序的PPC用户。其他的用户都应该跳过这一子章节。 |
现在你的机器是在MacOS上启动,打开BootX控制面板。选择Options,去掉Used specified RAM disk选项的选择。当你回到BootX的主界面时,你现在会发现设定你机器的根磁盘和分区的选项。在这些填入正确的值。
BootX可以配置使得在启动时开始运行Linux。如果你这样做,你将会先看到你的机器启动进入MacOS,然后在启动过程中,BootX将会启动和开始运行Linux。查看BootX主页以获得更多相关信息。
如果你是一个GRP用户,你可以从可选:安装GRP软件包继续,否则从下一步做什么?继续。
可选:使Gentoo/MIPS运作
重要: 这个子章节只适用于MIPS用户!其他的读者应该跳过这个子章节。 |
重启后,进入System Maintenance Menu并选择Enter Comand Monitor(5)。如果你要测试你新装的Gentoo安装,你可以就运行boot -f <kernel name>。要使得系统永久从Gentoo启动,你需要在MIPS PROM中设定一些变量:
代码 5: 配置PROM启动Gentoo |
1) Start System 2) Install System Software 3) Run Diagnostics 4) Recover System 5) Enter Command Monitor
Option? 5 Command Monitor. Type "exit" to return to the menu.
(<root device> = Gentoo's root partition, e.g. /dev/sda3) >> setenv OSLoadPartition <root device>
(输入ls列出已有的内核) >> setenv OSLoader <kernel name> >> setenv OSLoadFilename <kernel name>
(声明你要传递给内核的参数) >> setenv OSLoadOptions <kernel parameters>
(提供Volume头文件的位置) >> setenv SystemPartition scsi(0)disk(1)rdisk(0)partition(8)
(自动启动Gentoo) >> setenv AutoLoad Yes
(设定时区) >> setenv TimeZone EST5EDT
(使用串行终端,有图形适配器的用户应该用“g”来代替“d1”(one)) >> setenv console d1 |
现在你可以享受你的Gentoo了!
可选:安装GRP软件包
重要: 这部分只适用于GRP用户。其他的用户应该跳过这一部分,从下一步做什么?继续。 |
系统启动后,以你新建的用户登录(比如,john)并使用su -获得超级用户权限:
代码 6: 获得超级用户权限 |
$ su - Password: (输入超级用户密码) |
现在我们需要改变Portage的配置,让它去从第二张CD(Gentoo软件包CD)选找预编译的工具。首先挂载这个CD:
代码 7: 挂载软件包CD |
(把Gentoo软件包CD插入CD驱动器) # mount /mnt/cdrom |
现在配置Portage使用/mnt/cdrom来寻找预编译包:
代码 8: 配置Portage来使用/mnt/cdrom |
# ls /mnt/cdrom
(如果有一个/mnt/cdrom/packages文件夹:) # export PKGDIR="/mnt/cdrom/packages"
(否则:) # export PKGDIR="/mnt/cdrom" |
现在安装你所需要的软件包。软件包包含了一些预编译的包,如KDE:
代码 9: 安装KDE |
# USE="bindist" emerge --usepkg kde |
安装XFree(不管是直接安装还是依赖性安装)USE="bindist"是必须的。这可以防止下载微软的核心字体(这些是不可以在我们的LiveCD中发行的)。
确认你现在要安装二进制文件。当你做完一次emerge sync更新Portage(这个你以后会学到)后,预编译的包可能和更新后的Portage里的ebuilds不符。你可以使用emerge --usepkgonly代替emerge --usepkg来避开这个。
使用livecd从光驱引导系统,在boot:界面输入gentoo
# cfdisk /dev/hda
· # mke2fs /dev/hda1
· # mkswap /dev/hda2
# mkreiserfs /dev/hda3
· # mount /dev/hda3 /mnt/gentoo
· # mkdir /mnt/gentoo/boot
# mount /dev/hda1 /mnt/gentoo/boot
· # cd /mnt/gentoo
# tar jvxf /mnt/cdrom/stages/stage3-i686-2004.3.tar.bz2
# tar jvxf /mnt/cdrom/snapshot/portage-20041022.tar.bz2 –C /mnt/gentoo/usr
· # mkdir /mnt/gentoo/usr/portage/distfiles
# cp –v /mnt/cdrom/distfiles/* /mnt/gentoo/usr/portage/distfiles
附:在此还要配置好网卡** net-setup eth0 //在图形界面下配置好网卡IP及其它参数**
# mount –t proc none /mnt/gentoo/proc
# chroot /mnt/gentoo/ /bin/bash
# env-update
# source /etc/profile
emerge --sync 从网上同步portage //目录为保证portage的最新,如果不想保持最新的portage可以不用此步
# nano –w /etc/make.conf
在CFLAG一行增加 –O2 –pipe –fomit-frame-pointer
增加MAKEOPTS=”-j2” //指只有一个CPU,如有两个CPU为”-j3”
增加GENTOO_MIRRORS=”ftp://gg3.net/pub/linux/gentoo”
//如果你想emerge的内容是在测试中的可以在/etc/make.conf的最后加上ACCEPT_KEYWORDS="~x86" ("~amd64")
# nano –w /etc/conf.d/net
config_eth0=( "192.168.0.26/24 brd 192.168.0.255" )
routes_eth0=( "default via 192.168.0.2" )
# rc-update add net.eth0 default //把修改好的配置加到启动中,让系统每次启动时都启动此配置
# nano –w /etc/resolv.conf
>> nameserver 202.96.128.86
>> nameserver 202.96.128.166
# nano –w /etc/conf.d/hostname
如HOSTNAME="www"
# nano –w /etc/hosts
>> 127.0.0.1(或实际网址) computer_name.domain.com computer_name
# nano –w /etc/fstab
>> /dev/hda1 /boot ext2 noatime 1 1
>> /dev/hda2 none swap sw 0 0
>> /dev/hda3 / reiserfs noatime 0 0
>> /dev/cdroms/cdrom0 /mnt/cdrom is09660 noauto,ro 0 0
# passwd
# emerge udev
# emerge hotplug
# emerge coldplug
# rc-update add coldplug boot
# emerge syslog-ng
# rc-update add syslog-ng default
# emerge vixie-cron
# rc-update add vixie-cron default
# emerge reiserfsprogs
# emerge gentoo-sources
# cd /usr/src/linux
# make mrproper
# make menuconfig (具体配置方式不详细编写)
# emerge genkernel
# make
# make modules_install
# make install
# genkernel all
# emerge grub
# grub --no-floppy
grub>> root (hd0,0)
grub>> setup(hd0)
# nano –w /boot/grub/grub.conf(配置方法参考grub.conf.sample)
>> timeout 6
>> default 0
>> splashimage=(hd0,0)/grub/splash.xpm.gz
>> title gentoo linux
>> root (hd0,0)
>> kernel /vmlinuz-2.6.9-gentoo root=/dev/hda3
# etc-update
# exit
# cd /
# umount /mnt/gentoo/proc
# umount /mnt/gentoo/boot
# umount /mnt/gentoo
# reboot
后续,
emerge world
emerge xfce4
附加程序:
amd64 系统 make.conf 的编写方法:
CFLAGS="-O2 -fomit-frame-pointer -pipe -mmmx -msse -mfpmath=sse,387"
CXXFLAGS="${CFLAGS}"
CHOST="x86_64-pc-linux-gnu"
MAKEOPTS="-j2" //只有一个CPU为-j2,如有两个CPU为-j3
USE="-java -xmms -gtk -gtk2 -gnome -qt -kde -X nptl nptlonly"
GENTOO_MIRRORS="ftp://gg3.net/pub/linux/gentoo http://mymirror.asiaosc.org/gentoo/"
ACCEPT_KEYWORDS="~amd64"
SYNC="rsync://rsync.asia.gentoo.org/gentoo-portage"
LINGUAS="zh_CN"
如何使用glibc的locale支持
glibc内置了locale支持,在默认情况下,这个支持没有打开,所以会影响编译速度和性能。
设置方法:
1,编辑 /etc/locale.gen,用#注释掉所有非en_US的项目,新增
zh_CN UTF-8
zh_CN.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN.GB2312 GB2312
zh_CN.GB18030 GB18030
2,激活 portage 系统编译时的 locale 支持
echo "sys-libs/glibc userlocales" >> /etc/portage/package.use
3,重新编译 glibc
配合 make.conf 中 USE 标签的 nptl nptlonly 选项,重新编译 glibc
emerge glibc
为了保证“工具链”的稳定性,建议重新编译整个“工具链”
emerge -e system
“工具链”的概念可以参考LFS文档。指 bintuils、gcc、glibc 等整个系统的运行基础。
编译 amd64 系统必须注意的事项
在内核选项里面一定要加入 NUMA 的支持。
我们现在所有 amd64 机器的主板都使用 nForce3 芯片组,在编译网卡支持的时候选中 nforce reverse engineering driver 的选项。
如果是在 livecd 环境下或者用模块方式编译的网卡驱动,装载驱动的命令: modprobe forcedeth
为了加快系统运作,有些不必要的驱动可以删除,例如 soundcard ieee1394 的支持等。