BBS水木清华站∶精华区

发信人: ClearMind (锻炼+工作+学习+反省), 信区: Linux        
标  题: [翻译]RedHat 7.0 CD DIY 
发信站: BBS 水木清华站 (Mon Dec 25 10:19:47 2000) 
 
译注:  
我只是随便翻译了一下的。如果发现翻译什么重大问题,不妨告诉我一声。不需要看  
翻译版本的,可以去看原文啦。原文链接是:  
http://cambuca.ldhs.cetuc.puc-rio.br/RedHat7-CDs-HowTo.html  
  ______________________________________________________________________ 
RedHat7 CD制作mini-HowTo  
Miguel Freitas, miguel@cetuc.puc-rio.br  
v0.1.0, Dec 15 2000  
   
  本文所讲述的是在变更RPM包和安装程序(anaconda)后重新制作RedHat 7发行版本的。  
  ______________________________________________________________________  
   
 
介绍  
 
     在我看来,这只是一个mini howto, 我还不知道会不会继续维护这篇文档呢。:)  
这篇文档的写作是为了帮助大家重新制作一个符合自己心意的RH7光盘。这篇东东是在我  
制作包含ReiserFS日志文件系统支持的RH7安装版本的经验上写出来的。  
   
 
基本要求  
 
  - 原始版本的RedHat7 CD, iso映像文件或者这些东东的内容物。  
  - 至少要有1.5G的剩余空间(要制作ISO映像文件则需要更多)。  
  - 安装好的RH7得有编译器,各种实用工具等。  
   
 
1) 重新编译RPM包  
 
     编译RPM包的知识对本文而言是离题的,但是有几个值得一提的地方。从一个已经  
安装好的RH7上重新编译RH7的RPM包是很重要的。举个例子说,如果在RH6.2里面干这些活,  
可是要饱受煎熬的。因为这两个版本的库、编译器、头文件以及rpm工具版本都不尽相同。  
如果您对rpm工具没有什么经验,那就找个rpm源码包src.rpm来体验吧。源码会安装在目录  
/usr/src/redhat下面,然后您就可以开始实践了。如果您想要改变安装程序或者改变安装  
媒介设置(比如因为内核过大,不得不把启动盘上的某个驱动搬到第二步去),那就得安装  
anaconda得源码了。 Anaconda是一个极其复杂得程序,用于管理分区操作、硬件探测、X配  
置、newt、python程序等等。请务必使用来自RH7原始版本的内核头文件来重新编译anaconda,  
因为这个东东实在太依赖这些头文件了。  
   
   
 
2) 更替或者添加新的RPM包  
 
    先来创建两个目录,譬如就是 ~/cd1 和 ~/cd2 吧。把原始版本的RedHat光盘里面的  
内容拷贝到这两个目录里面。这就是您要开工的地方啦。  
 
    我建议一开始就把RPM包放在两个或者多个不同的光盘上。为什么这么做呢?这里有一  
些小小的奥秘,我在后面会提到的。当然了,您可以把所有的文件都复制到同一个地方去,  
然后编辑他们,最后在第四步之前把这些文件分成两份,每份不超过650M字节。  
 
     好了,您现在就可以按照设想改变两个目录里面的那些RPM包了。假设您要把kde1  
升级到kde2吧。您可以从kde.org那里下载RPM包然后替换掉原来的旧包,务必可要万般小心,  
可千万别弄错了哦。您可以把新文件复制到旧包所在的光盘上,删除旧包时请务必小心。  
 
    切记切记!千千万万不要两个光盘都复制同样的RPM包!因为RH7里面提供的genhdlist  
工具(请看后面)不能争取处理重复文件,而且会导致安装时去寻找一个极其疯狂的光盘号  
码,比如象-2172326这样的数字。  
 
    我不清楚RedHat把RPM包安排到第一个盘或者第二个盘的标准是什么。我个人认为可能  
