声明: 本手册已经被新版本代替了,不再被维护。

10. 配置引导程序

内容:

10.a. 选择一个引导程序

介绍

现在,您已经配置并编译好了内核,你将需要一个引导程序来启动你新安装的Linux。接下来将要使用的引导程序与你所拥有PPC机器的类型有关。

如果你使用的是NewWorld架构的Apple或IBM机器,你需要使用yaboot。OldWorld架构的Apple机器有两个选择,BootX(推荐)和quik。虽然Pegasos机器并不需要一个引导程序,但是你仍然需要emerge bootcreator来创建SmartFirmware启动菜单。

10.b. 默认:使用yaboot

介绍

重要: yaboot只能用于NewWorld架构的Apple和IBM系统中!

为了能找到启动设备,yaboot需要能访问到在启动中由udev创建的设备节点以及sysfs文件系统。这两个文件系统分别可以在/dev以及sys下找到。为了达到这样的效果,你需要把安装光盘中根目录下的这两个文件系统“bind mount”到chroot环境中的/dev/sys挂载点上。如果你已经bind mount了这些文件系统,那就没有必要再做了。

代码 2.1: Bind mount device和sysfs文件系统

# exit  # 这个命令会退出chroot
# mount -o bind /dev /mnt/gentoo/dev
# mount -o bind /sys /mnt/gentoo/sys
# chroot /mnt/gentoo /bin/bash
# /usr/sbin/env-update && source /etc/profile 

为了设置yaboot,你可以使用yabootconfig来为你自动创建一个配置文件。如果你在一台G5上安装了Gentoo(在这上面yabootconfig可能并不能正常工作),或者你计划从firewire或USB设备启动,那么你就需要手动配置yaboot了。

注意: 当使用genkernel的时候,你需要手动修改yaboot.conf,即使yabootconfig已经使用过也需要修改。内核映像中的yaboot.conf需要做如下修改(使用vmlinux和initrd作为内核和initrd映像文件的名字):

代码 2.2: 将genkernel启动参数加到yaboot.conf中

###########################################################
## 如果你有一个以上的内核或是启动选项的组合,这部分内容可以被复制
## ——用你内核和initrd映像的确切名字替换image和initrd的值。
###########################################################
image=/boot/kernel-genkernel-ppc-2.6.24-gentoo-r5
  label=Linux
  root=/dev/ram0
  partition=3
  initrd=/boot/initramfs-genkernel-ppc-2.6.24-gentoo-r5
  # 你可以在此附加上额外的内核参数比如rootdelay=10用于USB/Firewire启动
  append="real_root=/dev/sda3 init=/linuxrc"  
  read-only
##########################################################

默认:使用yabootconfig

yabootconfig会自动侦测在你机器上的分区并会设置诸如Linux、Mac OS和Mac OS X这样的双重或三重的启动组合。

为了能使用yabootconfig,你的硬盘上必须拥有一个Apple_Bootstrap分区,并且/etc/fstab必须能反映出你的Linux分区状况(请注意Bootstrap分区应该在你的fstab文件中)。虽然这些步骤应该已经完成了,但是还是请检查/etc/fstab后再进行下一步。现在可以安装yaboot了。

代码 2.3: 从GRP方式安装yaboot

# emerge --usepkg yaboot

现在退出chroot并运行yabootconfig --chroot /mnt/gentoo。首先,程序会确认bootstrap分区的位置。如果你使用了建议的磁盘分区布局,那你的bootstrap分区应该是/dev/sda2。如果输出正确请键入Y。如果出现错误,请再次仔细检查你的/etc/fstabyabootconfig会接着扫描你的系统设置,创建/etc/yaboot.conf并运行mkofbootmkofboot是格式化Apple_Bootstrap分区以及安装yaboot的配置文件用的。在此之后请再次进入chroot。

代码 2.4: 重新进入chroot

# chroot /mnt/gentoo /bin/bash
# /usr/sbin/env-update && source /etc/profile

你可能需要校验/etc/yaboot.conf的内容。如果你在/etc/yaboot.conf中做了些更改(比如设置默认/启动的操作系统),请确保再次运行一次ybin -v以便将这些更改应用到Apple_Bootstrap分区中去。无论何时你对yaboot.conf做了任何改动,比如测试一个新内核时,永远记得要运行ybin -v来用以更新bootstrap分区。

接下来请阅读重启系统

备选:手动yaboot配置

首先确保你已经在系统上安装了yaboot

代码 2.5: 从GRP方式安装yaboot

# emerge --usepkg yaboot

虽然下面给出了一个yaboot.conf示例文件,但是你仍然需要通过修改它来满足你自己的要求。

代码 2.6: /etc/yaboot.conf

## /etc/yaboot.conf
##
## 运行:“man yaboot.conf”可以得到更多详细帮助。在未看帮助前请不要做任何改动!!
## 也可以参考:/usr/share/doc/yaboot/examples可以得到一些配置的示例。
##
## 如果需要双重启动菜单,请添加以下一项或多项:
## bsd=/dev/sdaX, macos=/dev/sdaY, macosx=/dev/sdaZ

