4 操作系统安装盘的定制过程
你 需要将原来操作系统发布盘上的内容拷贝到本机硬盘中,根据有几张发布盘而生成几个目录,比如Fedora Core 2有四张盘,你则需要在系统上生成四个目录,如disc1、disc2、disc3、disc4,分别将这四张盘上内容拷贝到这四个目录中,然后对相应的 RPM包进行更新。
首先找到你想更新的RPM包,将新的RPM替换旧包。当然你也可以根据你的需要新增或删除RPM包,需 要注意的是,你需要在comps.xml文件中将新增加或删除的RPM包名加入某个组件中,并且注意其与其它RPM包的依赖关系,也就是说你所放置的包的 位置要恰当,否则它会依赖于在它之前而没有加入系统的某个RPM包。
4.1 编辑comps.xml文件
在 生成安装盘之前,需要注意对comps.xml文件进行修改。这个文件用来告知安装程序anaconda,用户选择了某个组是应该有哪些包需要安装,定义 了在安装过程中,包是如何被捆绑在一起的。在Red Hat 8.0以前版本的发布盘中,对应的文件为comps,它只是一个简单的文本文件,在Red Hat 8.0之后的版本中,用comps.xml代替了原来的comps文件。comps.xml是一个XML文件,易于对内容进行分析和说明。
comps.xml文件开始是说明xml的版本和DTD断言,然后进入以
|
comps.xml主要由三部分组成,首先是组列表,它 描述了在安装过程中需要的不同的组(或组件),包括组名、组的描述和包含的RPM包;其次是组的层次结构,它将组分成不同的类,并定义了组的一个顺序,从 而可以决定哪些组需要先安装;最后为一系列RPM包以及它们之间的依赖关系。
下面分别介绍comps.xml文件的这三部分:
(1) 组列表
在系统安装时,需要用到一个组中的一些属性,下面就是属性列表以及它们如何使用。一个组被定义在
一个简单的组定义可以是:
|
下面分别说明组定义中一些参数的含义:
- id:组的id仅仅是在comps.xml文件中作为该组的一个标识,这是必须的;
- name:表示用户可以看到的组的名字,它也是必须的;
- default:它表示在系统安装过程中,当选择定制(custom)安装时,该组是否在缺省情况下被选中。如果没有说明,则缺省情况下为不选中。
- uservisible:它表示该组在缺省情况下是否在安装时可以看到,如果没有说明,缺省设置为YES,为可以看到。
- description:它表示对该组进行简短的描述,这是必须的;
- packagelist:它说明在该组内的一系列安装包,这也是必须的。
packagereq:包名
属性:
- type:当进行安装时,判定对应的包是否是组的"强制"部分、或"缺省"部分或"可选"部分。它可以是"mandatory"、"default"或"optional"之一。
- requires:它说明只有当它所需要(依赖)的包也安装情况下,此包才安装进系统。
(2)组层次结构
它描述了组的树状层次结构,组层次结构定义在
一个简单的组层次结构可以如下所述:
|
一个类由下面这些属性组成:
- name: 它表示类名,是必须的;
- subcategories: 它表示此类的一些子类,由一列表
和 元素组成- subcategory: 前面定义的组的id
(3)RPM包
此部分说明要安装的RPM包,它定义在
|
- name:它指的是RPM包名,是必须的。
- dependencylist:它说明此包对应的依赖的RPM包。
- dependency:此包需要的包的名字
4.2 产生完整的comps.xml文件
上述说明的comps.xml文件中的RPM包部分是是自动产生的,为了形成完全的comps.xml文件,需要在系统中安装comps-extras RPM包,然后进行下面的操作:
- 将comps.xml文件中的原来的RPM包部分删除;
- 运行:
/usr/share/comps-extras/getfullcomps.py comps.xml /path/to/tree arch >/root/filelist 在此,/path/to/tree是Red Hat Linux操作系统安装盘内容存储的地方,arch指的是体系结构,为i386。注意的是,假定comps.xml已经存放 /path/to/tree/arch/RedHat/base/目录下,将此输出重定向到一个临时文件,如/root/filelist。 - 将comps.xml文件中最后一行内容(为)删除
- 将前面生成的临时文件添加到comps.xml中
- 再将添加到comps.xml文件中
通 过新增你的包到comps.xml文件,你可以根据你的需要做你自己的发布盘,确信你的包在缺省情况下会被安装。需要注意的一件事是你更新的包与其它包的 依赖关系,这是你需要处理的,要注意你更新的包所应该放置的位置。另外,不要在文件中随意增加或删除其余的空格。在修改comps.xml之前,也最好对 最初的comps.xml做个备份,以备恢复使用。
4.3 重新编译安装程序,调整安装阶段
安 装程序是不可能一次就加载进来的,必须分阶段进行,通常我们就称为"stage"。第一个阶段所用程序很小,只有这样才能从一张软盘、tftp服务器等等 上面加载。通常这个阶段程序包含的只有一个精简过的Linux内核和在后续步骤当中必要的一些驱动程序(比如SCSI)。
要采用一个新的RedHat安装,就会需要很多的映像,最明显的就是引导安装盘本身(从软驱或者光驱安装)的boot.img,但是我们也需要对从硬盘、网络文件系统等安装方式提供支持。
RedHat就此提供了很好的脚本命令,只需一个简单的操作就可以完成所有的操作。这些脚本的工作就是把某些RPM包的内容提取出来,然后用来生成各安装步骤所用程序的映像。
所再强调的是,我们必须保证安装了anaconda-runtime:
#rpm -i anaconda-runtime-xxxxx-i386.rpm
接着进入目录/usr/lib/anaconda-runtime,这里我们会看到一些非常有用的脚本,比如:
- mk-images.i386:包涵有创建启动磁盘时i386的专门设置(通常情况下,网络和pcmcia)以及辅助磁盘驱动程序。在此您可以改变启动映像中所包含的模块,比如说在网络启动磁盘有:
……
NETWORKMODULES="$COMMONMODULES nfs 3c59x eepro100 tulip pcnet32
ne2k-pci 8139too"
……..
- buildinstall 这是主要的。
这个脚本命令会在~/disc1/images目录下更新一些的文件。
#cd /usr/lib/anaconda-runtime
#./buildinstall ~/disc1/
4.4 生成新的hdlist文件
当安装时,安装程序需要依赖光盘上的Fedora/base/hdlist文件,它包含的是所有可用的RPM包的必要信息,这些信息在安装过程当中是用来显示每一个包的用途以及解决用户选择软件包后的依赖性问题。
用以生成hdlist文件的程序叫做genhdlist,它是由anaconda-runtime这个包产生的。现在的genhdlist多了一个新的参数:--withnumbers,是用来记录hdlist文件中每个RPM包的媒介代号。
分步处理的过程如下:
|
整个过程只需要执行一个脚本,见附录一:kernel-update.sh。
如果你在系统中添加了RPM包,那么在生成安装盘之前,最好将这四张盘上的内容复制到一个目录下,然后修改附录一的脚本文件,运行脚本,先网络安装一次,看是否存在包的依赖关系问题。如果没有,则可以生成安装盘。
5 生成iso映象
当前面系统进行网络安装成功后,则可以生成iso映象,然后进行刻盘,执行的操作如下:
|
在生成iso映象之后,需要对它进行测试,你可以将它挂接到某个地方,比如:
|
在生成安装iso(exm-disc1.iso)之后,我们可以将它复制到windows系统中,采用刻录程序进行刻录,然后可以从光盘安装,进行安装测试。
|