会类似“最重要者优先”吧。事实上也可能看到以最小化安装方式安装RH7的时候,就不会  
要求您放入第二张盘。更进一步细致的观察却表明出这个也不一定是完全正确的。在第一  
张盘上竟然会有catalan和czech字典!众所周知,这两个地方RedHat是不会期望获得最大  
市场份额的。那我还是坚持“最重要者优先”的原则吧。在第一个盘空间不足的时候,就  
该把某些包挪到第二张盘去了。  
 
3) 编辑"RedHat/base/comps"文件  
 
    这个文件是用来告知安装程序anaconda,用户选择了某个组是应该有哪些包要安装。  
如果您曾经使用anaconda安装过系统,您应该知道都有哪些组了(打印机支持、X视窗  
环境、GNOME、KDE等等)。  
 
    编辑cd1/RedHat/base/comps文件,把您可能要添加到某个组的任何包包括进来。  
您可以不需要这一步,就看您要不要变了。  
 
一些例子:  
 
    3.1) 我添加了reiserutils包,里面包含了用于处理ReiserFS分区的程序。当然了,  
这个应该是要安装在系统上的,因为这是能够创建一个新分区的基本要求嘛。这个的重要  
性就跟e2fsprogs-xxx.rpm以及其中的mkfs程序一样。  
 
1 Base {  
  ...  
  e2fsprogs  
  ...  
  reiser-utils    <- 这是Base组里面新添的包 "Base"  
  ...  
}  
   
 
    3.2) 新的KDE2桌面环境需要一个名为libmng的库。您不一定非得把libmng给加到  
comps里面。但是加了进去您就可以在安装过程当中避免软件包校验性报错了。  
   
   
 
4) 生成“RedHat/base/hdlist”文件(使用genhdlist来生成)  
 
    hdlist文件对于以前摆弄过RedHat 5.x、6.x的人来说应该是很熟悉的了。hdlist  
包含的是所有可用包的必要信息。这些信息在安装过程当中是用来显示每一个包的用途  
以及解决用户选择软件包后的依赖性问题。  
 
    用以生成hdlist文件的程序叫做"genhdlist"。这个程序是anaconda-runtime包的  
一部分,安装后是/usr/lib/anaconda-runtime。  
 
    现在的"genhdlist"多了一个新的参数:--withnumbers。是用来记录hdlist文件中  
每个RPM包的媒介代号。  
 
   分步处理的过程如下:  
 
  # rpm -i anaconda-runtime-xxxxx-i386.rpm  
  # cd /usr/lib/anaconda-runtime  
  # ./genhdlist --withnumbers --hdlist ~/cd1/RedHat/base/hdlist ~/cd1 ~/cd2  
 
    切勿改变cd1和cd2的顺序,您可能已经猜到原因了。别忘掉"--withnumbers"!这就够了。  
 
    还有一点,啥时候做到这一步也没有固定时间。我是出于方便的考虑才把它放到这里当  
第4步的。但是有可能这是您所需要做的最后一步。第5步跟这个地方的操作毫无关联。  
 
     如果您没有改变安装程序用的内核、anaconda和其他重要的软件包,到此应该热烈  
祝贺您啦!您现在就可以开刻您的新RH7光盘喽(看第6步)。  
   
 
5) 重新编译安装程序,调整安装阶段  
 
    安装程序是不可能一次就加载进来的,必须分阶段进行,通常我们就称为“stage”  
(我翻译成“阶段程序”大家有没有意见?)第一个步骤所用程序很小,只有这样才能  
从一张软盘、tftp服务器等等上面加载。通常这个阶段程序包含的只有一个精简过的  
Linux内核和在后续步骤当中必要的一些驱动程序(比如SCSI)。  
 
    要采用一个新的RedHat安装,就会有很多的映像需要做出来。最显著的一个就是  
引导安装盘本身(从软驱或者光驱安装),但是我们也需要对从硬盘、网络文件系统  
等安装方式提供支持。  
 
     RedHat就此提供了很棒的脚本命令,只需一个简单的操作就可以统统搞定。这些  
