Linux 系统裁减指南(LiPS)(第三部分)

来源:互联网 发布:文思创新软件 编辑:程序博客网 时间:2024/05/29 10:08
6 引导

6.1 引导过程概述
6.2 几种引导方式
  几种引导方式的粗略比较如下表所示。
优点
缺点
DOC
DOM
FLOPPY
HARDDISK
NETWORK
USB-HDD
容量大,读写可靠
  
6.3 grub引导器
  有了前面生成的Linux内核和根文件系统映像文件后,制作引导盘非常简单。在
动手制作引导盘之前,最好先了解一下grub引导器。
  Grub是一个通用的多引导加载软件,与较早期多数Linux发行版本提供的另一个
引导器lilo相比,grub的功能更强大、设置更方便、更灵活。因此本项目选用grub
作为引导器软件。
  本文档不是grub的教学文档,所以有关grub的详细用法,请参考其他有关文档
。这里仅强调几点:
O 引导盘的文件系统可以是ext2,ext3,msdos (FAT),vfat (FAT32),等等;
O grub表示硬盘、分区的方式与Linux的方式不同。Linux系统的IDE硬盘表示为/de
v/hd{a,b,c,d},SCSI设备表示为/dev/sd{a,b,c,d,…},分区从1开始编号,比如P
rimary Master IDE硬盘的第二个分区是/dev/hda2;而grub的硬盘(包括IDE和SCS
I)统一从0开始编号,分区也是从0开始编号,比如系统中的第一个硬盘是(hd0),
其第一个分区是(hd0,0)。
O 在grub的提示符下面输入命令和参数时,按TAB键可以自动补全。
6.4 USB引导
  使用USB引导盘有很多好处,比如说,容量大、读写可靠,不占用IDE接口,携
带方便等等。
6.4.1 制作步骤
6.4.1.1 创建文件系统
  首先,必须在USB盘上面创建文件系统(也就是格式化)。你几乎可以使用gru
b支持的所有文件系统,包括常见的各种文件系统,比如ext2,ext3,FAT,FAT32等
。但是根据我的经验,需要注意的是:
O 最好不要使用FAT,即msdos,因为FAT的文件名有“8.3”的限制,所以象“grub
.conf”这种文件名就被截断成了“GRUB.CON”。
O FAT和FAT32都不能表示符号链接文件,虽然有变通的方法,即将文件再复制一份

  顺便说一下在Linux下面怎么访问USB盘。
  如果系统中没有其他的SCSI设备,那么插在USB 1接口上面的USB盘的设备名为
/dev/sda,其分区为/dev/sda1。依此类推。一般插入USB盘后,窗口中会出现驱动
程序输出的一些信息,其中有sd?的字眼。接下来就跟访问普通的硬盘分区没有什么
两样了。
#mke2fs /dev/sda1
#mount –t ext2 /dev/sda1 /mnt
  注意:Redhat 7.3不支持Intel 845系列芯片组的主板。
6.4.1.2 复制文件
  按照下面的列表,复制文件(包括目录结构)到USB引导盘:
备注
/boot/
bzImage
或者vmlinuz
initrd.img
/grub/
grub.conf
menu.lst
符号链接
stage1
stage2
6.4.1.3 安装grub
  安装grub到USB盘的引导扇区。假设系统有一块IDE硬盘,这时USB盘是grub看到
的第二块“硬盘”,所以表示为(hd1)。
#grub
grub> root (hd1,0)
grub> setup (hd1)
  root命令告诉grub,内核文件所在的位置。Setup命令安装grub到hd1的引导扇
区,如果是setup (hd1,0),则安装到第一个分区(即/dev/sda1)。
  上述命令序列也可以通过执行脚本完成。
6.4.1.4 用USB盘引导系统
  在用新制作的USB引导盘引导之前,还需要确认BIOS的一个设置,即第一个启动
设备应该设置为“USB-HDD”。
  OK,插上USB盘,试一试。
6.5 提示
6.5.1 版本问题?
  我们的项目开始的时候用Redhat 7.3,但是后来做USB引导盘时发现,我们的环