## bootstrap分区:

boot=/dev/sda2

## ofboot是Open Firmware的指定bootstrap分区的方式。
## 如果没有定义过这个变量,则yaboot会在G5和某些G4机器上失效(除非
## 你将一些必要的参数传给mkofboot/ybin程序)。
## hd:X表示/dev/sdaX。
 
## G5用户应该去掉这一行的注释!!

#ofboot=hd:2

## 使用firewire启动的用户应该使用类似下面这行的指定方式:
# ofboot=fw/node/sbp-2/disk@0:

## 使用USB启动的用户应该使用类似下面这行的指定方式:
# ofboot=usb/disk@0:

## hd:代表OpenFireware能看到的第一个硬盘的缩写
device=hd:

## Firewire和USB用户需要指定整个OF设备名
## 这个可以通过使用ofpath找到,它也同时包含在yaboot中。

# device=fw/node@0001d200e00d0207/sbp-2@c000/disk@0:


delay=5
defaultos=macosx
timeout=30
install=/usr/lib/yaboot/yaboot
magicboot=/usr/lib/yaboot/ofboot

###########################################################
## 如果你有一个以上的内核或是启动选项的组合,这部分内容可以被复制
## ——用你内核映像的确切名字替换image值。
###########################################################
image=/boot/kernel-2.6.24-gentoo-r5
  label=Linux
  root=/dev/sda3
  partition=3
#  append="rootdelay=10"  # 从USB/Firewire启动时必需
  read-only
##################

## G5用户和某些G4用户需要设置
##   macos=hd:13
##   macosx=hd:12
## 用以替代示例值。
macos=/dev/sda13
macosx=/dev/sda12
enablecdboot
enableofboot

一旦yaboot.conf配置完成,运行mkofboot -v来格式化Apple_bootstrap分区并安装配置好的设定。如果你在Apple_bootstrap分区创建好后修改了yaboot.conf,你可以运行ybin -v来更新设定。

代码 2.7: 配置bootstrap分区

# mkofboot -v

更多关于yaboot的信息,你可以参看yaboot项目。现在,请阅读重启系统来继续安装。

10.c. 备选:BootX

重要: BootX只能用于使用MacOS 9及更早的操作系统的OldWorld架构的Apple机器!

因为BootX需要从运行着的MacOS里启动Linux,所以需要将内核从Linux分区拷贝到MacOS分区。首先,从chroot环境外挂载MacOS分区。使用mac-fdisk -l来查找MacOS分区号,这里使用sda6作为示例。当这个分区被挂载起来后,我们就要将内核拷贝至系统目录以便BootX能够找得到它。

代码 3.1: 将内核拷贝至MacOS分区

# exit
cdimage ~# mkdir /mnt/mac
cdimage ~# mount /dev/sda6 /mnt/mac -t hfs
cdimage ~# cp /mnt/gentoo/usr/src/linux/vmlinux "/mnt/mac/System Folder/Linux Kernels/kernel-2.6.24-gentoo-r5"

如果使用的是genkernel,内核和initrd都需要拷贝至MacOS分区。

代码 3.2: 将genkernel生成的内核和initrd拷贝至MacOS分区

# exit
cdimage ~# mkdir /mnt/mac
cdimage ~# mount /dev/sda6 /mnt/mac -t hfs
cdimage ~# cp /mnt/gentoo/boot/kernel-genkernel-ppc-2.6.24-gentoo-r5 "/mnt/mac/System Folder/Linux Kernels"
cdimage ~# cp /mnt/gentoo/boot/initramfs-genkernel-ppc-2.6.24-gentoo-r5 "/mnt/mac/System Folder"

现在内核已经拷贝完毕,我们需要重启来设置BootX。

代码 3.3: 卸载掉所有的分区并重启

cdimage ~# cd /
cdimage ~# umount /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo/sys /mnt/gentoo /mnt/mac
cdimage ~# reboot

当然,请不要忘记将可启动的CD从光驱中取出,否则机器会再次启动CD,而不是MacOS。

一旦机器启动至MacOS,打开BootX控制面板。如果你没有使用genkernel,选择Options后取消掉Use specified RAM disk。如果你使用了genkernel,请确认你使用的是genkernel生成的initrd而不是安装CD中的initrd。如果你使用的不是genkernel,这儿有个选项用于指定机器的Linux根磁盘和分区。请用适当的值将这些都填好。根据内核的配置情况,可能还会增加一些额外的启动参数。

您可以配置BootX让MacOS在启动时自动启动Linux。如果你这样做了,你将会先看到你的机器启动了MacOS,然后在启动时,BootX会装载并启动Linux。更多详细信息请看BootX主页

重要: 确保在你的内核中已经有了HFS和HFS+文件系统的支持,否则你将无法升级或改变位于你MacOS分区中的内核。

现在重新启动并启动至Linux中,并请继续阅读结束你的Gentoo安装

10.d. 备选:quik

