燒制一個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: -->