境不支持USB盘。我想Redhat 7.3应该是支持USB盘的,因为我以前在7.1下面就用过
。那么有可能是主板的问题,i845的芯片组比Redhat 7.3要新,也许是没有该芯片
组的正确驱动。
  后来在Redhat 7.3下更新了内核,使用2.4.20版本的Linux内核即可正常支持U
SB盘。
  然而还有一个问题,Redhat 7.3的GRUB版本是0.91,在使用中发现,制作USB引
导盘没有问题,但是一旦你改变USB盘的文件(比如复制一个新的文件上去),本来
可以引导的USB盘就不行了。
  而Redhat 9.0使用的是GRUB 0.93,就没有上述问题,并且使用USB盘也没有问
题。也就是说,使用Redhat 9就可以了。不过Redhat 9集成的其他很多软件也有变
化,比如Apache升级到了2.0版本,以前的httpd.conf配置文件要修改过之后才能正
常使用;另外quota接口也有变化。
  因此改变版本需要一定的代价,究竟使用什么版本应该综合考虑,最好在项目
开始时就做出正确的选择,并保持稳定。
  
  


7 远程串口控制台

7.1 概述
  
7.2 配置方法
7.3 提示
7.4 Linux 远程串口控制台指南
  (这是我以前写的一份简单的文档,曾经贴到网上,附在这里供参考)
  Linux 远程串口控制台指南
  
  dot <anonymou@163.com>
  Dec 27, 2002
  
  2002年圣诞节期间,我在 Redhat Linux 7.0 (kernel 2.2.16-22) 平台上配置
了远程串口终端,整个过程基本顺利,但是也经历了一些意想不到的波折,幸好最
终是成功了的。乘着记忆还比较清晰的时候,写下这篇文档,以供自己和他人参考

  
  首先参考 "Linux-Remote-Serial-Console-HOWTO",该文档已经足够详尽,按
要求一步步地做即可。该文档描述的是 Redhat 7.2 平台,个别地方跟 7.0 有些差
异,不过问题不大。
  
  要注意的问题主要是:
  
  * 串口直连电缆
  
  开始我并没有在意这个问题,我手头上有一根以前做的直连电缆,是只用了3根
线的那种(2、3交叉,5对接),因此 HOWTO 文档中讲电缆制作的章节我就跳过去
了,没有仔细看,以为我这根电缆就可以了。事实也给人以这种假相:当我按照文
档的说明完成了配置文件的修改,重新引导 Linux 机子,这时在 Windows 的超级
终端中确实显示了所有该显示的信息,看起来没问题。然而接下来配置 getty 时就
不行了,应该出现在超级终端中的 login: 提示符死活不肯出现。以为是 getty 软
件的问题,先后测试了 getty 和 mgetty,都不行。后来在 quickmouce 的提醒下
,又仔细看文档,按照 11.3 节的图 11-1 重新制作了串口直连电缆,才解决问题

  
  * getty 软件
  
  HOWTO 文档中已经指出,mingetty 不支持串口终端,所以这个软件要首先排除
(mingetty 的手册页中也有相关说明)。而 Redhat 缺省安装的就是这个软件,所
以要重新下载安装其他的 getty 类软件。文档中也已经列出了几种常用的 getty
的变种。
  
  来说说 mgetty 先。为什么我先使用了这个软件呢,一是因为 Redhat 7.0 的
安装盘上面有它的 RPM 包,直接拿来装很方便,另外是因为 mingetty 的手册页中
推荐使用 mgetty 。结果是 mgetty 运行后在日志文件中报告大量错误,莫名其妙
。我想可能是这个光盘上的版本老了,于是上网下载了比较新的版本 mgetty-1.1.
25-5.i386.rpm ,运行之后情况好多了,似乎要成功的样子。在没有使用新的串口
线之前,login: 出不来,但是在超级终端中敲的字符 mgetty 可以收到(从日志中
看的出来);换了新制作的串口线之后,第一次!成功了,一切都象预期的那样,
我可以从超级终端登录。可是当我退出想再登录一次,就不行了,甚至我把两台机
子全部重启也不行啦。我又试用 Linux 的 minicom 终端来连接,也是只成功了一
次,就再也不行了。真是怪哉,脑袋都快想破了,也不知道是为什么。后来终于怀
疑 mgetty 有问题,换了其他的,天哪,终于解脱了。不知道后面更新的版本是否
可以,我是没有劲去试了。
  
  再来说说 agetty 。其实没有什么好说的,因为我根本没有用过这个。我本来
