<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
<!ENTITY GFDLDOC SYSTEM "fdl.xml">
]>
<!--"/usr/share/sgml/docbook/xml-dtd-4.1/docbookx.dtd" [-->
<!--"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [-->
<article class="whitepaper" id="rpmupgrade">
<title>UNDER DEVELOPMENT -- RPM download and upgrade -- UNDER
DEVELOPMENT</title>

<articleinfo>
  <copyright>
    <year id="copyyear">2002</year>

    <holder id="authorname">Steven Sanfratello</holder>
  </copyright>

  <pubdate id="publicationdate" role="rcs">$Date: 2002/03/09
  05:31:25 $</pubdate>

  <releaseinfo id="releaseversion">v0.02</releaseinfo>

  <abstract>
    <para>The GNU/Linux world asserts that the operating system can
    be downloaded from the Internet and installed for no money.
    Upgrading is a fundamental task when maintaining a GNU/Linux
    system. The easiest way to upgrade is by installing GNU/Linux
    on a fresh partition. In my readings about upgrading I was
    always left wondering if it is also possible to upgrade an
    existing distribution without destroying it. Here is a
    description of upgrading a GNU/Linux distribution up to the
    next major release from the same vendor, using the downloaded
    binary rpm packages.</para>

    <para>Upgrading using downloaded, binary 
    <acronym>rpm</acronym>

    packages has its advantages and disadvantages. It took me about
    a week and a half to download a little over 600 Megabytes,
    using a 56K modem. A few days after that I was done upgrading
    the packages. Things did not go smoothly for me. But I'll
    identify the pitfalls that I encountered and give tips on
    avoiding them, so that you will spend less time when you
    upgrade.</para>
  </abstract>

  <revhistory>
    <revision>
      <revnumber>0.2</revnumber>

      <date>2002/03/10</date>

      <authorinitials>srs</authorinitials>

      <revremark>After discussing the issues with Greg Louis, we
      decided not to merge his Upgrade HOWTO and mine.</revremark>
    </revision>

    <revision>
      <revnumber>1.0</revnumber>

      <date>2002/03/??</date>

      <authorinitials>srs</authorinitials>

      <revremark>Initial public release.</revremark>
    </revision>
  </revhistory>
</articleinfo>

<remark>THIS DOCUMENT IS STILL UNDER DEVELOPMENT. PLEASE, HOLD ANY
CRITICISMS UNTIL I'M FINISHED WRITING IT.</remark>

<sect1 id="copyleft">
  <title>GNU Copyleft</title>

  <sect2>
    <title id="twolicense">Copyright and Licensing Notice</title>

    <para>Copyright (c) Steven Sanfratello. Permission is granted
    to copy, distribute and/or modify this document under the terms
    of the GNU 
    <ulink url="http://www.gnu.org/copyleft/fdl.html#TOC2">Free
    Documentation License, Version 1.1</ulink>

    or any later version published by the Free Software Foundation;
    with the Invariant Sections being 
    <link linkend="copyleft">GNU Copyleft</link>

    with no Front-Cover Texts and no Back-Cover Text. A copy of the
    license is included in the section entitled " 
    <link linkend="gfdl">GNU Free Documentation License</link>

    ".</para>

<!-- FIXME: extra white space -->
    <para>The author can be contacted at 
    <email>nevets72@linuxmail.org</email>

    . 
<!-- FIXME: extra white space -->
    If you're commenting on text from this HOWTO then please
    include 
    <xref endterm="releaseversion" linkend="releaseversion" />

    and 
    <link linkend="publicationdate">$Date$</link>

    to identify the version and release date of the HOWTO.</para>

    <para>If you are profiting from the use or distribution of this
    document please consider giving something back to the Linux
    community or to the author and then act on those
    considerations.</para>
  </sect2>

  <sect2>
    <title id="twowarranty">Warranty</title>

    <para>Although this HOWTO has been carefully prepared, the
    author assumes no responsibility for errors or omissions or the
    risks that using these ideas creates. No liability is assumed
    for damages resulting from the use of the information contained
    herein.</para>
  </sect2>
</sect1>

<sect1 id="introduction">
  <title>Introduction</title>

  <sect2>
    <title id="twowhere">Where is the latest version?</title>

    <para>Get the latest version of this HOWTO from : 
    <simplelist type="vert">
      <member>
        <ulink url="http://members.linuxmail.org/nevets72/rpmupgrade/">
        HTML Version on my web page</ulink>
      </member>

      <member>
        <ulink
        url="http://cvsview.linuxdoc.org/index.cgi/howto/docbook/rpmupgrade.sgml/">
        Docbook XML LinuxDoc CVS</ulink>
      </member>

      <member>
        <ulink
        url="http://members.a1isp.net/nevets72/rpmupgrade/xml/">
        Docbook XML source on my web page</ulink>
      </member>
    </simplelist>
    </para>
  </sect2>

  <sect2>
    <title id="twoconvetions">Conventions used in this
    HOWTO</title>

    <orderedlist inheritnum="ignore" continuation="restarts">
      <listitem>
        <para>There are some example commands in this HOWTO. They
        are formatted like this:</para>

        <para>
          <prompt>application-name with
          prompt-character(s)</prompt>

          <command>command-name</command>

          <parameter moreinfo="none">
            <replaceable>command-parameter(s)</replaceable>
          </parameter>
        </para>
      </listitem>

      <listitem>
        <para>Sometimes I'll talk about my experiences during an
        upgrade. These are meant to convey my experiences,
        motivations and pitfalls to you. These experiences apply to
        my system but may also apply to yours, with some adapting.
        They are formatted like this:</para>

        <sidebar>
          <para>I appreciated having Linux and so I wrote this to
          give back to the community. Also I wanted to preserve
          this experience in writing so I wouldn't forget what I
          learned. What better way to preserve it than with a
          HOWTO?</para>
        </sidebar>
      </listitem>

      <listitem>
        <note>
          <para>Notes like this one give you useful tokens of
          information that stand beside the main text.</para>
        </note>
      </listitem>

      <listitem>
        <caution>
          <para>Cautions like this one tell you that a procedure
          can be dangerous to your system if done
          carelessly.</para>
        </caution>
      </listitem>

      <listitem id="linkdemo">
        <para id="xrefdemo" xreflabel="this way">Cross references
        to other sections of the text are formatted : 
        <!-- <xref endterm="xrefdemo" linkend="xrefdemo" /> -->

        . 
<!-- FIXME: extra white space -->
        They are very similar to links which look : 
        <link linkend="linkdemo">like this</link>

        . 
<!-- FIXME: extra white space -->
        </para>
      </listitem>
    </orderedlist>
  </sect2>

  <sect2>
    <title id="twopurpose">Purpose of this document</title>

    <itemizedlist>
      <title>There are many reasons that you might want to read
      this.</title>

      <listitem>
        <para>If you are considering taking advantage of the freely
        downloadable versions of Linux you should know that it
        takes some effort and know-how to accomplish. Reading this
        HOWTO gives you a real picture of the effort required
        before you start the process for yourself. In that way it
        will help you decide if the big download and the upgrade is
        worth the trouble.</para>
      </listitem>

      <listitem>
        <para>If your installation program doesn't give you enough
        control over which packages are installed, this method
        gives you the control to eliminate what you don't need.
        That control allows you to customize your installation to
        almost any size that you want. While some installation
        programs give you this level of control, some do
        not.</para>
      </listitem>

      <listitem>
        <para>Whether you decide to download or you obtain the rpm
        packages on disk, then this will explain what it takes to
        do the upgrade. Many commercial distributions are packaged
        as binary rpms, so I thought that a HOWTO on a major rpm
        oriented upgrade would make useful HOWTO. The most
        important factor when upgrading the rpms is choosing the
        right order 
        <emphasis>(hint: start with the libraries.)</emphasis>
        </para>
      </listitem>

      <listitem>
        <para>I'll give you a description of what I went through to
        set up and upgrade my system and the reasoning behind it.
        From that description you can get an idea of what's
        involved when doing similar upgrades to your system. There
        are many different programs that can be used for this
        process. I'll touch on several of them.</para>
      </listitem>

      <listitem>
        <para>This is not a HOWTO about upgrading a single program,
        with its dependencies. That knowledge can be obtained from
        the 
        <application moreinfo="none">rpm</application>

        documentation. But if you find that there are so many new
        dependencies that package requires, and you've worked the
        dependencies all the way down to the kernel, you may decide
        that it's time to upgrade the whole distribution. That is
        the task that this HOWTO discusses.</para>
      </listitem>

      <listitem>
        <para>By using the rpm binary packages, you will have the
        convenience of using the compilation options and
        configuration options that the vendor has chosen. But, you
        will lose the ability to customize the compilation
        options.</para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title id="twohowlong">How long does it really take?</title>

    <sidebar>
      <para>Over all, it took about one and a half weeks to
      download the packages. The binary rpms total size was a
      little over 600 Megabytes. It took a few more days to do the
      upgrading.</para>
    </sidebar>

    <sidebar>
      <para>I've also been told a 600 Mbyte CD-ROM image downloaded
      at an average 180 kilobytes per second -- seven and a half
      hours -- in one try, using a cable modem.</para>
    </sidebar>

    <sidebar>
      <para>A more automated 
      <acronym>FTP</acronym>

      procedure would reduce the download time
      significantly.</para>

      <para>The 
      <acronym>FTP</acronym>

      server disconnected me often. I found that this was the
      biggest time waster in the whole process. The timeout before
      notifying me that the server wasn't responding (T 
      <subscript>nr</subscript>

      ), 
<!-- FIXME: extra white space -->
      added to the time it took me to notice and check that message
      
<!-- FIXME: extra white space -->
      (T 
      <subscript>not</subscript>

      ), 
<!-- FIXME: extra white space -->
      added to the time it takes to reconnect (T 
      <subscript>rc</subscript>

      ), 
<!-- FIXME: extra white space -->
      multiplied by a disconnect every 20 to 60 minutes totaled
      many wasted hours.</para>

      <para>(T 
      <subscript>nr</subscript>

      + T 
      <subscript>not</subscript>

      + T 
      <subscript>rc</subscript>

      ) 
<!-- FIXME: extra white space -->
      * (20 to 60 minutes) = many wasted hours</para>

      <para>In addition to all of that there is, of course the time
      of waiting for the downloads. A program that reconnects to an
      FTP server automatically would be a big help in reducing the
      downloading time.</para>
    </sidebar>

    <para>
    <application>ncftp</application>

    has a feature which might help that problem. It can download
    files in the background:</para>

    <para>
      <prompt>ncftp&gt;</prompt>

      <command>bgget</command>

      <parameter moreinfo="none">
        <replaceable>foo</replaceable>
      </parameter>
    </para>

    <para>which might make the download easier and possibly faster
    too. After issuing a background command you might also want to
    issue a 
    <command moreinfo="none">bgstart</command>

    to give the download a kick in the pants.</para>

    <para>
      <prompt>ncftp&gt;</prompt>

      <command>bgstart</command>
    </para>

    <sidebar>
      <para>Upgrading would go smoother and quicker for someone
      with more experience upgrading than I have. This was a
      discovery effort, so there were many pitfalls for me. I am
      writing this to help you avoid those pitfalls and so your
      experience should go quicker than mine regardless of your
      experience with upgrading.</para>
    </sidebar>
  </sect2>

  <sect2>
    <title id="twobenefits">The benefits and costs of upgrading
    this way</title>

    <informaltable>
      <tgroup cols="2" align="left">
        <thead>
          <row>
            <entry align="center">Benefits</entry>

            <entry align="center">Costs</entry>
          </row>
        </thead>

        <tbody>
          <row>
            <entry>Downloading the packages is free.</entry>

            <entry>But the big cost is the time it takes to
            download and the space it takes to store them.</entry>
          </row>

          <row>
            <entry>You don't have to buy the 
            <acronym>CD</acronym>

            s. 
<!-- FIXME: extra white space -->
            </entry>

            <entry>The purchase price of the CD could contribute
            towards developing the future of the
            distribution.</entry>
          </row>

          <row>
            <entry>Upgrading each package by hand gives you control
            over your system. You'll have the opportunity to choose
            which components you want and which you don't want. Not
            all of the installation software available gives you
            that much control.</entry>

            <entry>That control requires some knowledge of what to
            do and what not to do. (Be careful to make sure that
            any modification you make can be undone, so that you
            can recover from your mistakes.)</entry>
          </row>

          <row>
            <entry>Using the binary packages is more convenient
            than compiling each package.</entry>

            <entry>You will be dependent on the compilation options
            that the packager has chosen for you. You will have to
            trust that your packager knows the right options for
            your system.</entry>
          </row>

          <row>
            <entry>This control could be very helpful when you have
            to squeeze Linux into a small hard disk or tailor Linux
            in any other way.</entry>

            <entry>If you don't need the control, it is much easier
            to get a commercial installer.</entry>
          </row>

          <row>
            <entry>Upgrading one package at a time also gives you a
            deeper understanding about the components of your
            system and how they fit together.</entry>

            <entry>There's sunlight, people and roller coasters out
            there in the real world! :-)</entry>
          </row>
        </tbody>
      </tgroup>
    </informaltable>
  </sect2>

  <sect2>
    <title id="twoassume">What I'm assuming about you.</title>

    <itemizedlist>
      <listitem>
        <para>You'll need to know what rpm (Red Hat Package
        Manager) is and have some basic experience using the
        packages. (See 
        <xref endterm="rpmhowto" linkend="rpmhowto" />

        ) 
