old-www/HOWTO/html_single/RedHat-CD-HOWTO/index.html

5465 lines
124 KiB
HTML

<HTML
><HEAD
><TITLE
> Burning a RedHat CD HOWTO
</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"></HEAD
><BODY
CLASS="ARTICLE"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="ARTICLE"
><DIV
CLASS="TITLEPAGE"
><H1
CLASS="TITLE"
><A
NAME="AEN2"
></A
>Burning a RedHat CD HOWTO</H1
><DIV
CLASS="AUTHORGROUP"
><A
NAME="AEN4"
></A
><H3
CLASS="AUTHOR"
><A
NAME="AEN5"
>Luigi Bitonti</A
></H3
><DIV
CLASS="AFFILIATION"
><DIV
CLASS="ADDRESS"
><P
CLASS="ADDRESS"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<TT
CLASS="EMAIL"
>&#60;<A
HREF="mailto:uknadors (at) yahoo (dot) com"
>uknadors (at) yahoo (dot) com</A
>&#62;</TT
><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P
></DIV
></DIV
><H3
CLASS="AUTHOR"
><A
NAME="AEN13"
>Morten Kjeldgaard</A
></H3
><DIV
CLASS="AFFILIATION"
><DIV
CLASS="ADDRESS"
><P
CLASS="ADDRESS"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<TT
CLASS="EMAIL"
>&#60;<A
HREF="mailto:"
></A
>&#62;</TT
><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P
></DIV
></DIV
><H3
CLASS="AUTHOR"
><A
NAME="AEN21"
>Peter von der Ahé</A
></H3
><DIV
CLASS="AFFILIATION"
><DIV
CLASS="ADDRESS"
><P
CLASS="ADDRESS"
>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<TT
CLASS="EMAIL"
>&#60;<A
HREF="mailto:"
></A
>&#62;</TT
><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</P
></DIV
></DIV
><P
CLASS="OTHERCREDIT"
><B
>Guillaume Lelarge - </B
><SPAN
CLASS="CONTRIB"
>Review and French translation.
</SPAN
></P
></DIV
><P
CLASS="COPYRIGHT"
>Copyright &copy; 2002, 2003 Luigi Bitonti</P
><P
CLASS="COPYRIGHT"
>Copyright &copy; 2000 Morten Kjeldgaard, and Peter von der Ahé</P
><DIV
CLASS="REVHISTORY"
><TABLE
WIDTH="100%"
BORDER="0"
><TR
><TH
ALIGN="LEFT"
VALIGN="TOP"
COLSPAN="3"
><B
>Revision History</B
></TH
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v2.1</TD
><TD
ALIGN="LEFT"
>2003-10-17</TD
><TD
ALIGN="LEFT"
>Revised by: lb</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Added RedHat 9. Fixed some minor bugs. Thanks to all the people who have sent
in comments and patches.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v2.03</TD
><TD
ALIGN="LEFT"
>2003-03-10</TD
><TD
ALIGN="LEFT"
>Revised by: lb</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Added some comments and fixes to the howto. The anaconda updates are now
included correctly even for versions &#62;= 7.x.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v2.02</TD
><TD
ALIGN="LEFT"
>2003-03-06</TD
><TD
ALIGN="LEFT"
>Revised by: lb</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>The signature checking now works for packages targeted to versions
of RedHat different from the one used to run the scripts. Corrected
a bug in the version comparison section of the scripts.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v2.01</TD
><TD
ALIGN="LEFT"
>2002-12-04</TD
><TD
ALIGN="LEFT"
>Revised by: lb</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>Second release of the new version of the howto.
All the scripts were reviewed and cleaned.
The updateDist.sh script now checks that all the
updates were downloaded before checking the signatures.</TD
></TR
><TR
><TD
ALIGN="LEFT"
>Revision v2.00</TD
><TD
ALIGN="LEFT"
>2002-10-28</TD
><TD
ALIGN="LEFT"
>Revised by: lb</TD
></TR
><TR
><TD
ALIGN="LEFT"
COLSPAN="3"
>First release of the new version (2.00) of the HOWTO</TD
></TR
></TABLE
></DIV
><DIV
><DIV
CLASS="ABSTRACT"
><A
NAME="AEN66"
></A
><P
></P
><P
> This document describes how to make your own CDs from different releases of
the Red Hat Linux distribution (up to and including release 9), equivalent
to the ones commercially available from Red Hat.
The structure of the distribution is described, as well as the procedure
needed to include updated RPMS into the distribution. Some hints and
examples on how to customize the default installation are also presented.
Scripts to automate as much as possible the (re)generation of the CD images
are included. Prerequisites are a good network connection, and a CD-writer
(a working knowledge of shell scripting could be really useful, though).
</P
><P
></P
></DIV
></DIV
><HR></DIV
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
>1. <A
HREF="#INTRODUCTION"
>Introduction</A
></DT
><DD
><DL
><DT
>1.1. <A
HREF="#DISCLAIMER"
>Disclaimer and License</A
></DT
></DL
></DD
><DT
>2. <A
HREF="#REDHAT-FTP-SITE"
>Anatomy of the Red Hat FTP site</A
></DT
><DD
><DL
><DT
>2.1. <A
HREF="#REDHAT-MAIN-TREE"
>Redhat 9 directories organization</A
></DT
><DT
>2.2. <A
HREF="#REDHAT-DIR"
>The "RedHat" directory -- the core of the distribution</A
></DT
><DT
>2.3. <A
HREF="#UPDATES-DIR"
>The "updates" directory</A
></DT
><DT
>2.4. <A
HREF="#AEN154"
>Differences for the 8.0 tree</A
></DT
><DT
>2.5. <A
HREF="#AEN163"
>Differences for the 7.x tree</A
></DT
><DT
>2.6. <A
HREF="#AEN174"
>Differences for the 6.x tree</A
></DT
></DL
></DD
><DT
>3. <A
HREF="#RPM-PACKAGES"
>RPM packages</A
></DT
><DD
><DL
><DT
>3.1. <A
HREF="#RPM-VERSION-COMPARE"
>Comparing two versions of a RPM package</A
></DT
></DL
></DD
><DT
>4. <A
HREF="#DISTRIBUTION-MIRROR"
>Obtaining your local copy of the distribution</A
></DT
><DD
><DL
><DT
>4.1. <A
HREF="#USING-WGET-BASH"
>Using wget and bash</A
></DT
><DT
>4.2. <A
HREF="#USING-MIRROR"
>Using mirror</A
></DT
></DL
></DD
><DT
>5. <A
HREF="#INCLUDE-UPDATES"
>Including the updates</A
></DT
><DD
><DL
><DT
>5.1. <A
HREF="#UPDATE-PERMISSIONS"
>Correcting the file protection modes</A
></DT
><DT
>5.2. <A
HREF="#REPLACING-PACKAGES"
>Replacing the updated RPMS</A
></DT
><DT
>5.3. <A
HREF="#INSTALLER-REBUILD"
>Rebuilding the installer</A
></DT
></DL
></DD
><DT
>6. <A
HREF="#BURN-CD"
>Burning the CD(s)</A
></DT
><DD
><DL
><DT
>6.1. <A
HREF="#AEN658"
>Test the image(s)</A
></DT
><DT
>6.2. <A
HREF="#AEN667"
>Burn the disk(s)</A
></DT
></DL
></DD
><DT
>7. <A
HREF="#COMPS-FILE"
>The comps file</A
></DT
><DD
><DL
><DT
>7.1. <A
HREF="#AEN697"
>Format of <TT
CLASS="FILENAME"
>comps</TT
> file in RedHat versions &#60; 6.1</A
></DT
><DT
>7.2. <A
HREF="#AEN718"
>Format of comps file in RedHat version 6.1</A
></DT
><DT
>7.3. <A
HREF="#AEN746"
>Format of comps file in RedHat version 6.2</A
></DT
><DT
>7.4. <A
HREF="#AEN763"
>Format of comps file in RedHat version 7.3</A
></DT
><DT
>7.5. <A
HREF="#AEN798"
>Format of comps file in RedHat version 8.0 and 9</A
></DT
></DL
></DD
><DT
>8. <A
HREF="#INSTALLATION"
>Installing from the CD</A
></DT
><DD
><DL
><DT
>8.1. <A
HREF="#AEN894"
>Booting from a bootable CD</A
></DT
></DL
></DD
><DT
>9. <A
HREF="#OTHER-DISTRIBUTIONS"
>Other Linux distributions</A
></DT
><DT
>10. <A
HREF="#THIS-DOCUMENT"
>This document...</A
></DT
><DD
><DL
><DT
>10.1. <A
HREF="#RELATED-DOC"
>Related documentation</A
></DT
><DT
>10.2. <A
HREF="#AEN940"
>Acknowledgements</A
></DT
></DL
></DD
></DL
></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="INTRODUCTION"
></A
>1. Introduction</H1
><P
> There may be several reasons for making your own CDs. Perhaps you're a
cheapskate and want to save the cost of the
<A
HREF="http://www.redhat.com/"
TARGET="_top"
>Red Hat distribution</A
>. Or, perhaps
you want to include in your CDs the latest distribution with all the current
updates. This is highly relevant, because after each major release of the
Red Hat distribution, there have been loads of updates, several of which
are security related. Just take a look at the
<A
HREF="http://www.redhat.com/corp/support/errata"
TARGET="_top"
>errata page</A
>.
Or maybe you want to customize the default installation adding a few
packages not present in the default tree and unselecting the installation
of some packages which are otherwise included in the default setup.
</P
><P
> This is what you will be taught in the next sections (hopefully). I will use the
i386 architecture and releases 7.3, 8.0 and 9 of the distribution in the examples. The
notes related to the previous releases (&#60;=6.1) were contained in a previous version of
this document and were compiled by the original authors. The notes related to release
6.2 are based on tests I've not completed (and I don't know if I ever will) and some
documents you can find linked in the <A
HREF="#RELATED-DOC"
>Related documentation</A
> section.
The procedure given in the following sections for RedHat 7.3 and 8.0 is likely to work
on all platforms supported by Red Hat (Alpha, ppc, etc.), for all the 7.x (and maybe 8.x/9
in a not too far future) releases, but I have only tested it on the i386 platform with
Redhat Linux 7.3, 8.0 and 9 (I would be interested in additional information).
</P
><DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="100%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
> The operations described have legal implications, meaning you cannot
redistribute the CDs as RedHat Linux if you modify them in ways not compliant to
Redhat trademark policy. To make them legally redistributable, you should always
comply with the guidelines stated on the
<A
HREF="http://www.redhat.com/about/corporate/trademark/"
TARGET="_top"
>RedHat website
</A
>.
</P
></TD
></TR
></TABLE
></DIV
><DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="100%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
> Always remember to set the variables in the <TT
CLASS="FILENAME"
>rhcd.conf</TT
> file
and <EM
>export</EM
> the <EM
>RHCDPATH</EM
> environment
variable before running the scripts you will find throughout the rest of this
document and related to releases &#62;=6.2 of RedHat Linux. An example
<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
>rhcd.conf</A
> file, which should
be well commented, is provided with the scripts.
</P
></TD
></TR
></TABLE
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="DISCLAIMER"
></A
>1.1. Disclaimer and License</H2
><P
> This document is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.
</P
><P
> Neither the author nor the distributors, or any other contributor of this
document are in any way responsible for physical, financial, moral or any
other type of damage incurred by following the suggestions in this text.
</P
></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="REDHAT-FTP-SITE"
></A
>2. Anatomy of the Red Hat FTP site</H1
><P
> In the spirit of the Linux community, Red Hat Software has made available
their Linux distributions for several platforms on their FTP site. These
are all available from the top distribution directory
(<A
HREF="ftp://ftp.redhat.com/pub/redhat/linux/"
TARGET="_top"
>pub/redhat/linux/</A
>).
Let's have a look at the distribution tree.
</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="REDHAT-MAIN-TREE"
></A
>2.1. Redhat 9 directories organization</H2
><P
> The latest distribution is, as of this writing, available only for the
i386 platform. The toplevel directory appears a bit shallow, given the
presence of a single architecture. (<A
HREF="ftp://ftp.redhat.com/pub/redhat/linux/9/en/os/"
TARGET="_top"
>pub/redhat/linux/9/en/os/
</A
>).
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
i386/
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> Otherwise, the toplevel directory, for releases slightly older than 9, contains
distributions for the different platforms. For example, the corresponding
directory for release 7.1 of Redhat Linux, is structured this way:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
alpha/ i386/ ia64/ ppc/ s390x/
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The root of the i386 directory in a Redhat 9 distribution looks like this:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
-rwxr-xr-x 2 root root 248 Mar 14 2003 autorun
drwxr-xr-x 7 root root 4096 Mar 14 2003 dosutils
-rw-r--r-- 3 root root 6192 Mar 14 2003 EULA
-rw-r--r-- 3 root root 18385 Mar 14 2003 GPL
drwxr-xr-x 3 root root 2048 Mar 14 2003 images
drwxr-xr-x 2 root root 2048 Mar 14 2003 isolinux
-rw-r--r-- 3 root root 6127 Mar 14 2003 README
-rw-r--r-- 2 root root 13052 Mar 14 2003 README-Accessibility
-rw-r--r-- 2 root root 6686 Mar 14 2003 README.de
-rw-r--r-- 2 root root 6990 Mar 14 2003 README.es
-rw-r--r-- 2 root root 6492 Mar 14 2003 README.fr
-rw-r--r-- 2 root root 6805 Mar 14 2003 README.it
-rw-r--r-- 2 root root 7995 Mar 14 2003 README.ja
-rw-r--r-- 2 root root 7312 Mar 14 2003 README.ko
-rw-r--r-- 2 root root 5070 Mar 14 2003 README.pt
-rw-r--r-- 2 root root 6613 Mar 14 2003 README.pt_BR
-rw-r--r-- 2 root root 5879 Mar 14 2003 README.zh_CN
-rw-r--r-- 2 root root 5892 Mar 14 2003 README.zh_TW
drwxr-xr-x 4 root root 2048 Mar 14 2003 RedHat
-rw-r--r-- 2 root root 25824 Mar 14 2003 RELEASE-NOTES
-rw-r--r-- 2 root root 29902 Mar 14 2003 RELEASE-NOTES-de.html
-rw-r--r-- 2 root root 30409 Mar 14 2003 RELEASE-NOTES-es.html
-rw-r--r-- 2 root root 32354 Mar 14 2003 RELEASE-NOTES-fr.html
-rw-r--r-- 2 root root 30064 Mar 14 2003 RELEASE-NOTES.html
-rw-r--r-- 2 root root 29925 Mar 14 2003 RELEASE-NOTES-it.html
-rw-r--r-- 2 root root 34666 Mar 14 2003 RELEASE-NOTES-ja.html
-rw-r--r-- 2 root root 33520 Mar 14 2003 RELEASE-NOTES-ko.html
-rw-r--r-- 2 root root 29496 Mar 14 2003 RELEASE-NOTES-pt_BR.html
-rw-r--r-- 2 root root 22747 Mar 14 2003 RELEASE-NOTES-pt.html
-rw-r--r-- 2 root root 25217 Mar 14 2003 RELEASE-NOTES-zh_CN.html
-rw-r--r-- 2 root root 26645 Mar 14 2003 RELEASE-NOTES-zh_TW.html
-rw-r--r-- 3 root root 1910 Mar 14 2003 RPM-GPG-KEY
-r--r--r-- 1 root root 1823 Mar 14 2003 TRANS.TBL
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The <TT
CLASS="FILENAME"
>SRPMS</TT
> directory contains the RPMS
packages in source form.
</P
><P
> The <TT
CLASS="FILENAME"
>images</TT
> directory contains boot
and drivers floppy images that can be copied to a diskette if needed. In the
9 release, there is only one boot disk image available. This boot image is named
<TT
CLASS="FILENAME"
>bootdisk.img</TT
>. A secondary driver disk is required beside
this one if the installation is not performed directly from a CD-ROM or HD. A
<TT
CLASS="FILENAME"
>boot.iso</TT
> file has now been added to boot a machine from
the cdrom drive and start (network) installations more easily (i.e. without messing up
with too many floppies). See section <A
HREF="#INSTALLATION"
>Installation</A
> and references
therein for details and consult the README file in the directory for a more detailed
explanation of the various files.
</P
><P
> The <TT
CLASS="FILENAME"
>isolinux</TT
> directory contains
the files needed to boot from the CD (and to rebuild bootable CDs which work the
same way). This process was moved from floppy emulation to no emulation. This
helps avoiding space constraints and compatibility problems.
</P
><P
> The <TT
CLASS="FILENAME"
>dosutils</TT
> directory contains various
programs for some other operating systems which are sometimes useful to support the
installation process. An explanatory README file is included also in this case.
</P
><P
> The listing is completed by a lot of files and the
<TT
CLASS="FILENAME"
>RedHat</TT
> directory. The latter is the
subject of the next sections while the formers have contents which will appear
straightforward by simply reading their names (perhaps apart from the EULA,
or End User License Agreement).
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="REDHAT-DIR"
></A
>2.2. The "RedHat" directory -- the core of the distribution</H2
><P
>
The most important part of the directory tree is rooted in the
<TT
CLASS="FILENAME"
>RedHat</TT
> directory:
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
drwxr-xr-x 2 root root 53248 Jun 14 03:15 RPMS
drwxr-xr-x 2 root root 4096 Jun 14 04:15 base
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The <TT
CLASS="FILENAME"
>RPMS</TT
> directory contains the major
part of the Red Hat distribution consisting of a set of RPM (Redhat Package
Manager) files. An RPM package typically contains binary executables, along
with relevant configuration files and documentation. See the section
<A
HREF="#RPM-PACKAGES"
>RPM packages</A
> for more information.
</P
><P
>&#13; The <TT
CLASS="FILENAME"
>base</TT
> directory holds different
files needed during the installation process, like the
<TT
CLASS="FILENAME"
>comps.xml</TT
> file, which defines the <EM
>components</EM
>
(groups of packages) used during the "Choose packages to install" phase.
See section <A
HREF="#COMPS-FILE"
>The comps file</A
> for more information on this file, and how
to use it.
</P
><P
> Two other important files in the <TT
CLASS="FILENAME"
>base</TT
>
directory are <TT
CLASS="FILENAME"
>hdlist</TT
> and <TT
CLASS="FILENAME"
>hdlist2</TT
>
containing most of the header fields from all the RPMs in the
<TT
CLASS="FILENAME"
>RPMS</TT
> directory. This means that all
the interdependencies among RPM packages can be determined just by reading
these files without having to read all the RPM packages which is quite
convenient especially during FTP installs. Another use of these files is
mapping package names to file names (eg. <EM
>perl</EM
> to
<EM
>perl-5.004-6.i386.rpm</EM
>). This means that if you want
to incorporate updates from RedHat (see section <A
HREF="#INCLUDE-UPDATES"
>Including the updates</A
>)
or add your own packages to the <TT
CLASS="FILENAME"
>RPMS</TT
>
directory, you need to update <TT
CLASS="FILENAME"
>hdlist</TT
> and
<TT
CLASS="FILENAME"
>hdlist2</TT
>. This is described later in
<A
HREF="#INSTALLER-REBUILD"
>Rebuilding the installer</A
>. Besides these files, the images from which
the installation environment (i.e. kernel, python interpreter, anaconda, etc.)
is loaded are found.
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="UPDATES-DIR"
></A
>2.3. The "updates" directory</H2
><P
> The <TT
CLASS="FILENAME"
>/pub/redhat/linux/updates</TT
> directory has updates for all
releases of RedHat's distribution since version 3.0.3. This is the place
to find software packages that have been updated for some reason or other.
You should especially be aware of security updates. These are publicised on
RedHat's errata page whenever a fix is available. The most important files
found in the <TT
CLASS="FILENAME"
>updates</TT
> directory are:
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
drwxrwsr-x 3 root root 4096 Jul 13 10:13 5.2
drwxrwsr-x 3 root root 4096 Jul 13 10:13 6.0
drwxrwsr-x 3 root root 4096 Jul 13 10:13 6.1
drwxrwsr-x 4 root root 4096 Jul 13 10:14 6.2
drwxrwsr-x 4 root root 4096 Jul 13 10:14 7.0
drwxrwsr-x 4 root root 4096 Jul 13 10:14 7.1
drwxrwsr-x 4 root root 4096 Jul 13 10:13 7.2
drwxrwsr-x 3 root root 4096 Jul 13 10:14 7.3
drwxrwsr-x 3 root root 4096 Jul 13 10:14 8.0
drwxrwsr-x 3 root root 4096 Jul 13 10:14 9
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The structure of each of these directories is similar to that described in
the section <A
HREF="#REDHAT-MAIN-TREE"
>The Redhat 9 tree</A
>. So you will find for each version,
in the subdirectory <TT
CLASS="FILENAME"
>en/os/</TT
> a series of
subdirectories representing the various architectures and a
<TT
CLASS="FILENAME"
>noarch</TT
> and <TT
CLASS="FILENAME"
> SRPMS</TT
> subdirectories, for packages which work on every architecture
or are in source form respectively.
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
drwxrwsr-x 2 root root 4096 Sep 23 05:28 SRPMS
drwxrwsr-x 2 root root 4096 Aug 28 18:25 athlon
drwxrwsr-x 2 root root 8192 Sep 23 05:28 i386
drwxrwsr-x 2 root root 4096 Jul 13 10:14 i486
drwxrwsr-x 2 root root 4096 Aug 28 18:26 i586
drwxrwsr-x 2 root root 4096 Aug 28 18:26 i686
drwxrwsr-x 2 root root 4096 Jul 13 10:14 noarch
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN154"
></A
>2.4. Differences for the 8.0 tree</H2
><P
> The 8.0 distribution layout is almost identical to the one just described. The only
major differences, in this respect, can be found in the images directory.
</P
><P
> The <TT
CLASS="FILENAME"
>images</TT
> directory contains boot
and drivers floppy images that can be copied to a diskette if needed. In the
8.0 release, there are three boot disk images available. The first boot
image is called <TT
CLASS="FILENAME"
>boot.img</TT
>, and is required when installation
is performed directly from a CD-ROM. If installing from a NFS mounted disk or FTP
is required, the <TT
CLASS="FILENAME"
>bootnet.img</TT
> disk image is needed.
Installs through PCMCIA adapters need the <TT
CLASS="FILENAME"
>pcmcia.img</TT
>
floppy. See section <A
HREF="#INSTALLATION"
>Installation</A
> and references therein for
details and consult the README file in the directory for a more detailed explanation
of the various files.
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN163"
></A
>2.5. Differences for the 7.x tree</H2
><P
> The two distributions are fairly similar in this respect. The only changes which
are of some interest to us (and easy to notice with a simple inspection of the main
distribution tree) are represented by a missing
<TT
CLASS="FILENAME"
>isolinux</TT
> directory and some changes in the
<TT
CLASS="FILENAME"
>RedHat/base</TT
> directory. The first one is due
to the way the installation CDs are made bootable in releases prior to 8.0
(<SPAN
CLASS="QUOTE"
>"floppy emulation"</SPAN
> has been superseded by <SPAN
CLASS="QUOTE"
>"no emulation"</SPAN
>
in release 8.0), while the second is an effect of the migration of
the <TT
CLASS="FILENAME"
>comps</TT
> file format to <EM
>XML</EM
> in Redhat
releases after 8.0 (that's why it was renamed <TT
CLASS="FILENAME"
>comps.xml</TT
>).
The <TT
CLASS="FILENAME"
>Redhat/base/comps</TT
> file is, in fact, a simple textual file
with a quite inflexible syntax in releases prior to and including Redhat 7.3.
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN174"
></A
>2.6. Differences for the 6.x tree</H2
><P
> For release 6.2 (<A
HREF="ftp://ftp.redhat.com/pub/redhat/linux/6.2/en/os/"
TARGET="_top"
> pub/redhat/linux/6.2/en/os/</A
>), the last of the 6 series, the organization
is the following (the previous releases are mostly similar if not really equal, in
this respect):
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> alpha/ i386/ sparc/
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> While the root of the i386 directory looks like this:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> -rw-r--r-- 1 root root 18385 Sep 7 1999 COPYING
-rw-r--r-- 1 root root 3400 Mar 8 2000 README
-rw-r--r-- 1 root root 16300 Mar 8 2000 RELEASE-NOTES
-rw-r--r-- 1 root root 1908 Sep 25 1999 RPM-GPG-KEY
drwxr-xr-x 1 root root 512 Sep 27 15:22 RedHat
drwxr-xr-x 1 root root 17408 Sep 27 15:22 SRPMS
-rwxr-xr-x 1 root root 538 Sep 26 1999 autorun
-rwxr--r-- 1 root root 2048 Mar 9 2000 boot.cat
drwxr-xr-x 1 root root 512 Sep 27 15:22 doc
drwxr-xr-x 1 root root 512 Sep 27 15:22 dosutils
drwxr-xr-x 1 root root 512 Sep 27 15:22 images
drwxr-xr-x 1 root root 512 Sep 27 15:22 misc
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> In the following paragraphs I will only list differences from the newest
releases, what is not explicitly mentioned is (or is believed to be) unchanged.
</P
><P
> The <TT
CLASS="FILENAME"
>doc</TT
> directory contains an
abundance of information. Most importantly, the RedHat installation manual
can be found in HTML format in the directory or on the Redhat website
(<A
HREF="http://www.redhat.com/docs/manuals/linux/RHL-6.2-Manual/install-guide/"
TARGET="_top"
> Redhat 6.2 Installation guide</A
>). Next, there are the reference guide
and the getting started guide. The documentation for the 7.x/8.0/9 releases is on
a separate CD (in a different tree, on the ftp site).
</P
><P
> The <TT
CLASS="FILENAME"
>images</TT
> directory contains boot floppy
images that can be copied to a diskette if needed, like for 8.0, 7.3 and 9. See
section <A
HREF="#INSTALLATION"
>Installation</A
> and references therein for details. The
<TT
CLASS="FILENAME"
>misc</TT
> directory contains source and
executables of a number of programs needed for the installation.
</P
><P
>
The most important part of the directory tree is (again) rooted in
the <TT
CLASS="FILENAME"
>RedHat</TT
> directory:
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> drwxr-xr-x 2 root root 28672 Oct 26 09:01 RPMS
drwxr-xr-x 2 root root 4096 Oct 26 09:01 base
-rw-r--r-- 1 root root 0 Jan 19 1999 i386
drwxr-xr-x 6 root root 4096 Oct 26 09:01 instimage
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The <TT
CLASS="FILENAME"
>RPMS</TT
> directory should be
already known to you. See the section <A
HREF="#RPM-PACKAGES"
>RPM packages</A
> for more
informations. The <TT
CLASS="FILENAME"
>base</TT
> directory
holds different book-keeping files needed during the installation process,
like for releases 7.3, 8.0 and 9. The only noticeable differences being represented
by a single <TT
CLASS="FILENAME"
>hdlist</TT
> file and a missing
<TT
CLASS="FILENAME"
>stage2.img</TT
> file whose functionalities should be provided
by the files included in the <TT
CLASS="FILENAME"
>instimage</TT
>
directory. This contains, in fact, a bare-bones live file system with a number
of programs and shared libraries needed during the installation procedure.
</P
><P
> The <TT
CLASS="FILENAME"
>updates</TT
> directory is really similar
to the one described for release 9 with the only difference of having more
architecture related directories.
</P
></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="RPM-PACKAGES"
></A
>3. RPM packages</H1
><P
> The major part of the Red Hat distribution consists of a set of RPM (Redhat
Package Manager) files. An RPM package typically contains binary
executables, along with relevant configuration files and documentation.
The <A
HREF="http://www.rpm.org"
TARGET="_top"
>rpm</A
> program is a powerful
package manager, which can be used to install, query, verify, update, erase
and build software packages in the RPM format. <TT
CLASS="FILENAME"
>Rpm</TT
>
convieniently maintains a database of all the software packages it has
installed, so information on the installed software is available at any time.
</P
><P
> The binary RPM files in the distribution have been built on a system
running the distribution itself. This is important, because most of the
programs in the packages rely on shared libraries. From RedHat version 5.0,
the new version 2 of the GNU standard C library (which is 64-bit clean) has
been used. This version of the library is commonly referred to as
<EM
>glibc</EM
> or in Linux: <EM
>libc 6</EM
>. All
executables in the distribution have been linked against this library.
If you attempt to install binary files from a different distribution,
chances are that they will not work, unless you install the libc5 package
for backwards compability. There are also incompatibilities between the
various version of the Redhat Package Manager itself which will make the
installation of some packages fail even on machines they are supposed to
(and they would probably) run on.
</P
><P
> The names of the RPM packages contain the suffix <EM
>.arch.rpm</EM
>,
where <EM
>arch</EM
> is the architecture, usually having the value
<EM
>i386</EM
> for Intel platform binaries. The packages you install
must match the versions of the shared libraries available on the machine. The
<A
HREF="http://www.rpm.org"
TARGET="_top"
>rpm</A
> program is usually quite good at
ensuring that this is indeed the case, however, there are ways around this
check, and you should be sure that you know what you are doing if you force
installation of packages this way. However, using the RedHat installation
boot disk, it is ensured that the correct set of RPM packages are installed
on the machine.
</P
><P
> If you discover a RPM package that was not installed on your system during
the installation process, don't despair. At any time, you may (as root)
install RPM packages, for example:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> # rpm --install WindowMaker-0.18-1b.i386.rpm
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> You can even install directly from the Internet, if you know the URL of a
RPM package:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> # rpm --install ftp://rufus.w3.org/redhat-contrib/noarch/mirror-2.9-2.noarch.rpm
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> If you want to update (or install if it's not present on the machine) a RPM
package, use the command:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> # rpm --update WindowMaker-0.18-1b.i386.rpm
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> If you want to update a RPM package only if a previous version is already
installed on the machine use the command:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> # rpm --freshen WindowMaker-0.18-1b.i386.rpm
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> Another version of the RPM packages contains the original sources
used to build the binaries. These packages have the suffix
<EM
>.src.rpm</EM
> and are situated in the
<TT
CLASS="FILENAME"
>SRPMS</TT
> directory. These packages compose
the last two CDs and part of the third one out of the five which compose the 8.0 (or
7.3) release. For release 9 they are on three separate CDs. For 6.2 (and previous,
not too old, versions), things change a bit because there is only one installation CD
not comprising the SRPMS packages, which you can burn on a different disc, if you want.
</P
><P
> To obtain more informations on the Redhat package manager, I suggest you to read
the man pages and the fairly detailed book <A
HREF="http://www.rpm.org/max-rpm/"
TARGET="_top"
> maximum rpm</A
>.
</P
><P
> In the next section, I will introduce a C program which will be used in various
scripts throughout the rest of the howto. It just returns, given two versions of
the same RPM package, which one is newer. This program is based on the code
used in the Redhat Package Manager (release 4.1) and is used when the
<EM
>--freshen</EM
> option is given.
</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="RPM-VERSION-COMPARE"
></A
>3.1. Comparing two versions of a RPM package</H2
><P
> The C code included in the three files
<A
HREF="rhcd-scripts/rpmvc/Makefile"
TARGET="_top"
> Makefile</A
>,
<A
HREF="rhcd-scripts/rpmvc/rvc.h"
TARGET="_top"
> rvc.h</A
>,
<A
HREF="rhcd-scripts/rpmvc/rvc.c"
TARGET="_top"
> rvc.c</A
> was extracted from the Redhat Package
Manager and (slightly) modified to fit our needs. They form a simple C
program which given two versions A and B of a package returns 1, 0 or -1
if A is respectively newer, equal or older than B and other
values in case of error (you can read the code comments for more detailed
informations). To compile the program (you need the <TT
CLASS="FILENAME"
>make</TT
>
program and the <TT
CLASS="FILENAME"
>gcc</TT
> C compiler), put the files in the same
directory and issue the command:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> $ make
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> This program is needed by almost every script used in the following sections and is
found setting the <EM
>RVC</EM
> variable in the file
<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
>rhcd.conf</A
>.
</P
><P
> You can find a copy of the source and a precompiled version in the archive
<A
HREF="rhcd-scripts.tar.gz"
TARGET="_top"
>rhcd-sripts.tar.gz</A
> in the
<TT
CLASS="FILENAME"
>rpmvc</TT
> directory.
</P
><DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="100%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
> There was an error in the way this program was used by the
<EM
>updateDist.sh (ver. &#60; 1.17)</EM
> and <EM
>updateCD.sh
(ver. &#60; 1.12)</EM
> scripts. I strongly suggest to avoid versions of
the scripts which have lower release numbers than the reported ones, even if
the problem doesn't show up really frequently (at least apparently).
</P
></TD
></TR
></TABLE
></DIV
></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="DISTRIBUTION-MIRROR"
></A
>4. Obtaining your local copy of the distribution</H1
><P
> You need a copy of the distribution on a writable disk which is accessible
from the computer having the CD writer (duh!). If you want to incorporate
the latest updates, this directory should (also) be accessible from a Linux
machine, either from a local disk, an NFS mounted disk on a different
computer, or a JAZ disk.
You could copy the distribution from the RedHat CDs (recommended), or you
could get it via FTP. If you choose to use FTP, there are two ways of doing
it. You can use the <EM
>wget</EM
> based shell script
presented in the following section or the <EM
>mirror</EM
>
package as suggested in versions up to and including 1.34 of the howto
(reported in section <A
HREF="#USING-MIRROR"
>Using mirror</A
>).
</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="USING-WGET-BASH"
></A
>4.1. Using wget and bash</H2
><P
>
This is not the simplest, even if, probably, the most accurate way. I like it because
it works comparing the RPM versions of the files and not the dates/times or names
(like the standard mirroring packages) and it checks the signatures of the
updates each time it downloads some of them if configured to do so by means of the
<EM
>CHECKSIG</EM
> variable in the
<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
>rhcd.conf</A
> file.
</P
><P
> Create a directory to hold the installation files and <EM
>cd</EM
>
into it, then issue the command (which will download ~3Gb of data on your
hard drive):
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
$ wget -r -c -t0 -l0 --retr-symlinks -nH --cut-dirs=9 \
ftp://ftp.mirror.ac.uk/sites/ftp.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> You will probably want to change the ftp download mirror and, consequently, the
parameter passed to the <EM
>--cut-dirs</EM
> option. That's used,
in fact, together with <EM
>-nH</EM
> to avoid the recreation of the ftp
site directory hierarchy. For more information on how to use the option correctly
you can have a look at the <A
HREF="http://www.gnu.org/manual/wget-1.8.1/wget.html"
TARGET="_top"
> wget documentation</A
> and man page.
</P
><P
> If you want to exclude one or more directories from the download, you can use the
<EM
>-X list</EM
> option, where <EM
>list</EM
> represents
a comma-separated list of directories. For example to exclude the
<TT
CLASS="FILENAME"
>SRPMS</TT
> directory from the previous download, you would use:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
$ wget -r -c -t0 -l0 --retr-symlinks -nH --cut-dirs=9 \
-X /sites/ftp.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386/SRPMS \
ftp://ftp.mirror.ac.uk/sites/ftp.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> This could be useful if you consider the size of the <TT
CLASS="FILENAME"
>SRPMS</TT
>
directory (~1.2GB), or at least, I find it useful.
</P
><P
> If you want to check the GPG signatures to make sure of the authenticity of the
packages (which is something I suggest) you should install the
<EM
>gnupg</EM
> package (needed only on Redhat 7.3) and import the
<EM
>security@redhat.com</EM
> public key you can find in the root
directory of the CDs (<TT
CLASS="FILENAME"
>RPM-GPG-KEY</TT
>) or on the
<A
HREF="http://www.redhat.com/solutions/security/news/publickey.html#key"
TARGET="_top"
>RedHat
website</A
>. The key is imported by running the command:
<EM
>gpg --import &#60;filename&#62; </EM
> in releases up to and including
7.3, which is to be changed to read <EM
>rpm --import &#60;filename&#62; </EM
>
for releases 8.0 and 9 (for more informations on this have a look at the
<A
HREF="http://www.gnupg.org/"
TARGET="_top"
>GNU Privacy Guard</A
> and at the
<A
HREF="http://www.rpm.org/"
TARGET="_top"
>RPM</A
> - Redhat Package Manager websites).
</P
><P
> If you want to check the rpm packages you can do it using the following command
(I'm assuming you are issuing it from the directory you have completed the downloads
in):
</P
><P
> For releases up to and including 7.3:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
$ find . -name "*.rpm" -exec rpm -K --nopgp {} \; |grep "NOT *OK"
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> For release 8.0 and 9 (and for future releases as well I guess):
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
$ find . -name "*.rpm" -exec rpm -K {} \; |grep "NOT *OK"
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> If you don't want to <SPAN
CLASS="QUOTE"
>"bother"</SPAN
> yourself with all these steps, I hope you
want to check (at least) for the integrity of the downloaded files (which doesn't mean
nobody has tampered with them), verifying the md5 signatures. This is done with:
</P
><P
> For releases up to and including 7.3:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
$ find . -name "*.rpm" -exec rpm -K --nopgp --nogpg {} \; |grep "NOT *OK"
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> For release 8.0 and 9 (and for future releases as well, I guess):
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
$ find . -name "*.rpm" -exec rpm -K --nosignature {} \; |grep "NOT *OK"
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The content of a Red Hat distribution does not change between releases, so
you only need to download these packages <EM
>ONCE</EM
>. All changes
to the distribution are in the <TT
CLASS="FILENAME"
>updates</TT
>
directory. Thus, if you want to keep an up-to-date mirror of the Red Hat
distribution, you only need to keep the
<TT
CLASS="FILENAME"
>updates</TT
> directory current. This is
done using the script
<A
HREF="rhcd-scripts/updateDist.sh"
TARGET="_top"
> updateDist.sh</A
>. Before using this script you have to configure the
<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
> rhcd.conf</A
> configuration file and export a <EM
>RHCDPATH</EM
>
variable pointing to the directory where this file is.
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> $ export RHCDPATH=/home/luigi/tmp/rhcd-scripts
$ sh updateDist.sh
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The script will download the new updates excluding the subdirectories contained in
the <EM
>EXCLUDELIST</EM
> variable, moving the old ones (i.e. just
superseded by new versions) to the directory represented by the
<EM
>OLDDIR</EM
> variable after having completed two tests.
The first test compares the <TT
CLASS="FILENAME"
>.listing</TT
> files generated by
<TT
CLASS="FILENAME"
>wget</TT
> to the content of the local directories to make sure
all the files were downloaded.
The second test verifies the packages signatures depending on the values of the
two variables <EM
>CHECKSIG</EM
> and <EM
>USEGPG</EM
> (set both
of them to <SPAN
CLASS="QUOTE"
>"yes"</SPAN
> if you want the operation to be completed). In case
of a failure in the signature checking process the script will move the offending
packages to <EM
>OLDDIR</EM
> assigning them the
<SPAN
CLASS="QUOTE"
>".UPDcheckfail"</SPAN
> extension and exit without moving the old updates to
<EM
>OLDDIR</EM
>.
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="USING-MIRROR"
></A
>4.2. Using mirror</H2
><P
> Mirror is a sophisticated perl script that compares the content of a
directory on a remote site with a local directory. It will use FTP to fetch
the files that are on the remote site but not the local site, and delete
files on the local site that are not on the remote site. The mirror program
is configured with a configuration file. The mirror package is available
as an RPM from <A
HREF="http://rufus.w3.org/linux/RPM/mirror.html"
TARGET="_top"
> rufus.w3.org</A
>. Make your local copy <TT
CLASS="FILENAME"
>mirror.redhat</TT
>
of the mirror configuration file, and edit the relevant fields at the top of
the file. After the default section, define these packages:
</P
><P
> <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
>
package=updates
site=ftp.mirror.ac.uk
exclude_patt=(SRPMS/)
remote_dir=/sites/ftp.redhat.com/pub/redhat/linux/updates/7.3/en/os/i386
local_dir=/home/luigi/tmp/redhat-cd/redhat-7.3-updates
package=dist
site=ftp.mirror.ac.uk
exclude_patt=(SRPMS/)
remote_dir=/sites/ftp.redhat.com/pub/redhat/linux/7.3/en/os/i386
local_dir=/home/luigi/tmp/redhat-cd/redhat-7.3
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The following command will download a copy of the entire RedHat tree on
your local disk. <EM
>**Think**</EM
> before you do this, you
are about to transfer approximately 1.5Gb of data (if you have excluded the
<TT
CLASS="FILENAME"
>SRPMS</TT
> directory)!
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
$ mirror -pdist mirror.redhat
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> This will mirror the Red Hat FTP site on your local disk. The content of a
Red Hat distribution does not change between releases, so you only need to
download this package <EM
>ONCE</EM
>. All changes to the
distribution are in the <TT
CLASS="FILENAME"
>updates</TT
>
directory. Thus, if you want to keep an up-to-date mirror of the Red Hat
distribution, you only need to keep the <TT
CLASS="FILENAME"
>updates
</TT
> directory current. This is done using the command
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
>
$ mirror -pupdates mirror.redhat
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> You can run this regularly, say, once a week, through a cron script. The
RedHat distribution is available on a great number of FTP servers around
the world, which are updated daily from the master site at
<A
HREF="ftp://ftp.redhat.com/pub"
TARGET="_top"
>ftp.redhat.com</A
>. You should
choose an FTP site close to you, see the
<A
HREF="http://www.redhat.com/download/mirror.html"
TARGET="_top"
> RedHat list of mirror sites</A
>.
</P
><DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="100%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
> I haven't personally tested this procedure. It was the only proposed one
for the older versions of the howto (up to version 1.34, regarding RedHat &#60;=6.1).
</P
></TD
></TR
></TABLE
></DIV
></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="INCLUDE-UPDATES"
></A
>5. Including the updates</H1
><P
> There are three steps involved, the first two are (almost) equal in all the
releases, while the last one changes quite a bit because of the changes in the
anaconda installer:
<P
></P
><OL
TYPE="i"
><LI
><P
>Correct the file protection modes</P
></LI
><LI
><P
>Replace updated RPMs</P
></LI
><LI
><P
>Rebuild the installer</P
></LI
></OL
>
To incorporate the updates, you need write access to the
distribution directory from a Linux machine, with a working version of
<A
HREF="http://www.rpm.org"
TARGET="_top"
>rpm</A
> installed, while <EM
>to rebuild the
anaconda installer you need to use a release of Redhat Linux equal to the one you
are rebuilding the installer for (otherwise the procedure will fail)</EM
>.
If you maintain a mirror of the <TT
CLASS="FILENAME"
>updates</TT
>
directory, you can at any time produce a CD including the current updates by
repeating these steps.
</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="UPDATE-PERMISSIONS"
></A
>5.1. Correcting the file protection modes</H2
><P
> During the installation process of the releases up to and including 6.2,
some programs are run directly off the CD. Unfortunately, the FTP program
does not always preserve the protection modes of the files and directories
that are copied. Therefore, it is necessary to make sure that execute
permission is given to programs, shell scripts and shared libraries, before
the directory is burned on the CD. This is done by running the
<A
HREF="rhcd-scripts/updatePerm.sh"
TARGET="_top"
> updatePerm.sh</A
> script on your local copy of the distribution.
It is really needed only for version 6.2 and older, the only part useful to
the 7.3/8.0/9 releases procedure is the directories permissions update, even if the
rest won't hurt and things are kept coherent. It is almost equal to the
<TT
CLASS="FILENAME"
>updatePerm</TT
> script included in the previous version of
the howto, just some slight changes were made. Before using this script you
have to configure the
<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
> rhcd.conf</A
> configuration file and export a <EM
>RHCDPATH</EM
>
variable pointing to the directory where this file is.
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> $ export RHCDPATH=/home/luigi/tmp/rhcd-scripts
$ sh updatePerm.sh
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="REPLACING-PACKAGES"
></A
>5.2. Replacing the updated RPMS</H2
><P
> The <A
HREF="rhcd-scripts/updateCD.sh"
TARGET="_top"
> updateCD.sh</A
> script copies all the new
files from the update directory to the RPMS (and SRPMS) directory. The script
uses the <TT
CLASS="FILENAME"
>rvc</TT
> program which was presented in section
<A
HREF="#RPM-VERSION-COMPARE"
>Comparing RPM versions</A
>
to determine which packages in the updates directory are more recent. Older packages
are moved to the <EM
>${OLDDIR}</EM
> directory. If the
<EM
>CHECKSIG</EM
> variable is set to <SPAN
CLASS="QUOTE"
>"yes"</SPAN
>, all the packages in
the main tree will have their signature checked for correctness. If a package fails
the signature check (the kind of check is configured by means of the
<EM
>USEGPG</EM
> variable whose value is assigned in the file
<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
>rhcd.conf</A
>), it is moved to the
<EM
>OLDDIR</EM
> directory with an added extension of
<SPAN
CLASS="QUOTE"
>"CDcheckfail"</SPAN
>.
</P
><P
> Before using this script, you have to configure the
<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
>rhcd.conf</A
> configuration
file and export a <EM
>RHCDPATH</EM
> variable pointing to the
directory where this file is.
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> $ export RHCDPATH=/home/luigi/tmp/rhcd-scripts
$ sh updateCD.sh
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="100%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
> After having incorporated the updates in the main
<TT
CLASS="FILENAME"
>RedHat/RPMS</TT
> directory, your copy of
the distribution is no longer a mirror of the Red Hat distribution site.
Actually, it is more up-to-date! Therefore, if you attempt to mirror the
distribution using mirror, older versions of the RPM's that have been updated
will be downloaded once more, and the updates deleted. The bash/wget based
procedure doesn't suffer from the problem, but will leave the main tree in an
incoherent state. Old and new packages will be in this case mixed together, but
you can find and remove them wrapping the <TT
CLASS="FILENAME"
>rvc</TT
> binary in a
simple shell script (which I will leave as an exercise for the reader...).
</P
></TD
></TR
></TABLE
></DIV
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="INSTALLER-REBUILD"
></A
>5.3. Rebuilding the installer</H2
><P
> Things have changed pretty much in this section with the introduction of the
anaconda installer (as of release 6.1) and with the considerable increment
in size (and ... number of CDs) the 7.x/8.0 distributions have seen. Until
release 6.2, the only step composing this section was represented by
generating a new <TT
CLASS="FILENAME"
>hdlist</TT
> file. With release 6.2, this
appears to be true only to a certain extent, because of the changes in the
anaconda installer, in the <EM
>rpm</EM
> software itself
(from version 3.x to 4.x) and the migration of the updated packages to
this new version (updates for release 6.2 are in fact packaged with both
major releases of the <TT
CLASS="FILENAME"
>rpm</TT
> software). We will consider
three different procedures trying to cover all the releases.
</P
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="RH61-REBUILD"
></A
>5.3.1. RedHat &#60;= 6.1</H3
><DIV
CLASS="SECT4"
><H4
CLASS="SECT4"
><A
NAME="AEN391"
></A
>5.3.1.1. Regenerating the hdlist file</H4
><P
> When installing from the CD, the installation program on the CD relies
on the file <TT
CLASS="FILENAME"
>RedHat/base/hdlist</TT
> describing what RPM
packages are available on the CD. The <TT
CLASS="FILENAME"
>hdlist</TT
> file
can be generated by the program <TT
CLASS="FILENAME"
>misc/src/install/genhdlist</TT
>.
This program must be run with the absolute path to the root of the
distribution as the only argument. Here is the <TT
CLASS="FILENAME"
>updateHdlist</TT
>
script which calls that program (from version 1.34 of this howto):
</P
><P
> <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> #!/bin/bash
RHVERSION=6.1
ARCH=i386
echo generating hdlist...
RHROOT=/home/luigi/tmp/redhat-${RHVERSION}
GENHDDIR=${RHROOT}/${ARCH}/misc/src/anaconda/utils
chmod u+x ${GENHDDIR}/genhdlist
chmod 644 ${RHROOT}/${ARCH}/RedHat/base/hdlist
${GENHDDIR}/genhdlist ${RHROOT}/${ARCH} || echo "*** GENHDLIST FAILED ***"
exit 0
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="100%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TH
ALIGN="LEFT"
VALIGN="CENTER"
><B
>Important note for RedHat &#60; 6.1</B
></TH
></TR
><TR
><TD
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
> The installation in RedHat 6.1 is completely changed from earlier versions,
and RedHat has introduced <EM
>anaconda</EM
>. The
<TT
CLASS="FILENAME"
>genhdlist</TT
> program is now found in a different place,
so in the script above, we used
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> GENHDDIR=${RHROOT}/${ARCH}/misc/src/anaconda/utils
</PRE
></FONT
></TD
></TR
></TABLE
>
while for releases up to (and including) 6.0 that line should read
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> GENHDDIR=${RHROOT}/${ARCH}/misc/src/install
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
></TD
></TR
></TABLE
></DIV
><P
> In some cases, <TT
CLASS="FILENAME"
>genhdlist</TT
> fails to run, because the
executable is not statically linked. In such a case, you can add a new line
<TT
CLASS="FILENAME"
>${RHROOT}/${ARCH}/RedHat/instimage/usr/lib</TT
>
in <TT
CLASS="FILENAME"
>/etc/ld.so.conf</TT
> and run <TT
CLASS="FILENAME"
>ldconfig -v</TT
>.
</P
><P
> Another solution is to recompile <TT
CLASS="FILENAME"
>genhdlist</TT
>. The
following modification to the <TT
CLASS="FILENAME"
>updateHdlist</TT
> script worked
under RedHat 5.2:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> #!/bin/bash
RHVERSION=6.1
ARCH=i386
RHROOT=/misc/redhat/redhat-${RHVERSION}
GENHDDIR=${RHROOT}/${ARCH}/misc/src/anaconda/utils
echo Compiling genhdlist...
sed -e 's/FD_t/int/' \
-e 's/fdOpen/open/' \
-e 's/fdClose/close/' \
-e 's/fdFileno//' &#60; ${GENHDDIR}/genhdlist.c &#62; /tmp/genhdlist.c
cc -o /tmp/genhdlist -I/usr/include/rpm /tmp/genhdlist.c -lrpm -lz
echo generating hdlist...
chmod 644 ${RHROOT}/${ARCH}/RedHat/base/hdlist
/tmp/genhdlist ${RHROOT}/${ARCH} || echo "*** GENHDLIST FAILED ***"
exit 0
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> In this version of the script, a copy of the C source of
<TT
CLASS="FILENAME"
>genhdlist.c</TT
> is piped through
<TT
CLASS="FILENAME"
>sed</TT
> to create a copy in
<TT
CLASS="FILENAME"
>/tmp</TT
> that will
compile under RedHat 5.2. This version of
<TT
CLASS="FILENAME"
>genhdlist</TT
> is then used to create the
<TT
CLASS="FILENAME"
>hdlist</TT
> file
</P
><DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="100%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TH
ALIGN="LEFT"
VALIGN="CENTER"
><B
>Important note for RedHat 5.2</B
></TH
></TR
><TR
><TD
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
>
As distributed with RedHat version 5.2 and earlier,
<TT
CLASS="FILENAME"
>genhdlist</TT
> CRASHES if there are files in the
<TT
CLASS="FILENAME"
>RedHat/RPMS</TT
> directory which are <EM
>not</EM
>
RPM files! This causes problems, because in the 5.2 distribution, there
are a couple of non-RPM files named <TT
CLASS="FILENAME"
>ls-lR</TT
> and
<TT
CLASS="FILENAME"
>ls-lR.gz</TT
> in
<TT
CLASS="FILENAME"
>RedHat/RPMS</TT
>. Therefore, you must
remove all non-RPM files from the directory. Alternatively, you can apply
the patch
<A
HREF="rhcd-scripts/oldversion/genhdlist.c.diff"
TARGET="_top"
>genhdlist.c.diff</A
>
to <TT
CLASS="FILENAME"
>misc/src/install/genhdlist.c</TT
> and
do a <EM
>make</EM
>. The patch will cause
<TT
CLASS="FILENAME"
>genhdlist</TT
> to ignore any non-RPM files.
</P
></TD
></TR
></TABLE
></DIV
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="ISO-IMAGE-CREATE"
></A
>5.3.1.2. Creating the CD iso image</H4
><P
> You'll need to create an image file which will be written to the CD. This
file will be 500Mb or more so find a partition with enough free space. You
may need to be root to use mount and cdrecord. Here you will prepare the
iso image of the bootable CD to be burned. It is actually, not strictly
necessary, to create a bootable CD, because you could use a boot floppy instead
of it, but it's definitely a nifty feature (and makes your disc more similar
in behaviour to the original one). These are the commands I use to complete
the task:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ mkdir /images-destination-dir
$ mkisofs -r -J -T -v -V "Red Hat 6.1 (Hedwig)" \
-c boot.cat -b images/boot.img \
-o /images-destination-dir/i386-disc.iso .
</PRE
></FONT
></TD
></TR
></TABLE
>
This is needed to burn the (bootable) disc and is executed from the top
level directory of the distribution. The
<TT
CLASS="FILENAME"
>/images-destination-dir</TT
> directory is
the container for the iso image you are generating, and it must exist
(obviously) before starting the procedure. In the following table you can
read a brief explanation of the various options and their meanings (most
of it was extracted from the <TT
CLASS="FILENAME"
>mkisofs</TT
> man page).
</P
><P
> <DIV
CLASS="TABLE"
><A
NAME="AEN442"
></A
><P
><B
>Table 1. mkisofs options and parameters</B
></P
><TABLE
BORDER="0"
CLASS="CALSTABLE"
><TBODY
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>-r</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Rock Ridge extensions with useful values for the
permission bits</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>-J</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Joliet extensions to use the cd with some different
operating systems</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>-T</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Generate a TRANS.TBL file in each directory to map correctly
the file names even on systems which do not support the Rock
Ridge extensions.</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>-v</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>be verbose</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
CLASS="LITERALLAYOUT"
>-V&nbsp;&#60;volid&#62;</P
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Specifies the volume ID (volume name or label) to
be written into the master block.</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
CLASS="LITERALLAYOUT"
>-c&nbsp;&#60;boot&nbsp;catalog&#62;</P
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Specifies the path and filename of the boot catalog
to be used when making an "El Torito" bootable CD.
The pathname must be relative to the source path
specified to mkisofs.</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
CLASS="LITERALLAYOUT"
>-b&nbsp;&#60;eltorito&nbsp;boot&nbsp;image&#62;</P
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Specifies the path and filename of the boot image
to be used when making an "El Torito" bootable CD.
The pathname must be relative to the source path
specified to mkisofs and specify a floppy image (which
is why we use one of the floppy images found on the
original CD. You may want to change this with the
<TT
CLASS="FILENAME"
>pcmcia.img</TT
> image to install using pcmcia
devices like network cards or CDROM readers.</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
CLASS="LITERALLAYOUT"
>-o&nbsp;&#60;filename&#62;</P
></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>Name of the file containing the generated iso image</TD
></TR
><TR
><TD
ALIGN="LEFT"
VALIGN="TOP"
>.</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>&nbsp;</TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
>This is the root directory for our generated iso image (we are
working from the root directory of every CD, so a dot is
enough).</TD
></TR
></TBODY
></TABLE
></DIV
>
</P
><P
> You will find details of how to burn the image on a media in <A
HREF="#BURN-CD"
>Burning the CD</A
>.
The <TT
CLASS="FILENAME"
>mkisofs</TT
> and <TT
CLASS="FILENAME"
>cdrecord</TT
> steps can be
executed by means of a graphical frontend like
<A
HREF="http://www.xcdroast.org/"
TARGET="_top"
>X-CD-Roast</A
> which should currently
support the creation of bootable CDs (I've never used it, so don't expect me
to give you any explanation).
</P
></DIV
></DIV
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="RH62-REBUILD"
></A
>5.3.2. RedHat 6.2</H3
><P
> Apparently, this is a problem child when it comes to burning an uptodate CD.
The introduction of version 4 of the Redhat Package Manager (RPM), made the
procedure to update the anaconda installer fail. So the procedures listed will
work only if the updated packages were built using a version of the RPM
software which is older than or equal to 3.0.4 (so, basically, 3.0.4 or 3.0.5).
</P
><P
> If you are using the original packages from Redhat, you have to avoid using
updates released after 28 March 2001 (which is a bit useless, in my opinion)
or you have to rebuild the packages using the old rpm format. Details on the
downgrade procedure and tools which implement it can be found in the document
<A
HREF="http://www.tigress.co.uk/rmy/rh62/rpmhack.html"
TARGET="_top"
>rpmhack</A
>.
I have not personally tested this procedure, even if it appears to work if you
read about it on the anaconda-devel and kickstart mailing lists (you can find
them on the <A
HREF="https://listman.redhat.com/mailman/listinfo"
TARGET="_top"
>mailing
lists</A
> section of the Redhat website.
</P
><P
> If you decide to stick to the old original packages and complete the update
(using the rpm 4.0.2 packages after the installation is finished)
there are two possible ways of doing it, depending on which kind of updates you
want to complete the CD with. If some of the updates regard directly the
installation process (e.g. kernel, python, kudzu), you will have to use the
installer rebuilding procedure explained in the document
<A
HREF="http://www.scyld.com/~pzb/rhcd.html"
TARGET="_top"
>Building a Red Hat Linux 6.2
CDROM</A
>, otherwise you can still use the old procedure (the one for
releases previous to and including 6.1 explained in the previous section).
The last two steps, which are, respectively, creating the iso image and burning
the actual media are described in <A
HREF="#ISO-IMAGE-CREATE"
>Creating the CD iso image</A
> and
<A
HREF="#BURN-CD"
>Burning the CD</A
>, respectively.
</P
></DIV
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="RH73-REBUILD"
></A
>5.3.3. RedHat 9, 8.0 and 7.3</H3
><P
> Once again a lot of things have changed with the release of the 7.x series of the
distribution. There are now more operations to complete to obtain a fresh and
uptodate series of CDs. Exactly, they have become more than one with release 7.0
and now the tree has to be split to fit on the media. This is done by means of
the <TT
CLASS="FILENAME"
>splitdistro</TT
> script, which is written in python like most
of the anaconda installer. To complete this part, you <EM
>must</EM
> use
a Linux RedHat 7.3, 8.0 or 9 machine with the <EM
>anaconda-runtime</EM
>
package installed (it will probably have version 7.3.7, 8.0.4 or 9.0.4), depending
on the release you want to rebuild. The procedure is composed by seven steps:
<P
></P
><OL
TYPE="i"
><LI
><P
> Regenerating the <TT
CLASS="FILENAME"
>hdlist</TT
> and
<TT
CLASS="FILENAME"
>hdlist2</TT
> files
</P
></LI
><LI
><P
> Updating the <TT
CLASS="FILENAME"
>comps.xml</TT
> (or
<TT
CLASS="FILENAME"
>comps</TT
>) file
</P
></LI
><LI
><P
>Rebuilding the installer</P
></LI
><LI
><P
>Splitting the distribution in CD-sized chunks</P
></LI
><LI
><P
> Regenerating the <TT
CLASS="FILENAME"
>hdlist</TT
>
and <TT
CLASS="FILENAME"
>hdlist2</TT
> files (again)
</P
></LI
><LI
><P
>Generating the iso images</P
></LI
><LI
><P
>adding and checking the md5 signatures in the iso images</P
></LI
></OL
>
</P
><P
> All the steps are grouped together in a single script presented in the last section.
</P
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN530"
></A
>5.3.3.1. Preliminary operations on the main tree</H4
><P
> Some of the scripts included in the <TT
CLASS="FILENAME"
>anaconda-runtime</TT
> package
need the main tree to be moved in a subdirectory named like the architecture we
are building for (so <TT
CLASS="FILENAME"
>i386/</TT
> for me). We will
move everything to such directory before starting the procedure and change the
invocation of the scripts which don't need this modification.
</P
><P
>
For redhat 9 and 8.0:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ chmod -R u+w /absolute-path-to-toplevel-dir
$ mkdir -p /absolute-path-to-toplevel-dir/i386
$ cd /absolute-path-to-toplevel-dir
$ /bin/mv * i386
</PRE
></FONT
></TD
></TR
></TABLE
>
You should change <SPAN
CLASS="QUOTE"
>"/absolute-path-to-toplevel-dir"</SPAN
> with the
<EM
>absolute path</EM
> of the directory where the root of your
local copy of the distribution is located (maybe somewhere on some hard drive).
You will get an error, from the execution of the last command, because the
<TT
CLASS="FILENAME"
>i386/</TT
> directory cannot be moved under
itself, but you don't need to worry about that.
</P
><P
>
For redhat 7.3:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ chmod -R u+w /absolute-path-to-toplevel-dir
$ mkdir -p /absolute-path-to-toplevel-dir/i386
$ cd /absolute-path-to-toplevel-dir
$ for i in `ls` ; do [ $i != "SRPMS" -a $i != i386 ] &#38;&#38; /bin/mv $i i386 ; done
</PRE
></FONT
></TD
></TR
></TABLE
>
You shouldn't receive any error message this time from the last command (hopefully).
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN542"
></A
>5.3.3.2. Regenerating the hdlist and hdlist2 files</H4
><P
> This is done by means of the following two commands with the help of
the <TT
CLASS="FILENAME"
>genhdlist</TT
> program.
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ /usr/lib/anaconda-runtime/genhdlist /absolute-path-to-toplevel-dir/i386
$ chmod 644 /absolute-path-to-toplevel-dir/i386/RedHat/base/hdlist{,2}
</PRE
></FONT
></TD
></TR
></TABLE
>
Once again, <SPAN
CLASS="QUOTE"
>"/absolute-path-to-toplevel-dir"</SPAN
> is the
<EM
>absolute path</EM
> of the directory where the root of your
local copy of the distribution is located.
The second command is needed to make sure the correct permissions are
set for the file. You should already have an idea of what these files are about
if you have read through <A
HREF="#REDHAT-DIR"
>The Redhat directory</A
>.
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="UPD-COMPS.XML"
></A
>5.3.3.3. Update the <EM
>comps.xml</EM
> file</H4
><P
> In Redhat Linux 8.0 the format of the comps file has completely changed and it's
now based on XML. It provides much more flexibility and ease of customization
as you can read in <A
HREF="#COMPS-FILE"
>The comps file</A
>. If you have modified or intend to
modify the list of the installed packages, you need to complete this step. This,
in turn, implies having the modified version of comps-9.tar.gz
<A
HREF="rhcd-scripts/comps-9.tar.gz"
TARGET="_top"
> comps-9.tar.gz</A
> (the original one doesn't work for me) or
<A
HREF="http://rhlinux.redhat.com/anaconda/comps-8.0.tar.gz"
TARGET="_top"
> comps-8.0.tar.gz</A
> package (depending on the release you are building)
including the master comps file found on the Redhat website and the
<TT
CLASS="FILENAME"
>comps-extras</TT
> rpm package installed.
Follow these steps for Redhat 9 and 8.0:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ cd /some-dir-of-your-choice
$ tar xzvf /path-to-comps-9.tar.gz/comps-9.tar.gz
$ cd comps
$ make
$ cat comps-milan.xml |sed 's!&#60;/comps&#62;!!g' &#62;comps-tmp.xml
$ /usr/share/comps-extras/getfullcomps.py comps.xml \
/absolute-path-to-toplevel-dir i386 &#62;&#62; comps-tmp.xml
$ echo '&#60;/comps&#62;' &#62;&#62; comps-tmp.xml
$ cp comps-tmp.xml /absolute-path-to-toplevel-dir/i386/RedHat/base/comps.xml
</PRE
></FONT
></TD
></TR
></TABLE
>
Beside <SPAN
CLASS="QUOTE"
>"/absolute-path-to-toplevel-dir"</SPAN
>, you should take care of
assigning valid names to <SPAN
CLASS="QUOTE"
>"/some-dir-of-your-choice"</SPAN
> and
<SPAN
CLASS="QUOTE"
>"/path-to-comps-9.tar.gz"</SPAN
>. The rest of the commands can be just
copied. And... you must (obviously) change 9 to read 8.0 if you are building
a Redhat 8.0 distribution.
</P
><P
> Again, before issuing the <EM
>make</EM
> command, you should modify the file
<TT
CLASS="FILENAME"
>comps-milan.xml.in</TT
> using your favourite text editor and
following the guidelines and the suggestions found in <A
HREF="#COMPS-FILE"
>The comps file</A
>
and on the
<A
HREF="http://rhlinux.redhat.com/anaconda/comps.html"
TARGET="_top"
>anaconda comps</A
>
section of the Redhat website.
</P
><P
> The script presented in the last section will execute all the steps needed after
the <EM
>make</EM
> command, using the <EM
>COMPSFILE</EM
>
variable to find the <TT
CLASS="FILENAME"
>comps-milan.xml</TT
> file (it doesn't need
to have that name, I'm just using the original name, but you can change it if
you want).
</P
><P
> If you are using Redhat 7.3, the <TT
CLASS="FILENAME"
>comps</TT
> file (have you noticed
the different name...) is a textual file with a completely different syntax described
in some more detail in <A
HREF="#COMPS-FILE"
>The comps file</A
>. In this case, the only necessary
operations are modifying the file to suit your needs and copying it to the
<TT
CLASS="FILENAME"
>RedHat/base/comps</TT
> file in the main tree overwriting the original
one.
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN575"
></A
>5.3.3.4. Rebuilding the installer</H4
><P
> This will rebuild the anaconda installer in your local copy of the distribution
using your updated packages.
For Redhat 9 execute:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ /usr/lib/anaconda-runtime/buildinstall \
--pkgorder /absolute-path-to-toplevel-dir/pkgorder.txt \
--comp dist-9 --product "Red Hat Linux" --version 9 \
--release "Redhat 9 (Shrike)" /absolute-path-to-toplevel-dir/i386
</PRE
></FONT
></TD
></TR
></TABLE
>
Where, once again, <SPAN
CLASS="QUOTE"
>"/absolute-path-to-toplevel-dir"</SPAN
> is
the directory where the root of your local copy of the distribution is located.
</P
><P
> For Redhat 8.0, the procedure is pretty much the same (the <SPAN
CLASS="QUOTE"
>"--product"</SPAN
>
option is missing):
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ /usr/lib/anaconda-runtime/buildinstall \
--pkgorder /absolute-path-to-toplevel-dir/pkgorder.txt \
--comp dist-8.0 --version 8.0 --release "Redhat 8.0 (Psyche)" \
/absolute-path-to-toplevel-dir/i386
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> Or if you are still using Redhat 7.3 (as I am):
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ /usr/lib/anaconda-runtime/buildinstall \
--pkgorder /absolute-path-to-toplevel-dir/pkgorder.txt \
--comp dist-7.3 --version 7.3 /absolute-path-to-toplevel-dir/i386
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> The absence of the (mandatory in 8.0) <EM
>--release</EM
> option
is the only noticeable difference.
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN587"
></A
>5.3.3.5. Split the distribution</H4
><P
> This will create five directories, each one corresponding to a different
CD and will put in them hard links to the real files contained in your local
copy of the distribution.
<DIV
CLASS="NOTE"
><P
></P
><TABLE
CLASS="NOTE"
WIDTH="100%"
BORDER="0"
><TR
><TD
WIDTH="25"
ALIGN="CENTER"
VALIGN="TOP"
><IMG
SRC="../images/note.gif"
HSPACE="5"
ALT="Note"></TD
><TD
ALIGN="LEFT"
VALIGN="TOP"
><P
> This will not work at all for Redhat 7.3 if you don't use the modified
version of the <TT
CLASS="FILENAME"
>splitdistro</TT
> script reported in the next
paragraph. For Redhat 8.0 and 9, a modified version of
<TT
CLASS="FILENAME"
>splitdistro</TT
> is provided mainly because even if the problems
in the previous script were fixed, the execution now fails if there are
not enough packages to fill all the CDs (the first four completely and the
last one even just partly).
</P
></TD
></TR
></TABLE
></DIV
>
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ $/usr/lib/anaconda-runtime/splitdistro \
--fileorder /absolute-path-to-toplevel-dir/pkgorder.txt --release \
"Redhat 9 (Shrike)" /absolute-path-to-toplevel-dir i386
</PRE
></FONT
></TD
></TR
></TABLE
>
The only thing you need to change for 8.0 and 7.3 is the string passed to the
<EM
>--release</EM
> option (which should read
<SPAN
CLASS="QUOTE"
>"Redhat 8.0 (Psyche)"</SPAN
> or <SPAN
CLASS="QUOTE"
>"Redhat 7.3 (Valhalla)"</SPAN
>)
</P
><P
> For Redhat 7.3 the version of the
<A
HREF="rhcd-scripts/splitdistro7.3"
TARGET="_top"
> splitdistro7.3</A
> (python) script used was extracted from the
<EM
>anaconda-runtime 7.3.7</EM
> package and modified by me.
You should sustitute it to the original one (maybe after copying the latter)
named <TT
CLASS="FILENAME"
>/usr/lib/anaconda-runtime/splitdistro</TT
>.
</P
><P
> The only modification (apart from some small fixes), the script went through,
is a change in its behaviour if the <TT
CLASS="FILENAME"
>SRPMS</TT
> directory is not
found (doesn't terminate, but generate the CDs without source packages).
</P
><P
> For Redhat 8.0 the version of the
<A
HREF="rhcd-scripts/splitdistro8.0"
TARGET="_top"
> splitdistro8.0</A
> (python) script used was extracted from the
<EM
>anaconda-runtime 8.0.4</EM
> package and modified once again by
me to obtain some improvements I felt the need for. You should sustitute it to
the original one (maybe after copying the latter somewhere) named
<TT
CLASS="FILENAME"
>/usr/lib/anaconda-runtime/splitdistro</TT
>. Anyway, the original
one works well, if you want to build a distribution which has all the
<EM
>SRPMS</EM
> packages (so to fill all the 5 CDs otherwise the
script will fail).
</P
><P
> The only modification the script went through is a change in its behaviour
if the <TT
CLASS="FILENAME"
>SRPMS</TT
> directory is not found (doesn't terminate
failing, but generates the CDs without source packages) or there is one CD which
hasn't any package on it (instead of failing, generates an empty directory).
</P
><P
> For Redhat 9 you can find a copy of the script with the same modifications
applied to the version included in release 8.0 here:
<A
HREF="rhcd-scripts/splitdistro9"
TARGET="_top"
>splitdistro9</A
>. Everything said
for Redhat 8.0 in the previous paragraph applies to release 9.
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN613"
></A
>5.3.3.6. Regenerating the hdlist and hdlist2 files</H4
><P
> This is needed to recreate the hdlist and hdlist2 files, using some of
the informations obtained in the previous steps. There are no differences
between 7.3, 8.0 and 9 for this execution of the program
The command to issue is the following:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ /usr/lib/anaconda-runtime/genhdlist \
--fileorder /absolute-path-to-toplevel-dir/pkgorder.txt --withnumbers \
/absolute-path-to-toplevel-dir/i386-disc[1-3]
</PRE
></FONT
></TD
></TR
></TABLE
>
As you can see, there are two new options passed to the program, if you remember
the first run of it. The first one, <EM
>--fileorder</EM
>, tells genhdlist
to use the file <TT
CLASS="FILENAME"
>pkgorder.txt</TT
> we generated in the second
step (rebuild the installer). This file keeps informations on how the packages
were split on the different CDs and is used by the installer to determine in which
order the packages should be installed. Basically, if you avoid using it, you will
(probably) end up swapping the various CDs many times during the installation.
The <EM
>--withnumbers</EM
> option is needed to associate a CD number to
every package (as you can see, a wildcard indicating the first 3 iso images is
used).
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN620"
></A
>5.3.3.7. Generating the iso images</H4
><P
> Here you will prepare the iso images to be burned on the actual CDs. There are
two different commands to be used for the first disc and for the rest of them.
This is due to the need of obtaining a first CD which is bootable. This is
actually, not strictly necessary, because you could use a boot floppy instead
of it, but it's definitely a nifty feature (and makes your discs more similar
in behaviour to the original ones). These are the commands I use to complete
the task:
</P
><P
> <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ mkdir /images-destination-dir
$ mkisofs -r -J -T -v -V "Red Hat 9 (Shrike) disc 1" \
-c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot \
-boot-load-size 4 -boot-info-table -o /images-destination-dir/i386-disc1.iso .
</PRE
></FONT
></TD
></TR
></TABLE
>
This is needed to burn the first (bootable) disc for RedHat 8.0 and 9 (with no floppy
emulation) and is executed from the top level directory of the distribution. The
<TT
CLASS="FILENAME"
>/images-destination-dir</TT
> directory is
the container for the five iso images you are generating, and it must exist
before starting the procedure. The only thing which needs to be changed for Redhat 8.0
is the volume name (it should be "Red Hat 8.0 (Psyche) disc 1").
</P
><P
> <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ mkdir /images-destination-dir
$ mkisofs -r -J -T -v -V "Red Hat 7.3 (Valhalla) disc 1" \
-c boot.cat -b dosutils/autoboot/boot.img \
-o /images-destination-dir/i386-disc1.iso .
</PRE
></FONT
></TD
></TR
></TABLE
>
This is needed to burn the first (bootable) disc on 7.3 and is executed from
the top level directory of the distribution (this time with floppy emulation).
</P
><P
> The rest of the images can be written by means of this <SPAN
CLASS="QUOTE"
>"for"</SPAN
> loop
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ for i in `echo 2 3 4 5` ; do mkisofs -r -J -T -v \
-V "Red Hat 9 (Shrike) disc ${i}" \
-o /images-destination-dir/i386-disc${i}.iso . ; done
</PRE
></FONT
></TD
></TR
></TABLE
>
The loop just presented will prepare the last four images giving them the
correct numbers. As you can see, there are just two missing options from the
first run, and, as you can guess, they are needed only to create a bootable
CD. In <A
HREF="#ISO-IMAGE-CREATE"
>Creating the CD iso image</A
>, you can read a brief explanation of
the various options and their meanings (most of it was extracted from the man page).
Again if you are building a Redhat 8.0 you should change the volume name to read
"Red Hat 8.0 (Psyche) disc ${i}".
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN632"
></A
>5.3.3.8. Implant and check the md5 signatures in the iso images</H4
><P
> This is actually an optional step but it permits the use of the
<SPAN
CLASS="QUOTE"
>"checkmedia"</SPAN
> option to verify the CDs signatures before installing
them, so to guarantee their correctness.
</P
><P
> The following commands permit to inject and verify an md5 signature on an iso
image:
<TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> $ /usr/lib/anaconda-runtime/implantisomd5 iso-image
$ /usr/lib/anaconda-runtime/checkisomd5 iso-image
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> After completing all these steps, we will find ourselves with the five CD images
to burn. Considering that typing all this stuff is a bit time consuming, in the
next section is presented a script, which will complete all of the listed
operations in a single run (do not forget to configure the parameters properly).
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="UPDATEBUILD-SCRIPT"
></A
>5.3.3.9. Putting all the steps together</H4
><P
> The
<A
HREF="rhcd-scripts/updateBuild.sh"
TARGET="_top"
> updateBuild.sh</A
> script will execute all the steps needed to rebuild the
distribution CDs for RedHat 7.3, 8.0 or 9 in a single run (as root). Before using this
script you have to configure the <A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
> rhcd.conf</A
> configuration file after exporting a <EM
>RHCDPATH</EM
>
variable pointing to the directory where this file is. If you want to include
a modified <EM
>comps.xml</EM
> (or <EM
>comps</EM
>)
file in your CDs as explained in <A
HREF="#COMPS-FILE"
>The comps file</A
>, you should
copy it into the location defined by means of the
<EM
>COMPSFILE</EM
> variable now (before executing the script).
Don't forget to add the modified <TT
CLASS="FILENAME"
>splitdistro</TT
> script
to the <TT
CLASS="FILENAME"
>/usr/lib/anaconda-runtime</TT
>
directory if you need it.
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> # export RHCDPATH=/home/luigi/tmp/rhcd-scripts
# sh updateBuild.sh
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
></DIV
></DIV
></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="BURN-CD"
></A
>6. Burning the CD(s)</H1
><P
> This is composed by an optional and a required steps. Remember that,
probably, you have to be <SPAN
CLASS="QUOTE"
>"root"</SPAN
> on your machine to run
<TT
CLASS="FILENAME"
>cdrecord </TT
>.
</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN658"
></A
>6.1. Test the image(s)</H2
><P
> If you're paranoid, you can test your new disk image(s) by mounting it. If you
forgot to fix the file permissions or set the rock ridge extensions then
the error will be obvious here since the file names and directory structure
will be wrong. The (optional) test can be done by issuing the command:
</P
><P
> <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> # mount -t iso9660 -o ro,loop=/dev/loop0 iso-image /mnt/cdrom
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> Where <SPAN
CLASS="QUOTE"
>"iso-image"</SPAN
> is the name you gave to the iso image file
to be mounted (which is the only one for releases up to and including 6.2).
When you're done, don't forget to unmount it
</P
><P
> <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> # umount /mnt/cdrom
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN667"
></A
>6.2. Burn the disk(s)</H2
><P
> Be sure to set the correct parameters for your device. This command, for example, is
for a 4X CDR, which is quite slow, by the way. Moreover, it is assumed that the CD writer
is on SCSI bus 0, with ID number 0 and LUN 0 (you can obtain these values by issuing
a <EM
>cdrecord -scanbus</EM
> and assign them to the
<EM
>-dev=</EM
> parameter).
</P
><P
> <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="PROGRAMLISTING"
> # cdrecord -v speed=4 dev=0,0,0 /images-destination-dir/disc1.img
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="COMPS-FILE"
></A
>7. The comps file</H1
><P
> The <TT
CLASS="FILENAME"
>comps</TT
> file defines how the packages are bundled during
the installation. In the Red Hat distribution, this is done according to the
functionality they provide, for example:
<P
></P
><UL
><LI
STYLE="list-style-type: opencircle"
><P
>Printer Support</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>X Window System</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>GNOME</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>KDE</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Mail/WWW/News Tools</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>...</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Kernel Development</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Extra Documentation</P
></LI
></UL
>
</P
><P
> Sometime during the installation process, the user is presented with a
dialog called "Components to install". Some of the components have been
preselected, and others not. The last item on the components list is called
"Everything".
On the dialog box, there is also an option that enables the user to
customize exactly what packages will be installed. Customizing the
installation by hand, or selecting "Everything" in the components list is
the only way to have your own packages installed unless you modify the
<TT
CLASS="FILENAME"
>RedHat/base/comps</TT
> file.
</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN697"
></A
>7.1. Format of <TT
CLASS="FILENAME"
>comps</TT
> file in RedHat versions &#60; 6.1</H2
><P
> The <TT
CLASS="FILENAME"
>comps</TT
> file currently starts with a header describing
the version of the comps format, followed by an empty line.
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> 0.1
&#60;empty line&#62;
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> After this, the components are listed, separated by empty lines:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> &#60;component 1&#62;
&#60;empty line&#62;
&#60;component 2&#62;
&#60;empty line&#62;
....
&#60;component n&#62;
&#60;empty line&#62;
EOF
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> Each component has the following definition:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> (0|1) (--hide)? &#60;name&#62;
&#60;RPM 1&#62;
&#60;RPM 2&#62;
...
&#60;RPM n&#62;
end
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> Before the name of each component, 0 or 1 is given. A value of 1 here means
that the component is chosen by default, and 0 means it's not. The option
<EM
>--hide</EM
> means that you will not see the entry, unless you
choose <SPAN
CLASS="QUOTE"
>"expert"</SPAN
> installation. The first component is called
<SPAN
CLASS="QUOTE"
>"Base"</SPAN
>, and that is special, in the sense that it
<EM
>must</EM
> be present and it does not show up in the dialog
(you can't deselect the base installation, which makes sense...). Next
follows a list of rpm packages belonging to that component.
Note that this is the package name stored <EM
>in the rpm file</EM
>,
and <EM
>not</EM
> any part of the file name of the package (although
it should be the same by convention).
</P
><P
> By adding your packages to the <TT
CLASS="FILENAME"
>comps</TT
> file, you can customize
your own distribution, and make sure that your packages will be installed by default.
One thing to be careful about is interdependence among your packages, but here, you
are on your own :-) A word of warning: be careful not to add or remove extra whitespace
in the file. Examine the existing <TT
CLASS="FILENAME"
>comps</TT
> file (make a copy of
the original) to see how it's done (or check
<TT
CLASS="FILENAME"
>i386/misc/src/install/pkgs.c</TT
> if you want to see how the file
is parsed).
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN718"
></A
>7.2. Format of comps file in RedHat version 6.1</H2
><P
> With RedHat version 6.1, the format of the <TT
CLASS="FILENAME"
>comps</TT
> file has changed.
The decoding takes place in
<TT
CLASS="FILENAME"
>${RHROOT}/${ARCH}/misc/src/anaconda/comps.py</TT
>. I didn't
analyze yet this python script and the following rules were obtained only by
reading the file and testing some configurations for it.
</P
><P
> In release 6.1, the definition of <EM
>component</EM
> is extended to
include some more optional elements beside the <EM
>&#60;RPM&#62;</EM
>
ones. These elements are:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> &#60;arch-dependent-RPM 1&#62;
...
&#60;arch-dependent-RPM n&#62;
&#60;required-component 1&#62;
...
&#60;required-component n&#62;
&#60;component-dependent-RPM 1&#62;
...
&#60;component-dependent-RPM n&#62;
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> An &#60;arch-dependent-RPM&#62; defines a dependency between a package and specific
architecture and has the following definition:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> (!)?arch: &#60;RPM&#62;
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> So it can, for example, present itself, in the real world, as:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> !alpha: kernelcfg
</PRE
></FONT
></TD
></TR
></TABLE
>
which means: if architecture is not alpha then install package
<EM
>kernelcfg</EM
>.
</P
><P
> Or as:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> i386: mkbootdisk
</PRE
></FONT
></TD
></TR
></TABLE
>
which means if architecture is i386 then install package
<EM
>mkbootdisk</EM
>
</P
><P
> A &#60;required-component1&#62; enforces the dependency from another component and is
defined as:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> @ &#60;component&#62;
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> So, for example, if inside a component definition you find the following line:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> @ Networked Workstation
</PRE
></FONT
></TD
></TR
></TABLE
>
it means that the component itself needs the installation of another component
named <EM
>Networked Workstation</EM
>.
</P
><P
> A &#60;component-dependent-RPM&#62; is used to select the installation of some
additional packages for a component, given the presence of another component.
Its definition is as follows:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> ? &#60;component&#62; {
&#60;RPM 1&#62;
...
&#60;RPM n&#62;
}
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> So if, for example, in a component definition, you happen to read the following
lines:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> ? KDE {
kpppload
}
</PRE
></FONT
></TD
></TR
></TABLE
>
then if the <EM
>KDE</EM
> component is installed, the package
<EM
>kpppload</EM
> will be installed together with the packages
included in the component the definition was found in.
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN746"
></A
>7.3. Format of comps file in RedHat version 6.2</H2
><P
> With RedHat version 6.2, the format of the <TT
CLASS="FILENAME"
>comps</TT
> file
has, apparently, changed just slightly. The decoding takes place in
<TT
CLASS="FILENAME"
>${RHROOT}/${ARCH}/misc/src/anaconda/comps.py</TT
> even in this
case. Once again, I didn't analyze yet this python script and the following rules
were obtained only by reading the file and testing some configurations for it.
</P
><P
>
In release 6.2, the definition of component is extended to include two more
optional elements which are:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> &#60;lang-dependent-RPM 1&#62;
...
&#60;lang-dependent-RPM n&#62;
&#60;arch-dependent-component 1&#62;
...
&#60;arch-dependent-component n&#62;
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> A <EM
>&#60;lang-dependent-RPM&#62;</EM
> is needed to specify the
installation of a package in case a specific language was selected. It's
defined as:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> (lang &#60;language&#62;): &#60;RPM&#62;
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> For example, the following line:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> (lang ja_JP)): locale-ja
</PRE
></FONT
></TD
></TR
></TABLE
>
means: if the Japanese language is selected, then install the
<EM
>locale-ja</EM
> package together with the other packages installed
for the current component.
</P
><P
> An <EM
>&#60;arch-dependent-component&#62;</EM
> extends the concept of
<EM
>&#60;arch-dependent-RPM&#62;</EM
> introduced in release 6.1 to an
entire component, as you can understand reading the definition:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> (!)?arch: &#60;component&#62;
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN763"
></A
>7.4. Format of comps file in RedHat version 7.3</H2
><P
> With RedHat version 7.3, the format of the <TT
CLASS="FILENAME"
>comps</TT
> file
has gained some more syntactical power. The decoding takes place (again) in
the <TT
CLASS="FILENAME"
>comps.py</TT
> script, which you can now find in the
<TT
CLASS="FILENAME"
>/usr/lib/anaconda/</TT
> directory if you have installed the
<EM
>anaconda</EM
> package. The dependencies on a language or an
architecture by a component or a package can now be joined with the
<EM
>and</EM
> operator. For example:
<TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> (arch !s390 and arch !s390x and arch !ia64): readline2.2.1
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> which means if architecture is not any of s390, s390x, ia64 then install
the package readline2.2.1. This can be done with components instead of
packages and languages instead of architectures. All this, is definitely more
than enough for the simple examples of customization of the default installation
which will be presented in the next section.
</P
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="CUSTOM-COMPS-RH73"
></A
>7.4.1. Customizing the default installation of RedHat version 7.3</H3
><P
> The example we will go through in this section implies modifications to the
<EM
>comps</EM
> file to change the default values for packages
installation. I usually prefer, in fact, particularly in certain situations a
default installation including only the base packages, with some slight
alterations to some of them. In the first of the presented examples, we will
build a default installation which has the <EM
>libsafe</EM
> added
to the <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> component and most of the packages which are usually
installed by default are deselected, so to build a minimal installation. In the
second of the examples, we will modify some of the components to build another
minimal installation which fits (this time, almost perfectly) our needs (they are,
actually, my needs, your mileage may definitely vary). If you want to include a
modified <EM
>comps</EM
> file in your CDs, you should copy
it into the main tree just before starting the operations described in
<A
HREF="#RH73-REBUILD"
>Rebuilding the 7.3/8.0 installer</A
>.
</P
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN781"
></A
>7.4.1.1. Adding RPMS and deselecting default components</H4
><P
> To customize your installation this way, you have to edit the
<TT
CLASS="FILENAME"
>comps</TT
> file with your favourite text editor (pay
attention not to leave harmful spaces or tabs in the file) and move it
to the <TT
CLASS="FILENAME"
>Redhat/base</TT
> directory overwriting the original
one.
</P
><P
> In the <A
HREF="rhcd-scripts/comps/comps.1"
TARGET="_top"
> first comps file</A
> included, the <EM
>libsafe</EM
>
package was added to the <SPAN
CLASS="QUOTE"
>"Base system"</SPAN
> component and almost
every component was deselected so to have a default installation comprising
only two hundred packages (I know they can still be too many...).
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN790"
></A
>7.4.1.2. Modify some of the standard components</H4
><P
> In the <A
HREF="rhcd-scripts/comps/comps.2"
TARGET="_top"
> second comps file</A
> included, we build on the previous setup and strip
down the default installation a bit more (this time there will be only 154 packages
in the default installation). Some of the groups have been splitted to give
the installation some more granularity. All the modifications you do should
take into account the interdependencies among packages and the applications used
during the installation phases (you cannot remove <EM
>kudzu</EM
>, for
example, from the <EM
>Base</EM
> component, even if you can do it after
installation). It must be said that similar results can be obtained using
<EM
>kickstart</EM
>. For more informations about it, you can read
<A
HREF="http://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/custom-guide/ch-kickstart2.html"
TARGET="_top"
>
The RedHat Linux Customization Guide</A
>.
</P
></DIV
></DIV
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN798"
></A
>7.5. Format of comps file in RedHat version 8.0 and 9</H2
><P
> With RedHat version 8.0 and 9, the format of the <TT
CLASS="FILENAME"
>comps</TT
> file
has changed completely and now an XML file, whose name is <TT
CLASS="FILENAME"
>comps.xml</TT
>,
is used. Details on the file syntax can be found in the
<A
HREF="http://rhlinux.redhat.com/anaconda/comps.html"
TARGET="_top"
>anaconda comps</A
> section
of the RedHat website.
</P
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="CUSTOM-COMPS-RH80"
></A
>7.5.1. Customizing the default installation of RedHat version 8.0</H3
><P
> We will now reproduce the examples presented for release 7.3 taking into account
the modifications the various groups were submitted to. The most important group
(the <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> group) is splitted here in two groups which are named
<SPAN
CLASS="QUOTE"
>"Base"</SPAN
> and <SPAN
CLASS="QUOTE"
>"Core"</SPAN
>. The <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> group should
represent the minimal possible installation.
</P
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN811"
></A
>7.5.1.1. Our first example revisited for Redhat 8.0</H4
><P
> This time, to customize your installation you have to edit the
<TT
CLASS="FILENAME"
>comps-milan.xml.in</TT
> file with your favourite text editor.
This file can be found in the
<A
HREF="http://rhlinux.redhat.com/anaconda/comps-8.0.tar.gz"
TARGET="_top"
> comps-8.0.tar.gz</A
> archive found on the Redhat website. To add the
packages information to the file you create, you need to have the
<TT
CLASS="FILENAME"
>comps-extras</TT
> rpm package installed. The commands
to be issued to complete the operation are listed in
<A
HREF="#UPD-COMPS.XML"
>Updating comps.xml</A
> and in the
<A
HREF="http://rhlinux.redhat.com/anaconda/comps.html"
TARGET="_top"
>documentation</A
>.
After you create the file, you have to copy it to the
<TT
CLASS="FILENAME"
>Redhat/base</TT
> directory overwriting the original one.
If you are using <A
HREF="#UPDATEBUILD-SCRIPT"
>the updateBuild.sh script</A
>, you should only copy the
<TT
CLASS="FILENAME"
>comps-milan.xml</TT
>, (after having modified the
<TT
CLASS="FILENAME"
>comps-milan.xml.in</TT
> found in the
<TT
CLASS="FILENAME"
>comps-8.0.tar.gz</TT
> tar/gzip package and issued the
<EM
>make</EM
> command), to the destination you should have
already configured in the <EM
>COMPSFILE</EM
> variable
(<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
>rhcd.conf</A
>).
</P
><P
> In the <A
HREF="rhcd-scripts/comps/comps-milan.xml.in.1"
TARGET="_top"
> first comps file</A
> included the <EM
>libsafe</EM
>
package was added to the <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> group (component) and almost
every group (component) was deselected, apart from <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> and
<SPAN
CLASS="QUOTE"
>"Core"</SPAN
>, so to have a default installation comprising
only ~220 packages (probably too many, again...).
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN833"
></A
>7.5.1.2. Our second example revisited for Redhat 8.0</H4
><P
> In the <A
HREF="rhcd-scripts/comps/comps-milan.xml.in.2"
TARGET="_top"
> second comps file</A
> included, we build on the previous setup and strip
down the default installation a bit more (this time, there will be only 158 packages
in the default installation). Once again, similar results can be obtained using
<EM
>kickstart</EM
>, for more informations about it you can read
<A
HREF="http://www.redhat.com/docs/manuals/linux/RHL-8.0-Manual/custom-guide/ch-kickstart2.html"
TARGET="_top"
>
The RedHat Linux Customization Guide</A
>. In the example, I didn't unselect
completely the installation of the <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> group, because there are
too many packages I usually need, so I just unselected the default installation
for these packages making them optional. As you can see, even the
<TT
CLASS="FILENAME"
>redhat-logos</TT
> package in the <SPAN
CLASS="QUOTE"
>"Core"</SPAN
> group was made
optional. Considering that all of the packages in this group, together, should
represent the <EM
>smallest possible</EM
> installation, you probably
don't want to do this (by the way my CDs work even with this, there should be
some failure I cannot see, yet). The <TT
CLASS="FILENAME"
>tripwire</TT
> package was
also added to the <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> group. The last noticeable modification
was made to the <SPAN
CLASS="QUOTE"
>"dialup"</SPAN
> group, which will be installed even if
unselected because the <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> group depends on it (as declared in
the group definition itself). I have selected only some packages I usually need
from this group for installation and left the rest of them unselected.
</P
></DIV
></DIV
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="CUSTOM-COMPS-RH9"
></A
>7.5.2. Customizing the default installation of RedHat version 9</H3
><P
> We will reproduce (again) the examples presented for release 7.3/8 taking into
account the modifications the various groups were submitted to.
</P
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN850"
></A
>7.5.2.1. Our first example revisited for Redhat 9</H4
><P
> As in the case of 8.0, to customize your installation you have to edit the
<TT
CLASS="FILENAME"
>comps-milan.xml.in</TT
> file with your favourite text editor.
This file can be found in the
<A
HREF="rhcd-scripts/comps-9.tar.gz"
TARGET="_top"
> comps-9.tar.gz</A
> file among the script <EM
>(as I said it is not
the same you can find on the Redhat website)</EM
>. To add the packages
information to the file you create, you need to have the
<TT
CLASS="FILENAME"
>comps-extras</TT
> rpm package installed. The commands
to be issued to complete the operation are listed in
<A
HREF="#UPD-COMPS.XML"
>Updating comps.xml</A
> and in the
<A
HREF="http://rhlinux.redhat.com/anaconda/comps.html"
TARGET="_top"
>documentation</A
>.
After you create the file, you have to copy it to the
<TT
CLASS="FILENAME"
>Redhat/base</TT
> directory overwriting the original one.
If you are using <A
HREF="#UPDATEBUILD-SCRIPT"
>the updateBuild.sh script</A
>, you should only copy the
<TT
CLASS="FILENAME"
>comps-milan.xml</TT
>, (after having modified the
<TT
CLASS="FILENAME"
>comps-milan.xml.in</TT
> found in the
<TT
CLASS="FILENAME"
>comps-9.tar.gz</TT
> tar/gzip package and issued the
<EM
>make</EM
> command), to the destination you should have
already configured in the <EM
>COMPSFILE</EM
> variable
(<A
HREF="rhcd-scripts/rhcd.conf"
TARGET="_top"
>rhcd.conf</A
>).
</P
><P
> In the <A
HREF="rhcd-scripts/comps/comps-milan.xml.in.1-9"
TARGET="_top"
> first comps file</A
> included the <EM
>libsafe</EM
>
package was added to the <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> group (component) and almost
every group (component) was deselected, apart from <SPAN
CLASS="QUOTE"
>"Base"</SPAN
> and
<SPAN
CLASS="QUOTE"
>"Core"</SPAN
>, so to have a default installation comprising
only ~240 packages (mmmhhh complexity is raising high...).
</P
></DIV
><DIV
CLASS="SECT4"
><HR><H4
CLASS="SECT4"
><A
NAME="AEN873"
></A
>7.5.2.2. Our second example revisited for Redhat 9</H4
><P
> In the <A
HREF="rhcd-scripts/comps/comps-milan.xml.in.2-9"
TARGET="_top"
> second comps file</A
> included, we build on the previous setup and strip
down the default installation a bit more (this time, there will be only ~175 packages
in the default installation). This is really similar to the example presented for
Redhat 8.0, so I will avoid boring you with the same explanations. Once again, similar
results can be obtained using <EM
>kickstart</EM
>, for more informations
about it you can read
<A
HREF="http://www.redhat.com/docs/manuals/linux/RHL-9-Manual/custom-guide/ch-kickstart2.html"
TARGET="_top"
>
The RedHat Linux Customization Guide</A
>.
</P
></DIV
></DIV
></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="INSTALLATION"
></A
>8. Installing from the CD</H1
><P
> When installing from the new CD, you may first need to create a bootable
installation diskette. <EM
>IMPORTANT: use a NEW, freshly MS-DOS
formatted diskette!</EM
>. Using an old, worn-out, faulty diskette
can result in strange problems during the installation! On a Linux system,
you can create the diskette using the <TT
CLASS="FILENAME"
>dd</TT
> command:
</P
><P
> <TABLE
BORDER="1"
BGCOLOR="#E0E0E0"
WIDTH="100%"
><TR
><TD
><FONT
COLOR="#000000"
><PRE
CLASS="SCREEN"
> $ dd if=/mnt/cdrom/images/boot.img of=/dev/fd0 bs=1440k
</PRE
></FONT
></TD
></TR
></TABLE
>
</P
><P
> On a system running DOS or Windows-9x, you need to use the
<TT
CLASS="FILENAME"
>rawrite.exe</TT
> program, which is found on the CD
in the <TT
CLASS="FILENAME"
>dosutils</TT
> directory. On
a machine with Windows-9x/Me/NT/2k, you can use the
<TT
CLASS="FILENAME"
>rawritewin.exe</TT
> located in the
<TT
CLASS="FILENAME"
>dosutils/rawritewin</TT
> directory.
</P
><P
> Shut down the machine you want to install on (or do a system upgrade),
insert the boot diskette and your freshly burned CD, and let the machine
boot from the diskette. For more information on the installation process,
see the documents and the
<A
HREF="http://www.tldp.org/HOWTO/Installation-HOWTO/index.html"
TARGET="_top"
>Installation-HOWTO</A
>
or the
<A
HREF="http://www.tldp.org/HOWTO/Bootdisk-HOWTO/index.html"
TARGET="_top"
>Bootdisk-HOWTO</A
>.
</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN894"
></A
>8.1. Booting from a bootable CD</H2
><P
> Most modern machines are able to boot directly from a CD, provided it is
made bootable with the procedure outlined in section <A
HREF="#ISO-IMAGE-CREATE"
>Creating the CD iso image</A
>.
Often, however, you need to change the setting of the BIOS to make the CD
drive bootable. See the documentation for your mother board to see how
it's done.
</P
></DIV
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="OTHER-DISTRIBUTIONS"
></A
>9. Other Linux distributions</H1
><P
> The informations present in the previous versions of the howto (&#60;=1.34), and
reported in the current document,
which apply to releases up to and including 6.1 of Redhat Linux, is believed
to apply to distributions that are Redhat clones such as
<A
HREF="http://www.mandrake.com"
TARGET="_top"
>Mandrake</A
>. The procedure is
reported to be untested (as you can read in the howto itself) though.
</P
><P
> Similar considerations apply to the
<A
HREF="http://www.linuxppc.org"
TARGET="_top"
>LinuxPPC</A
> distribution for
Apple PowerMacs. When making a distribution for the PowerMac platform,
you need to use <A
HREF="http://rufus.w3.org/linux/RPM/mkhybrid.html"
TARGET="_top"
>mkhybrid</A
>)
instead of <TT
CLASS="FILENAME"
>mkisofs</TT
> and this should be the only difference.
</P
><P
> The informations supplied for the new releases of Redhat (&#62;6.1) shouldn't
work with Mandrake, which has now a fairly different installer from the
Redhat one. I really don't know if some other clone of Redhat can have its
distribution CDs updated this way, but I would be happy if you let me know.
</P
></DIV
><DIV
CLASS="SECT1"
><HR><H1
CLASS="SECT1"
><A
NAME="THIS-DOCUMENT"
></A
>10. This document...</H1
><P
> The SGML source of the most recent version of this document can be
retrieved from
<A
HREF="http://www.tldp.org/HOWTO/RedHat-CD-HOWTO/RedHat-CD-HOWTO.sgml"
TARGET="_top"
>here</A
>.
The previous version, created by Morten Kjeldgaard, and Peter von der Ahé,
can be found on
<A
HREF="http://imsb.au.dk/~mok/linux/doc/RedHat-CD.sgml"
TARGET="_top"
>imsb.au.dk</A
>
</P
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="RELATED-DOC"
></A
>10.1. Related documentation</H2
><DIV
CLASS="SECT3"
><H3
CLASS="SECT3"
><A
NAME="AEN914"
></A
>10.1.1. Documentation related to the current version</H3
><P
>
The following documents were useful in the creation of this howto:
</P
><P
> The (unofficial) RedHat 7 Customised Installer mini-HOWTO, by Tony Nugent.
This document is very interesting and useful, so, if you are serious about
building customized CDs, I strongly suggest you to read it. You can find it on
<A
HREF="http://www.linuxworks.com.au/redhat-installer-howto.html"
TARGET="_top"
> www.linuxworks.com.au</A
>
</P
><P
> Miguel Freitas has written RedHat7 CDs mini-Howto, that you can read on this
<A
HREF="http://cambuca.ldhs.cetuc.puc-rio.br/RedHat7-CDs-HowTo.html"
TARGET="_top"
> website</A
>.
</P
><P
> Ron Yorston wrote the <A
HREF="http://www.tigress.co.uk/rmy/rh62/rpmhack.html"
TARGET="_top"
> rpmhack</A
> document, relevant for release 6.2 of Redhat Linux.
</P
><P
> Someone (I couldn't find his name) wrote the document
<A
HREF="http://www.scyld.com/~pzb/rhcd.html"
TARGET="_top"
>Building a Red Hat Linux 6.2
CDROM</A
>, useful for release 6.2.
</P
></DIV
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="AEN925"
></A
>10.1.2. Documentation related to the previous edition</H3
><P
>
Ed Schlunder &#60;zilym@asu.edu&#62; has written a utility called
<TT
CLASS="FILENAME"
>fix-rhcd</TT
> to let you check your Red Hat Linux
distribution mirror for matching file sizes, names, permissions,
and symlinks against an "ls -lNR" listing from the offical Red Hat
ftp site. Any permissions that are wrong are changed to match the
<SPAN
CLASS="QUOTE"
>"ls"</SPAN
> listing. See the
<A
HREF="http://www.ajusd.org/~edward/fix-rhcd/"
TARGET="_top"
>fix-rhcd homepage</A
>.
</P
><P
> Rod Smith &#60;smithrod@bellatlantic.net&#62; has written a Do-It-Yourself
Red Hat Installation guide, which also includes information on creating
RedHat install CD's. Especially aimed at burning a CD from a non-UNIX
system. Find it on his
<A
HREF="http://members.bellatlantic.net/~smithrod/rhjol.html"
TARGET="_top"
>website</A
>.
</P
><P
> A document in french <SPAN
CLASS="QUOTE"
>"Comment graver un CD de la RedHat 5.x a partir
de fichiers telecharges sur Internet...''"</SPAN
> by &#60;skooter@hol.fr&#62; is
available from
<A
HREF="http://linuxfr.org/docs/article/gravure-CD-RH51.html"
TARGET="_top"
>linuxfr.org</A
>.
</P
><P
> With the sense of the good things in life Jussi Torhonen from Finland
&#60;jussi.torhonen@tietosavo.fi&#62; tells us
<A
HREF="http://www.iwn.fi/~jt/cd/"
TARGET="_top"
>Howto make a homebrew</A
> bootable
RedHat Linux 5.2 CD-ROM.
</P
><P
> From the LDP project, see the
<A
HREF="http://www.linuxdoc.org/HOWTO/CD-Writing-HOWTO.html"
TARGET="_top"
>CD-writing HOWTO</A
>.
</P
></DIV
></DIV
><DIV
CLASS="SECT2"
><HR><H2
CLASS="SECT2"
><A
NAME="AEN940"
></A
>10.2. Acknowledgements</H2
><P
> Apart from those mentioned above, thanks are given to the following
people for valuable input, feedback, discussions and other:
</P
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="AEN943"
></A
>10.2.1. Acknowledgements for the current version</H3
><P
> <P
></P
><UL
><LI
STYLE="list-style-type: opencircle"
><P
>Morten Kjeldgaard, &#60;mok (at) imsb (dot) au (dot) dk&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Peter von der Ahé, &#60;pahe+rhcd (at) daimi (dot) au (dot) dk&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Giulia Tomaselli</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Jacinta Conneely</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Filippo Carcaci</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Guillaume Lelarge &#60;gleu (at) wanadoo (dot) fr&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Alain Portal &#60;aportal (at) univ-montp2 (dot) fr&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>All the people on the anaconda-devel and kickstart mailing lists</P
></LI
></UL
>
</P
></DIV
><DIV
CLASS="SECT3"
><HR><H3
CLASS="SECT3"
><A
NAME="AEN963"
></A
>10.2.2. Acknowledgements for the previous versions</H3
><P
> <P
></P
><UL
><LI
STYLE="list-style-type: opencircle"
><P
>Lars Christensen &#60;larsch (at) cs (dot) auc (dot) dk&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Thomas Duffy &#60;tbd (at) cs (dot) brown (dot) edu&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Dawn Endico &#60;dawn (at) math (dot) wayne (dot) edu&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Seva &#60;seva (at) null (dot) cc (dot) uic (dot) edu&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Michael Thomas Cope &#60;mcope (at) orion (dot) ac (dot) hmc (dot) edu&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Charles J. Fisher &#60;charles_fisher (at) bigfoot (dot) com&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Eric Thomas &#60;eric.thomas (at) ericsson (dot) com&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Gordon Yuen &#60;gdccyuen (at) yahoo (dot) com&#62;</P
></LI
><LI
STYLE="list-style-type: opencircle"
><P
>Dave Morse &#60;morse (at) nichimen (dot) com&#62;</P
></LI
></UL
>
</P
></DIV
></DIV
></DIV
></DIV
></BODY
></HTML
>