想试一下的,但是从网上下载安装太麻烦了。下载了 agetty-2.11w-2.i386.rpm ,
安装时 RPM 说要先安装 login 包,然后又要求什么 pam 包,然后又需要 awk ,
真是 faint 了,太麻烦了,所以最终我也没有安装它。
  
  最后说 getty 啦。也就是 HOWTO 文档中所谓的 “传统” getty 。我下载的
RPM 包的名字叫 getty_ps-2.0.7j-9.i386.rpm 。当我正在为 mgetty 的问题头疼
的时候,换成它之后就一切 OK 了。
  
  * 终端软件
  
  Windows 下面可以用超级终端、NetTerm,Linux 下面有 Minicom 。都比较好
用,注意参数配置与目标机的串口一致。
  
  * 修改过的配置文件列表
  
  /etc/lilo.conf
  /etc/inittab
  /etc/gettydefs
  /etc/securetty
  /etc/makedev.d/linux-2.2.x
  /etc/security/console.perms
  /etc/sysconfig/init
  /etc/sysconfig/kudzu
  
  * 再谈串口直连电缆
  
  这次调试在串口直连电缆上面花费了不少力气,对它们的了解也增加了不少。
以前以为直连电缆就是接 3 根线,其实不然。只用了 2、3、5 引脚的直连电缆不
能提供握手信号,因此如果软件需要使用 CTS/RTS 或者 DTR/DSR 流控,就需要连
接更多的引脚。
  
PC DB9 DB9
-------------------- -----------------------
RxD Receive Data 2 <----- 3 TxD Transmit Data
TxD Transmit Data 3 -----> 2 RxD Receive Data
|--> 6 DSR Data Set Ready
DTR Data Terminal Ready 4 --|--> 1 DCD Carrier Detect
GND Signal Ground 5 ------ 5 GND Signal Ground
DCD Carrier Detect 1 <--|
DSR Data Set Ready 6 <--|-- 4 DTR Data Terminal Ready
RTS Request To Send 7 -----> 8 CTS Clear To Send
CTS Clear To Send 8 <----- 7 RTS Request To Send
RI Ring Indicator 9 (not used)
  
  上面是两端都是 DB9 接头的标准 NULL MODEM 电缆的接线图,可以提供全部握
手信号。这也是 Remote-Serial-Console-HOWTO 中要求的直连电缆做法。我做通串
口控制台使用的就是这种电缆。
  
  如果你打算自己制作电缆,就会发现一些问题。我们一般利用网线(双绞线)
来做,这种双绞线是 8 芯的,而按照图示的连接方法则需要 9 根线。因此最简单
的方法是用那种很多芯的排线来做,需要多少根割多少根(最好是彩色的,不容易
弄混)。后来我想,我们用到的其实就是 CTS/RTS 流控信号,到 2000 年为止 Li
nux 还不支持 DTR/DSR 流控,应该用不了这么多线。于是我就用网线做了根不完整
的直连电缆:2、3 交叉,5 对接,7、8 交叉,还空 3 根线,就把 1、4 也交叉连
上了,结果是用了 7 根线,还空 1 根,与上面比只是少了 4、6 交叉,也就是没
有 DTR/DSR 信号。事实证明这样也是通的。我猜想 1、4 交叉不要应该也是通的,
只是没有试过,已经焊上去懒得再弄了。
  
  关于串口方面的更多内容可以参考 "Linux-Text-Terminal-HOWTO" 和 "Linux
-Serial-HOWTO" 文档。
  
  * 为什么要用串口终端(控制台)?
  
  为什么费劲做这个 Serial Console 呢?最容易想到的理由是省钱,呵呵,省
掉了显卡、显示器、键盘,只剩下一个 "Box",多好玩。
  
  说正经的,这种做法在嵌入式系统的开发中也是很有价值的。现在很多人都在
