<HTML ><HEAD ><TITLE >The comps file</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK REL="HOME" TITLE=" Burning a RedHat CD HOWTO " HREF="index.html"><LINK REL="PREVIOUS" TITLE="Burning the CD(s)" HREF="burn-cd.html"><LINK REL="NEXT" TITLE="Installing from the CD" HREF="installation.html"></HEAD ><BODY CLASS="SECT1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >Burning a RedHat CD HOWTO</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="burn-cd.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="installation.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><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" ><H2 CLASS="SECT2" ><A NAME="AEN697" ></A >7.1. Format of <TT CLASS="FILENAME" >comps</TT > file in RedHat versions < 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 <empty line> </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" > <component 1> <empty line> <component 2> <empty line> .... <component n> <empty line> 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)? <name> <RPM 1> <RPM 2> ... <RPM n> 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" ><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 ><RPM></EM > ones. These elements are: <TABLE BORDER="1" BGCOLOR="#E0E0E0" WIDTH="100%" ><TR ><TD ><FONT COLOR="#000000" ><PRE CLASS="SCREEN" > <arch-dependent-RPM 1> ... <arch-dependent-RPM n> <required-component 1> ... <required-component n> <component-dependent-RPM 1> ... <component-dependent-RPM n> </PRE ></FONT ></TD ></TR ></TABLE > </P ><P > An <arch-dependent-RPM> 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: <RPM> </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 <required-component1> 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" > @ <component> </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 <component-dependent-RPM> 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" > ? <component> { <RPM 1> ... <RPM n> } </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" ><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" > <lang-dependent-RPM 1> ... <lang-dependent-RPM n> <arch-dependent-component 1> ... <arch-dependent-component n> </PRE ></FONT ></TD ></TR ></TABLE > </P ><P > A <EM ><lang-dependent-RPM></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 <language>): <RPM> </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 ><arch-dependent-component></EM > extends the concept of <EM ><arch-dependent-RPM></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: <component> </PRE ></FONT ></TD ></TR ></TABLE > </P ></DIV ><DIV CLASS="SECT2" ><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" ><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="include-updates.html#RH73-REBUILD" >Rebuilding the 7.3/8.0 installer</A >. </P ><DIV CLASS="SECT4" ><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" ><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" ><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" ><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" ><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="include-updates.html#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="include-updates.html#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" ><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" ><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" ><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="include-updates.html#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="include-updates.html#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" ><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="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="burn-cd.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="installation.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Burning the CD(s)</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" > </TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Installing from the CD</TD ></TR ></TABLE ></DIV ></BODY ></HTML >