<!-- FIXME : extra white space. -->
        </para>
      </listitem>

      <listitem>
        <para>You have a working Linux with rpm installed.</para>
      </listitem>

      <listitem>
        <para>If you are going to do the download, I assume that
        you have more time on your hands than money (like me). Or
        that you have a high speed Internet connection.</para>
      </listitem>

      <listitem>
        <para>The upgrading will take some familiarity with Linux
        and some knowledge of the what each package does. This
        knowledge can be obtained from the package information, of
        course. (See 
        <xref linkend="rpmtips" />

        for how to show the summary information.)</para>
      </listitem>

      <listitem>
        <para>You have to use that knowledge when choosing the
        right packages to satisfy rpm dependencies. Normally these
        will have similar names, which makes it simple to
        do.</para>
      </listitem>

      <listitem>
        <para>Writing this HOWTO as one procedure probably won't
        work for everyone. You'll have to be informed and 
        <simplelist type="inline">
          <member>stay aware of what you're doing</member>

          <member>understand why you're doing it</member>

          <member>and figure out the best way to apply it to your
          system</member>
        </simplelist>

        .</para>

<!-- FIXME : extra white space. -->
      </listitem>

      <listitem>
        <para>This is aimed at an intermediate Linux, at-home,
        administrator.</para>
      </listitem>
    </itemizedlist>
  </sect2>
</sect1>

<sect1 id="distrothoughts">
  <title>Some thoughts on distributions and upgrading</title>

  <sect2>
    <title id="twocharacteristics">Characteristics of a
    distribution which would be a good choice for upgrading</title>

    <itemizedlist>
      <listitem>
        <para>Current packages (so that your efforts in upgrading
        are worth your while)</para>
      </listitem>

      <listitem>
        <para>Well structured dependencies</para>
      </listitem>

      <listitem>
        <para>Compatibility with other distributions</para>
      </listitem>

      <listitem>
        <para>Well structured grouping</para>
      </listitem>

      <listitem>
        <para>Configured and tested packages</para>
      </listitem>

      <listitem>
        <para>Packages configured for versatility and
        security</para>
      </listitem>

      <listitem>
        <para>Includes useful packages but skips unnecessary
        ones</para>
      </listitem>

      <listitem>
        <para>Easy and flexible installation program</para>
      </listitem>

      <listitem>
        <para>A bootable CD with a Linux that can be used to do
        maintenance on your system</para>
      </listitem>

      <listitem>
        <para>Compliance with the 
        <ulink url="http://www.linuxbase.org">
          <acronym>LSB</acronym>
        </ulink>

        standards will allow better compatibility between various
        Linux distributions.</para>
      </listitem>
    </itemizedlist>

    <para>Of course, there are lots of other factors, each of which
    will be important to different people. Many of the factors in
    choosing a distribution are subjective. You'll have to weigh
    them for yourself to decide which are important to you. I just
    think that these were some relevant factors in regards to this
    HOWTO.</para>
  </sect2>

  <sect2>
    <title id="twoswitching">Switching vendors when
    upgrading</title>

    <para>It's not impossible to switch to a different vendor when
    upgrading but it is very difficult. You'll have to deal with
    missing files, unsatisfied dependencies, incompatible groupings
    and incompatible package names.</para>

    <para>It would be nice to be able to switch vendors by
    upgrading, allowing you to see the advantages of other vendor's
    distributions. When building the rpms the builder can choose
    which files are added to a package, how the packages are
    grouped, the name of the package and the dependencies of the
    package. These are some of the functions that vendors do. These
    will vary from one vendor to another in quality and name. And
    so when you try to use a package from one vendor to upgrade a
    package of another vendor, you will find that it is not an
    exact fit.</para>
  </sect2>
</sect1>

<sect1 id="download">
  <title>Download</title>

  <sect2>
    <title id="twopacklicense">Licensing of rpm packages</title>

    <para>There are several different licenses that cover a
    complete Linux OS. The most famous one is the GNU GENERAL
    PUBLIC LICENSE ( 
    <acronym>GPL</acronym>

    ) 
<!-- FIXME: extra white space -->
    which is "intended to guarantee your freedom to share and
    change free software". This includes derivative work made from
    the software. According to the GPL a derivative work is, "a
    work containing the Program or a portion of it, either verbatim
    or with modifications." ( 
    <application>rpm</application>

<!-- FIXME: extra white space -->
    itself is covered by this license. When used as a library it's
    covered under the LGPL.)</para>

    <para>Binary rpm packages are derivative of the original
    program. If the original program was covered by the 
    <acronym>GPL</acronym>

    then so is the rpm package of it. Also from the GPL, "Our
    General Public Licenses are designed to make sure that you have
    the freedom to distribute copies of free software (and charge
    for this service if you wish), that you receive source code or
    can get it if you want it, that you can change the software or
    use pieces of it in new free programs; and that you know you
    can do these things." This permits the free distribution of 
    <acronym>GPL</acronym>

    software. Not all Linux software in a distribution is licensed
    under the 
    <acronym>GPL</acronym>

    , 
<!-- FIXME: extra white space -->
    though. But the GPL allows you access to the ones that are
    covered by it.</para>

    <para>So, this HOWTO refers to downloading GPL software.
    Software that isn't covered by the GPL may require different
    steps to respect those licensing requirements and those
    differences will not be addressed here, for the sake of
    simplicity. The easiest way to tell if a package is under the
    GPL is to look for it being mentioned in the Copyright field of
    the rpm information.</para>
  </sect2>

  <sect2>
    <title id="twocandownload">Can Linux be downloaded?</title>

    <para>Yes, it can, if you have the disk space to keep all of
    the files. 
    <acronym>FTP</acronym>

    is a good download method. 
    <acronym>HTTP</acronym>

    can be used also but that isn't as convenient.</para>

    <para>Here are some of the basics of 
    <application>ncftp</application>

    and some pitfalls to avoid to make your downloading easier. A
    quick summary of some 
    <application>ncftp</application>

    commands follows but see the info in 
    <command>ncftp(1)</command>

    for all of the details of each command.</para>
  </sect2>

  <sect2>
    <title id="twoncftpfeatures">ncftp features</title>

    <para>The 
    <application>ncftp</application>

    program is a nice tool. It can get the binary files off the
    remote server and into the current working directory. 
    <itemizedlist mark="-">
      <listitem>
        <para>It is also possible to download files as a background
        process using the bgget command which allows 
        <emphasis>unattended downloads</emphasis>

        . 
<!-- FIXME: extra white space -->
        </para>
      </listitem>

      <listitem>
        <para>For files that weren't completely downloaded, 
        <application>ncftp</application>

        is capable of resuming the download from where it left off
        rather than starting the file from the beginning.</para>
      </listitem>

      <listitem>
        <para>To abort a get command, use two 
        <keycombo>
          <keycap>Ctrl-C</keycap>
        </keycombo>

        keystrokes. This will stop your download quickly.</para>
      </listitem>

      <listitem>
        <para>Use wild cards to get larger blocks of files. 
        <application>ncftp</application>

        is also capable of getting directories, recursively.</para>
      </listitem>
    </itemizedlist>
    </para>
  </sect2>

  <sect2>
    <title id="twotimesaver">Time savers: Skip unnecessary files
    and tweak time-outs</title>

    <para>You probably will not want to spend the time getting all
    the files from the remote directory. For instance you can skip
    any of the 
    <application>X</application>

    servers that aren't meant for your video card. If you want to
    save a big chunk of time and disk space you can skip the
    desktop packages but most home users won't want to do that.
    Home users can skip many of the server packages, though. Base
    your choices of what to download on the packages of your
    current system, but understand that your vendor may have
    introduced some new and necessary packages that cannot be
    skipped.</para>

    <tip>
      <para>Generate a list of your current system's packages with
      one simple command:</para>

      <para>
        <prompt>bash$</prompt>

        <command>rpm</command>

        <parameter>-qa</parameter>

        <parameter moreinfo="none">&gt;</parameter>

        <filename>currentrpms</filename>
      </para>
    </tip>

    <para>There's a way you can get 
    <application>ncftp</application>

    to skip over some files while getting files using wild cards.
    Create an empty file in your local directory which has the same
    name as the file that you want to skip. Create a name for every
    file that you want to skip. If you have the 
    <varname>auto-resume</varname>

    disabled :</para>

    <para>
      <prompt>ncftp&gt;</prompt>

      <command>set</command>

      <varname>auto-resume</varname>

      <parameter>no</parameter>
    </para>

    <para>When 
    <application>ncftp</application>

    comes to that file during a get it will ask how you want to
    handle it. You can choose to 
    <computeroutput>[ 
    <keycap>S</keycap>

    ]kip</computeroutput>

<!-- FIXME: extra white space -->
    it.</para>

    <para>To create the empty files in your local directory you can
    first list the remote file system to see their exact
    names.</para>

    <para>
      <prompt>ncftp&gt;</prompt>

      <command>ls</command>
    </para>

    <para>To create an empty file with the same name:</para>

    <para>
      <prompt>bash$</prompt>

      <command>touch</command>

      <filename>FILE</filename>
    </para>

    <para>
    <application>X</application>

    allows you to highlight the file name and copy it with the 
    <mousebutton>middle mouse button</mousebutton>

    . 
<!-- FIXME: extra white space -->
    </para>

    <para>Then start downloading the files :</para>

    <para>
      <prompt>ncftp&gt;</prompt>

      <command>get</command>

      <parameter moreinfo="none">foo*</parameter>
    </para>
  </sect2>

  <sect2>
    <title id="twotradeoff">Time saver trade off</title>

    <para>The 
    <emphasis>trade-off</emphasis>

    of setting 
    <application>ncftp</application>

    in this way is that you'll have to tell 
    <application>ncftp</application>

    to 
    <computeroutput>[ 
    <keycap>S</keycap>

    ]kip</computeroutput>