利用 X86 平台做嵌入式系统开发,甚至做产品。我曾经测试过清华某某做的 foob
ar 服务器,镜像光盘用的,卖给你的就是一个主机,我自己给接上显示器、键盘,
开机就是 Linux ,还可以进入单用户模式,两分钟就把 root 口令改了,你说这样
的服务器有什么安全性可言?如果能够屏蔽本地控制台,配置串口终端,不是更“
象”一个产品吗?
  (完)




8 系统安装光盘

8.1 概述
  本节介绍一种系统安装光盘的制作方法。安装光盘用于产品阶段的生产安装。
因此该安装光盘必须是可引导的、简单好用,并且一般不包含源代码。
  制作可引导光盘的方法有很多种,我们用了一种最简单的方法,就是拿来一个
可引导光盘的ISO映像,然后做必要的修改以满足我们的要求。
  请准备Redhat 9的第一张安装光盘,我们将要用到的文件是 /images/boot.is
o。(其他发行版本应该也可以,只要原理是一样的。)
  另外如果你的工作平台是Windows,请准备WinISO 5.3软件,用来编辑光盘ISO
映像文件。
  当然如果你要烧盘测试的话,还要准备刻录机和CD-RW或者CD-R光盘。
8.2 boot.iso光盘的文件结构分析
  用WinISO打开boot.iso即可看到该光盘的文件(其实Redhat 9第一张安装光盘
的/isolinux目录就是boot.iso解开后的内容)。下面是文件列表:
[xmdong@lips isolinux]$ ls
boot.cat initrd.img options.msg snake.msg vmlinuz
boot.msg isolinux.bin param.msg splash.lss
general.msg isolinux.cfg rescue.msg TRANS.TBL
  其中关键的文件是boot.cat,initrd.img,isolinux.bin,isolinux.cfg和vm
linuz;isolinux.cfg是如何引导的配置文件,我们主要修改这个文件即可;initr
d.img和vmlinuz分别是初始化RAM盘和内核,其作用在前面章节中已经详细描述过;
另外两个文件是光盘引导需要的,不动它。
  其余的*.msg文件是一些引导过程中可能会显示的文本信息,可以不管;splas
h.lss是引导时显示的一个图片,也可以不管。
  下面来看看isolinux.cfg的内容。
default linux
prompt 1
timeout 600
display boot.msg
F1 boot.msg
F2 options.msg
F3 general.msg
F4 param.msg
F5 rescue.msg
F7 snake.msg
label linux
kernel vmlinuz
append initrd=initrd.img
label text
kernel vmlinuz
append initrd=initrd.img text
label expert
kernel vmlinuz
append expert initrd=initrd.img
label ks
kernel vmlinuz
append ks initrd=initrd.img
label lowres
kernel vmlinuz
append initrd=initrd.img lowres
  这个配置文件的语法结构跟其他引导器的配置文件,比如grub.conf或者lilo.
conf,非常类似,比较好懂。如果再对照光盘引导安装Redhat的实际过程看一下,
基本上不需要什么解释就可以理解。其中以label开头的每个小节是一种引导配置,
缺省(或者timeout后)以label linux引导。每个配置的第一句,kernel指定引导
所用的内核,第二句append指定内核引导参数(主要说明initrd文件的位置,以及
其他参数)。
8.3 制作步骤
1) 复制boot.iso,用WinISO打开;
2) 解放出isolinux.cfg文件,并从光盘映像中删除之;
3) 修改配置文件isolinux.cfg;
4) 制作bzImage和initrd.img,这两个文件用于光盘引导至一个比较正常的Linux系
统下,包括常用的工具软件和服务,我们要在这个环境下进行产品的安装;
5) 将修改后的isolinux.cfg以及initrd.img,bzImage加入光盘;
6) 准备一个setup目录,将产品安装需要的文件和脚本放在这个位置,然后将setu
p目录加入光盘;
7) 删除没有用到的文件,也可以不管,除非加入文件时遇到冲突,必须先把原来光
盘上的文件删除或者改名;
8) 存盘退出,刻录光盘。
  下面是一个修改后的isolinux.cfg配置文件的例子,很简单:
default linux
prompt 1
timeout 600
label linux
kernel bzImage
append initrd=initrd.img ramdisk_size=65536 root=/dev/ram0
  
  
9 源代码(配置文件和脚本)
9.1 lips.conf

 
原创粉丝点击