9. 配置启动器 (Bootloader)
9.a. 作出您的选择
简介
至此, 您的内核配置编译完毕, 所需的系统配置文件业已填写妥当. 现在要做的是安装一个在您开机时能启动您的内核的程序. 这一程序名为 启动器 (bootloader). 在 x86 体系中, Gentoo 提供了 GRUB 和 LILO 以供选择. 在装上它们两者之一前, 我们想先让您了解如何配置帧缓冲 (当然, 在您想要它的前提下). 帧缓冲让您在 Linux 命令行 模式下可以获得 (有限的) 图像效果 (graphical features. Cure: 可以译成 "图形特性", 可我觉得这样直接好懂)
可选: 帧缓冲 (Framebuffer)
如果您内核中配置了对帧缓冲的支持 (或者您使用的是 genkernel 的默认配置), 并且您想用它, 那么就得往您的启动器配置文件中加入一个 vga 语句 (vga-statement). 下表列出了您可用的 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 的关键性一点是: 理解它是如何表示 (refers to. Cure: 可翻译成 "引用", 这可能会让人迷惑, 所以转转义, 用 "表示" 就清晰多了) 每个硬盘驱动器和分区的. 您的 Linux 分区 /dev/hda1 在 GRUB 中表示成 (hd0,0). 留意 hd0,0 两边括弧, 它们是必需的.
硬盘驱动器从零起算而非从 "a", 分区从零起算而非从一 (Cure: 俩都从零起算). 另外也请留意, hd 设备只算硬盘驱动器, atapi-ide 类的驱动器如 cdrom 播放器和刻录机都不算. 同时, scsi 驱动器也用同样的方式 (same construct) 来表示. (通常它们比 ide 排在更后的号码 (higher number), 除非在 bios 中配置了从 scsi 设备启动.)
假设您有个硬盘在 /dev/hda, 有个 cdrom 播放器在 /dev/hdb, 有个刻录机在 /dev/hdc, 有第二个硬盘在 /dev/hdd, 并且没有 SCSI 的驱动器, 则 /dev/hdd7 在 GRUB 中表示为 (hd1, 6). 这看起来颇为奇异 (tricky), 而实际上它还真是, 不过呢, 如我们所见, GRUB 提供了 tab 补全功能 (tab completion mechanism) 来帮助那些机器上挂了一大堆硬盘分了一大堆分区, 而又迷失于 GRUB 奇特排号方式之中的您.
如果您开始对这些东西有感觉了 (Having gotten the feel for that), 我们就开始装 GRUB 吧.
安装 GRUB
要安装 GRUB, 我们先 emerge 它:
代码清单 1: 安装 GRUB |
# emerge grub |
输入 grub 以对它进行配置, 您会看到一个 grub> 这样的命令行提示符. 现在, 我们需要输入正确的命令来将 GRUB 的引导记录 (boot record) 写入到您的硬盘中.
代码清单 2: 进入 GRUB 环境 (shell) |
# grub |
注: 如果您的系统没有软驱, 请为述命令中添加 --no-floppy 参数以避免 grub 去检测 (并不存在的) 软驱. |
下例中我们要让 GRUB 从启动分区 (boot-partition) /dev/hda1 读取它自己的信息, 并将其引导记录 (boot record) 写到硬盘的 MBR (master boot record - 主引导记录) 区, 好让我们在开机时就看到 GRUB 的界面 (prompt. Cure: 译成 "提示符" 也可以, 不过我们通常都用 GRUB 的图形界面, 所以无论是提示符界面还是图形界面, 就统称界面, 总之就是 GRUB 和人交互的一个接口, 各取所需地理解吧). 当然, 如果您之前不是完全安装我们示例配置进行安装的,请记得适当地调整下面的命令以符合您的实际情况.
tab 补全功能可以在 GRUB 环境中使用. 例如, 您输入 "root (" 之后按 TAB 键, 您就会得到一份设备列表 (如 hd0). 如果您输入 "root (hd0," 之后按 TAB 键, 就会得到一份该设备上的分区列表 (如 hd0,0).
利用这一补全功能, 要配置好 GRUB 并非难事. 下面就让我们开始配置 GRUB 吧, 如何? :-)
代码清单 3: 将 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 可以自动地启动您刚刚编译出来的内核. 用 nano (或您最喜欢的编辑器 -- 如果装了的话) 创建文件 /boot/grub/grub.conf:
代码清单 4: 创建 /boot/grub/grub.conf |
# nano -w /boot/grub/grub.conf |
我们要完成一份 grub.conf. 下面您会看到两份可能的 grub.conf, 它们是针对我们这一手册中示例的分区情况, 以及内核 kernel-2.4.26-gentoo-r6 来配置的. 我们仅为第一份做了详细的注解. 请确认您 (在写自己的配置的时候) 写的是自己的内核的文件名, 且, 合适的话, 还有您的 initrd 的文件名.
- 第一份 grub.conf 是针对未使用 genkernel 来编译内核的用户
- 第二份 grub.conf 是针对已使用 genkernel 来编译内核的用户
代码清单 5: 未使用 genkernel 的用户的 grub.conf |
# 默认情况下启动列表中的哪个选项. 0 为第一项, 1 为第二项, 依此类推. default 0 # 多久之后启动默认选项 timeout 30 # 多美好的事, 我们可以用图片来加点情调 :) (Nice, fat splash-image to spice things up :) # 如果没装图形卡的话, 那就得把下面这句注释掉 splashimage=(hd0,0)/grub/splash.xpm.gz title=Gentoo Linux 2.4.26-r6 # 内核 (或操作系统) 所在的分区 root (hd0,0) kernel /kernel-2.4.26-gentoo-r6 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.26-r6 root (hd0,0) kernel /kernel-2.4.26-gentoo-r6 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3 initrd /initrd-2.4.26-gentoo-r6 # 仅在您要和 Windows 双启动的情况下需要以下三行 title=Windows XP root (hd0,5) chainloader +1 |
注: 如果您使用的不同的分区方案或是不同的内核, 请根据实际情况调整. 但是, 请保证所有跟在 GRUB-设备(GRUB-device) (如 (hd0,0)) 之后的东西都是和挂载点相关而非和根分区 (root) 相关. 换句话说, (hd0,0)/grub/splash.xpm.gz 实际上是 /boot/grub/splash.xpm.gz, 因为 (hd0,0) 就是 /boot. (However, make sure that anything that follows a GRUB-device (such as (hd0,0)) is relative to the mountpoint, not the root. In other words, (hd0,0)/grub/splash.xpm.gz is in reality /boot/grub/splash.xpm.gz since (hd0,0) is /boot. Cure: 这一句不甚理解, 所以译得怪怪的, 姑且存疑. 意思据我理解是这样, 基于 Unix/Linux 类文件系统结构的特点, 在整个系统中只有一个根目录, 即是 /, 其他所有目录 "看起来" 都是在它之下, 包括我们挂载上来的任何其他设备或分区. 所以, 手册上这段注, 估计是想向我们澄清, 在看到 /kernel-2.4.26-gentoo-r6 这样的东西时, 不要误认为 kernel-2.4.26-gentoo-r6 的文件是在根目录 / 下的, 实际上, 在 GRUB 中使用 root (hd0,0) 时, 就类似 cd 命令一样, 已经切换到 (hd0,0) 也就是 /boot 这个挂载点下了, 从物理上的分区而言, 也就是已经进入到启动分区里了, 而不是在物理上的根分区 / 下. 这时 kernel /kernel-2.4.26-gentoo-r6 启动的, 实际上便是放在 /boot/ 下的内核) |
如果您还想传递额外的参数给内核, 只需把参数简单地添加到 kernel 命令的后面. 我们已经传递了一个参数 (root=/dev/hda3 或 real_root=/dev/hda3), 您还可以传递其他的. 下例给出我们前述的关于使用帧缓冲的 vga 语句:
代码清单 7: 把 vga 语句 (vga-statement) 作为参数传递给内核 |
title=Gentoo Linux 2.4.26-r6 root (hd0,0) kernel /kernel-2.4.26-gentoo-r6 root=/dev/hda3 vga=788 |
如果您使用的是 2.6.7 或以上版本的内核, 并且您由于主板 BIOS 不能支持大容量硬盘而 jumpered (?) 了您的硬盘, 则您需要添加 hdx=stroke 参数.
genkernel 用户们应该了解你们的内核启动时用的参数是和 LiveCD 中的一样的. 例如, 您要是拥有 SCSI 设备, 那就得把 doscsi 作为内核参数.
保存退出 grub.conf. 现在, GRUB 已配置完毕, 请继续下一章安装必需的系统工具.
您要有更多的关于 GRUB 的问题, 请查阅 GRUB 常见问题集或 GRUB 手册.
9.c. 替代: 使用 LILO
安装 LILO
LILO, 即 LInuxLOader (linux 加载器), 是 Linux 启动器中久经历练的真正任劳任怨的老马 (tried and true workhorse). 可是呢, 它在功能特性上比起 GRUB 有所欠缺 (这也是为什么 GRUB 越来越受欢迎的原因). LILO 之所以迄今还在使用, 是因为在有些系统中就只有它能工作, 而 GRUB 不行. 当然, 还因为有些用户已经习惯它了, 也不想改. 不管怎样, Gentoo 两者都支持, 并且看来您决定选择使用 LILO.
安装 LILO 简单极了; emerge 就搞定:
代码清单 8: 安装 LILO |
# emerge --usepkg lilo |
配置 LILO
您得创建 /etc/lilo.conf 来配置 LILO. 启动您最喜欢的编辑器 (为了保持本手册的一致性, 我们还是以 nano 为例) 来创建它吧:
代码清单 9: 创建 /etc/lilo.conf |
# nano -w /etc/lilo.conf |
数节之前我们曾让您记下自己创建的内核映象 (kernel-image) 的名字. 下例的 lilo.conf 中我们假设这一内核映象的名字为 kernel-2.4.26-gentoo-r6. 并且我们仍将使用示例分区情况来说明问题. 还是分成两部分:
- 第一部分针对未使用 genkernel 来编译内核的用户
- 第二部分针对已使用 genkernel 来编译内核的用户
请确认您 (在写自己的配置的时候) 写的是自己的内核的文件名, 且, 合适的话, 还有您的 initrd 的文件名.
代码清单 10: /etc/lilo.conf 例 |
boot=/dev/hda # 将 LILO 装到 MBR prompt # 让用户有机会可以选择其他部分(section) timeout=50 # 等待 5 (五) 秒后启动默认部分 default=gentoo # 超时后默认启动 "gentoo" 部分 # 如果您不使用帧缓冲的话, 请将下面这行移除 vga=788 # 帧缓冲设置, 请按您所需调整 # 非 genkernel 用户 image=/boot/kernel-2.4.26-gentoo-r6 label=gentoo # 我们为这一部分起的名称 read-only # 以只读的 root 启动, 请勿更改! root=/dev/hda3 # 根文件系统所在 # genkernel 用户 image=/boot/kernel-2.4.26-gentoo-r6 label=gentoo read-only root=/dev/ram0 append="init=/linuxrc ramdisk=8192 real_root=/dev/hda3" initrd=/boot/initrd-2.4.26-gentoo-r6 # 下面两行仅在您要和 Windows 双启动时需要添加 # 设 Windows 安装在 /dev/hda6. other=/dev/hda6 label=windows |
注: 如果您使用的不同的分区方案或是不同的内核, 请根据实际情况调整. |
如果您需要传递额外的参数给内核, 在该部分中添加一个 append 语句. 例如, 我们添加 vga=788 来启用帧缓冲:
代码清单 11: 用 append 语句来传递内核参数 |
image=/boot/kernel-2.4.26-gentoo-r6 label=gentoo read-only root=/dev/hda3 append="vga=788" |
如果您使用的是 2.6.7 或以上版本的内核, 并且您由于主板 BIOS 不能支持大容量硬盘而 jumpered (?) 了您的硬盘, 则您需要添加 hdx=stroke 参数.
genkernel 用户们应该了解你们的内核启动时用的参数是和 LiveCD 中的一样的. 例如, 您要是拥有 SCSI 设备, 那就得把 doscsi 作为内核参数.
保存退出. 最后运行 /sbin/lilo 以让 LILO 将 /etc/lilo.conf 中的配置应用到您的系统中 (也就是将它自己安装到硬盘中). 每次安装了新的内核之后, 请一定记得重新运行一次 /sbin/lilo!
代码清单 12: 完成 LILO 的安装 |
# /sbin/lilo |
请继续下一章安装必需的系统工具.