<!-- FIXME: extra white space -->
    each empty file as 
    <application moreinfo="none">ncftp</application>

    encounters each one and asks you how to handle it. It also
    means that you will have to attend to the download process
    yourself in order to answer these questions.</para>

    <sidebar>
      <para>It is up to you if you want use this to save download
      time, or not. I chose to use it because there were several
      dozen files that I wanted to skip. In the end, I'm not sure
      if saving the download time was worth the effort.</para>
    </sidebar>
  </sect2>

  <sect2>
    <title id="twotimeouts">Local timeouts and Server
    disconnects</title>

    <para>The FTP server might have a tendency to kick you off
    after every few files you download, even if there are only a
    few users logged onto it. Sometimes you might even get
    disconnected in the middle of a large (10-20 Megabyte)
    file.</para>

    <tip>
      <para>That is when the resume feature of 
      <application>ncftp</application>

      really comes in handy.</para>
    </tip>

    <para>These disconnects get very frustrating and time
    consuming. When the server does kick you off, 
    <application>ncftp</application>

    will wait for a timeout before it informs you of the
    disconnection. The variable which controls that timeout is
    called 
    <varname>control-timeout</varname>

    (isn't that a clever name?) I found that the default timeout
    was way too long and slowed me down. This setting delays how
    long 
    <application>ncftp</application>

    will take before announcing that the server isn't
    responding.</para>

    <para>You'll probably want to decrease both your 
    <varname>connect-timeout</varname>

    and 
    <varname>control-timeout</varname>

    in order to speed up the download process. The more reliable
    your connection with the server then the smaller you can make
    them. As you download each chunk of files, turn the timeouts
    down slowly, one at a time, and pay attention to see if
    decreasing that timeout makes your connection less reliable. If
    that happens then you have gone too low and you should increase
    the timeout a little.</para>

    <tip>
      <para>See the 
      <application>ncftp</application>

      man pages for descriptions of the timeout variables, there
      are 3 of them.</para>
    </tip>

    <sidebar>
      <para>My timeout variables are 
      <command>set</command>

      as so: 
      <simplelist>
        <member>connect-timeout : 20</member>

        <member>control-timeout : 10</member>

        <member>xfer-timeout : 3600</member>
      </simplelist>
      </para>
    </sidebar>
  </sect2>
</sect1>

<sect1 id="partitions" xreflabel="Partitions">
  <title>Partitions when upgrading</title>

  <sect2>
    <title id="twoconsidermore">Using a spare partitions</title>

    <para>You may find as you're upgrading that having a separate
    partition can be very handy. You can choose to stick with the
    distribution's original partitioning but consider the possible
    flexibility that adding one or more spare partitions might give
    you when upgrading.</para>

    <caution>
      <para>If you try to change a partition, which already has
      data on it you will destroy the data. To change a partition
      with data you will need program that can do non-destructive
      repartitioning such as 
      <simplelist type="inline">
        <member>
          <application>fips</application>
        </member>

        <member>
          <application>parted</application>
        </member>

        <member>or 
        <application>Partition Magic</application>
        </member>
      </simplelist>
      </para>
    </caution>

    <para>A spare partition can be used to install a whole new
    Linux, side by side with your current one. After that one is
    running the old data can be copied or merged into the new
    system. Then the old partitions, once the files on them aren't
    needed any more, can be repartitioned and merged back into your
    new system as its space requirements grow.</para>

    <para>Or if you don't have the hard drive space for a second
    Linux but your data is small enough, a spare partition can be
    used to back up the data. For example, back up the /etc and
    /home directories or store your downloaded rpm packages on the
    partition. 
    <application>mount</application>

    the partition to a temporary point while restoring the backups.
    After restoring from the backups, that partition can be erased
    and remounted at a more permanent point, integrating it into
    the running system.</para>

    <para>The choice of how to use your hard drive's spare space,
    for the new Linux or for backup data, depends on how your drive
    is partitioned. If Linux is all that you are running and you
    have the space to make the partitions for a new Linux then that
    will probably be the safest and easiest way to upgrade. If you
    are dual booting, with seperate operating systems on seperate
    partitions, then you might want to use the other OS's spare
    space for tempoary back up while upgrading. Back up any data
    which you are worried might be damaged during the upgrade.
    Upgrade by overwriting the existing Linux sytem.</para>

    <tip>
      <para>There is a detailed HOWTO ( 
      <xref endterm="partitionhowto" linkend="partitionhowto" />

      ) 
<!-- FIXME: extra white space -->
      on partitioning if you'd like to learn more about them and
      their use. Also GNU's parted has 
      <ulink
      url="http://www.gnu.org/software/parted/parted.html#documentation">
      documentation</ulink>

      that explains many issues about partitioning.</para>
    </tip>
  </sect2>

  <sect2>
    <title>Growing into spare space</title>

    <para>After the upgrade, you will eventually want to integrate
    the spare space back into your new system. One way is dividing
    the space into smaller partitions and mount them into the
    directory tree of other partitions that are running out of
    space.</para>

    <sidebar id="expandrootpartition"
    xreflabel="Expanding the root partition">
      <para>As an example of integrating a small partition, I had 
      <filename>/</filename>

      mounted on too small a partition. It ran out of space a
      couple of times after the upgrade. But I had a spare
      partition which was mounted to a temporary point called 
      <filename>/extra</filename>

      . 
<!-- FIXME: extra white space -->
      When I saw that the 
      <filename>/var</filename>

      directory was the cause of the 
      <filename>/</filename>

      partition getting filled, I was able to mount the spare
      partition as 
      <filename>/var</filename>

      . 
<!-- FIXME: extra white space -->
      That freed up enough space on the 
      <filename>/</filename>

      partition and gave the new 
      <filename>/var</filename>

      partition more room to grow.</para>
    </sidebar>

    <sidebar>
      <para>Here is a pitfall that scared me and how I got around
      it. While upgrading my Linux I made a mistake that completely
      prevented my kernel from booting. The mistake was improperly
      upgrading the 
      <application>glibc</application>

      libraries. As a result of that I had to re-install my old
      version of Linux before being able to use the upgrade rpms
      that I had downloaded. I was lucky to have a separate
      partition (my Windows partition) to store the downloaded rpms
      while I re-installed Linux. The spare partition saved me from
      having to destroy over 600 Mbytes of downloads. Because that
      spare partition held the data, I was able to re-partition,
      re-format and re-install Linux without losing any of the
      backup data.</para>
    </sidebar>
  </sect2>

  <sect2>
    <title id="twopartitiontools">Partition sizes</title>

    <para>When you have multiple partitions in Linux the partitions
    should be appropriately sized for the directory that they'll be
    mounted as. You can estimate those sizes based on my setup, but
    it would be better if you based those sizes on your existing
    installation. To check the size of a directory issue the
    command:</para>

    <para>
      <prompt>bash$</prompt>

      <command>du</command>

      <parameter>-sh</parameter>

      <filename>
        <replaceable>[FILE]</replaceable>
      </filename>
    </para>

    <sidebar>
      <para>Half of my 8 gigabyte drive is devoted to Windows and
      the other half to Linux. The first primary partition ( 
      <medialabel>/dev/hda1</medialabel>

      ) 
<!-- FIXME: extra white space -->
      was used to back up the rpm packages, as they were
      downloaded. The second primary partition ( 
      <medialabel>/dev/hda2</medialabel>

      ) 
<!-- FIXME: extra white space -->
      reserves the physical space for the logical partitions. Those
      logical partitions are the ones that are mounted by Linux.
      This second primary partition is never mounted directly.
      While re-installing, I used one of these logical partitions
      for back up in addition to the first primary partition just
      for reduncancy.</para>
    </sidebar>

    <tip>
      <para>Use 
      <application>fdisk</application>

      or your distribution's installation program, to display
      partition information. Run 
      <application>fdisk</application>

      as root. The partitions can be manipulated later.</para>

      <para>
        <prompt>bash#</prompt>

        <command>fdisk</command>

        <parameter moreinfo="none">-l</parameter>

        <medialabel>
          <replaceable>device</replaceable>
        </medialabel>
      </para>
    </tip>

    <tip>
      <para>Check how much free space is on your partitions.</para>

      <para>
        <prompt>bash$</prompt>

        <command>df</command>

        <parameter>-h</parameter>

        <filename moreinfo="none">
          <replaceable>[FILE]</replaceable>
        </filename>
      </para>
    </tip>

    <tip>
      <para>The mount point information can be obtained from the
      file 
      <ulink url="file:/etc/fstab" type="local file">
      /etc/fstab</ulink>

      or with 
      <application>mount</application>

      using no arguments.</para>

      <para>
        <prompt>bash$</prompt>

        <command>mount</command>
      </para>
    </tip>

    <caution>
      <para>Whichever partition(s) hold your backups, make sure
      that you do not reformat or resize it during installation. In
      most programs either of those actions would destroy your
      backups.</para>
    </caution>

    <tip>
      <para>You can use 
      <application>top</application>

      or 
      <application>kpm</application>

      to monitor how much swap space your system uses.</para>
    </tip>
  </sect2>

  <sect2>
    <title id="twopartitionexample">A partitioning example</title>

    <sidebar>
      <para>I chose to create several partitions. I'll explain what
      partitions I made and my reasons for making them. Read on and
      decide for yourself if you think that my examples are worth
      trying on your system.</para>
    </sidebar>

    <sidebar>
      <table id="partitiontable" xreflabel="Partition Table">
        <title>Here is how my logical partitions are mounted and
        their usage :</title>

        <tgroup cols="5">
          <thead>
            <row>
              <entry>Partition</entry>

              <entry>Mount point</entry>

              <entry>Size</entry>

              <entry>Used space</entry>

              <entry>Used percentage</entry>
            </row>
          </thead>

          <tbody>
            <row>
              <entry>/dev/hda5</entry>

              <entry>/home</entry>

              <entry>
                <property>963 Mbytes</property>
              </entry>

              <entry>
                <property>596 Mbytes</property>
              </entry>

              <entry>65%</entry>
            </row>

            <row>
              <entry>/dev/hda6</entry>

              <entry>/boot</entry>

              <entry>
                <property>15.9 Mbytes</property>
              </entry>

              <entry>
                <property>3.32 Mbytes</property>
              </entry>

              <entry>22%</entry>
            </row>

            <row>
              <entry>/dev/hda7</entry>

              <entry>/usr</entry>

              <entry>
                <property>1.97 Gbytes</property>
              </entry>

              <entry>
                <property>1.18 Gbytes</property>
              </entry>

              <entry>63%</entry>
            </row>

            <row>
              <entry>/dev/hda8</entry>

              <entry>swap (not mounted)</entry>

              <entry>
                <property>64.2 Mbytes</property>
              </entry>

              <entry>
                <property>27.0 Kbytes</property>
              </entry>

              <entry>4.2%</entry>
            </row>

            <row>
              <entry>/dev/hda9</entry>

              <entry>/var</entry>

              <entry>
                <property>64.4 Mbytes</property>
              </entry>

              <entry>
                <property>44.8 Mbytes</property>
              </entry>

              <entry>74%</entry>
            </row>

            <row>
              <entry>/dev/hda10</entry>

              <entry>/opt</entry>

              <entry>
                <property>884 Mbytes</property>
              </entry>

              <entry>
                <property>352 Mbytes</property>
              </entry>

              <entry>42%</entry>
            </row>

            <row>
              <entry>/dev/hda11</entry>

              <entry>/</entry>

              <entry>
                <property>135 Mbytes</property>
              </entry>

              <entry>
                <property>59.8 Mbytes</property>
              </entry>

              <entry>47%</entry>
            </row>
          </tbody>
        </tgroup>
      </table>
    </sidebar>

    <para>This table gives you an idea of how big Linux is with
    XFree86, 
    <application>KDE 2</application>

    and lots of other goodies. Check your distribution's size
    requirements to find out how much space it takes up. I'll
    quickly discuss each of these partitions so that you can
    understand them and you can come up with your own
    strategy.</para>
  </sect2>

  <sect2>
    <title id="twowhypartitions"
    xreflabel="Why all of those partitions?">Why all of those
    partitions?</title>

    <para>My 
    <emphasis>
      <filename>/home</filename>
    </emphasis>

    partition was used for back up during installation. During
    installation this can be mounted as the normal 
    <filename>/home</filename>

    directory. This is the directory that holds all of the user
    accounts and the users' personal data. Make sure that none of
    the existing directories on that partition have the same names
    as any of the users that you will be adding during
    installation. If they have the same name then your data could
    get overwritten. Also don't name any of the directories as 
    <filename>/home/httpd</filename>

    which 
    <application>apache</application>

    might want to use or as 
    <filename moreinfo="none">/home/ftp</filename>

    which an 
    <acronym>ftp</acronym>

    program might use. Once mounted, the upgrade process can start
    from these backups. Use temporary names for the backups of the
    user accounts and allow the installation to create new users.
    Restore the data to the new user directories after upgrading
    the rest of system.</para>

    <para>The 
    <emphasis>
      <filename>/boot</filename>
    </emphasis>

    partition holds the kernel image and associated files and
    possibly the boot loader ( 
    <application>grub</application>

    ). 
<!-- FIXME: extra white space -->
    It tends to be small. It can be useful for putting the kernel
    below cylinder 1024 on large hard disks in order to avoid the
    well documented BIOS limitation. This partition will be too
    small to be much use for back up.</para>

    <para>The 
    <emphasis>
      <filename>/usr</filename>
    </emphasis>

    partition tends to be large because it holds the majority of
    your programs. It is probably big enough to be useful for
    backing up but since so much will be placed here during
    installation, it might be complicated to figure out how much
    space to leave for the programs. Of course, if this partition
    is larger than the total size of your Linux then it should be
    fine to use the remaining space for backing up. That is because
    this directory will surely be smaller than that
    specification.</para>

    <para>The 
    <emphasis>swap</emphasis>

    partition supplements your RAM. It is used to hold data from
    RAM which isn't currently being accessed, in order to free up
    more RAM. There was a rule of thumb saying to make this twice
    the size of your RAM. But the best way is to base this size on
    your current sytem. Find out how much RAM you're using with the
    
    <application moreinfo="none">kpm</application>

    or 
    <application moreinfo="none">top</application>

    program. Each will give you a number that varies depending on
    how many programs you're running. So run the programs that you
    normally use to get an idea of the normal amout of swap space
    you use. Then size the partition a little bigger.</para>

    <sidebar>
      <para>My 
      <emphasis>swap</emphasis>

      partition and the 
      <emphasis>
        <filename>/extra</filename>
      </emphasis>

      partition were sized and positioned very specifically. With
      64 Mbytes of RAM I wanted a swap partition that could be as
      much as double the amount of RAM. That would mean that I'd
      need about a 128 Mbyte swap file. In Linux kernel version
      2.1, 128 Mbytes is the upper limit of the size of a single
      swap partition but that limit has been raised since then. My
      system doesn't usually use much swap space though, so I broke
      128 in to two partitions. One was made into a swap partition
      and the other was made mountable by formatting it as an ext2.
      This gave me the option of later changing the second
      partition to a swap partition, but to be able to use it as
      file space for now.</para>
    </sidebar>

    <note>
      <para>Note: The 
      <filename>/extra</filename>

      was remounted as 
      <filename>/var</filename>

      as explained in 
      <xref linkend="expandrootpartition" />

      and that is why 
      <filename>/extra</filename>

      doesn't appear in the previous table.</para>
    </note>

    <sidebar>
      <para>I made the 
      <filename>/extra</filename>

      and swap partitions about 64 Mbytes a piece. If I found that
      I needed more swap space I could convert the 
      <filename>/extra</filename>

      partition to a swap partition. For the time being, I can
      mount the 
      <filename>/extra</filename>

      partition and use it for storage. Finally, I also positioned
      the 
      <filename>/extra</filename>

      between the 
      <filename>/</filename>

      and 
      <filename>/opt</filename>

      partitions so that the 
      <filename>/extra</filename>

      partition could be combined with either one of those
      partitions to expand their size.</para>
    </sidebar>

    <para>The 
    <emphasis>
      <filename>/opt</filename>
    </emphasis>

    partition holds some more programs. And in that way, it has the
    same problems in using it for a backup partition as the 
    <filename>/usr</filename>

    partition. You'll need to have and idea of how much space the
    upgraded programs will take up and the remaining space is
    available for backup data. Contributing to the 352 Mbytes (as
    shown in the table above 
    <xref linkend="partitiontable" />

    .) 
<!-- FIXME: extra white space -->
    of my 
    <filename>/opt</filename>

    partition are 
    <application>acroread-4.0</application>

    , 
<!-- FIXME: extra white space -->
    <application>KDE</application>

    , 
<!-- FIXME: extra white space -->
    <application>KDE 2</application>

    and 
    <application>rvplayer5.0</application>

    . 
<!-- FIXME: extra white space -->
    </para>

    <note>
      <para>Note that if you have 
      <application>Netscape</application>

      it also gets installed in 
      <filename>/opt</filename>

      . 
<!-- FIXME: extra white space -->
      </para>
    </note>
  </sect2>

  <sect2>
    <title id="twofreshinstall">Starting with a fresh
    install</title>

    <orderedlist>
      <title>What are the good reasons for erasing your Linux and
      starting with a fresh install?</title>

      <titleabbrev>Why perform a fresh install?</titleabbrev>

      <listitem>
        <para>Your distribution may want you to.</para>
      </listitem>

      <listitem>
        <para>Linux has a mess of programs and files that you don't
        want to keep and would love an easy way to get rid of
        them.</para>
      </listitem>

      <listitem>
        <para>Installing on a new hard drive.</para>
      </listitem>

      <listitem>
        <para>You've got no files that you care about
        losing.</para>
      </listitem>

      <listitem>
        <para>You don't have time to do anything more than the
        minimum effort and your backups are complete and
        up-to-date.</para>
      </listitem>

<!-- GREG's comments
*** The most important reason is to make sure that you don't
inadvertently end up with both old and new libraries, programs,
configuration files and so forth scattered about your system.  As just
one example, if your distributor has decided to change the installation
of some executables from /bin to /sbin or /usr/bin to /usr/sbin, you
could easily end up with the old versions still being invoked, by
default, on your new installation - depending on whether /bin precedes
or follows /sbin in $PATH.  Most of the time, running the package
manager in upgrade mode takes care of this kind of thing - the vital
word there is Most.
-->
    </orderedlist>
  </sect2>

  <sect2>
    <title id="twowrapup">Wrap up ideas</title>

    <para>In conclusion, there are many possible ways of
    re-arranging your data amung various partitions. The advantage
    that a backup partition gives is to keep an undisturbed copy of
    the data while doing a complete install. Or you can install a
    whole new Linux on a spare partition to keep your old Linux
    undisturbed while configuring your new sytem. This are just a
    couple of possible schemes. This section gave you an idea of
    how much space is needed for Linux in the various directories.
    But gathering space requirements from your existing system
    before installing will be very useful if you decide to
    re-partition the drive.</para>
  </sect2>
</sect1>

<sect1 id="installprecautions">
  <title>Prepare for trouble, before installing</title>

  <sect2>
    <title id="twolibraryupgrade">The dangers of upgrading the base
    libraries</title>

    <caution>
      <para>The many programs are dependent on the GNU libraries.
      If the libraries are removed then your system can't access
      them and will stop running. That is a bad thing. 
      <emphasis>Do not erase, uninstall, upgrade or delete the GNU
      libraries!</emphasis>

      Wait until you are certain that the system is using the
      upgraded libraries. I'll explain this more in the next
      section.</para>
    </caution>
  </sect2>

  <sect2>
    <title id="twoupgradevsinstall">'rpm -U' verses 'rpm
    -i'</title>

    <para>
      <itemizedlist>
        <title>When 
        <application>rpm</application>

        upgrades ( 
        <parameter>-U</parameter>

        ) a package it will :</title>

        <listitem>
          <para>Compare the version of the rpm file with the
          version of the corresponding, installed package to be
          sure that the rpm file is more recent. There are other
          checks that it runs for file conflicts, dependencies,
          etc.</para>
        </listitem>

        <listitem>
          <para>Install the new package files and register the new
          package name.</para>
        </listitem>

        <listitem>
          <para>Remove the old package files and the package name
          from the rpm database.</para>
        </listitem>
      </itemizedlist>
    </para>

    <para>
      <itemizedlist>
        <title>When 
        <application>rpm</application>

        installs 
<!-- FIXME : extra white space. -->
        ( 
        <parameter>-i</parameter>

        ) 
<!-- FIXME : extra white space. -->
        a package it will :</title>

        <listitem>
          <para>Do the same checks for installed versions, file
          conflicts, dependencies, etc.</para>
        </listitem>

        <listitem>
          <para>Install the new package files and register the new
          package name.</para>
        </listitem>
      </itemizedlist>
    </para>

    <para>You'll notice that the main difference is that upgrading
    removes the old package but installing doesn't try to remove an
    old package. Install assumes that there isn't an older package
    installed on your system. That is an important difference when
    upgrading an application that your system is running. The
    running application might be using the files of that package.
    Removing the files can cause the application to crash.</para>

    <para>Normally you will be upgrading ( 
    <parameter moreinfo="none">-U</parameter>

    ) 
<!-- FIXME : extra white space -->
    the packages. But for packages that the system is running, like
    the base GNU libraries, installing ( 
    <parameter moreinfo="none">-i</parameter>

    ) 
<!-- FIXME : extra white space -->
    a package allows the old package to remain. This is necessary
    when your running system is dependent on the files of the old
    package. You can remove the old package later.</para>

    <para>When you install a new package, and there is an old one
    on your system, 
    <application>rpm</application>

    will not notice the old package in the database but it will see
    the files of the package. 
    <application>rpm</application>

    will complain about file conflicts. The complaints mean that
    some (or all) of the files of the new package have the same
    name and location as the files of the old, running package. 
    <application>rpm</application>

    won't install the new package as long as it's detecting this
    error. You can use 
    <parameter moreinfo="none">--force</parameter>

    to have rpm ignore the error, but be careful if you do. Be sure
    that 
    <application>rpm</application>

    reports no other errors before forcing the install. Correct all
    
    <emphasis>other</emphasis>

    errors before forcing. Once forced to install, 
    <application>rpm</application>

    will overwrite the old files with the new ones. Since this
    doesn't delete the old files, but overwrites them instead, your
    system can still access the files and still run.</para>

    <para>Once installed, querying 
    <application moreinfo="none">rpm</application>

    will accurately report to you that both the old and the new
    packages are installed. The fact that the database has both
    versions listed is harmless to the database. But make a note of
    the redundant packages in case you want to remove the old one
    later.</para>

    <para>There is a possible problem with this technique though.
    The new files might have some compatibility bugs with the
    running system. I can't tell you how to avoid them. This is a
    risk that you will be taking with this technique. This
    technique lets you use the running system to upgrade itself.
    After restarting the application (or the system, if necessary),
    all of the upgraded files will be loaded and those problems
    should be solved.</para>

    <para>Reboot the system after the kernel and its dependencies
    are upgraded to get them running. Restart each application
    after each is upgraded to get the new files running. After
    restarting you can remove the old packages by erasing ( 
    <parameter>-e</parameter>

    ) 
<!-- FIXME : extra white space -->
    the old or upgrading ( 
    <parameter>-U</parameter>

    <parameter>--replacepkgs</parameter>

    ) 
<!-- FIXME : extra white space -->
    to the new package.</para>
  </sect2>

  <sect2>
    <title id="twokernelupgrade">The dangers of upgrading the
    kernel</title>

    <para>As you're upgrading the kernel dependencies, there could
    be some incompatibilities between the running kernel and the
    dependencies. That's because as you upgrade you have a mixture
    of older and newer files. Incompatibilities could cause the
    kernel to have trouble running properly.</para>

    <note>
      <para>To avoid overwriting the kernel packages, the packages
      may create different directories or different file names. By
      creating new names for the new files, the older kernel files
      are preserved and can be booted if for any reason the new
      ones don't work. It's a common practice to keep two verions
      of the kernel installed so that if one has problems booting
      you have another as a backup.</para>
    </note>

    <para>It is possible to upgrade ( 
    <parameter moreinfo="none">-U</parameter>

    ) 
<!-- FIXME : extra white space -->
    the binary kernel package and dependancies all at once. To be
    safe you should make backup copies of the kernel image under 
    <filename moreinfo="none">/boot/vmlinuz</filename>

    or 
    <filename moreinfo="none">/vmlinuz</filename>

    and also the modules under 
    <filename moreinfo="none">/lib/modules</filename>

    before upgrading the kernel binary package. Restore those
    backups in case the upgrade stops the kernel from
    booting.</para>
  </sect2>

  <sect2>
    <title id="twoavoidmistakes">Ways to avoid mistakes</title>

    <itemizedlist>
      <listitem>
        <para>Test an 
        <application>rpm</application>

        command with 
        <parameter>--test</parameter>

        before you perform one that might be dangerous. Look for
        any error messages, understand why they're being generated
        and fix them before issuing the 
        <application>rpm</application>

        command.</para>
      </listitem>

      <listitem>
        <para>Make sure that downloaded packages downloaded
        successfully. The easiest way to check this is to compare
        the file size on the server with the file size on your hard
        drive. Or you could use 
        <parameter moreinfo="none">-K</parameter>

        to have 
        <application>rpm</application>

        do its more secure and reliable checks. If you've got 
        <application>PGP</application>

        set up right do the full checks or use 
        <parameter moreinfo="none">--nopgp</parameter>

        to skip the 
        <application>PGP</application>

        check if you don't.</para>
      </listitem>

      <listitem>
        <para>For crucial packages (libraries, the kernel and 
        <application>rpm</application>

        , for instance) it's a good idea to make backup copies of
        the files before upgrading. If the upgrade doesn't work,
        these backups can be used to restore without the need of 
        <application>rpm</application>

        . 
<!-- FIXME: extra white space -->
        If the upgrade fails for any reason copying the files back
        in place won't restore the rpm database, of course, but it
        will give the program the files that it needs to run
        again.</para>
      </listitem>

      <listitem>
        <para>Keep track of what you're doing. Knowing your
        progress in downloading and upgrading helps you to avoid
        silly mistakes such as downloading a package twice or
        missing a package that you thought you had upgraded but
        haven't even downloaded. There are lots of packages in any
        distribution.</para>
      </listitem>
    </itemizedlist>

    <tip>
      <para>If you ever want to back up your rpm database it's
      located at 
      <ulink url="file:/var/lib/rpm" type="local file">
      /var/lib/rpm</ulink>

      . 
<!-- FIXME: extra white space -->
      </para>
    </tip>

    <sidebar>
      <para>I have 576 packages installed on my system. Keeping
      track of all of them in your head is complicated. Having some
      written records of your progress will help ease your
      burden.</para>
    </sidebar>
  </sect2>

  <sect2>
    <title id="twokeepingtrack">Keeping track of your
    progress</title>

    <para>rpm can generate a list of the installed packages for you
    by querying all the packages.</para>

    <para>
      <prompt>bash$</prompt>

      <command moreinfo="none">rpm</command>

      <parameter moreinfo="none">-qa</parameter>

      <parameter>|</parameter>

      <command>sort</command>

      <parameter>&gt;</parameter>

      <filename>currentrpms</filename>
    </para>

    <para>Compare that with a list of the upgrade rpms. Generate
    the upgrade list by first, changing to the directory where you
    downloaded the upgrade rpms, then issue this command to make a
    list. 
    <application>sed</application>

    removes the '.i386.rpm' file extensions.</para>

    <para>
      <prompt>bash$</prompt>

      <command>ls</command>

      <parameter>-1</parameter>

      <parameter>*.rpm</parameter>

      <parameter>|</parameter>

      <command>sort</command>

      <parameter>|</parameter>

      <command>sed</command>

      <parameter>-e</parameter>

      <parameter>"s/\.i386\.rpm.*//"</parameter>

      <parameter>&gt;</parameter>

      <filename>upgraderpms</filename>
    </para>

    <para>Finally, to make it easier to compare those two sorted
    lists, use 
    <command moreinfo="none">diff</command>

    to highlight the differences.</para>

    <para>
      <prompt>bash$</prompt>

      <command>diff</command>

      <parameter>-u</parameter>

      <filename>currentrpms</filename>

      <filename>upgraderpms</filename>

      <parameter>|</parameter>

      <command moreinfo="none">less</command>
    </para>

    <para>Basically, packages with a '+' before the name are files
    that are not upgraded/installed yet. Packages with a '-' are
    installed on the system but have no upgrade file. Packages with
    a space character are just listed as contextual
    information.</para>

    <para>While that gives you a nice written record of your
    progress, it is cumbersome to read. 
    <application>Kpackage</application>

    is a tool that arranges all of the packages into a categorized
    tree. It can sort out the upgrade packages for you, giving you
    a convenient, expandable tree to look at. I used both tools
    while upgrading.</para>
  </sect2>

  <sect2>
    <title id="twootherproblems">Other problems, beyond your
    control.</title>

    <remark>
      <emphasis>I CANNOT SAY THIS FOR CERTAIN. THE LIBRARY UPGRADES
      DO SEE THAT THE FRONTEND ARE DEPENDIED ON THEM. THIS PROBABLY
      HAPPEND TO ME WHEN I WAS --forcing THE PACKAGES.</emphasis>
    </remark>

    <remark>
    Test out upgrading some library to refresh your memory.
     Upgrade one that has several frontends depending on it.
    </remark>

    <para>"Ooops! After that upgrade, program 
    <application>
      <replaceable>foo</replaceable>
    </application>

    won't run any more." 
    <application>
      <replaceable>foo</replaceable>
    </application>

    could be the program that you just upgraded or one that you
    didn't realize was related to that program that you just
    upgraded.</para>

    <para>Frontend programs are built to rely on other backend
    programs to do some of the work, this is how upgrading one
    package can affect others, if that package is a backend.
    Libraries are always used as a backend of another program. So,
    when upgrading backend programs or libraries, the frontend
    program may stop working because of incompatibilities between
    the old frontend and the new backend.</para>

    <para>On the other hand, you shouldn't get that problem when
    upgrading frontend programs because 
    <application>rpm</application>

    will give you dependency errors as you try to upgrade. The
    dependencies tell you which backends and libraries the frontend
    is dependent on. These dependencies must be upgraded before, or
    at the same time as, the frontend. But since the backend
    programs don't need the frontends in order to be complete,
    there tend to be very few dependencies errors when upgrading
    backends.</para>
  </sect2>

  <sect2>
    <title id="tworecover">Ways to recover from mistakes</title>

    <orderedlist>
      <listitem>
        <para>If upgrading a backend or library causes a frontend
        to stop working, the best solution, obviously, is to
        upgrade the front end.</para>
      </listitem>

      <listitem>
        <para>This might not always be possible, though. There may
        be so many dependencies to satisfy, before upgrading the
        frontend, that it will take you too long to complete them
        all before getting your program back online. It may be
        worth it to downgrade back to the original version of the
        backend so that you can get the frontend program working
        immediately. This can be done by either :</para>

        <para>
          <prompt moreinfo="none">bash#</prompt>

          <command>rpm</command>

          <parameter>-U</parameter>

          <parameter>--force</parameter>

          <filename>&lt;packagenames&gt;</filename>
        </para>

        <para>
          <prompt moreinfo="none">bash#</prompt>

          <command>rpm</command>

          <parameter>-U</parameter>

          <parameter>--oldpackage</parameter>

          <filename>&lt;packagenames&gt;</filename>
        </para>
      </listitem>

      <listitem>
        <para>If you can't upgrade nor downgrade, go to your
        backups. If you made backups of the actual files that were
        a part of the old package you can now use a simple 
        <application>cp</application>

        command to restore the program. It can be complicated to
        get all of the files of a package backed up. But even if
        you miss a few, restoring some of them might get your
        program running well enough to function for your needs. You
        should be able to use an rpm upgrade (or maybe even a
        downgrade) later, to get all of the files matching the
        database.</para>
      </listitem>

      <listitem>
        <para>In the worst case, if the crippled program was so
        crucial that you can't run your Linux system anymore,
        you'll need to run an alternate system. Boot up your spare
        Linux ( 
        <xref linkend="progtomsrtbt" />

        or 
        <xref linkend="proginstallcd" />

        ) 
<!-- FIXME: extra white space -->
        and try to use that to restore your backups or rpm
        packages.</para>
      </listitem>
    </orderedlist>
  </sect2>
</sect1>

<sect1 id="upgrade">
  <title>Upgrade the packages</title>

  <sect2>
    <title id="twoupandrunning">Does everybody have their Linux up
    and running?</title>

    <itemizedlist>
      <title>Let's just get on the same page now. There have been
      many paths you could have taken to get to this point.</title>

      <listitem>
        <para>Now, all of the partitioning of the hard drive is
        done.</para>
      </listitem>

      <listitem>
        <para>You have a working Linux system running on that hard
        drive.</para>
      </listitem>

      <listitem>
        <para>That Linux should have a working copy of 
        <application>rpm</application>

        with its database of packages up-to-date, relative to the
        Linux system.</para>
      </listitem>

      <listitem>
        <para>Your favorite GUI wrappers, frontends or replacements
        to 
        <application>rpm</application>

        are helpful and convenient to have at this point. (See 
        <xref linkend="othertools" />

        for some of your options.)</para>
      </listitem>

      <listitem>
        <para>Backups are on spare partitions or removable media,
        are up-to-date and are safe.</para>
      </listitem>

      <listitem>
        <para>You've obtained all of the packages needed to perform
        the upgrade. (If you're still in the process of downloading
        them, you'll need to have at least the base packages and
        all of their dependencies. The web of dependencies can be
        complicated and surprising. To be safe, obtain as much as
        you can before starting the upgrade process. You don't want
        to be caught without a necessary package in the middle of a
        crucial upgrade, or your system might be harmed.)</para>
      </listitem>
    </itemizedlist>
  </sect2>

  <sect2>
    <title id="twodeterminebase">Determining which packages are the
    base packages</title>

    <para>Start by upgrading the base packages. Which packages are
    they? There are several ways to identify them. Start with the
    package name but realize that their names will vary depending
    on which distribution you're working with.</para>

    <orderedlist>
      <listitem>
        <para>Base GNU/Linux system libraries: 
        <simplelist type="inline">
          <member>glib</member>

          <member>glibc</member>

          <member>libc5 (for backward compatibility.)</member>
        </simplelist>
        </para>
      </listitem>

      <listitem>
        <para>the Linux kernel's dependencies: 
        <simplelist type="inline">
          <member>modutils</member>

          <member>acpid</member>

          <member>kernel headers</member>

          <member>common kernel source</member>

          <member>processor specific source packages (i386, Sparc,
          Alpha, etc.)</member>

          <member>etc.</member>
        </simplelist>
        </para>
      </listitem>

      <listitem>
        <para>the Linux kernel: 
        <simplelist type="inline">
          <member>linux</member>

          <member>kernel</member>

          <member>linux-kernel-binary</member>

          <member>etc.</member>
        </simplelist>
        </para>
      </listitem>
    </orderedlist>

    <para>Next check the Group field of the 
    <application>rpm</application>

    information. Look for a string that indicates the system's base
    libraries and base programs. For example, Caldera's groups look
    like this : 
    <simplelist type="vert">
      <member>"Group : System/Library"</member>

      <member>"Group : System/Base"</member>

      <member>"Group : System/kernel"</member>

      <member>"Group : Base/Kernel"</member>

      <member>"Group : System/Shell"</member>
    </simplelist>

    Red Hat's (Version 5.2) corresponding group names are : 
    <simplelist type="vert">
      <member>"Group : Libraries "</member>

      <member>"Group : Utilities/System"</member>

      <member>"Group : Development/Tools"</member>

      <member>"Group : Daemons"</member>

      <member>"Group : Development/Libraries"</member>

      <member>"Group : Base"</member>

      <member>"Group : Shells"</member>
    </simplelist>

    These will include 
    <simplelist type="inline">
      <member>the kernel packages</member>

      <member>the GNU glib libraries</member>

      <member>kernel-headers</member>

      <member>the old libc package</member>

      <member>glibc</member>

      <member>etc</member>
    </simplelist>

    . 
<!-- FIXME: extra white space -->
    Make sure you have all of the kernel dependencies satisfied
    before you start installing any kernel packages.</para>

    <tip>
      <para>Check that the dependencies are satisfied by "test"
      installing the kernel rpms first with the 
      <parameter>--test</parameter>

      parameter. This will report back to you if you're missing any
      dependencies.</para>
    </tip>

    <para>Here are the kernel requirements listed in the 
    <filename>
    /usr/src/linux-2.4.17/Documentation/Changes</filename>

    from kernel 2.4.17 to give you an idea of what packages support
    the kernel. Upgrade the packages that you need before the
    kernel is upgraded. 
    <screen format="linespecific">
&#111;  Gnu C                  2.95.3                  # gcc --version
&#111;  Gnu make               3.77                    # make --version
&#111;  binutils               2.9.1.0.25              # ld -v
&#111;  util-linux             2.10o                   # fdformat --version
&#111;  modutils               2.4.2                   # insmod -V
&#111;  e2fsprogs              1.25                    # tune2fs
&#111;  reiserfsprogs          3.x.0j                  # reiserfsck 2&#62;&amp;1|grep reiserfsprogs
&#111;  pcmcia-cs              3.1.21                  # cardmgr -V
&#111;  PPP                    2.4.0                   # pppd --version
&#111;  isdn4k-utils           3.1pre1                 # isdnctrl 2&#62;&amp;1|grep version</screen>

    </para>

    <para>When doing an upgrade using the binary files, you don't
    need 
    <application>make</application>

    or the 
    <application>C compiler</application>

    . 
<!-- FIXME: extra white space -->
    Some of the other packages won't be needed on some
    systems.</para>
  </sect2>

  <sect2>
    <title id="twostaycautious">Stay cautious</title>

    <para>Once the base libraries, the kernel dependencies and the
    kernel are upgraded you've gotten through the most risky part
    of the upgrade. But not the only risk. There are other crucial
    packages to your system like the 
    <application>libz</application>

    , 
<!-- FIXME: extra white space -->
    <application>bash</application>

    and 
    <application>ncurses</application>

    . 
<!-- FIXME: extra white space -->
    Be sure to satisfy any dependencies and solve any errors for
    these or your prompt will not function and you may not be able
    to boot. The system initialization scripts are crucial, also.
    And so are the base libraries for 
    <application>KDE</application>

    along with the 
    <application>Qt</application>

    libraries. 
    <application>X</application>

    has its crucial dependencies too.</para>

    <para>So, in general, be aware of your packages. Try to read
    the package information before upgrading it. From this
    determine how cautious you need to be while upgrading
    it.</para>
  </sect2>

  <sect2>
    <title id="tworpmpitfall">Pitfall when upgrading rpm</title>

    <para>There are a couple of problems with upgrading 
    <application>rpm</application>

    that you should be aware of. 
    <application moreinfo="none">rpm</application>

    isn't just a frontend program, it is also a library and a
    backend. Other programs might be dependent on it. In
    particular, if you have a graphical frontend to 
    <application moreinfo="none">rpm</application>

    it will be dependent on it. Upgrading 
    <application moreinfo="none">rpm</application>

    can cause a conflict between it and any other program which
    depends on it. 
    <application moreinfo="none">rpm</application>

    will run fine after the upgrade but the other application(s)
    might stop running.</para>

    <para>Also, packages that were built with the older version of 
    <application moreinfo="none">rpm</application>

    might not be compatible with the new version of 
    <application moreinfo="none">rpm</application>

    and so it might not be able to extract the files in the
    package. There can be an incompatibility between the new 
    <application moreinfo="none">rpm</application>

    and older rpm packages.</para>

    <para>For these reasons, I recommend that you hold off
    upgrading 
    <application moreinfo="none">rpm</application>

    a long as you can. It will not hurt anything to wait, but it
    could be slightly harmful if you do not.</para>
  </sect2>

  <sect2>
    <title id="twoignoretar">rpm ignores tar balls</title>

    <para>
    <application>rpm</application>

    has some smarts built into it, but sometimes it is not smart
    enough. If you have any tar balls installed that serve as a
    dependency to an rpm package, 
    <application>rpm</application>

    will not see those files and will give you dependency errors.
    In that case, the files that rpm is looking for are in place
    but since they weren't entered in the rpm database, 
    <application>rpm</application>

    ignores the files. To work around this, you'll have to have 
    <application>rpm</application>

    ignore dependencies 
    <parameter>--nodeps</parameter>

    or even 
    <parameter moreinfo="none">--force</parameter>

    it to stop complaining.</para>
  </sect2>

  <sect2>
    <title id="twofullspeed">Full speed ahead</title>

    <para>Once you get through the base packages, upgrading will
    start to go quicker. Soon you will get in the habit of how
    cautious you need to be. As things get upgraded, you'll start
    to feel the gratification and excitement of new features and
    new looks to your applications!</para>
  </sect2>
</sect1>

<sect1 id="restore">
  <title>Restoring and Cleaning up</title>

  <sect2>
    <title id="twomountbackup">Restoring and mounting the backup
    directory</title>

    <para>If you were using a spare partition for backing up rpm
    packages and system files it is now time to mount that into the
    system.</para>

    <procedure>
      <step>
        <para>Choose the mount point that you planned on using from
        the " 
        <xref endterm="twowhypartitions"
        linkend="twowhypartitions" />

        " 
<!-- FIXME: extra white space -->
        section.</para>
      </step>

      <step>
        <para>That mount point will already exist as a directory
        with files in it as a part of the running system. Because
        of this you'll need to integrate the new files with your
        old, backed up files. Some old files many need to be
        deleted. Some old files need to be merged with the new
        files. And, some new files many need to be deleted.</para>

        <para>It will take some work to merge old configuration
        files with new ones. For some packages though, there will
        be no work in integrating the configuration files because
        the file format hasn't changed in the new version.</para>

        <para>The directories 
        <filename>/etc</filename>

        and 
        <filename moreinfo="none">/home</filename>

        contain the majority of the configuration files.</para>
      </step>

      <step>
        <para>There are some more configuration files to merge once
        you're done with those. 
        <application>rpm</application>

        has a feature of saving backup copies of the configuration
        files that it replaces. It will do this only when it can
        not merge the files on its own. In that case it will save
        the original file by appending ".rpmsave" to the file name.
        Then it installs the new configuration file. You should 
        <application>locate</application>

        all of the files with that string at the end of the name,
        and merge them with the new configuration file, as
        necessary.</para>
      </step>

      <step>
        <para>Also, when 
        <application>rpm</application>

        replaces a file that wasn't installed with 
        <application moreinfo="none">rpm</application>

        , the original will be saved with ".rpmorig" added to the
        end of the filename. Find those files and merge them with
        their replacements, as necessary.</para>
      </step>

      <step>
        <para>Once the configuration files are merged, test out the
        new mount point by mounting it. The system may be using
        that mount point and not allow you to re-mount it. In that
        case, you'll have to skip to the next step.</para>
      </step>

      <step>
        <para>Make a backup of 
        <filename>/etc/fstab</filename>

        to restore in case this modification doesn't work
        correctly. 
        <filename>/etc/fstab</filename>

        will have to be modified to make the new mounting
        permanent. Reboot after modifying it to make sure that it
        is working correctly.</para>
      </step>
    </procedure>

    <note>
      <para>While all of this merging seems daunting, don't lose
      heart. In general, the configuration files which haven't been
      changed since they were originally installed on your system
      shouldn't need to be merged by hand. For the most part, the
      only time configuration files will need to be merged by hand
      is when there are major changes to their format, done by the
      program author. That should not happen often.</para>

      <para>But if there were configuration files on your system
      that had large changes from the default, they might need to
      be merged.</para>
    </note>
  </sect2>

  <sect2>
    <title id="twooldpackages">Old packages</title>

    <para>Once all of the rpm files have been used to upgrade, you
    might find that there are some packages that weren't upgraded.
    This is because they were a part of the old distribution's
    version but not the new version. Since they are not needed by
    the new distribution they shouldn't be necessary for your
    system. You can remove them if they aren't packages that you
    use.</para>

    <para id="tipupgraderedundancy"
    xreflabel="Upgrade redundancy tip">You may also find some
    duplicate packages installed, which only differ by version
    number. This sometimes happens when 
    <application>rpm</application>

    is forced ( 
    <parameter>--force</parameter>

    ) 
<!-- FIXME: extra white space -->
    while installing. The database is accurate in saying that there
    are duplicate packages. This isn't a problem for your system or
    the 
    <application>rpm</application>

    database. Basically the newer package overwrote the common
    files between the two versions of the packages. So your system
    winds up with all of the new versions of the files.</para>

    <para>Eventually you will probably want to correct the
    redundancy, though, in order to save hard drive space and avoid
    complicating the dependencies. 
    <application moreinfo="none">rpm</application>

    makes it safe to erase the old package. 
    <blockquote>
      <para>"4. [RPM] reviews the RPM database to find every file
      listed as being part of the package, and if a file does not
      belong to another package, deletes the file." 
      <footnote>
        <para>From 
        <xref endterm="maximumrpm" linkend="maximumrpm" />

<!--xref linkend="maximumrpm" /-->
        </para>
      </footnote>
      </para>
    </blockquote>
    </para>
  </sect2>
</sect1>

<sect1 id="rpmtips" xreflabel="rpm command line tips">
  <title>rpm command line tips</title>

  <sect2>
    <title id="twowhyreadrpm">Why do I need to read this when I'm
    using a graphical frontend for rpm?</title>

    <para>Throughout the HOWTO you have seen some tips on how to
    use 
    <application moreinfo="none">rpm</application>

    at the command line. This section adds additional tips. A
    graphical frontend to 
    <application moreinfo="none">rpm</application>

    is very convenient but it doesn't necessarily offer the power
    and versatility of the command line. For that reason, you might
    want to read this section.</para>

    <para>This section gives some further explanation of how to use
    the commands mentioned in the HOWTO and it adds some more
    examples.</para>

    <sidebar>
      <para>I made the mistake of upgrading the 
      <application moreinfo="none">rpm</application>

      package before upgrading my frontend. That caused an
      incompatibility between the two and I couldn't run the
      frontend anymore. Since there were many libraries and other
      programs to upgrade before I would have a chance to upgrade
      the frontend I was forced to rely on the command line to do
      the rest of the upgrading. This was inconvenient for me. What
      follows are some suggestions to help you if you run into this
      pitfall too, and have to use the command line. See 
      <xref endterm="tworpmpitfall" linkend="tworpmpitfall" />

      . 
<!-- FIXME: extra white space -->
      </para>
    </sidebar>
  </sect2>

  <sect2>
    <title id="twoqueryinfomation">Query the package summary
    information</title>

    <para>
      <prompt>bash$</prompt>

      <command>rpm</command>

      <parameter>-qi</parameter>

      <parameter moreinfo="none">
        <replaceable>packagename</replaceable>
      </parameter>
    </para>

    <para>
    <parameter>qi</parameter>

    is the basic parameter to read the package descriptions and
    some other fields. Querying the information is generally the
    first query that you perform.</para>

    <para>To look at the information from 
    <emphasis>all</emphasis>

    of the packages, add an 
    <parameter>'a'</parameter>

    to the parameter. This will produce lots of information that
    can be used to examine the packages on your system. Redirect
    the output to a file and use grep or a text editor to find text
    in the file. You might want to search for all of the packages
    named with a certain sub-string, all the packages of a
    Distribution, all of the GPL licensed packages, etc.</para>

    <para>
      <prompt>bash$</prompt>

      <command>rpm</command>

      <parameter>-qia</parameter>

      <parameter moreinfo="none">&gt;</parameter>

      <filename moreinfo="none">allinfo</filename>
    </para>

    <para>If you want to apply the query information command to an
    rpm file, add a ' ' 
    <parameter moreinfo="none">p</parameter>

    ' 
<!-- FIXME: extra white space -->
    to the parameters.</para>

    <para>
      <prompt>bash$</prompt>

      <command>rpm</command>

      <parameter>-qip</parameter>

      <filename moreinfo="none">
      <replaceable>package-filename</replaceable>

      .rpm</filename>
    </para>
  </sect2>

  <sect2>
    <title id="twolistcontents">List the package contents</title>

    <para>
      <prompt>bash$</prompt>

      <command>rpm</command>

      <parameter>-ql</parameter>

      <filename moreinfo="none">
        <replaceable>packagename</replaceable>
      </filename>
    </para>

    <para>If you need to list all of the files belonging to a
    package, this is the query you will use. This query is helpful
    if you want to know which files to back up before a crucial
    upgrade.</para>
  </sect2>

  <sect2>
    <title id="twoidentifyfile">Identify which package a file
    belongs to</title>

    <para>
      <prompt moreinfo="none">bash$</prompt>

      <command moreinfo="none">rpm</command>

      <parameter moreinfo="none">-qf</parameter>

      <filename moreinfo="none">
        <replaceable>/foopath/foofile</replaceable>
      </filename>
    </para>

    <para>If you know a file's name and location and you need to
    know which package it belongs to, then this is the query that
    you want to use.</para>
  </sect2>

  <sect2>
    <title id="twosummarizegroup">Summarize a group</title>

    <para>
      <prompt moreinfo="none">bash$</prompt>

      <command>rpm</command>

      <parameter>-qg</parameter>

      <parameter moreinfo="none">
        <replaceable>groupname</replaceable>
      </parameter>
    </para>

    <para>The grouping arranges the various packages into a
    hierarchy. This reveals one branch of that hierarchy to you.
    This can be useful when looking for packages of a certain
    category, the "System/Base" packages for instance.</para>
  </sect2>

  <sect2>
    <title id="twolistdependencies">List dependencies</title>

    <para>
      <prompt>bash$</prompt>

      <command>rpm</command>

      <parameter>-qp</parameter>

      <parameter moreinfo="none">--requires</parameter>

      <filename>
        <replaceable>package filename</replaceable>
      </filename>
    </para>

    <para>When you want to know the dependencies of a package file
    this command will produce a list for you. You will have to
    satisfy these dependencies before installing the package
    because they are required by the package.</para>
  </sect2>
</sect1>

<sect1 id="packageorder">
  <title>Suggestions for package order</title>

  <para>This is the order that I installed the packages on my
  system, as an example for you. Don't think that you have to
  follow this list exactly. Your dependencies could require
  something a little different. The order you follow can have lots
  of variations from this list. This is just a guide to give you a
  good start.</para>

  <note>
    <para>Note that not all of these package are GPL
    licensed.</para>
  </note>

  <sect2>
    <title id="twopackageorder">Order of the new packages</title>

    <sidebar>
      <para>
        <literallayout>
glib
libjpeg
libstdc++-compat
libpwdb
glib-devel
glibc-localedata
libz
libmng
qt2-nsplugin
qt2-xt
gd
gd-devel
gdbm
gdbm-devel                   
gdbm-devel-static
libpam
libpam-devel
bzip2
modutils
ext2fs                       
ext2fs-devel
ext2fs-devel-static          
qt2-opengl
qt2-qimgio                   
ldp
ldp-en-html                  
ldp-en-ascii
howto                        
howto-en-ascii
howto-en-html                
glibc

------kernel dependencies--------
gcc
binutils
util-linux 
e2fsprogs
ppp

-------------kernel--------------
kernel include
linux source
kernel binary
any additional kernel modules

---------------------------------
qt
qt-opengl
qt-qimgio
qt-tutorial
qt-doc-html
qt-examples
qt-devel
qt2
qt2-devel-static
qt2-devel
qt2-doc-html
qt2-examples
qt2-tutorial
jade
ncurses
cracklib
libstdc++
gcc-doc
libtiff
libtiff-devel
libpng
libpng-devel
libpng-devel-static          
libtiff-devel-static
mm                           
mm-devel
SysVinit                     
SysVinit-scripts
net-scripts
OpenLinux                    
setup
DEV                          
OpenLinux-keys
bool                         
cgetty
cpio                         
PHI
PHI-data                     
bdflush
coas2                        
fbset
fileutils                    
grep
kbd                          
lisa
sed                          
setserial
sysklogd                     
tar
termcap                      
utempter
which                        
gtk+
gtk+-perl                    
imlib
imlib-devel                  
mesa
mesa-devel                   
xpm
xpm-devel                    
libpwdb-devel
libtool                      
libcap
libcap-devel                 
sh-utils
freetype                     
slang
slang-devel                  
libident-devel
libjpeg-devel                
libz-devel
libz-devel-static            
popt
imap-devel                   
isp-devel
gettext                      
freetype-devel
kdelibs-devel                
cleandir
logrotate                    
fdutils
hdparm                       
isapnptools
pciutils                     
tcpdump
adduser                      
rsync
wget                         
dosemu
aumix                        
libmikmod
libmikmod-devel              
tiff-utils
transfig                     
gdb
gdb-doc                      
expect
expect-devel                 
ppp-devel
Glide                        
afio
compat-ncurses               
db
dhcp                         
doc-devguide-html
doc-install-html             
doc-sag-html
doxygen                      
dump
freetype2                    
freetype2-devel
libstdc++-devel              
libstdc++-devel-static
giftrans                     
jikes
eject                        
diffutils
gnupg                        
gpm
gpm-devel                    
gpm-devel-static
lsof                         
m4
m4-examples                  
mktemp
ncompress                    
strace
wdiff                        
dialog
col-tools                    
ipx
net-tools                    
readline
readline-devel               
bc
readline-devel-static        
netkit-base
netkit-ftp                   
netkit-rsh
netkit-telnet                
pilot-link
pilot-link-devel             
ed
vim                          
recode
sharutils                    
enscript
psutils                      
texinfo
LSM                          
copyrights
faq                          
fhs
ghostscript-doc              
mailcap
mimetypes                    
mtabase
screen                       
gzip
unarj                        
unzip
zip                          
zoo
bzip2-devel                  
grub
lilo                         
file
fatfs                        
findutils
mkisofs                      
mtools
am-utils                     
rstatd
procps                       
psmisc
bash                         
bash2
tcsh                         
at
crontabs                     
ktzset
time                         
vixie-cron
zoneinfo                     
imap
procmail                     
nis-client
tcp_wrappers                 
xntp
apache                       
gnuplot
apache-devel                 
autoconf
automake                     
bin86
bison                        
byacc
dejagnu                      
flex
gawk                         
gawk-doc
gperf                        
indent
make                         
mawk
nasm                         
patch
rcs                          
cvs
cvs-doc-ps                   
ncftp
less                         
gv
mailx                        
info
doc-install-html             
glib-devel-static
glibc-devel                  
glibc-devel-static
iptables                     
iptables-doc
ipxripd                      
ispell
ispell-english               
jpeg-utils
kernel-addon                 
lha
libIDL                       
libgif
a2ps                         
libogg
libkwave                     
libmimelib
libminimagick                
libqwsprite
libgif-devel                 
libgif-devel-static
libjpeg-devel-static         
libmimelib-devel
libmimelib-devel-static      
libmng-devel
libmng-devel-static          
libpwdb-devel-static
libsidplay                   
libsigc++
libsigc++-devel              
libsigc++-examples
libsmallrpc-devel            
libuulib
libuulib-devel               
libuulib-devel-static
libvorbis                    
libxml
lilo-doc                     
lilo-doc-ps
logcheck                     
ltrace
macutils                     
mc
mc-doc                       
mesa-devel-static
mgetty                       
mikmod
mm-devel-static              
mod_backhand
minicom                      
openssl
man-pages                    
perl
perl-add                     
perl-cgi
perl-examples                
perl-man
perl-modules                 
perl-pod
python                       
python-devel
python-doc                   
python-eclass
python-tk                    
mutt
webmin                       
lynx
plugger                      
fetchmail
tcl                          
tcl-devel
tclX                         
tclX-devel
tix                          
tix-devel
tk                           
tk-devel
tcl-devel-static             
tcp_wrappers-devel
tk-devel-static              
binutils
binutils-cross               
kdevelop-c_c++_ref
kdelibs                      
kdelibs-doc
groff                        
groff-dvi
groff-misc                   
textutils
rpmcompat-devel              
groff-ps
kdoc                         
netpbm
netpbm-devel                 
nfs
nfs-lockd                    
portmap-safer
portsentry                   
traceroute-safer
vim-X11                      
vim-help
gimp-data                    
teTeX
teTeX-font                   
teTeX-tex
jadetex                      
sgml-common
docbook-dtd41-sgml           
docbook-dtd41-xml
sgml-tools                   
mysql
mysql-client                 
mysql-devel
openslp                      
openldap
openldap-devel
pam_ncp                      
pam_ldap
cups                         
cups-client
qtlinguist                   
teTeX-doc
xmms                         
mpeglib
mscompress                   
mt-st
nss_ldap                     
openmotif
parted                       
slocate
XFree86-server               
XFree86-libs
XFree86-SVGA                 
XFree86-VGA16
XFree86-Mach64               
XFree86-config
XFree86-fonts-75dpi          
XFree86-contrib
XFree86-fonts-scale          
XFree86-addons
XFree86-fonts                
XFree86-imake
XFree86-programs             
XFree86-setup
XFree86-twm                  
XFree86-xterm
XFree86-xsm                  
XFree86-devel
XFree86-devel-prof           
XFree86-devel-static
XFree86                      
XFree86-Xvfb
XFree86-fonts-cyrillic       
XFree86-fontserver
acpid                        
adjtimex
bonnie++                     
libaudiofile
libaudiofile-utils           
kdelibs2
kdelibs2-devel               
kdelibs2-devel-static
kdelibs2-doc                 
libao
libkdegames                  
lrzsz
rpm                          
rpm-devel
kdebase2                     
kdebase2-opengl
kdepasswd                    
kdeapps
kdebindings2                 
kdecoas
kdesdk2                      
kdestudio
kdeconfig                    
kpackage
xmms-devel                   
korganizer
ksaferppp                    
ghostscript-fonts
ghostscript                  
cervisia
kdevelop                     
ddd
ddd-doc                      
kdbg
ImageMagick                  
ImageMagick-devel
hwprobe                      
kviewshell
kdvi                         
qtcups
libsasl                      
sendmail
cupdate-console              
cupdate
linux-kernel-binary          
midi-instruments
SDL                          
htdig
arts                         
ark
cscope                       
doctool
docbook-style-dsssl          
doctool-meta
ethereal                     
fetchmailconf
ipchains                     
iptables-doc-ps
tidy                         
tripwire
tmake                        
xemacs-base
xemacs-emacs-link            
xemacs-icons
karm                         
kcalc
kdialog                      
kedit
kfind                        
kfloppy
kghostview                   
khexedit
khotplug                     
kmail
knode                        
knotes
koffice-libs                 
kspread
koffice-filters              
konvert
kpm                          
ksirc
ksystemsnapshot              
ktimemon
opera                        
kups
kwave                        
kword
perl-SGMLSpm                 
psgml
quanta                       
sendmail-cf
sendmail-doc                 
stunnel
tcsh-doc-html                
teTeX-dvi
xemacs-mule                  
xmms-arts
xmms-crossfade               
xmms-infinity
xmms-kj                      
xmms-liveice
xmms-midi                    
xselection
xterm-color                  
xtoolwait
samba                        
samba-doc
kscd                         
XFree86-server-modules
mpeglib_artsplug             
nw-eps-icons
sgmltools-lite               
htmldoc
expat                        
libxml2
libxml2-devel                
libxslt
xpdf                         
XFree86-config-eg
groff-gxditview              
gv-doc-html
klpq                         
mod_perl
mod_ssl                      
nedit
usbutils                     
kcharselect
pgg                          
man
buildkernel
samlib
util-Linux
reiserfs-utils
docbook-dtd30-sgml
docbook-dtd31-sgml
isp
gtk+-devel
gtk+-devel-static
gimp
</literallayout>

<!-- FIXME : tidy always messes up this text -->
      </para>
    </sidebar>
  </sect2>

  <sect2>
    <title id="twolostpackages">Lost packages between Caldera 2.4
    and 3.1</title>

    <para>Just for the sake of curiosity, here are the packages
    that got lost between the old distribution and the new.</para>

    <para>
<literallayout>
XFree86-misc
Xaw-3dlook
Xaw3d
Xaw3d-devel
acroread
drdos-hdimage-eval
jdk
kautorun
kde-translated-docs
kdegraphics
kdelibdocs
kdemultimedia
kdenetwork
kdesupport
kdesupport-devel
kdethemes
kdeutils
kpilot
lesstif                      
lesstif-devel
libc5                        
mico-devel
mico-examples                
rvplayer
svgalib                      
svgalib-devel
xemacs-lispsource            
xemacs-packages
xforms                       
xforms-devel
xv                           
</literallayout>

<!-- FIXME : tidy always messes up this text -->
    </para>
  </sect2>
</sect1>

<sect1 id="othertools"
xreflabel="Upgrade tools from the text, plus others">
  <title>Upgrade tools from the text, plus others</title>

  <sect2>
    <title id="twoncftp">ncftp</title>

    <para>Here are some basic commands for the 
    <application>ncftp</application>

    command prompt, which you will find useful when
    downloading.</para>

    <itemizedlist>
      <listitem>
        <para>Set 
        <application>ncftp</application>

        for binary transfers with 
        <command>binary</command>

        . (This command isn't necessary because binary is the
        default transfer type.)</para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">binary</command>
        </para>
      </listitem>

      <listitem>
        <para>There are commands to change through the local and
        remote directories.</para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">lcd</command>

          <parameter moreinfo="none">
            <replaceable>directoryname</replaceable>
          </parameter>
        </para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">cd</command>

          <parameter moreinfo="none">
            <replaceable>directoryname</replaceable>
          </parameter>
        </para>
      </listitem>

      <listitem>
        <para>Commands that list files of the local and remote
        directories.</para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">lls</command>

          <parameter moreinfo="none">
            <replaceable>wildcard-filename</replaceable>
          </parameter>
        </para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">ls</command>

          <parameter moreinfo="none">
            <replaceable>wildcard-filename</replaceable>
          </parameter>
        </para>
      </listitem>

      <listitem>
        <para>Set a named bookmark for the server and directory
        once you've connected to it, so that it will be easy to
        open it the next time.</para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">bookmark</command>

          <parameter moreinfo="none">
            <replaceable>bookmarkname</replaceable>
          </parameter>
        </para>
      </listitem>

      <listitem>
        <para>Open that bookmark by its name.</para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">open</command>

          <parameter moreinfo="none">
            <replaceable>bookmarkname</replaceable>
          </parameter>
        </para>
      </listitem>

      <listitem>
        <para>
        <command>get</command>

        files using a wildcard file specification for the filename.
        Use the background version of the command if you would
        like.</para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">get</command>

          <parameter moreinfo="none">
            <replaceable>wildcard filename</replaceable>
          </parameter>
        </para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">bgget</command>

          <parameter moreinfo="none">
            <replaceable>wildcard filename</replaceable>
          </parameter>
        </para>
      </listitem>

      <listitem>
        <para>Let 
        <application>ncftp</application>

        find the files in your working directory and prompt you if
        you'd like to [ [ 
        <keycap>O</keycap>

        ] 
