分类:
2008-04-03 15:25:56
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给其用户提供了几个可能的内核源码。你可以在中得到一个全面的有关列表和描述。
对于我们已有的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,那你则应该读读。
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命令。不要忘了将"
代码 21: 查看所有已有的模块 |
# find /lib/modules/ |
比如,为自动加载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
|