[ << ]
[ < ]
[ 主页 ]
[ > ]
[ >> ]
10. 配置引导程序
内容:
10.a. Silicon Graphics机器——配置arcload
哪一个?
在SGI机器上,我们使用arcload引导程序。在之前的发布中,我们也提供arcboot,不过它已经被正式宣布淘汰了,替代者就是arcload。
注意:
SGI卷头文件名最长为8个字符,在一个卷头里最多不能存在超过16个文件。
|
安装arcload
arcload是为需要64位内核的机器写的,因此不能使用arcboot(因为后者不能很容易地编译得到64位的可执行程序)。它还解决了一些从卷头加载内核时所引发的问题。所以,现在你知道为什么了,我们就可以继续安装了:
代码 1.1: 安装arcload和dvhtool |
# emerge arcload dvhtool
|
安装结束后,你应该可以发现arcload二进制文件静静的躺在/usr/lib/arcload路径下。现在,有两个文件存在:
-
sashARCS:针对Indy、Indigo2 (R4k)、Challenge S和O2系统的32位二进制文件
-
sash64:针对Octane/Octane2、Origin 200/2000和Indigo2 Impact系统的64位二进制文件
使用dvhtool来安装适用于你的系统的二进制文件到卷头里:
代码 1.2: 把arcload放到卷头 |
# dvhtool --unix-to-vh /usr/lib/arcload/sashARCS sashARCS
# dvhtool --unix-to-vh /usr/lib/arcload/sash64 sash64
|
注意:
你不一定非要使用sasARCS或者sash64这两个名字,除非你要把它安装到一个可引导光盘的卷头里。对于普通的硬盘启动,如果你愿意,你可以使用别的名字。
|
现在使用dvhtool命令来验证它们已经被装到卷头里了。
代码 1.3: 检查arcload已经在卷头里 |
# dvhtool --print-volume-directory
----- directory entries -----
Entry #0, name "sash64", start 4, bytes 55859
#
|
现在,arc.cf文件的语法类似C语言。要知道如何配置它的详细信息,请看Linux/MIPS wiki上的arcload页。简单的说,你定义一些选项,这些选项你可以在启动时使用OSLoadFilename变量来启用和禁用。
代码 1.4: 一个arc.cf的例子 |
append "root=/dev/sda3";
append "ro";
append "console=ttyS0,9600";
ip28 {
working {
description "SGI Indigo2 Impact R10000\n\r";
image system "/working";
}
new {
description "SGI Indigo2 Impact R10000 - Testing Kernel\n\r";
image system "/new";
}
debug {
description "Debug console";
append "init=/bin/bash";
}
}
|
从arcload-0.5开始,arc.df和内核既可以存在于卷头中,也可以位于分区里。如果你想用这个新功能,你可以把这些文件放在你/boot分区里(或者/如果你的boot分区不是独立的)。arcload使用来自流行的grub引导程序的文件系统驱动代码,因此支持相当一批文件系统。
代码 1.5: 把arc.cf和内核放在卷头 |
# dvhtool --unix-to-vh arc.cf arc.cf
# dvhtool --unix-to-vh /usr/src/linux/vmlinux new
|
完成后,剩下要做的只是在PROM中设定一些选项。请参阅重启系统一节。
10.b. Cobalt微服务器——配置Colo
安装CoLo
在Cobalt服务器上,这些机器的芯片里安装的固件的能力很有限。Cobalt的BOOTROM和SGI的PROM相比很原始,有一些很严重的局限性。
-
内核大小的限制为675kb(大约)。Linux 2.4目前的大小几乎不可能使内核大小达到这个要求。Linux 2.6更加是完全没有可能。
-
原始的固件不支持64位内核(虽然现在的Cobalt机器试验性的支持了这个功能)
-
shell最多只是基本的
为了克服这些限制,人们开发了另外一个固件,叫做Colo(Cobalt Loader)。这是一个BOOTROM镜像,既可以烧入Cobalt服务器里的芯片里,也可以从已有的固件中加载。
注意:
本指南将引领你完成Colo的设置,以使它可以被初始的固件所加载。这是唯一真正安全的我们所推荐的设置Colo的方法。
|
警告:
你可以,如果你愿意,把它烧入服务器,完全替代原来的固件——不过,如果那样做的话,你自己要为你的行为负全责。万一发生了什么错误,你将需要物理的移除BOOTROM并使用初始的固件来重新编程它。如果你不确定如何来做到这一点——那么不要把它烧入你的机器。如果你忽略了这个建议,那么我们将不会为之后所发生的任何事情负任何责任。
|
好了,结束了这条警告,我们继续来安装CoLo。首先,从emerge这个包开始。
代码 2.1: 安装colo |
# emerge colo
|
安装好之后(我希望你看到了那些信息;-))你应该可以在/usr/lib/colo目录下找到2个文件,colo-chain.elf:初始固件要加载的“内核”,和colo-rom-image.bin:可以烧入BOOTROM的ROM镜像。首先我们挂载/boot并且制作一个colo-chain.elf的压缩副本放在/boot里,系统将会在这个目录寻找它。
代码 2.2: 把CoLo放在它应该存在的地方 |
# gzip -9vc /usr/lib/colo/colo-chain.elf > /boot/vmlinux.gz
|
配置CoLo
现在,当系统第一次启动时,它会加载CoLo,后者会在背面的LCD上显示一个菜单。第一个选项(也是默认选项,大约5秒钟后将执行它)是启动硬盘。然后系统将尝试挂载它所发现的第一个Linux分区,然后执行default.colo。该文件的语法在CoLo的文档(看一下/usr/share/doc/colo-X.YY/README.shell.gz——其中X.YY是实际安装的版本号)中有详细的说明,同时也很简单。
注意:
小贴士:当安装内核的时候,我通常创建两个内核镜像,kernel.gz.working——一个已知可以工作的内核,和kernel.gz.new——一个刚刚编译好的内核。你可以用符号连接来指向当前的"new"和"working"内核,或者干脆重命名内核镜像。
|
代码 2.3: 一个基本的default.colo |
mount sda1
load /kernel.gz.working
execute root=/dev/sda3 ro console=ttyS0,115200
|
注意:
CoLo会拒绝加载不是以#:CoLo:#开头的脚本。你可以把它想象成shell脚本里的#!/bin/sh。
|
也可以问一个问题,比如你想以启动哪个内核和配置,并设定一个默认超时时间。这个配置就实现了这一点,询问用户希望使用哪个内核,并执行选中的镜像。vmlinuz.gz.new和vmlinuz.gz.working可以是实际的内核镜像,也可以指向磁盘上的内核镜像的符号链接。50作为select的参数,指定了50/10秒后将会启动第一个选项(“Working“)。
代码 2.4: 基于菜单的配置 |
lcd "Mounting sda1"
mount sda1
select "Which Kernel?" 50 Working New
goto {menu-option}
var image-name vmlinux.gz.working
goto 3f
@var image-name vmlinux.gz.working
goto 2f
@var image-name vmlinux.gz.new
@lcd "Loading Linux" {image-name}
load /{image-name}
lcd "Booting..."
execute root=/dev/sda5 ro console=ttyS0,115200
boot
|
请看位于/usr/share/doc/colo-VERSION的文档以获得更多信息。
10.c. 设置串口终端
OK,到目前为止,安装好的Linux已经可以正常启动,不过只是假设你从物理终端登录的前提下。在Cobalt机器上,很不幸——没有物理终端。
注意:
对于有受支持的显卡的用户来说,如果他们愿意,可以跳过本节。
|
首先,打开你的文本编辑器开始编辑/etc/inittab。在这个文件里,你可以看到类似这样的内容:
代码 3.1: inittab的配置 |
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
ca:12345:ctrlaltdel:/sbin/shutdown -r now
|
首先,请注释掉c0这一行。默认的,这个设定是为了使用波特率为9600 bps的终端。在Cobalt服务器上,你可能需要把这里改为115200以匹配BOOT ROM所决定的波特率。下面是我的机器上这一段的配置。在无头机器上(例如Cobalt服务器),我还建议把本地终端那几行(c1到c6)都注释掉,因为当他们不能打开/dev/ttyX的时候总会有奇怪的行为。
代码 3.2: inittab的示例片段 |
c0:12345:respawn:/sbin/agetty 115200 ttyS0 vt102
|
现在,最后一步……我们需要告诉系统,本地的串口可以被认为是安全的终端。我们需要修改的文件是/etc/securetty。它包含了一个系统信任的终端列表。我们只需要多加两行进去,使串口线可以用来让root用户登录。
代码 3.3: 使root可以在串口终端登录 |
# echo 'ttyS0' >> /etc/securetty
# echo 'tts/0' >> /etc/securetty
|
10.d. 重启系统
退出chroot的环境,卸载所有已挂载的分区。然后输入您已经等待多时的那个魔术般的 命令:reboot。
代码 4.1: 退出chroot,卸载所有分区和重启 |
# exit
cdimage ~# cd
cdimage ~# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
cdimage ~# reboot
|
注意:
Cobalt用户:本章的剩余部分讲解了如何设定SGI PROM以使它可以从磁盘引导arcload并加载Linux。这并不适用于Cobalt服务器的配置。实际上,你要做的已经完成了——第一次启动前没有其他需要配置的了,你可以跳到下一章:结束Gentoo的安装
|
10.e. 调较SGI PROM
一般性的PROM设定
既然你已经安装好了引导程序,你可以重启机器了。
代码 5.1: 重启系统 |
# exit
# umount /mnt/gentoo/boot
# umount /mnt/gentoo
# reboot
|
当你重启之后,去到System Maintenance Menu并选择Enter Command Monitor(5)就像你netboot这台机器时做的一样。
代码 5.2: 配置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.
>> setenv SystemPartition scsi(0)disk(1)rdisk(0)partition(8)
>> setenv AutoLoad Yes
>> setenv TimeZone EST5EDT
>> setenv console d1
>> setenv dbaud 9600
|
现在,下边的设定取决于你要怎样引导系统。
直接卷头启动的设定
这部分内容的出现只是为了保持完整。我们推荐用户查看安装arcload那部分内容,而不要看这里。
注意:
只适用于Indy,Indigo2(R4k)和Challenge S。
|
代码 5.3: 从卷头启动的PROM设定 |
>> setenv OSLoadPartition <根设备>
>> setenv OSLoader <内核文件名>
>> setenv OSLoadFilename <内核文件名>
>> setenv OSLoadOptions <内核参数>
|
如果你想尝试启动一个内核,而不改变当前的内核参数设定,你可以执行boot -fPROM命令:
代码 5.4: 在不改变环境变量的情况下启动 |
# boot -f new root=/dev/sda3 ro
|
arcload的设定
arcload使用OSLoadFilename选项来指定哪些选项用arc.cf里的内容来设定。这个配置文件本质上是一个脚本,脚本中的顶级块为不同的系统定义了启动镜像,在块内可定义一些可选的设定。所以,定义OSLoadFilename=mysys(serial)就能引入mysys块的设定,并且serial选项的内容将会覆盖已有的设定。
在前面的示例文件里,我们定义了一个系统块,ip28,有working、new和debug3个选项。我们这样来定义我们的PROM变量:
代码 5.5: 使用arcload的PROM设定 |
>> setenv OSLoader sash64
>> setenv OSLoadFilename ip28(working)
|
从arcload-0.5开始,文件不需要再放在卷头里——它们可以被放在分区内。要告诉arcload哪里去寻找它的配置文件和内核,我们需要设定OSLoadPartition PROM变量。确切的值这里将取决于你的磁盘在SCSI总线的什么位置。把SystemPartitionsPROM变量作为一个引导——只有分区号码需要改变。
注意:
分区是从0开始命名,而不是1,和在Linux里一样
|
代码 5.6: 告诉arcload哪里去寻找arc.cf |
>> setenv OSLoadPartition scsi(0)disk(1)rdisk(0)partition(8)
>> setenv OSLoadPartition scsi(0)disk(1)rdisk(0)partition(0)[ext2]
|
全部完成
现在你已经准备好享受Gentoo了!当重启进入到您新装的Gentoo系统之后,请阅读结束您的Gentoo安装来完成剩下的工作。
[ << ]
[ < ]
[ 主页 ]
[ > ]
[ >> ]
本文档的内容遵循知识共享-署名-相同方式共享许可协议
|