<!-- FIXME: extra white space -->
        verwrite, 
<!-- FIXME: extra white space -->
        [ 
        <keycap>S</keycap>

        ] 
<!-- FIXME: extra white space -->
        kip, or 
<!-- FIXME: extra white space -->
        [ 
        <keycap>R</keycap>

        ] 
<!-- FIXME: extra white space -->
        esume the download of that file. Turn off the auto-resume
        feature in order to enable this feature.</para>

        <para>
          <prompt>ncftp&gt;</prompt>

          <command moreinfo="none">set</command>

          <varname>auto-resume</varname>

          <parameter moreinfo="none">no</parameter>
        </para>
      </listitem>
    </itemizedlist>

    <para>Here is the 
    <application>ncftp</application>

    home page : 
    <ulink url="http://www.ncftpd.com/">
    http://www.ncftpd.com/</ulink>
    </para>
  </sect2>

  <sect2>
    <title id="progkpackage">kpackage</title>

    <para>Excellent 
    <application>KDE</application>

    front end for 
    <application>rpm</application>

    . 
<!-- FIXME: extra white space -->
    All of the packages get arranged into a nice, graphical,
    hierarchical tree. Satisfied and unsatisfied dependencies are
    identified. Single or multiple packages can installed, upgraded
    or uninstalled. Operations can be tested first. The replacepkgs
    and replacefiles switches are available. FTP installs are
    seamlessly integrated. There is support of package types other
    than rpm. Download a copy from : 
    <ulink
    url="http://www.general.uwa.edu.au/u/toivo/kpackage/doc/installation.html#HOW-TO-OBTAIN-KPACKAGE">
    http://www.general.uwa.edu.au/u/toivo/kpackage/doc/installation.html#HOW-TO-OBTAIN-KPACKAGE</ulink>
    </para>
  </sect2>

  <sect2 id="progtomsrtbt" xreflabel="tomsrtbt">
    <title>tomsrtbt</title>

    <para>Linux on a floppy, in case the Linux on your hard drive
    isn't running. Its home page is 
    <ulink url="http://www.toms.net/rb/">
    http://www.toms.net/rb/</ulink>
    </para>
  </sect2>

  <sect2 id="proginstallcd"
  xreflabel="Your bootable installation CD">
    <title>Your bootable installation CD</title>

    <para>If you have a Linux installation CD that is bootable, you
    should be able to get a running Linux system from it. This
    system will probably have some minimal console tools which
    allow you to do some maintenance on your hard drive in case the
    installed Linux is not functioning. 
    <orderedlist inheritnum="ignore" continuation="restarts">
      <title>To gain access to this Linux on a CD:</title>

      <listitem>
        <para>Boot from the CD and get the installation program
        started</para>
      </listitem>

      <listitem>
        <para>Do not start re-installing!</para>
      </listitem>

      <listitem>
        <para>Look for other virtual consoles by pressing 
        <keycombo>
          <keycap>Left-Alt</keycap>

          <keycap>F1</keycap>
        </keycombo>

        through 
        <keycombo>
          <keycap>Left-Alt</keycap>

          <keycap>F8</keycap>
        </keycombo>

        . 
