烧制一个RedHat的CD之mini-HOWTO <author> Morten Kjeldgaard, <tt/mok@imsb.au.dk/ 和 Peter von der Ahé, <tt/pahe+rhcd@daimi.au.dk/,<newline> 李冬(翻译)<tt/lidong@wh.027.net/ </author> <date>v1.29, 1999年9月22日 <abstract> 本文介绍了如何根据Red Hat Linux的发行版本制作等同于Red Hat所发行的商业版本的CD。在这里将要介绍发行版本的结构,以及包括更新RPM包在内的流程。前提是拥有一个好的网络连接,以及一个CD刻录机。 </abstract> <toc> <!-- --> <sect>概述<p> 有一些原因可能会促使你制作自己的CD。可能你还不够富有,想节省<url url="http://www.redhat.com/" name="Red Hat发行版本">之50美元的费用。或者,你想制作一个包括了所有最新的更新的版本的CD发行。这是一个重要的原因,因为每次在Red Hat有了一个重要的发行版本之后,总有一些更新,而其中有一些和安全是有关的,有关情况请查询<url url="http://www.redhat.com/corp/support/errata" name="errata page">. <sect>Anatomy of the Red Hat FTP site<p> 以Linux社区的精神,Red Hat Software将其应用于不同平台上的Linux发行版本放在其FTP站点上提供下载,这都可以从顶级发行目录中获得。 <sect1>顶级目录<label id=sec-top-level><p> RedHat Linux 6.0的顶级目录(<url url="ftp://ftp.redhat.com/pub/redhat/redhat-6.0/" name="pub/redhat/redhat-6.0">) 包括了不同平台的发行版本,而其中一个目录包括了自从发行之后的更新以及程序包的更正。 <tscreen><verb> SRPMS/ alpha/ i386/ sparc/ </verb></tscreen> 在这个文件中,我们以i386版本为例。在本文中所给出的程序几乎可以在所有Red Hat支持的平台上工作, (Alpha, SPARC, ppc等),但是我们仅在i386平台上进行了测试。(作者愿意听取一些额外的意见),i386目录的根目录如下: <tscreen><verb> -rw-r--r-- 1 root root 18391 Mar 19 1999 COPYING -rw-r--r-- 1 root root 3187 Apr 19 19:56 README -rw-r--r-- 1 root root 2751 Sep 19 1997 RPM-PGP-KEY drwxr-xr-x 5 root root 1024 Sep 12 08:03 RedHat/ -rwxr--r-- 1 root root 2048 Apr 20 14:33 boot.cat drwxr-xr-x 7 root root 1024 Sep 17 08:04 doc/ drwxr-xr-x 6 root root 1024 Aug 3 16:17 dosutils/ drwxr-xr-x 2 root root 1024 Aug 3 16:02 images/ -rw-r--r-- 1 root root 222789 Sep 17 08:04 ls-lR -rw-r--r-- 1 root root 32371 Sep 17 08:04 ls-lR.gz drwxr-xr-x 4 root root 1024 Sep 17 08:04 misc/ </verb></tscreen> <tt/doc/ 目录包括了丰富的文档信息。更重要的事是,RedHat安装指南的HTML版本可以在<url url="http://www.redhat.com/corp/support/manuals/RHL-6.0-Manual/install-guide/manual" name="doc/rhmanual/manual/">找到。另外,还有一些FAQ以及整个HOWTO和mini-HOWTO的全集。 <tt /images/ 目录包括了必须要拷贝到软盘中启动软盘的映像文件。在大多数最新的发行版本中(6.0),有两个磁盘映像。启动映像被称之为<tt/boot.img/,这是在从CD-ROM中直接安装时所必需的。如果从一个本地硬盘安装,NFS装载磁盘或者FTP是必须的,这个时候就需要补充磁盘映像<tt/supp.img/ 。请看 <ref id="sec-install" name="从CD安装"> 参照详细信息。 <tt/misc/ 目录包括了源代码,以及一些为安装所需要的可执行文件。 <sect1> "RedHat" 目录 -- 发行版本的核心<p> 目录树种最为重要的部分就是<tt/RedHat/目录。 <tscreen><verb> drwxr-xr-x 2 root root 23552 Aug 3 16:02 RPMS/ drwxr-xr-x 2 root root 1024 Aug 3 16:02 base/ -rw-r--r-- 1 root root 0 Jan 19 1999 i386 drwxr-xr-x 5 root root 1024 Sep 11 08:03 instimage/ </verb></tscreen> <tt/RPMS/ 目录包括了Red Hat发行版本的主要部分,其中包括了一个RPM(Redhat Package Manager)文件的集合。一个RPM包典型地包括了可执行文件以及相关的配置文件和文档。请看<ref id=sec-rpm name="RPM包"> 参照详细信息。 <tt/base/ 目录包括了不同的在安装过程中所需要的文件。例如, <tt/comps/ 文件,定义了在"Choose packages to install" 阶段中定义的的<em/components/ (包组).请看 <ref id="sec-comps" name="组件文件">得到更多的信息以及使用信息。另外一个在<tt/base/ 目录的重要的文件是<tt/hdlist/ 文件,其中包括了全部在 <tt/RPMS/ 目录的的头部区域。 这意味著所有在RPM包的相互关联性可以通过阅读 <tt/hdlist/ 文件获得,而并不必要阅读所有的的RPM包,这对FTP方式的安装来说是非常便利的。 <tt/hdlist/ 的另外一个用途就是映像包名到文件名,例如 以<tt/perl/ 代替 <tt/perl-5.004-6.i386.rpm/。这意味著如果你想从RedHat进行混合式更新的话(请看<ref id="sec-updates" name="混合更新">)或者假如你自己的报到<tt/RPMS/目录的话 ,你需要更新<tt/hdlist/,这在稍候的 <ref id="sec-new-hdlist" name="产生hdlist文件">部分中将要介绍。 <tt/instimage/ 目录包含了一个基本的文件系统,其中包括了安装过程中所需要的一些程序和共享库。 <sect1>"更新"目录<p> <tt>/pub/redhat/updates</tt> 目录包括了自从版本3.0.3之后所有的RedHat发行办的更新。这是用来找到因为各种原因被更新的软件包的所在。你应当特别注意安全方面的更新。无论何时有了一个补丁,在RedHat's errata页中总可以找到。在<tt/updates/ 目录中最重要的文件有: <tscreen><verb> drwxrwxr-x 8 ftpuser ftpusers 8192 Aug 18 08:05 5.1/ drwxrwxr-x 9 ftpuser ftpusers 8192 Sep 18 08:07 5.2/ drwxrwxr-x 9 ftpuser ftpusers 8192 Sep 18 08:07 6.0/ lrwxrwxrwx 1 ftpuser ftpusers 3 Aug 25 13:14 current -> 6.0/ </verb></tscreen> 每一个目录的结构都类似于在<ref id="sec-top-level" name="顶级目录">所描述的一样。 <sect>RPM包<label id=sec-rpm><p> Red Hat发行版本的主要部分包括了一套RPM (Redhat Package Manager)包。一个典型的包括二进制可执行文件以及相关的配置文件和文档。<tt><url url="http://www.rpm.org" name=rpm></tt>程序是一个强大的包管理器,它可被用作安装、查询、校验、更新、删除以及建立以RPM格式的软件包。<tt/Rpm/ 方便地维护了一个所有被安装的软件包的数据库,因此被安装的软件的信息可以随时被获取。 发行版本中的二进制RPM文件在系统运行其发行版本本身的时候被建立。这一点很重要,因为大多数的包内的程序依赖于共享库。从RedHat version 5.0开始,GNU标准的C库版本2(纯64位)就开始被使用了。这个版本的库通常被称为tt/glibc/ 或者在Linux中:tt/libc 6/。所有的在发行版本中的可执行文件与这个库相链接。如果你试图从一个不同的发行版本中安装二进制文件,他们很可能不能工作,除非你为了向后兼容性安装了libc5包。 RPM包的名字包括了后缀.<em>arch</em>.<tt/rpm/,其中<em/arch/ 是一种结构,对于Intel平台的二进制文件来说包含有<tt/i386/ 的值。你安装的包必须符合机器中共享库的版本。<tt><url url="http://www.rpm.org" name=rpm></tt> 在确认情况确实如此的时候通常工走得很好。然而,通过使用Redhat安装启动磁盘,可以确认正确的RPM包之集合被安装在机器上。 如果你发现一个RPM包没有在安装工程中被安装的你的系统中,不要绝望!在任何时候(作为根用户),你都可以安装RPM包,例如: <tscreen><verb> rpm --install WindowMaker-0.18-1b.i386.rpm </verb></tscreen> 你甚至可以直接从Internet直接安装,只要你知道一个RPM包的URL: <tscreen><verb> rpm --install ftp://rufus.w3.org/redhat-contrib/noarch/mirror-2.9-2.noarch.rpm </verb></tscreen> RPM包的另外一个版本包括了建立二机制文件的源代码。这些包有后缀如: <tt>.src.rpm</tt> ,并且存放在tt/SRPMS/ 的目录中。这些包在安装CD中部是必要的。而且事实上,在一个74分钟的CD中叶没有足够的空间来存放这些文件。当然,你可以制作一个单独的包含SRPM的CD。 <sect>获取你的发行版本的本地拷贝<p> 你需要可以通过配有一个CD刻录机的计算机可以读写的的一份存放在可写的磁盘中发行版本的拷贝。如果你想混合最新的更新版本,那么这个目录还需要可以被一个Linux机器上获取,这可以是一个本地磁盘,另外的机器上一个NFS装载的磁盘,或者是JAZ盘。 你可以从一个Redhat CD拷贝发行版本,或者从ftp获取。如果你选择使用ftp的话,那么获取正确的发行版本的拷贝的最好办法是使用<tt /mirror/ 包 Mirror是一个复杂的用于比较远端站点上和本地目录中的内容。它使用ftp用于获取远端而非本地站点的文件,并且删除那些不在原段站点上的存在于本地站点的文件。mirror包可以以一个RPM包从<url url="http://rufus.w3.org/linux/RPM/mirror.html" name="rufus.w3.org">。获取,或者从其他的一些站点获取。 制作你的mirror配置文件的本地拷贝 <tt/mirror.redhat/,同时在文件的顶部编辑相关的一些内容。在default部分之后,定义了这些包: <tscreen><verb> package=updates site=ftp.sunsite.auc.dk exclude_patt=(alpha/|sparc/|SRPMS/) remote_dir=/disk1/ftp.redhat.com/pub/redhat/updates/6.0 local_dir=/jaz/updates/6.0 package=dist site=ftp.sunsite.auc.dk exclude_patt=(alpha/|sparc/|SRPMS/) remote_dir=/disk1/ftp.redhat.com/pub/redhat/redhat-6.0 local_dir=/jaz/redhat-6.0 </verb></tscreen> 以下的命令将要下载整个RedHat目录树到你的本地磁盘之中。<em/*请慎思!*/ ,在你做这个工作之前,你要大概下传大约500MB的数据。 <tscreen><verb> mirror -pdist mirror.redhat </verb></tscreen> 这将镜像Red Hat FTP到你的本地磁盘之中。一个Red Hat发行版本的内容不会在发行之中改变。因此你只需要现在这个包: <em/只有一次!/。所有对发行版本的改变都在 <tt/updates/目录中。这样,如果你想要保持一个随时更新的Red Hat发行版本的更新版,你只需要保持 <tt/updates/ 目录位最新的就可以了。这个工作使用命令: <tscreen><verb> mirror -pupdates mirror.redhat </verb></tscreen> 你可以定期地来做这个工作,比如说,每星期一次,通过一个cron脚本。这个RedHat发行版本在全世界的大多数的FTP服务器上都是可以可以做到的,他们每天从主站点:<url url="ftp://ftp.redhat.com/pub">进行更新。你应当选择一个靠近你的FTP站点。请参考<url name="RedHat FAQ" url="http://www.redhat.com/support/docs/rhl/RedHat-FAQ/RedHat-FAQ-12.html#ss12.1">。 <sect>混合更新<label id=sec-updates><p> 为了混合更新,你需要由一个从一台Linux机器上拥有对发行目录的写权限, 以及安装一个<url url="http://www.rpm.org" name=rpm> 。这里需要进行三步工作。 <enum> <item>更改文件保护模式 <item>更换更新的RPM包 <item>产生hdlist文件 </enum> If you maintain a mirror of the <tt/updates/ directory, you can at any time produce a CD including the current updates by repeating these steps. 如果你在 <tt/updates/ 目录维护一个镜象的话,那么你可以在任何时候通过重复这些步骤制作CD。 <sect1>更改文件保护模式<p> 在安装过程中,有些文件直接从从CD运行。但是不幸的是,FTP程序并不是总是保留被复制的文件和目录的保护模式。这样,就有必要确定程序是否有程序、SHELL脚本和共享库执行权限,这需要在目录被烧制到CD之前完成。通过运行在发行版的本地拷贝的 <tt/updatePerm/ 脚本可以做到这一点: <code> #!/bin/bash RHVERSION=6.0 LIST=/tmp/er3hd3w25 CDDIR=/jaz/redhat-${RHVERSION} # Find all directories, and make sure they have +x permission find $CDDIR -type d -exec chmod -c 755 {} \; # Find all files that are executables, shell or perl scripts find $CDDIR -type f | file -f - | grep -v RPM \ | egrep -i 'executable|perl|bourne|shell' | cut -f1 -d: > $LIST # Find shared libraries find $CDDIR -name \*.so >> $LIST # Make them executable while read file do if [ ! -x $file ] ; then chmod -c 755 $file fi done < $LIST /bin/rm $LIST exit 0 </code> <sect1>更换更新的RPM包<p> 下面的这个脚本叫做 <tt/updateCD/ ,其功能为从更新目录中复制所有的文件到 RPMS 目录。这个脚本用了一些巧妙的RPM技巧来确定在UPDATES目录下的哪个包更新。就的包被移到 <tt/${OLD}/ 目录中。 <code> #! /bin/bash # This script updates rpms in a RedHat distribution found in $RPMDIR. # The old rpms will be placed in $OLDDIR. # The new rpms should be located in $UPDDIR. # The new images are in $IMGDIR # The images to be updated are in $OMGDIR # The architechture is $ARCH. RHVERSION=6.0 ARCH=i386 CDDIR=/jaz/redhat-${RHVERSION} RPMDIR=${CDDIR}/${ARCH}/RedHat/RPMS UPDDIR=${CDDIR}/updates/${ARCH} IMGDIR=${CDDIR}/updates/images/${ARCH} OMGDIR=${CDDIR}/${ARCH}/images OLDDIR=${CDDIR}/old if [ ! -d $OLDDIR ] ; then echo making directory $OLDDIR mkdir $OLDDIR fi allow_null_glob_expansion=1 for rpm in ${UPDDIR}/*.rpm ; do NAME=`rpm --queryformat "%{NAME}" -qp $rpm` unset OLDNAME for oldrpm in ${RPMDIR}/${NAME}*.rpm ; do if [ `rpm --queryformat "%{NAME}" -qp $oldrpm` = "$NAME" ]; then OLDNAME=$oldrpm; break fi done if [ -z "$OLDNAME" ]; then echo $NAME is new cp -pv $rpm $RPMDIR else if [ `basename $rpm` != `basename $OLDNAME` ]; then mv $OLDNAME $OLDDIR cp -pv $rpm $RPMDIR fi fi done # Copy new boot image files to the right place... for newfile in ${IMGDIR}/* ; do file=${OMGDIR}/$(basename ${newfile}) if [ $newfile -nt $file ] ; then cp -pv $newfile $file fi done exit 0 </code> <sect2>RedHat 6.0的重要注意事项:<p> 一些RPM包,特别是kernel和kernel-smp包,需要文件名但不是在包名中包括文件的平台名称,例如,“kernel”包需要如下所示: <tscreen><verb> kernel-2.2.5-22.i386.rpm kernel-2.2.5-22.i586.rpm kernel-2.2.5-22.i686.rpm </verb></tscreen> 但是对于所有这三个执行rpm -qp 返回的都是"kernel"作为包名。 如你所看到,这种情况“迷惑”了 <file>updateCD</file> 脚本,其结果是只有最后一个得到正确的拷贝。先前的两个虽然被拷贝了,但是被移到了 $OLD 目录中。另外,RedHat还应当给予其不同的名称。现在最好的解决办法就是在运行了<file>updateCD</file> 之后手工地移动这些包。(感谢Kyle B. Ferrio kyle@U.Arizona.EDU) Joshua Sarro <mthed@shore.net> 提供了一个PERL脚本叫做<file>updateMirror.pl</file>可以用来处理这种情况。你可以从<url url="http://imsb.au.dk/~mok/linux/doc/updateMirror.pl">获得这个脚本。 <sect1>创建一个新的hdlist文件<label id=sec-new-hdlist><p> 当从CD安装的时候,CD中的安装程序需要依靠文件<tt><file>RedHat/base/hdlist</file></tt> 来描述哪个包可以在CD中获得。<tt>hdlist</tt> 文件可以通过程序<tt><file>misc/src/install/genhdlist</file></tt>所创建。这个程序必须有以发行本的根目录到其的绝对路径作为唯一参数运行。以下是<tt/updateHdlist/ ,用于调用这个程序。 <code> #!/bin/bash RHVERSION=6.0 ARCH=i386 echo generating hdlist... CDDIR=/jaz/redhat-${RHVERSION} GENHDDIR=${CDDIR}/${ARCH}/misc/src/install chmod u+x ${GENHDDIR}/genhdlist chmod 644 ${CDDIR}/${ARCH}/RedHat/base/hdlist ${GENHDDIR}/genhdlist ${CDDIR}/${ARCH} || echo "*** GENHDLIST FAILED ***" exit 0 </code> 注意:当在<tt>RedHat/RPMS</tt>混合了更新之后,你的发行版的拷贝不再是一个RED HAT发行版站点的镜象。事实上,它更新!这样,如果你试图镜象这个发行版,已经被更新的旧版本的RPM将被再一次下载,而更新的版本将被删除。 <sect2>RedHat 5.2的重要注意事项<p> 如果用RedHat version 5.2 或者更早的版本发行,如果在 <tt>RedHat/RPMS</tt> 包含了<em>非</em> RPM文件的话, <tt>genhdlist</tt>将会崩溃!这会导致一些问题。因为在5.2的版本中,在 <tt>RedHat/RPMS</tt> 中有一些非RPM文件叫做<tt/ls-lR/以及<tt/ls-lR.gz/ ,这样,你必须从这个目录中移除所有的非RPM文件。或者,你可以使用下列的一个补丁于 <tt><file>misc/src/install/genhdlist.c</file></tt> ,然后从新编译。这个补丁可以似得<tt/genhdlist/ 忽略任何非RPM的文件。 <code> *** genhdlist.c.orig Fri Nov 27 12:08:13 1998 --- genhdlist.c Fri Nov 27 12:08:20 1998 *************** *** 12,23 **** --- 12,26 ---- #define FILENAME_TAG 1000000 + /* Not used apparently... + int tags[] = { RPMTAG_NAME, RPMTAG_VERSION, RPMTAG_RELEASE, RPMTAG_SERIAL, RPMTAG_FILENAMES, RPMTAG_FILESIZES, RPMTAG_GROUP, RPMTAG_REQUIREFLAGS, RPMTAG_REQUIRENAME, RPMTAG_REQUIREVERSION, RPMTAG_DESCRIPTION, RPMTAG_SUMMARY, RPMTAG_PROVIDES, RPMTAG_SIZE, RPMTAG_OBSOLETES }; int numTags = sizeof(tags) / sizeof(int); + */ int main(int argc, char ** argv) { char buf[300]; *************** *** 26,34 **** --- 29,39 ---- struct dirent * ent; int fd, rc, isSource; Header h; + /* not used int count, type; int i; void * ptr; + */ if (argc != 2) { fprintf(stderr, "usage: genhdlist <dir>\n"); *************** *** 74,79 **** --- 79,85 ---- rc = rpmReadPackageHeader(fd, &h, &isSource, NULL, NULL); + if (!rc) { headerRemoveEntry(h, RPMTAG_POSTIN); headerRemoveEntry(h, RPMTAG_POSTUN); headerRemoveEntry(h, RPMTAG_PREIN); *************** *** 110,115 **** --- 116,122 ---- headerWrite(outfd, h, HEADER_MAGIC_YES); headerFree(h); close(fd); + } } errno = 0; </code> <sect1><file>comps</file> 文件<label id=sec-comps><p> <file>comps</file> 文件定义了包如何在安装的时候捆绑在一起,在RED HAT发行版中,根据他们提供的功能,例如: <itemize> <item>Printer Support <item>X Window System <item>GNOME <item>KDE <item>Mail/WWW/News Tools <item>... <item>Kernel Development <item>Extra Documentation </itemize> 有时候在安装的过程中,用户被提示"Components to install",有的包被预先选择,而有的包则没有,在组件列表中的最后一个项目叫做“everything”。根据RED HAT的稳当,选择所有的的包大概需要接近1G的自由磁盘空间。 在对话框中,还有一个选项允许用户确切地选择需要安装的包。手工定制安装或者在组件列表中选择“everyting”是你除了修改<tt><file>RedHat/base/comps</file></tt> file之外唯一可以使你的包被安装的办法。 <tt><file>comps</file></tt> 文件的格式现在用一个头描述组件的格式,然后是一个空行。 <tscreen><verb> 0.1 <empty line> </verb></tscreen> 在这个之后,组件被列出,用空行分离。 <tscreen><verb> <component 1> <empty line> <component 2> <empty line> . . <component n> <empty line> EOF </verb></tscreen> 每个组件有如下的定义: <tscreen><verb> (0|1) (--hide)? <name> <RPM 1> <RPM 2> ... <RPM n> end </verb></tscreen> 在每个组件的名称,给出0或者1。1表示这个组件被默认的选取,而0则相反。选项"--hide" 表示你看不到该条目,除非你选择“专家(expert)”安装。第一个组件被称为“BASE”,这是一个特别的组件。因此它<em>必须</em> 而且不在对话框里出现。(这意味著你不能去初这个基本的安装)。 然后跟著的是属于该组件的RPM包的列表,注意<em>在RPM文件中</em> 存放的是包名,而<em>不是</em>包的文件名的任何一个部分(尽管经常是一样的) 通过将你的包加入到 <tt><file>comps</file></tt>文件中,你可以定制你自己的发行版本,同时确认你的包被默认地安装。有一件需要注意的事情是你的包的相互依赖性。但是在这里,你的就是你的!:-)。有一个警告:当心不要添加或者移除文件中的空格。检查已存在的<tt><file>comps</file></tt> 文件。(制作原文件的一个拷贝),然后看它是如何被做成的。(或者检查<tt><file>i386/misc/src/install/pkgs.c</file></tt> 查看文件是如何被分解的细节) <sect>最后: 烧制CD<p> 我们假设在你的系统中有一个可以工作的CD刻录机并且你知道如何使用它。我们在这里讲述一些关于烧制CD的细节。如果你在一个LINUX系统中烧制你的CD,你可以安装优秀的<url url="http://www.fh-muenchen.de/rz/xcdroast" name="XCDroast">包。在 XCDRoast,打开 Rock Ridge扩展,以及TRANS.TBL 文件的制作。 确认CD的<em>top</em> 目录包括至少如下的目录和文件 <tscreen><verb> COPYING RPM-PGP-KEY README RedHat/ </verb></tscreen> 以下的目录可以根据情况而添加 <tscreen><verb> doc/ gnome/ misc/ dosutils/ images/ </verb></tscreen> <sect1>制作可自行启动的CD<p> (这一部分需要感谢Dawn Endico dawn@math.wayne.edu). 既然XCDroast不支持制作可自行启动的磁盘,你需要一些其他的工具。例如 <tt><url url="ftp://tsx-11.mit.edu/pub/linux/packages/mkisofs/" name="mkisofs"></tt>和<tt><url url="http://www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private/cdrecord.html" name="cdrecord"></tt>,你可以从<url url="ftp://contrib.redhat.com">获得这些软件的RPM包的最新版本。 你需要制作被刻写在CD上的一个映像文件。这个文件大约有500M或者更多。因此请确认你有足够多的自由空间并且,如果必要的话,在以下的命令中切换到<tt/redhat.img/ 目录中。你可能需要作为一个根拥护使用<tt/mount/ 或者<tt/cdrecord/。 <sect2>制作磁盘映像<p> 切换目录至你的镜象,也是你的CD的根目录。例如redhat-6.0/i386 <tscreen><verb> mkisofs -v -R -T -J -V "Red Hat 6.0" -b images/boot.img -c boot.cat -o /tmp/redhat.img . </verb></tscreen> <!-- Joerg Schilling: mkisofs -R (大写) 并且 -r 对于Linux安装磁盘来说不是必须的 --> 一些版本的<tt/mkisofs/ 没有<tt/-J/ 选项。这个选项可以被忽略,因为它所定义的Joliet扩展为了在CD在WINDOWS中的可读性更强而不被安装程序使用。 <sect2>测试映像<p> will be wrong. 如果你还不够放心,你可以通过装载的方式检查你的新的磁盘影象。如果你忘记更改文件的许可,或者设置rock ridge扩展,那么将会产生明显的错误。因为这样的文件和目录结构将是错误的。 <tscreen><verb> mount -t iso9660 -o ro,loop=/dev/loop0 /tmp/redhat.img /mnt/cdrom </verb></tscreen> 当你完成了这个工作之后,不要忘了卸载之。 <tscreen><verb> umount /mnt/cdrom </verb></tscreen> <sect2>烧制磁盘<p> 确认你正确地设置了你的设备的速度,这个命令是为了4X的CDR,而你可能拥有的是1X或者2X的驱动器。 <tscreen><verb> cdrecord -v speed=4 dev=0,0 /tmp/redhat.img </verb></tscreen> <!-- 在以上的命令中,假设的是CD刻录机在SCSI BUS 0,拥有ID号0。--> <sect>从CD中安装<label id="sec-install"><p> 当从一个新的CD中安装的时候,你首先需要制作一个可启动的磁盘。注意:使用新的,MS-DOS格式的磁盘!使用一个旧、有问题的磁盘可能在安装过程中导致问题。 在一个LINUX系统中,你可以通过<tt/dd/ 命令来制作磁盘。 <tscreen><verb> dd if=/mnt/cdrom/images/boot.img of=/dev/fd0 bs=1440k </verb></tscreen> 在一个运行DOS或者WINDOWS-9X的系统中,你需要使用<tt/RAWRITE.EXE/程序,该程序可以在 <tt/dosutils/ 目录中找到。 关闭你想进行安装的或者系统升级的计算机,插入你的启动磁盘或者新制的烧制的CD,然后让机器从磁盘启动。关于安装过程的详细信息请看有关的文档, Installation-HOWTO 或者Bootdisk-HOWTO ,这些都可以在 <tt>doc/HOWTO</tt> 目录中找到。 <sect>关于本文档<p> 这个稳当的最新版本的 SGML 可以在 of <url url="http://imsb.au.dk/~mok/linux/doc/RedHat-CD.sgml"> (<url url="http://imsb.au.dk/~mok/linux/doc/RedHat-CD.html" name="HTML version">)获得。 你可以通过如下的一些代码似的你的主页联接到REDHAT-CD mini HOWTO <verb> <a href="http://imsb.au.dk/~mok/linux/doc/RedHat-CD.html"> <img src="http://imsb.au.dk/~mok/logos/RedHat-CD.png" alt="RedHat CD mini-howto" height=30 nosave border=0> </a> </verb> <sect1>相关文档<p> Ed Schlunder <zilym@asu.edu>写了一个<tt/fix-rhcd/ 的使用工具可以使你检查你自己的Red Hat Linux发行版的镜象,例如文件大小、名称、许可以及从Red Hat官方ftp站点的符号连接 "ls -lNR"。所有错误的许可都会被更改以符合<tt/ls/ 列表,详见 <url url="http://www.ajusd.org/~edward/fix-rhcd/" name="fix-rhcd homepage">。 Rod Smith <smithrod@bellatlantic.net>写了一个<<自己做RED HAT安装指南>>,其中就包括了如何制作RedHat安装CD的有关知识。其中特别描述了如何从非UNIX系统中烧制CD,你可以在<url url="http://members.bellatlantic.net/~smithrod/rhjol.html">找到该文。 由 <skooter@hol.fr> 所写的法文版的 <em>``Comment graver un CD de la RedHat 5.x a partir de fichiers telecharges sur Internet...''</em> 可以在<url url="http://linuxfr.org/docs/article/gravure-CD-RH51.html">找到。 芬兰的 Jussi Torhonen <jussi.torhonen@tietosavo.fi> 所说的 <url url="http://www.iwn.fi/~jt/cd/" name="Howto make a homebrew"> 是关于可启动的 RedHat Linux 5.2 CD-ROM. <sect1>感谢<p> 除了上述的人员之外,我们要感谢下列的人员: <itemize> <item>Lars Christensen <larsch@cs.auc.dk> <item>Thomas Duffy <tbd@cs.brown.edu> <item>Dawn Endico <dawn@math.wayne.edu> <item>Seva <seva@null.cc.uic.edu> <item>Michael Thomas Cope <mcope@orion.ac.hmc.edu> <item>Charles J. Fisher <charles_fisher@bigfoot.com> </itemize> <sect>声明<label id="sec-disclaimer"><p> <bf> While the given information in this document is believed to be correct, the authors assume no responsibility whatsoever for any damage to hardware and/or software, or any loss of data resulting from the procedures outlined in this document. </bf> <bf> 本文中所给的信息被确认为正确的。作者对因此而造成的硬件及(或)软件的损害不负任何责任,也不对因在本文中所述之流程引起的数据丢失负责! </bf> </article> <!-- Local Variables: --> <!-- mode: sgml --> <!-- mode: font-lock --> <!-- fill-column: 75 --> <!-- End: -->