Gentoo Logo

[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


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放到卷头

(Indy/Indigo2/Challenge S/O2用户)
# dvhtool --unix-to-vh /usr/lib/arcload/sashARCS sashARCS

(Indigo2 Impact/Octane/Octane2/Origin 200/Origin 2000用户)
# 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的例子

# ARCLoad的配置

# 一些默认设定……
append  "root=/dev/sda3";
append  "ro";
append  "console=ttyS0,9600";

# 我们主要的定义。ip28这个名字可以改成其他的,如果你愿意。
ip28 {
        # 一个"working"内核的定义
        # 通过设定OSLoadFilename="ip28(working)"来选择此项
        working {
                description     "SGI Indigo2 Impact R10000\n\r";
                image system    "/working";
        }

        # 一个"new"内核的定义
        # 通过设定OSLoadFilename="ip28(working)"来选择此项
        new {
                description     "SGI Indigo2 Impact R10000 - Testing Kernel\n\r";
                image system    "/new";
        }

        # debug内核使用的
        # 通过设定OSLoadFilename="ip28(working,debug)"
        # 或者OSLoadFilename="ip28(new,debug)"来选择此项
        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

#:CoLo:#
mount sda1
load /kernel.gz.working
execute root=/dev/sda3 ro console=ttyS0,115200

注意: CoLo会拒绝加载不是以#:CoLo:#开头的脚本。你可以把它想象成shell脚本里的#!/bin/sh

也可以问一个问题,比如你想以启动哪个内核和配置,并设定一个默认超时时间。这个配置就实现了这一点,询问用户希望使用哪个内核,并执行选中的镜像。vmlinuz.gz.newvmlinuz.gz.working可以是实际的内核镜像,也可以指向磁盘上的内核镜像的符号链接。50作为select的参数,指定了50/10秒后将会启动第一个选项(“Working“)。

代码 2.4: 基于菜单的配置

#:CoLo:#

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的配置

# SERIAL CONSOLE
#c0:12345:respawn:/sbin/agetty 9600 ttyS0 vt102

# TERMINALS
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

# What to do at the "Three Finger Salute".
ca:12345:ctrlaltdel:/sbin/shutdown -r now

首先,请注释掉c0这一行。默认的,这个设定是为了使用波特率为9600 bps的终端。在Cobalt服务器上,你可能需要把这里改为115200以匹配BOOT ROM所决定的波特率。下面是我的机器上这一段的配置。在无头机器上(例如Cobalt服务器),我还建议把本地终端那几行(c1c6)都注释掉,因为当他们不能打开/dev/ttyX的时候总会有奇怪的行为。

代码 3.2: inittab的示例片段

# SERIAL CONSOLE
c0:12345:respawn:/sbin/agetty 115200 ttyS0 vt102

# TERMINALS -- 这些在无头qube上是没有用的
#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

现在,最后一步……我们需要告诉系统,本地的串口可以被认为是安全的终端。我们需要修改的文件是/etc/securetty。它包含了一个系统信任的终端列表。我们只需要多加两行进去,使串口线可以用来让root用户登录。

代码 3.3: 使root可以在串口终端登录

(/dev/ttyS0 -- 第一个串口的传统命名)
# echo 'ttyS0' >> /etc/securetty

(最近,Linux也把它称为/dev/tts/0——所以我们也把它加上)
# 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: 重启系统

(退出chroot环境)
# exit

(卸载驱动器)
# umount /mnt/gentoo/boot
# umount /mnt/gentoo

(重启)
# reboot

当你重启之后,去到System Maintenance Menu并选择Enter Command Monitor5)就像你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.

(为arcload设定一些选项)

(提供卷头的位置)
>> setenv SystemPartition scsi(0)disk(1)rdisk(0)partition(8)

(自动启动Gentoo)
>> setenv AutoLoad Yes

(设定时区)
>> setenv TimeZone EST5EDT

(使用串口终端——显卡用户应该用"g",而不是用"d1"(数字一))
>> setenv console d1

(设定串口终端波特率。这是可选的,9600是默认设定。)
(如果需要,可以设置最高到38400。)
>> setenv dbaud 9600

现在,下边的设定取决于你要怎样引导系统。

直接卷头启动的设定

这部分内容的出现只是为了保持完整。我们推荐用户查看安装arcload那部分内容,而不要看这里。

注意: 只适用于Indy,Indigo2(R4k)和Challenge S。

代码 5.3: 从卷头启动的PROM设定

(<根设备> = Gentoo的根分区,比如/dev/sda3)
>> setenv OSLoadPartition <根设备>

(要列出可用的内核,请键入“ls”)
>> setenv OSLoader <内核文件名>
>> setenv OSLoadFilename <内核文件名>

(声明你要传递的内核参数)
>> setenv OSLoadOptions <内核参数>

如果你想尝试启动一个内核,而不改变当前的内核参数设定,你可以执行boot -fPROM命令:

代码 5.4: 在不改变环境变量的情况下启动

(启动一个内核,“new”,使用额外的选项)
# boot -f new root=/dev/sda3 ro

arcload的设定

arcload使用OSLoadFilename选项来指定哪些选项用arc.cf里的内容来设定。这个配置文件本质上是一个脚本,脚本中的顶级块为不同的系统定义了启动镜像,在块内可定义一些可选的设定。所以,定义OSLoadFilename=mysys(serial)就能引入mysys块的设定,并且serial选项的内容将会覆盖已有的设定。

在前面的示例文件里,我们定义了一个系统块,ip28,有workingnewdebug3个选项。我们这样来定义我们的PROM变量:

代码 5.5: 使用arcload的PROM设定

(选择arcload作为引导程序:sash64或者sashARCS)
>> setenv OSLoader sash64

(使用“working”内核镜像,定义于arc.cf的“ip28”段)
>> setenv OSLoadFilename ip28(working)

arcload-0.5开始,文件不需要再放在卷头里——它们可以被放在分区内。要告诉arcload哪里去寻找它的配置文件和内核,我们需要设定OSLoadPartition PROM变量。确切的值这里将取决于你的磁盘在SCSI总线的什么位置。把SystemPartitionsPROM变量作为一个引导——只有分区号码需要改变。

注意: 分区是从0开始命名,而不是1,和在Linux里一样

代码 5.6: 告诉arcload哪里去寻找arc.cf

(如果你想从卷头里加载——使用分区8)
>> setenv OSLoadPartition scsi(0)disk(1)rdisk(0)partition(8)

(否则,指定分区和文件系统类型)
>> setenv OSLoadPartition scsi(0)disk(1)rdisk(0)partition(0)[ext2]

全部完成

现在你已经准备好享受Gentoo了!当重启进入到您新装的Gentoo系统之后,请阅读结束您的Gentoo安装来完成剩下的工作。


[ << ] [ < ] [ 主页 ] [ > ] [ >> ]


打印

查看全部

更新于2008年 5月 4日

总结: 在Silicon Graphics机器和Cobalt服务器上,都需要使用引导程序来加载内核。本节解释了如何设置SGI机器的arcboot/arcload和Cobalt服务器的colo。

Sven Vermeulen
作者

Grant Goodyear
作者

Roy Marples
作者

Daniel Robbins
作者

Chris Houser
作者

Jerry Alexandratos
作者

Seemant Kulleen
Gentoo x86开发人员

Tavis Ormandy
Gentoo Alpha开发人员

Jason Huebel
Gentoo AMD64开发人员

Guy Martin
Gentoo HPPA开发人员

Pieter Van den Abeele
Gentoo PPC开发人员

Joe Kallar
Gentoo SPARC开发人员

John P. Davis
编辑

Pierre-Henri Jondot
编辑

Eric Stockbridge
编辑

Rajiv Manglani
编辑

Jungmin Seo
编辑

Stoyan Zhekov
编辑

Jared Hudson
编辑

Colin Morey
编辑

Jorge Paulo
编辑

Carl Anderson
编辑

Jon Portnoy
编辑

Zack Gilburd
编辑

Jack Morgan
编辑

Benny Chuang
编辑

Erwin
编辑

Joshua Kinard
编辑

Stuart Longland
编辑

Tobias Scherbaum
编辑

Xavier Neys
编辑

Joshua Saddler
编辑

Gerald J. Normandin Jr.
审校

Donnie Berkholz
审校

Ken Nowack
审校

Lars Weiler
投稿

张乐
译者

杨珂
译者

叶宝泰
译者

杨小广
译者

vivian.ye
译者

余雷
译者

陈永骥
译者

王国辉
译者

娄东斌
译者

贾震
译者

余鈺炜
译者

陈代焱
译者

范华
译者

沈辰俊
译者

Donate to support our development efforts.

Support OSL
Gentoo Centric Hosting: vr.org
Tek Alchemy
SevenL.net
Global Netoptex Inc.
Bytemark
Edurium
Copyright 2001-2010 Gentoo Foundation, Inc. Questions, Comments? Contact us.