<!-- FIXME: extra white space -->
        One of them should give you either a 
        <application>shell</application>

        prompt or a 
        <application>login</application>

        prompt.</para>
      </listitem>

      <listitem>
        <para>If you can't find a prompt on any of those consoles,
        you may have to go through some of the basic initialization
        steps of the installation such as setting up the keyboard,
        screen, language and mouse. But again, do not start
        installing! Look through the consoles again until you find
        a prompt.</para>
      </listitem>

      <listitem>
        <para>Login to the Linux system, if necessary.</para>
      </listitem>

      <listitem>
        <para>Find a mount point that has some free space for a new
        directory. (Use the 
        <command moreinfo="none">df</command>

        command.)</para>
      </listitem>

      <listitem>
        <para>Make a new directory to used as a mount point.</para>
      </listitem>

      <listitem>
        <para>
        <application>Mount</application>

        a partition from the hard drive that you want to modify. 
        <application>Mount</application>

        it under that mount point just created.</para>
      </listitem>
    </orderedlist>
    </para>
  </sect2>

  <sect2>
    <title id="progls">ls</title>

    <para>Listing out the package files and comparing them to what
    you have installed is how you can keep track of your progress.
    This is a standard Linux command. If you don't recognize it,
    then this HOWTO is too advanced for you.</para>
  </sect2>

  <sect2>
    <title id="progcp">cp</title>

    <para>Use 
    <application>cp</application>

    to make backups of crucial files before they are upgraded, in
    case you find that the upgrade didn't work for whatever reason.
    If you don't recognize this command, then this HOWTO is too
    advanced for you.</para>
  </sect2>

  <sect2 id="progglint" xreflabel="glint">
    <title>glint</title>

    <para>
    <application>Glint</application>

    is an X program, made to be a frontend for rpm. There are some 
    <ulink
    url="http://www.redhat.com/docs/manuals/Linux/RHL-5.2-Manual/install-guide/manual/doc069.html">
    instructions for Glint</ulink>

    from Red Hat's web site.</para>
  </sect2>

  <sect2>
    <title id="progparted">parted</title>

    <para>
    <ulink url="http://www.gnu.org/software/parted/parted.html">
    GNU's partitioning tool</ulink>

    for creating, moving, copying and resizeing partions.</para>
  </sect2>

  <sect2>
    <title>Disk Drake (Mandrake)</title>

    <para>Partitioning 
    <ulink url="www.linux-mandrake.com/diskdrake">from Mandrake
    Linux</ulink>

    .</para>
  </sect2>

  <sect2>
    <title id="progfips">fips (DOS)</title>

    <para>Used for non-destructive partitioning of your hard drive.
    Included in most distribution's installation CDs. Try looking
    under a 
    <filename>tools</filename>

    sub-directory on your installation CD.</para>

    <para>The author was Arno Schaefer. You can download a copy
    from : 
    <ulink url="http://www.igd.fhg.de/~aschaefe/fips/fips20.zip">
    http://www.igd.fhg.de/~aschaefe/fips/fips20.zip</ulink>

    The licensing is GPL. Most Linux distributions carry it under
    the 
    <filename>/dostools</filename>

    , 
    <filename>/dosutils</filename>

    or 
    <filename moreinfo="none">tools</filename>

    directory in the primary cd.</para>
  </sect2>

  <sect2>
    <title>apt and dpkg</title>

    <para>This is Debian's method of download and upgrade. I've
    heard that this is very good compared to 
    <application>rpm</application>

    . 
