The upgrade procedures described below can be used to upgrade any previous Debian release to 2.2 at once; you should not have to upgrade separately to every intermediate release. Note however, that upgrades from releases 2.0 and earlier to 2.2 have not been tested extensively, and are therefore not supported.
Backwards source and binary compatibility in GNU LibC 2.1 means most programs from the previous release will run on the new release (but not the other way around). All packages in Debian GNU/Linux 2.2 have been set up to run in the new environment, of course, and it will be possible to re-compile most programs on the new release without changes. However, there are always a few exceptions to the rule, so some of your local programs may need to be modified and/or recompiled on the new glibc to run properly.
When run under kernel 2.2 and glibc 2.1, system will automatically mount an
additional `devpts' virtual drive, to support Unix98 PTYs, and some of our
daemons (Unix servers) will automatically switch to using those new devices
(/dev/pts/*
instead of /dev/ttyp*
).
With kernel 2.2.x, the PC printer devices start from lp0 instead of lp1 as with
kernels 2.0.x, so you will want to update your printcap and other configuration
files to use that (/dev/lp0
instead of /dev/lp1
,
/dev/lp1
instead of /dev/lp2
and so on).
The transition to using new kernel went quite smoothly, mainly because we
almost completely prepared the 2.1 release for running a 2.2 kernel. Some
issues still remain, mainly related to the network. Network administrators
will notice two things: first, that firewall manipulation utility
ipfwadm
has been replaced with ipchains
. The upgrade
of the netbase
will prompt you to set up symlinks to a wrapper
script so that your firewall remains functioning; you can also read
/usr/share/doc/netbase/ipchains-HOWTO.txt.gz
and properly convert
your firewall setup to ipchains. Also, the /etc/init.d/network
script, as set up by the old Debian installation procedures, prints error
messages with the new kernel; this can be fixed by adding proper `netmask' and
`dev' options to route
invocations in that file. Unfortunately,
this kernel upgrade could also mean problems for those users whose machines
have very small amounts of RAM.
Upgrades to PAM enabled applications have been made as seamless and integrated
as possible. For most instances, the new configurations will mimic that of
your old pre-PAM configurations. However, not every case can be accounted for.
If changes need to be made, you can install the libpam-doc
package, which contains documentation on every aspect of the PAM library, even
tips on modifying your existing non-PAM apps to support the new authentication
model.
One major part of the PAM upgrade was merging secure-su
into the
main login package. The default su
provided by
shellutils
is now provided by the login
package so
that PAM integration was more complete and system wide. If you used to use the
default su
, then you should not notice any changes with the new
version. However, users of the obsolete secure-su
package may
have to check their configurations to ensure that the new PAM setup is
compatible.
You may notice that this release includes two versions of Perl: 5.004 (in
perl-5.004*
packages) and 5.005 (in perl-5.005*
packages). We highly recommend using the latter, newer version, and removing
the old version, which is kept only for compatibility, as a convenience to
programmers. If you have/use any Perl modules from the new
lib*-perl
packages in your scripts, you will have to set the
/usr/bin/perl
symlink (using update-alternatives
) to
point to Perl 5.005, otherwise you will experience problems.
Please note that the Debian non-US archive has been slightly reorganized in
order to support separation between free and non-free software. If you already
used apt
to access it, you will need to change your
/etc/apt/sources.list
lines for non-US to this form:
deb http://non-US.debian.org/debian-non-US potato/non-US main contrib non-free
Previous versions of inetd
(provided by the netbase
package) had a bug in that when inetd
was stopped, an existing
connection to some of the internal services could stop inetd
from
restarting. This bug has been fixed in the current netbase
, but
older version of it are still vulnerable. If you find inetd
isn't
restarting properly, look for any existing inetd
processes that
are still running, or processes such as "-discard" or
"-echo". If you have the psmisc
package installed,
running:
sed 's/[[:space:]][[:space:]]*/ /g' /etc/inetd.conf | grep '^ *[^#]' | cut -d" " -f1,3 | while read serv type; do fuser -n $type $serv; done
as root will tell you which processes are using ports inetd
is
interested in.
The new XFree86 and other xserver-*
packages introduced in this
release, compared to those in the previous release, 2.1, may very well contain
better support for your graphics hardware, especially drivers for newer
graphics cards such as many 3D accelerator cards. If you don't know exactly
which X server package to choose, try the xviddetect
program (from
xviddetect
package), that will output the name of the needed X
server, based on information found about your PCI/AGP bus.
If the X server you are using refers to the upgrading host for xfs
font services, it will lose its connection to the font server when
xfs
is stopped. This is not fatal, but can be annoying. Note:
similar things may happen for other daemons, so be prepared.
The following packages have been renamed as shown. In most, if not all, cases, Conflicts:, Replaces:, and Provides: fields (or even dummy packages) have been provided so the new package will either get installed automatically, and/or will safely replace/remove the old one.
ada-rm -> gnat-doc [1] alsa-modules -> alsa-base alsalib -> libasound0.4 ax25-utils -> libax25 blt8.0-unoff -> blt8.0 c-client-dev -> libc-client4.7-dev console-tools-data -> console-tools [2] cti-ifhp -> ifhp cwnn -> freewnn-cserver cwnn-dev -> freewnn-cserver-dev data-dumper -> perl-5.005-doc dhcp-beta -> dhcp dhcp-client-beta -> dhcp-client dhcp-relay-beta -> dhcp-relay egcc -> gcc egcs-docs -> gcc-doc emacspeak-bs-tcl, emacspeak-dt, emacspeak-dt-tcl -> emacspeak-ss eterm-backgrounds -> eterm fte-cfgdocs -> fte-docs fvwm -> fvwm1 fvwm2 -> fvwm gltt2 -> libgltt2 gltt2-dev -> libgltt2-dev gmp2 -> libgmp2 gmp2-dev -> libgmp2-dev gnome-gnobots -> gnome-gnobots2 gnome-gnothello -> gnome-iagno gnome-gyahtzee -> gnome-gtali gsl -> libgsl0 gsl-dev -> libgsl0-dev gstep-base -> gstep-base0 gstep-base-dev -> gstep-base0-dev gstep-extensions -> gstep-extensions0 gstep-gui -> gstep-gui0 gstep-gui-dev -> gstep-gui0-dev gstep-guile -> gstep-guile0 gtkicq -> gnomeicu intlfonts-arabic -> xfonts-intl-arabic intlfonts-asian -> xfonts-intl-asian intlfonts-chinese -> xfonts-intl-chinese intlfonts-chinese-big -> xfonts-intl-chinese-big intlfonts-european -> xfonts-intl-european intlfonts-japanese -> xfonts-intl-japanese intlfonts-japanese-big -> xfonts-intl-japanese-big intlfonts-phonetic -> xfonts-intl-phonetic ivtools -> ivtools-unidraw kwnn -> freewnn-kserver kwnn-dev -> freewnn-kserver-dev lam -> lam-runtime lesstifg-dbg -> lesstif-dbg lesstifg-dev -> lesstif-dev libapache-mod-auth-sys -> apache-common libapache-mod-put -> apache-common libatalk1 -> netatalk libatalk1-dev -> netatalk-dev libc6-doc -> glibc-doc libdatecalc-perl -> libdate-calc-perl libg++2.8.2-dev -> libg++2.8.1.3-dev libgg0 -> libgii0 libgg0-dev -> libgii0-dev libggi1 -> libgii0, libggi2 libgnome0 -> libgnomesupport0 libjpegg-dev -> libjpeg62-dev liblockdev0-perl -> liblockdev1-perl liblockdev0g-dbg -> liblockdev1-dbg liblockdev0g-dev -> liblockdev1-dev libmd5-perl -> libdigest-md5-perl libpam0g-util -> libpam-runtime libwcsmbs, wcsmbs-locale-ja -> locale-ja libwine0.0.971116 -> libwine libxml0 -> libxml1 maplay -> maplay3 mysql-base -> mysql-gpl-client, mysql-client mysql-dev -> libmysqlclient6-dev newt0.25-dev -> libnewt-dev open -> console-tools palmpython -> pyrite perl -> perl5 perl-base -> perl5-base popt -> libpopt0, libpopt-dev ppp-pam -> ppp [3] ptx -> textutils python-bsddb, python-curses, python-misc, python-net -> python-base [4] python-mysql -> python-mysqldb python-pil -> python-imaging r-pdl -> pdl sgmlspm -> libsgmls-perl smbfsx -> smbfs sorcerer -> pccts t1lib0-bin -> t1lib-bin t1lib0-dev -> t1lib-dev tcd -> gnome-media timezones -> libc6 [5] tm -> wemi toshiba-fan, toshiba-hotkey -> toshutils v-bin -> libv-bin v-dbg -> libv-dbg v-dev, vm-dev -> libv-dev v1g -> libv1.22 vnc-doc -> xvncviewer, vncserver wcsmbs-locale-ko -> locale-ko wnn -> freewnn-jserver wnn-common -> freewnn-common wnn-dev -> freewnn-jserver-dev www-search -> libwww-search-perl wxxt1 -> libwxxt1 wxxt1-dev -> libwxxt-dev xfntbig5p-cmex24m -> xfonts-cmex-big5p xfntil2 -> xfonts-biznet-iso-8859-2-{base,75dpi,100dpi} xntp3-doc -> ntp-doc xpm-bin -> xpm4g-dev [6]
Although we have made every effort to complete this list, it may still not be exhaustive.
Between releases 2.1 (`slink') and 2.2 (`potato'), a number of packages have been split into two or more packages. The reason for these splits, in general, is that the original package provided a diverse set of functionalities, and that few, if any, users used all of these components. Some packages will display a notice warning of the split during the installation, some mention it in the package description, and some just ignore it.
If you find that a familiar package is lacking some or all of its
functionality, check the list below to see if you need to install more packages
to restore the original functionality. Failing that, check the changelog for
the package, which can be found in
/usr/doc/package/changelog.Debian.gz
.
The following is a list of packages that have been split (this list may not be complete):
gmc: mc gmc mc-common [7] mozilla: mozilla libnspr3 libnspr3-dev netbase: netbase tcpd libwrap0 libwrap0-dev netstd: bootp bootparamd bootpc finger fingerd fping ftp ftpd icmpinfo pidentd rdate rdist routed rsh-client rsh-server ruptime rusers rusersd rwall rwalld rwho rwhod tftp tftpd traceroute wdsetup [8] perl-base: perl-base perl-5.004-base perl-5.005-base [9] perl: perl-5.004 perl-5.004-doc perl-5.005 perl-5.005-doc [10] vim: vim vim-gtk [11]
Before upgrading your system, it is strongly recommended that you make a full backup, or at least, backup any data or configuration information you can't afford to lose. The upgrade tools and process are quite reliable, but a hardware failure in the middle of an upgrade could result in a severely damaged system.
The main things you'll want to save are the contents of /etc
,
/var/lib/dpkg
and the output of dpkg
--get-selections.
It's wise to inform all users in advance of any upgrades you're planning,
although users accessing your system via ssh (at least) shouldn't notice much
during the upgrade, and may want to continue working. If you wish to take
extra precautions, back up or unmount user's partitions (/home
)
before upgrading.
Distribution upgrade should be done either locally from a textmode virtual
console (or a directly connected serial terminal), or remotely via an
ssh
link.
You should not do the upgrade using telnet
,
rlogin
, rsh
, or from an X session managed by
xdm
on the machine you are upgrading. That is because each of
those services may well be terminated during the upgrade, which can result in
an inaccessible system that is only half-upgraded.
Regardless of the method used for upgrading, it is recommended that you check the status of all packages first. This can be done with
dpkg -l | pager
or
dpkg --get-selections > filename
(and then inspect filename
), or it can be done in
dselect
.
Any package installation operation must be run with superuser privileges, so
either login as root or use su
or sudo
to gain
necessary access rights.
It is strongly recommended that you use /usr/bin/script
program to
record a transcript of the upgrade session. [12] Then if any problems develop, you can see what happened,
and if needed, provided exact information in a bug report. To start the
recording, type:
script -a /upgrade-2.2.typescript
or similar. Remember not to put the typescript file on a temporary directory (such as /tmp or /var/tmp).
It is desirable to remove any holds before upgrading. If any package that is
essential for the upgrade is on hold, the upgrade will fail. If you changed
and recompiled a package locally, and didn't rename it or put an epoch in the
version, you must put it on hold to prevent it from being upgraded. The `hold'
package state can be changed either by using dselect
(in the
Select menu, use the `H' and `G' keys to hold and unhold, respectively), or by
doing:
dpkg --get-selections > filename
editing filename
to change "hold" to "install"
(or vice versa), and then, with root permissions, doing
dpkg --set-selections < filename
It might be a good idea to put ssh
on `Hold' (if it's installed),
since otherwise it will be replaced by OpenSSH (the new ssh
package) which still has a slightly incompatible configuration file, that can
sometimes cause sshd
not to start after the upgrade. By putting
it on hold you assure that your system will continue to be reachable; you can
resolve things later, or select the ssh-nonfree
package for
installation, which is the completely compatible, but still non-free, version
of ssh. (Note: even when upgrading without `Hold', existing connections will
not be broken.)
It is important that the /etc/rcS.d
directory exists prior to the
upgrade; the installation of the libc6
package will fail
otherwise.
Don't forget to mount all needed partitions (notably the root and
/usr
partitions) read-write, with a command like:
mount -o remount,rw /mountpoint
The /usr/share/doc
directory (if it exists already) should not be
a symlink (e.g. to /usr/doc
), since that will cause some packages
to break. However, symlinking /usr/doc
to
/usr/share/doc
is allowed. Please note that if you use such a
symlink there will be numerous messages about /usr/doc
directories
that can't be removed. Those are normal, and you can safely ignore them.
The recommended method of upgrading is by using apt-get
directly,
as described in the next section. APT is the next generation of Debian's
packaging tools, and it enables smooth upgrades and easy installations.
You should not be doing any major package upgrades with default access
methods in dselect
, because those, unlike the apt
method, do not do any logical package ordering during the installation, and
therefore aren't as reliable. Additionally, such upgrades are far less tested
and therefore supported by Debian.
If you want to upgrade using CD-ROMs, or if you are upgrading from a Debian
GNU/Linux release 2.0 or earlier, you need the versions of apt
and
dpkg
available in the http://http.us.debian.org/debian/dists/potato/main/upgrade-i386/
directory at your Debian mirror, or the upgrade/
directory on the
first CD-ROM from your Debian 2.2 CD set. Download and install these files,
using (in this exact order):
dpkg -i dpkg_1.6.13_i386.deb dpkg -i apt_0.3.19_i386.deb
These are specially compiled static versions, that can be installed (and run) on any Debian system.
If you are upgrading from Debian GNU/Linux version 2.1 (any point release) and
you want to upgrade using either the network (FTP, HTTP) or a local packages
mirror (possibly a disk partition, or an NFS-mounted mirror), then you can use
the apt
and dpkg
packages that came with that Debian
release. Of course, if apt
is not installed yet (it is not by
default), install it now.
Please note that for upgrading with multiple CDs from any
Debian release you need the static versions of apt
and
dpkg
packages, as described above.
It is recommended that you read the apt-get(8)
and the
sources.list(5)
man pages at this time. If you installed the
static versions of apt
and dpkg
, you can only access
the manpages with commands like man -l
/usr/share/man/man8/apt-get.8.gz until the man-db
package
is upgraded.
Before starting the upgrade you must set up apt
's configuration
file for package lists, /etc/apt/sources.list
.
apt
will consider all packages that can be found via any
"deb" line, and install the package with the highest
version number, giving priority to the first mentioned lines (that way, in case
of multiple mirror locations, you'd typically first name a local harddisk, then
CD-ROMs, and then FTP/HTTP mirrors).
The default configuration is set up for installation from our main Internet
servers, but you may wish to modify /etc/apt/sources.list
to use
other mirrors, preferably a mirror that is network-wise closest to you. In
that case, first comment out the existing "deb" lines in
sources.list
, by placing a hash sign (#) in front of
them.
Debian FTP or HTTP mirror addresses can be found at http://www.debian.org/distrib/ftplist
(look at the "Full list of mirrors" section).
For example, your closest Debian mirror is ftp://alea.iacta.est/debian/ When inspecting that mirror with a web browser or FTP program, you will notice that the main directories are like this:
ftp://alea.iacta.est/debian/dists/potato/main/binary-i386/... ftp://alea.iacta.est/debian/dists/potato/contrib/binary-i386/...
To use this mirror with apt
, you add this line to your
sources.list
file:
deb ftp://alea.iacta.est/debian potato main contrib
Note that the `dists' is added implicitly, and the arguments after the third are used to expand the path into multiple directories.
If the mirror also contains the non-US/* sections under ftp://alea.iacta.est/debian/debian-non-US, also add the following line:
deb ftp://alea.iacta.est/debian/debian-non-US potato/non-US main contrib
Any package needed for installation that is fetched from the network is stored
in the /var/cache/apt
(and the partial/
subdirectory,
during download), so you must make sure you have enough space before attempting
to start the installation. With a reasonably extended Debian installation, you
can expect at least 300 MB of downloaded data.
Note: if you are using the static versions of apt
and
dpkg
, the hostname-lookup is broken (which is one reason to use
slink's apt
when upgrading over the network). The solution is to
simply put the mirrors' IP address in the "deb" line.
(Hint: nslookup some-server)
Instead of using FTP or HTTP packages mirrors, you may wish to modify
/etc/apt/sources.list
to use a mirror on a local disk (possibly
NFS-mounted). In that case, first comment out the existing
"deb" lines in sources.list
, by placing a
hash sign (#) in front of them.
For example, your packages mirror may be under /var/ftp/debian/
,
and have main directories like this:
/var/ftp/debian/dists/potato/main/binary-i386/... /var/ftp/debian/dists/potato/contrib/binary-i386/...
To use this with apt
, you add this line to your
sources.list
file:
deb file:/var/ftp/debian potato main contrib
Note that the `dists' is added implicitly, and the arguments after the third are used to expand the path into multiple directories.
If your local mirror contains the non-US/* sections under
/var/ftp/debian-non-US
, also add the following line:
deb file:/var/ftp/debian-non-US potato/non-US main contrib
First you need to install the latest version of apt
and
dpkg
packages, as described above.
If you want to use CDs only, comment out the existing
"deb" lines in /etc/apt/sources.list
by
placing a hash sign (#) in front of them.
Make sure there is a line in /etc/fstab
that enables mounting your
CD-ROM drive at the /cdrom
mount point (the exact
/cdrom
mount point is required for apt-cdrom
). For
example, if /dev/hdc
is your CD-ROM drive, /etc/fstab
should contain a line like:
/dev/hdc /cdrom auto defaults,noauto,ro 0 0
Note that there may be no spaces between the words defaults,noauto,ro in the fourth field.
To verify it works, insert a CD and try running
mount /cdrom (this will mount the CD to the mount point) ls -alF /cdrom (this should show the CD's root directory) umount /cdrom (this will unmount the CD)
Next, run:
apt-cdrom add
for each Debian binary CD-ROM you have, to add the data about each CD to APT's database.
Once you have configured apt
's sources.list
, run (as
root):
apt-get update
This will resynchronize the package overview files from their sources, updating information about new and updated packages.
Some people prefer to run
apt-get --fix-broken --show-upgraded --simulate dist-upgrade | pager
in order to see what will happen. While this may be somewhat time consuming, it may avoid some surprises. This will tell you either what's wrong with your system (and how to solve it), or, most likely, what exactly will be done during the upgrade. Pay special attention to the packages that will be "REMOVEd"; no essential packages should be listed there.
After you have verified that apt-get
should work fine, run:
apt-get --fix-broken --show-upgraded dist-upgrade
This will perform a complete upgrade of the system, i.e. install the newest available versions of all packages, and resolve all possible dependency changes between packages in different releases. If necessary, it will install some new packages (usually new library versions, or renamed packages), and remove any conflicting obsoleted packages.
When upgrading from a set of CD-ROMs, you will be asked to insert specific CDs at several points during the upgrade. You might have to insert the same CD multiple times; this is due to inter-related packages that have been spread out over the CDs.
New versions of currently installed packages that cannot be upgraded without
changing the install status of another package will be left at their current
version (displayed as "held back"). Therefore, it may be necessary
to use dpkg
or dselect
to remove and reinstall some
broken packages or dependencies. Alternatively, apt-get
dselect-upgrade may be used after apt-get -f dist-upgrade.
(See the apt-get(8)
man page.)
The --fix-broken (or just -f) option causes
apt
to attempt to correct a system with broken dependencies in
place. apt
does not allow broken package dependencies to exist on
a system.
It is possible that a system's dependency structure can be so corrupt as to
require manual intervention. Usually this means using dselect
or
dpkg --remove packagename
to eliminate some of the offending packages, or
apt-get --fix-broken --show-upgraded install dpkg --configure --pending
In extreme cases you might have to force re-installation with a command like
dpkg --install /path/to/packagename.deb
After these things, you should be able to resume the upgrade using the previously described dist-upgrade commands.
During the upgrade, you will be asked questions to configure or re-configure
several packages. When/if you are asked if any file in the
/etc/init.d
or /etc/terminfo
directories, or the
/etc/manpath.config
file should be replaced by the package
maintainer's version, it's usually necessary to answer `yes' to ensure system
consistency. You can always revert to the old versions, since they will be
saved with a .dpkg-old
extension.
If you're not sure what to do, write down the name of the package or file, and sort things out on a later time. You can search in the typescript to re-view the information that was on the screen during the upgrade.
When apt-get dist-upgrade is done, the "formal" upgrade is finished, but there are some other things that should be taken care of before the next reboot.
Most importantly, packages locales
and util-linux
may
need to be installed. This can be done with:
apt-get install locales util-linux
If you were upgrading from Debian version 2.0 or earlier, this will remove the
getty
package, because getty
is now in the
util-linux
package.
There probably are several more packages that need to be installed, that are
not noticed by apt-get
, because apt-get
doesn't
automatically select the packages that aren't depended on by other packages
(e.g. all packages in Recommends: and Suggests: fields). These can quite
easily be found when using dselect
or another visual frontend. In
dselect
, pick the `apt' method in the [A]ccess screen (if you
haven't already) and update the database with new packages information, using
the [U]pdate screen. After that, in [S]elect screen, press `o', `o', `v' and
Shift-d, and then search for the
--- Obsolete and local packages present on system ---
header. In that section, all such packages will be shown. For example, the
old gimp-smotif
and gimp-dmotif
packages were
replaced by gimp
in Debian GNU/Linux 2.1. You can either install
the new package via dselect
(which will then show a
"dependency conflict resolution" screen indicating that the old
packages should be removed), or by using:
apt-get install gimp
which will remove the older versions at once (you might just need to confirm).
Another example, that is not shown even in dselect
, are the telnet
and talk clients and servers, and the NFS server, which were split off from the
old netstd
package. You can install them with a command like:
apt-get install telnet telnetd talk talkd nfs-server
The same applies to manpages-dev
, which was split off from
manpages
.
Please refer to the Release Notes document for Debian GNU/Linux 2.1 for more information about those packages that were split in that release; go back and read Renamed packages, Section 3.1.1 and Split packages, Section 3.1.2 to see the list of packages split in this release.
If you were upgrading from Debian version 2.0 or earlier, AND have the X Window System installed, give the following commands:
cp /usr/doc/xbase/README.Debian /root/xbase.README.Debian apt-get remove xbase apt-get install xfonts-base xfonts-75dpi xfonts-100dpi xfonts-scalable
And if you don't want xdm
to start at boot time ("X
autostart"), also run:
apt-get remove xdm
You can read the just copied /root/xbase.README.Debian
for more
info, but you probably don't have to do anything else.
The configuration system for the kernel modules has changed since Debian
GNU/Linux release 2.0. If you upgraded from Debian 2.0 or earlier, you must
convert your system before the next reboot. Usually running
update-modules force will be enough; nevertheless reading the
update-modules(8)
manual page is recommended.
Then, if you were upgrading from a Debian GNU/Linux version 1.x (i.e. lower
than 2.0), the old system was using the `libc5' library, while the upgraded
system uses the `libc6' version. The new library has a changed the format for
the utmp
and wtmp
files; you can check this by trying
the last
command. To solve this, a reboot is necessary, but first
copy the old file and empty the existing ones, with these commands:
cd /var/log mv wtmp wtmp.libc5 touch wtmp cd /var/run cp /dev/null utmp
Then reboot the system (note: this is not necessary for upgrades from
Debian release 2.0 and higher!). Once rebooted, the last
command
will show correct data again.
Note that the Linux kernel was not upgraded by these procedures. You
may wish to do so yourself, either by installing one of the
kernel-image-*
packages or by compiling a customized kernel from
sources.
Enjoy your new Debian GNU/Linux 2.2 system! :-)
debian-doc@lists.debian.org