脚本的工作就是把某些RPM包的内容提取出来,然后用来生成各安装步骤用程序的映像。  
 
     再强调一次,我们必须保证安装了anaconda-runtime:  
   
     # rpm -i anaconda-runtime-xxxxx-i386.rpm  
 
     接着进入目录/usr/lib/anaconda-runtime,这里我们会看到一些非常有用的  
脚本,比如:  
 
    5.1) mk-images.i386 - 包涵有创建启动磁盘时i386的专门设置(普通,网络和  
pcmcia)以及辅助磁盘驱动程序。在此您可以改变启动映像中所包含的模块,比方说在  
网络启动磁盘有:  
      ...  
      NETWORKMODULES="$COMMONMODULES 3c509 3c59x 3c90x 8390 ac3200  
         at1700 de4x5 de600 de620 depca dgrs eepro100 eepro hp-plus hp  
         hp100 ne ne2k-pci ni52 old_tulip pcnet32 rtl8139 tlan tulip  
         via-rhine nfs vfat"  
      ...  
 
     5.2) upd-instroot - 这个可以用来从安装媒介中提取RPM包。为了避免浪费空间,  
它提供了在提取RPM包后必须保留的文件的列表(清单中不列举的包将不会复制到任何安  
装阶段程序)。也就是说,如果您要在anaconda映像中包含入一个新的文件,您得列入包  
含该文件的RPM包极其文件名称。再用reiserfs做例子说明:  
      ...  
      PACKAGES="glibc setup openssl python newt libtermcap zlib  
  e2fsprogs util-linux raidtools ... reiser-utils  <- 就在这里啦!  
      ...  
      sbin/ldconfig  
      sbin/mkdosfs  
      sbin/mkreiserfs  <- 这里就是啦!  
      sbin/mke2fs  
      sbin/mkfs.ext2  
      ...  
 
   5.3) buildinstall - 这是主要的。这个很容易使用啦:  
 
      # cd /usr/lib/anaconda-runtime  
      # ./buildinstall ~/cd1/  
   
    剩下的其他脚本会在需要的地方自动调用。需要注意的是,如果您操作的是cd1  
和cd2上的文件(像我一样),那么您得确定每个必须得RPM包都放在了第一个光盘上  
了。尤其是得把第二张光盘上的syslinux-xxx-i386.rpm挪到第一张光盘上来。  
RedHat把这个文件落在了第二张盘上,有可能是因为他们是到最后才开始分配软件包  
的。如果您没有分开这些光盘,那就甭理它啦。千万别是复制而不是移动,否则您就  
会遭遇本文前第4步所提及的错误提示了。  
     这个脚本命令会在~/cd1/images和~/cd1/RedHat/instimage初创建大量的  
文件。最后的一个是nfs网络安装系列文件。因为这个是在RedHat 7.0第二张盘上,  
所以您可以搬动或者不搬动它。  
   
 
6) 创建ISO映像  
 
   这里唯一值得注意的是第一张盘是否能够光盘启动。要实现光盘启动功能,  
就试试如下命令吧:  
 
   # mkisofs -V <label> -b images/boot.img -c boot.cat -J -r -T -o cd1.iso ~/cd1  
   # mkisofs -V <label> -J -r -T -o cd2.iso ~/cd2  
 
   我喜欢用 -J (joliet),这样做出来的盘在 Windowz 也能读。如果您想在  
网络上散步这些ISO映像,考虑做个md5校验文件,这样别人就知道文件下载没有出错。  
 
   # md5sum *.iso > MD5SUM  
 
 
-------------------------全文完!-----------------------------------  
 
-- 
01:00->06:30->07:00->08:00->09:00->12:00 
13:00->18:00->19:00->23:00->01:00 
休息->起床->训练->读书->工作->休息 
工作->休息->自习->训练->休息 
减少灌水时间,多做实质事情。不好说,说不好,不说好。 
每周日回农大打篮球,然后去洗澡。切勿此时来打搅!谢谢... 
 
 
※ 来源:·BBS 水木清华站 smth.org·[FROM: 210.73.87.125] 

BBS水木清华站∶精华区