LDP/LDP/retired/rpmupgrade/rpmupgrade.xml

4384 lines
118 KiB
XML

<?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$
-->