Linux操作系统安装盘的定制_汪伦伟(2)

本文详细介绍了Linux内核补丁的管理,包括新补丁文件的定义和应用,以及如何使用kernel-2.6.spec文件生成RPM包。同时,讲解了操作系统安装盘定制过程,包括comps.xml文件的编辑和生成ISO映象的步骤。
摘要由CSDN通过智能技术生成

Patch10030: mypatch-2.6.5.patch /新加入的补丁文件的定义/

END OF PATCH DEFINITIONS

…………

 |

 然后在文件的后面加入对内核打补丁命令:

   
  



|  |
| --- |
| 

…………

%patch10000 -p1

%patch10030 -p1 /新加入的打补丁命令/

END OF PATCH APPLICATIONS

…………

 |

 如果你还想对内核做其它的修改,你可以修改相应的文件或添加相应的文件,然后修改kernel-2.6.spec文件。当spec文件修改完成之后,你只需要执行 rpmbuild -ba kernel-2.6.spec 就可以生成所需要的RPM包了。另外需要注意的是,以生成内核包为例,假如我们想生成kernel-smp-2.6.5-1.358.i686.rpm 包,在kernel-2.6.spec文件中包含有一些开关选项,比如,在文件的开头需要定义创建哪些内核的RPM包,如:

   
  



|  |
| --- |
| 

%define buildup 1

%define buildsmp 0

%define buildsource 1

 |

 在通常情况下,在执行rpmbuild -ba kernel-2.6.spec 命令后,会创建一个kernel-2.6.5-1.358.i386.rpm、kernel-source-2.6.5-1.358.i386.rpm和源码RPM包kernel-2.6.5-1.358.src.rpm。因此,当你需要创建支持SMP的内核的RPM包时,需要修改kernel- 2.6.spec文件开头时的定义为:

   
  



|  |
| --- |
| 

%define buildup 1

%define buildsmp 1

%define buildsource 1

%define -target_cpu i686

 |

 此外,在文件的开头还需要定义-target\_cpu 为i686,从而创建i686的内核RPM包,并且需要对/usr/lib/rpm目录下面的一些宏重新定义,比如当前目录下面的macros文件,需要重新定义arch 和build\_arch为i686。最后,执行命令 rpmbuild -ba kernel-2.6.spec --with smp 就可以。当然,如果对内核进行了相应的修改,就必须生成多个内核RPM包,以适用于多个arch,如kernel-2.4.18-3-i586- smp.rpm, kernel-2.4.18-3-athlon.rpm等。

 **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) 组列表

 在系统安装时,需要用到一个组中的一些属性,下面就是属性列表以及它们如何使用。一个组被定义在 
 和标记之内.

 一个简单的组定义可以是:

   
  



|  |
| --- |
| 
      somegroup


      
      Sample Group


      
      true


      
      false


      
      This is a silly sample group


      
      


      
      bash


      
      cpio
 |

 下面分别说明组定义中一些参数的含义:


* id:组的id仅仅是在comps.xml文件中作为该组的一个标识,这是必须的;
* name:表示用户可以看到的组的名字,它也是必须的;
* default:它表示在系统安装过程中,当选择定制(custom)安装时,该组是否在缺省情况下被选中。如果没有说明,则缺省情况下为不选中。
* uservisible:它表示该组在缺省情况下是否在安装时可以看到,如果没有说明,缺省设置为YES,为可以看到。
* description:它表示对该组进行简短的描述,这是必须的;
* packagelist:它说明在该组内的一系列安装包,这也是必须的。  
  
packagereq:包名   
  
属性:  
  

	+ type:当进行安装时,判定对应的包是否是组的"强制"部分、或"缺省"部分或"可选"部分。它可以是"mandatory"、"default"或"optional"之一。
	+ requires:它说明只有当它所需要(依赖)的包也安装情况下,此包才安装进系统。

 (2)组层次结构

 它描述了组的树状层次结构,组层次结构定义在 
 和标记之间,由定义的 
 标记组成类。  


  

 一个简单的组层次结构可以如下所述:

   
  
 




|  |
| --- |
| 
      Random Groups


      
      

  
      
      somegroup
 |

  一个类由下面这些属性组成:


* name: 它表示类名,是必须的;
* subcategories: 它表示此类的一些子类,由一列表 
 和 元素组成
	+ subcategory: 前面定义的组的id

 (3)RPM包

 此部分说明要安装的RPM包,它定义在 
 和标记之内。一个简单的RPM包部分可以如:

   
  
 




|  |
| --- |
| 
      bash


      
      


      
      mktemp


      
      bash


      
      glibc


      
      libtermcap
 |

 
* 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 这是主要的。  
  


|  |
| --- |
| 

#cd /usr/lib/anaconda-runtime

#./buildinstall ~/disc1/

 |

 这个脚本命令会在~/disc1/images目录下更新一些的文件。

 4.4 生成新的hdlist文件  
  
当安装时,安装程序需要依赖光盘上的Fedora/base/hdlist文件,它包含的是所有可用的RPM包的必要信息,这些信息在安装过程当中是用来显示每一个包的用途以及解决用户选择软件包后的依赖性问题。

 用以生成hdlist文件的程序叫做genhdlist,它是由anaconda-runtime这个包产生的。现在的genhdlist多了一个新的参数:--withnumbers,是用来记录hdlist文件中每个RPM包的媒介代号。

 分步处理的过程如下:

   
  
 




|  |
| --- |
| 

#rpm -i anaconda-runtime-xxxxx-i386.rpm

#cd /usr/lib/anaconda-runtime

#./genhdlist – withnumbers ~/disc1 ~/disc2 ~/disc3 ~/disc4

 |

  整个过程只需要执行一个脚本,见附录一:kernel-update.sh。

 如果你在系统中添加了RPM包,那么在生成安装盘之前,最好将这四张盘上的内容复制到一个目录下,然后修改附录一的脚本文件,运行脚本,先网络安装一次,看是否存在包的依赖关系问题。如果没有,则可以生成安装盘。

 5 生成iso映象  
  
当前面系统进行网络安装成功后,则可以生成iso映象,然后进行刻盘,执行的操作如下:

   
  
 




|  |
| --- |
| 

build disk 1

cd ~/disc1 /假设我们将第一张盘的内容放置在此外/

mkisofs -R -J -T -no-emul-boot -boot-load-size 4 -boot-info-table -V

 

fedora -b isolinux/isolinux.bin -c isolinux/boot.cat -o /iso/exm-disc1.iso .

/使用mkisofs工具生成iso映象,将生成的iso映象放在/iso目录中/

build disk 2

cd ~/disc2 /采用同样的方法,生成第二个iso,依次。/

mkisofs -R -J -T -V fedora -o /iso/exm-disc2.iso .

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 9
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值