quik允许OldWorld架构的Mac机器不需要MacOS就能启动。然而,这个功能的实现并不完美而且有一些古怪行为。如果你能用BootX,我们建议你还是用BootX而不要用它,毕竟前者比起后者更可靠且易于设置。

首先,我们需要安装quik:

代码 4.1: 从GRP形式Emerge quik

# emerge --usepkg quik

接下来,我们需要设置它。修改/etc/quik.conf并把image设置为已经拷贝至你的启动分区中的那个内核映像。

代码 4.2: 配置quik.conf

# quik.conf示例
init-message = "Gentoo 2008.0\n"
# 这个是启动分区
partition = 2
root = /dev/sda4
timeout = 30
default = gentoo
# 这个是你的内核
image = /kernel-2.6.24-gentoo-r5
  label = gentoo

你的quik.conf文件必须和quik启动镜像存放在相同的磁盘上,它也可以是在相同磁盘的不同分区上,推荐你将它移动到你的启动分区上。

代码 4.3: 将quik.conf移动至/boot

# mv /etc/quik.conf /boot/quik.conf

现在我们将设置你的启动变量,因为quik在启动时需要加载它们。为此,我们需要使用一个叫做nvsetenv的程序。你想设置的这些变量随机器的不同而有所变化,在尝试这步之前最好先查找你机器的quirks

代码 4.4: 设置启动变量

# nvsetenv auto-boot true # 如果你想要启动至OF请设置成false,并不是所有的型号都能显示OF输出
# nvsetenv output-device video # 请检查quirks页面,在那儿你可以找到很多变化
# nvsetenv input-device kbd
# nvsetenv boot-device scsi/sd@1:0 # 对应SCSI
# nvsetenv boot-device ata/ata-disk@0:0 # 对应ATA
# nvsetenv boot-file /boot/kernel-2.6.24-gentoo-r5 root=/dev/sda4 第一项是内核的路径,第二项是root分区。你可以在这一行末尾附加任何的内核选项。
# nvsetenv boot-command boot # 对于MacOS来说设置成bye,对于Linux来说设置成boot

注意: 在MacOS中也可以改变你的启动变量。根据不同的型号,有可能需要用bootvars或是Apple系统磁盘。请参看以上的quik quirks页面以获得更多的信息。

现在我们的机器已经设置好并能启动,我们需要确保已经正确安装了启动镜像文件。运行quik -v -C /boot/quik.conf。它会告诉你第一阶段QUIK启动块已经安装好了。

注意: 如果出了什么错,你可以通过在通上电源前按住command + option + p + r来重设你的PRAM到默认值。这样会清除掉你用nvsetenv设置的值而且会允许你启动MacOS的启动盘或是Linux的启动盘。

现在,请阅读重启系统来继续安装。

10.e. 备选:BootCreator

重要: BootCreator会为Pegasos创建一个漂亮的由Forth写成的的SmartFireware启动菜单。

首先确保你已经在系统上安装好bootcreator

代码 5.1: 从GRP形式安装bootcreator

# emerge --usepkg bootcreator

现在拷贝文件/etc/bootmenu.example/etc/bootmenu并且根据你的需要修改它:

代码 5.2: 修改bootcreator配置文件

# cp /etc/bootmenu.example /etc/bootmenu
# nano -w /etc/bootmenu

以下是一个完整的/etc/bootmenu配置文件。应该用你所使用的内核和initrd映像的文件名来替换掉vmlinux和initrd。

代码 5.3: bootcreator配置文件

#
# bootcreator 1.1的示例配置文件
#

[VERSION]
1

[TITLE]
Boot Menu

[SETTINGS]
AbortOnKey = false
Timeout    = 9
Default    = 1

[SECTION]
Local HD -> Morphos      (Normal)
ide:0 boot2.img ramdebug edebugflags="logkprintf"

[SECTION]
Local HD -> Linux (Normal)
ide:0 kernel-2.6.24-gentoo-r5 video=radeonfb:1024x768@70 root=/dev/sda3

[SECTION]
Local HD -> Genkernel (Normal)
ide:0 kernel-genkernel-ppc-2.6.24-gentoo-r5 root=/dev/ram0 real_root=/dev/sda3 init=/linuxrc initrd=initramfs-genkernel-ppc-2.6.24-gentoo-r5

最终bootmenu必须转成Forth并被拷贝至你的启动分区,这样SmartFirmware才能读取它。因此你需要调用bootcreator

代码 5.4: 安装bootmenu

# bootcreator /etc/bootmenu /boot/menu

注意: 当你重启时请确认一下SmartFirmware的设置,menu文件就是那个会被默认加载的文件。

现在,继续安装请看重启系统

10.f. 重启系统

退出chroot环境且卸载掉所有已挂载的分区。随后键入那个已经等待多时的魔幻命令:reboot

代码 6.1: 退出chroot,卸载所有的分区并重启

# exit
livecd ~# umount /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo/sys /mnt/gentoo
livecd ~# reboot

当重启进入到您新装的Gentoo系统之后,请阅读结束您的Gentoo安装来完成剩下的工作。