<!-- FIXME: extra white space -->
    The programs are : 
    <ulink url="http://packages.debian.org/stable/base/apt.html">
    apt</ulink>

    and 
    <ulink url="http://packages.debian.org/stable/base/dpkg.html">
    dpkg</ulink>

    . 
<!-- FIXME: extra white space -->
    Here is a presentation on using them : 
    <ulink
    url="http://www.cinlug.org/education/Debian_Packaging/page1.html">
    http://www.cinlug.org/education/Debian_Packaging/page1.html</ulink>

    This is the HOWTO for apt : 
    <ulink url="http://www.debian.org/doc/manuals/apt-howto/index">
    http://www.debian.org/doc/manuals/apt-howto/index</ulink>
    </para>
  </sect2>

  <sect2 id="progdiskdruid" xreflabel="Red Hat's Disk Druid">
    <title>Disk Druid (partitioning from Red Hat)</title>

    <para>Used to partition your hard drive. It is part of Red
    Hat's installation program.</para>
  </sect2>

  <sect2 id="proglizard" xreflabel="Caldera's Lizard">
    <title>Lizard (Caldera's graphical installation tool)</title>

    <para>An installation program, used for partitioning,
    installing, etc.</para>
  </sect2>

  <sect2>
    <title id="proglisa">Lisa (Caldera's console based installation
    tool)</title>

    <para>A console based installation program.</para>
  </sect2>

  <sect2>
    <title id="progcalupgrader">Caldera Upgrader</title>

    <para>Caldera's graphical, automated, upgrade program. It
    didn't work for me.</para>
  </sect2>

  <sect2>
    <title id="progPHI">PHI</title>

    <para>An automated, console based, upgrade program from
    Caldera.</para>
  </sect2>

  <sect2>
    <title>Other standard ones</title>

    <para>These programs are standard Linux commands : 
    <simplelist type="inline">
      <member>mount</member>

      <member>top</member>

      <member>bash</member>

      <member>touch</member>

      <member>df</member>

      <member>sort</member>

      <member>sed</member>

      <member>diff</member>

      <member>and less</member>
    </simplelist>

    . grub is a standard replacement for the lilo bootloader. 
    <application>kpm</application>

    is a KDE replacement for the 
    <application moreinfo="none">top</application>

    process displayer.</para>
  </sect2>
</sect1>

&GFDLDOC; 
<bibliography>
  <title>Bibliography</title>

  <bibliodiv>
    <title>Referenced Documents</title>

    <biblioentry>
      <title id="upgradehowto">"Upgrading Your Linux Distribution
      mini-HOWTO"</title>

      <authorgroup>
        <author>
          <firstname>Greg</firstname>

          <surname>Louis</surname>
        </author>
      </authorgroup>

      <copyright>
        <year>1996</year>

        <holder>Dynamicro Consulting Limited</holder>
      </copyright>

      <pubdate>6 June 1996</pubdate>

      <pubsnumber>v1.11</pubsnumber>

      <releaseinfo>
        <ulink
        url="http://www.linuxdoc.org/HOWTO/mini/Upgrade.html">The 
        <acronym>LDP</acronym>

        has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>

    <biblioentry>
      <title id="rpmslackwarehowto">"RPM+Slackware
      Mini-Howto"</title>

      <authorgroup>
        <author>
          <firstname>Dave</firstname>

          <surname>Whitinger</surname>
        </author>
      </authorgroup>

      <copyright>
        <year>1998</year>

        <holder>Dave Whitinger</holder>
      </copyright>

      <pubdate>13 April 1998</pubdate>

      <pubsnumber>v1.3</pubsnumber>

      <releaseinfo>
        <ulink
        url="http://www.linuxdoc.org/HOWTO/mini/RPM+Slackware.html">
        The 
        <acronym>LDP</acronym>

        has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>

    <biblioentry>
      <title id="rpmhowto">"RPM HOWTO"</title>

      <authorgroup>
        <author>
          <firstname>Donnie</firstname>

          <surname>Barnes</surname>
        </author>
      </authorgroup>

      <copyright>
        <year>1999</year>

        <holder>Red Hat, Inc.</holder>
      </copyright>

      <pubsnumber>V3.0</pubsnumber>

      <pubdate>3 November 1999</pubdate>

      <releaseinfo>
        <ulink
        url="http://www.linuxdoc.org/HOWTO/RPM-HOWTO/index.html">
        The 
        <acronym>LDP</acronym>

        has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>

    <biblioentry>
      <title id="rpmman">rpm(8) (a man page)</title>

      <authorgroup>
        <author>
          <firstname>Marc</firstname>

          <surname>Ewing</surname>
        </author>

        <author>
          <firstname>Jeff</firstname>

          <surname>Johnson</surname>
        </author>

        <author>
          <firstname>Erik</firstname>

          <surname>Troan</surname>
        </author>
      </authorgroup>

      <pubdate>22 December 1998</pubdate>

      <publisher>
        <publishername>Red Hat Software</publishername>
      </publisher>
    </biblioentry>

    <biblioentry>
      <title id="installationstratigieshowto">"Linux Installation
      Strategies mini-HOWTO"</title>

      <authorgroup>
        <author>
          <firstname>Tobby</firstname>

          <surname>Banerjee</surname>
        </author>
      </authorgroup>

      <copyright>
        <year>
        </year>

        <holder>
        </holder>
      </copyright>

      <pubsnumber>1.0.1</pubsnumber>

      <pubdate>2001-05-02</pubdate>

      <releaseinfo>
        <ulink
        url="http://www.linuxdoc.org/HOWTO/mini/Install-Strategies/index.html">
        The 
        <acronym>LDP</acronym>

        has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>

    <biblioentry>
      <title id="redhatinstallguide">"THE COMPLETE redhat LINUX
      INSTALLATION GUIDE 5.2"</title>

      <publisher>
        <publishername>Red Hat Software, Inc.</publishername>
      </publisher>

      <corpauthor>Red Hat Software, Inc.</corpauthor>

      <pagenums>24-25</pagenums>

      <copyright>
        <year>1995, 1996, 1997, 1998</year>

        <holder>Red Hat Software, Inc.</holder>
      </copyright>

      <isbn>1-57595-199-1B</isbn>

      <corpname>Red Hat is a trademark of Red Hat Software, Inc.
      Copy Writer</corpname>

      <releaseinfo>
        <ulink
        url="http://www.redhat.com/docs/manuals/Linux/RHL-5.2-Manual/install-guide/manual/">
        Red Hat has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>

    <biblioentry>
      <title id="partitionhowto">Linux Partition HOWTO</title>

      <authorgroup>
        <author>
          <firstname>Tony</firstname>

          <surname>Harris</surname>
        </author>

        <author>
          <firstname>Kristian</firstname>

          <surname>Koehntopp</surname>
        </author>
      </authorgroup>

      <pubsnumber>Revision 3.3</pubsnumber>

      <pubdate>10 July 2001</pubdate>

      <releaseinfo>
        <ulink
        url="http://www.linuxdoc.org/HOWTO/mini/Partition/index.html">
        The 
        <acronym>LDP</acronym>

        has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>

    <biblioentry>
      <title id="ncftpman">ncftp(1) Man page</title>

      <pubsnumber>3.0.2</pubsnumber>
    </biblioentry>

    <biblioentry>
      <title id="maximumrpm" xreflabel="Maximum RPM">Maximum
      RPM</title>

      <copyright>
        <year>1997</year>

        <holder>Red Hat Software, Inc.</holder>
      </copyright>

      <isbn>0-672-31105-4</isbn>

      <corpname>
      <trademark>RPM</trademark>

      is a trademark of Red Hat Software, Inc.</corpname>

      <authorgroup>
        <author>
          <firstname>Edward</firstname>

          <othername>C.</othername>

          <surname>Bailey</surname>
        </author>
      </authorgroup>
    </biblioentry>
  </bibliodiv>

  <bibliodiv>
    <title>Related HOWTOs</title>

    <biblioentry>
      <title id="installationhowto">The Linux Installation
      HOWTO</title>

      <copyright>
        <year>2000</year>

        <holder>Eric S. Raymond</holder>
      </copyright>

      <authorgroup>
        <author>
          <firstname>Eric</firstname>

          <othername>Steven</othername>

          <surname>Raymond</surname>

          <affiliation>
            <orgname>Thyrsus Enterprises</orgname>
          </affiliation>
        </author>
      </authorgroup>

      <pubsnumber>Revision 5.6</pubsnumber>

      <pubdate>2001-09-06</pubdate>

      <releaseinfo>
        <ulink
        url="http://www.linuxdoc.org/HOWTO/Installation-HOWTO/index.html">
        The 
        <acronym>LDP</acronym>

        has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>

    <biblioentry>
      <title id="swapspacehowto">Linux Swap Space
      Mini-HOWTO</title>

      <authorgroup>
        <author>
          <firstname>Rahul</firstname>

          <othername>U.</othername>

          <surname>Joshi</surname>
        </author>
      </authorgroup>

      <pubsnumber>v1.42</pubsnumber>

      <pubdate>18 January 2000</pubdate>

      <copyright>
        <year>2000</year>

        <holder>Tim Bynum</holder>
      </copyright>

      <releaseinfo>
        <ulink
        url="http://www.linuxdoc.org/HOWTO/mini/Swap-Space.html">
        The 
        <acronym>LDP</acronym>

        has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>

    <biblioentry>
      <title id="filesystemshowto">File Systems-HOWTO.html</title>

      <authorgroup>
        <author>
          <firstname>Martin</firstname>

          <surname>Hinner</surname>
        </author>
      </authorgroup>

      <copyright>
        <year>1999</year>

        <holder>Martin Hinner</holder>
      </copyright>

      <pubsnumber>Version 0.7.5</pubsnumber>

      <pubdate>22 August 2000</pubdate>

      <releaseinfo>
        <ulink
        url="http://www.linuxdoc.org/HOWTO/FileSystems-HOWTO.html">
        The 
        <acronym>LDP</acronym>

        has an online copy that you can refer to</ulink>
      </releaseinfo>
    </biblioentry>
  </bibliodiv>
</bibliography>
</article>

<!-- 
     $Id$
-->

