本文之简体中文版由梁昌泰翻译,只是随便翻译了一下的。如果发现翻译什么重大问题, 直接通知 linuxrat@gnuchina.org 或者 beos@turbolinux.com.cn。如果对翻译版没有 信心,不妨看原文。原文链接是: http://cambuca.ldhs.cetuc.puc-rio.br/RedHat7-CDs-HowTo.html ______________________________________________________________________ RedHat7 CD 制作之小型实作指南篇 Miguel Freitas, miguel@cetuc.puc-rio.br v0.1.0, Dec 15 2000 本文所讲述的是变更RPM包和安装程序(anaconda)后重新制作RedHat7安装光盘的方法。 ______________________________________________________________________ 介绍 在我看来,这只是一个小型的实作指南,还不知道会不会继续维护这篇文档呢。:) 这篇文档的写作是为了帮助大家重新制作一个符合自己心意的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