4.1. Preparing for the upgrade

We suggest that before upgrading you also read the information in Chapter 5, Issues to be aware of for lenny. That chapter covers potential issues not directly
related to the upgrade process but which could still be important to know about
before you begin.

4.1.1. Back up any data or configuration information

Before upgrading your system, it is strongly recommended that you make a full
backup, or at least back up 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 back up are the contents of
/etc, /var/lib/dpkg,
/var/lib/aptitude/pkgstates and the output of
dpkg --get-selections "*" (the quotes are important).

The upgrade process itself does not modify anything in the
/home directory. However, some applications (e.g. parts
of the Mozilla suite, and the GNOME and KDE desktop environments) are known to
overwrite existing user settings with new defaults when a new version of the
application is first started by a user. As a precaution, you may want to make
a backup of the hidden files and directories (“dotfiles”) in users' home
directories. This backup may help to restore or recreate the old settings.
You may also want to inform users about this.

Any package installation operation must be run with superuser privileges, so
either log in as root or use su or sudo to
gain the necessary access rights.

The upgrade has a few preconditions; you should check them before actually
executing the upgrade.

4.1.1.1. Make sure you are on a suitable kernel

lenny's version of glibc will not work with kernels older
than 2.6.8 on any architecture and some
architectures have higher requirements. We strongly recommend that
you upgrade to and test an etch
2.6.18 or 2.6.24 kernel or a
custom kernel of at least version 2.6.18 before
beginning the upgrade process.

4.1.2. Inform users in advance

It's wise to inform all users in advance of any upgrades you're planning,
although users accessing your system via an ssh connection
should notice little during the upgrade, and should be able to continue
working.

If you wish to take extra precautions, back up or unmount the
/home partition before upgrading.

You will probably have to do a kernel upgrade when upgrading to lenny, so a
reboot will normally be necessary. Typically, this will be done after the
upgrade is finished.

4.1.3. Prepare for recovery

Because of the many changes in the kernel between etch and lenny regarding
drivers, hardware discovery and the naming and ordering of device files, there
is a real risk that you may experience problems rebooting your system after the
upgrade. A lot of known potential issues are documented in this and the next
chapters of these Release Notes.

For that reason it makes sense to ensure that you will be able to recover if
your system should fail to reboot or, for remotely managed systems, fail to
bring up networking.

If you are upgrading remotely via an ssh link it is highly
recommended that you take the necessary precautions to be able to access the
server through a remote serial terminal. There is a chance that, after
upgrading the kernel and rebooting, some devices will be renamed (as described
in Section 4.6.2, “Device enumeration reordering” ) and you will have to fix the system
configuration through a local console. Also, if the system is rebooted
accidentally in the middle of an upgrade there is a chance you will need to
recover using a local console.

The most obvious thing to try first is to reboot with your old kernel.
However, for various reasons documented elsewhere in this document, this is not
guaranteed to work.

If that fails, you will need an alternative way to boot your system so you can
access and repair it. One option is to use a special rescue image or a Linux
live CD. After booting from that, you should be able to mount your root file
system and chroot into it to investigate and fix the
problem.

Another option we'd like to recommend is to use the rescue
mode of the lenny Debian Installer. The advantage of using the
installer is that you can choose between its many installation methods for one
that best suits your situation. For more information, please consult the
section “Recovering a Broken System” in chapter 8 of the Installation
Guide and the Debian Installer FAQ.

4.1.3.1. Debug shell during boot using initrd

The initramfs-tools includes a debug
shell[2] in the
initrds it generates. If for example the initrd is unable to mount your root
file system, you will be dropped into this debug shell which has basic commands
available to help trace the problem and possibly fix it.

Basic things to check are: presence of correct device files in
/dev; what modules are loaded (cat
/proc/modules); output of dmesg for errors loading
drivers. The output of dmesg will also show what device
files have been assigned to which disks; you should check that against the
output of echo $ROOT to make sure that the root file system
is on the expected device.

If you do manage to fix the problem, typing exit will quit
the debug shell and continue the boot process at the point it failed. Of
course you will also need to fix the underlying problem and regenerate the
initrd so the next boot won't fail again.

4.1.4. Prepare a safe environment for the upgrade

The distribution upgrade should be done either locally from a textmode virtual
console (or a directly connected serial terminal), or remotely via an
ssh link.

In order to gain extra safety margin when upgrading remotely, we suggest that
you run upgrade processes in the virtual console provided by the
screen program, which enables safe reconnection and ensures
the upgrade process is not interrupted even if the remote connection process
fails.

Important

You should not upgrade using telnet,
rlogin, rsh, or from an X
session managed by xdm, gdm
or kdm etc 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.

4.2. Checking system status

The upgrade process described in this chapter has been designed for upgrades
from “pure” etch systems without third-party packages.
For the greatest reliability of the
upgrade process, you may wish to remove third-party packages from your system
before you begin upgrading.

4.2.1. Review actions pending in package manager

In some cases, the use of apt-get for installing packages
instead of aptitude might make aptitude
consider a package as “unused” and schedule it for removal. In general, you
should make sure the system is fully up-to-date and “clean” before proceeding
with the upgrade.

Because of this you should review if there are any pending actions in the
package manager aptitude. If a package is scheduled for
removal or update in the package manager, it might negatively impact the
upgrade procedure. Note that correcting this is only possible if your
sources.list still points to etch
and not to stable or lenny; see Section A.2, “Checking your sources list”.

To perform this review, launch aptitude in “visual mode” and
press g (“Go”). If it shows any actions, you should review them and either fix
them or implement the suggested actions. If no actions are suggested you will
be presented with a message saying “No packages are scheduled to be installed,
removed, or upgraded”.

4.2.2. Disabling APT pinning

If you have configured APT to install certain packages from a distribution
other than stable (e.g. from testing), you may have to change your APT pinning
configuration (stored in /etc/apt/preferences) to allow
the upgrade of packages to the versions in the new stable release. Further
information on APT pinning can be found in apt_preferences(5).

4.2.3. Checking packages status

Regardless of the method used for upgrading, it is recommended that you check
the status of all packages first, and verify that all packages are in an
upgradable state. The following command will show any packages which have a
status of Half-Installed or Failed-Config, and those with any error status.

# dpkg --audit

You could also inspect the state of all packages on your system using
dselect, aptitude, or with commands such
as

# dpkg -l | pager

or

# dpkg --get-selections "*" > ~/curr-pkgs.txt

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.

Note that aptitude uses a different method for registering
packages that are on hold than apt-get and
dselect. You can identify packages on hold for
aptitude with

# aptitude search "~ahold" | grep "^.h"

If you want to check which packages you had on hold for
apt-get, you should use

# dpkg --get-selections | grep hold

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.

4.2.4. The proposed-updates section

If you have listed the proposed-updates section
in your /etc/apt/sources.list file, you
should remove it from that file before attempting to upgrade your
system. This is a precaution to reduce the likelihood of
conflicts.

4.2.5. Unofficial sources and backports

If you have any non-Debian packages on your system, you should be aware that
these may be removed during the upgrade because of conflicting dependencies.
If these packages were installed by adding an extra package archive in your
/etc/apt/sources.list, you should check if that archive
also offers packages compiled for lenny and change the source line accordingly
at the same time as your source lines for Debian packages.

Some users may have unofficial backported “newer” versions of packages that
are in Debian installed on their etch system. Such
packages are most likely to cause problems during an upgrade as they may result
in file conflicts[3].
Section 4.5.8, “Possible issues during upgrade” has some information on how to deal with file
conflicts if they should occur.

4.2.5.1. Using backports.org packages

backports.org is a semi-official repository
provided by Debian GNU/Linux developers, which provides newer packages for
the stable release, based on a rebuild from the packages from the
“testing” archive.

The backports.org repository mainly contains packages
from “testing”, with reduced version numbers
so that the upgrade path from etch backports to
lenny still works. However, there are a few backports
which are made from unstable: security updates, plus the following
exceptions: Firefox, the Linux kernel, OpenOffice.org, and X.Org.

If you do not use one of these exceptions, you can safely upgrade
to lenny. If you use one of these exceptions, set the
Pin-Priority (see apt_preferences(5))
temporarily to 1001 for all packages from lenny,
and you should be able to do a safe dist-upgrade too.

4.3. Manually unmarking packages

To prevent aptitude from removing some packages that were
pulled in through dependencies, you need to manually unmark them as
auto packages. This includes OpenOffice and Vim for
desktop installs:

# aptitude unmarkauto openoffice.org vim

And 2.6 kernel images if you have installed them using a kernel metapackage:

# aptitude unmarkauto $(dpkg-query -W 'linux-image-2.6.*' | cut -f1)

Note

You can review which packages are marked as auto in
aptitude by running:

# aptitude search '~i~M'

4.4. Preparing sources for APT

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 line in the
file (thus where you have multiple mirror locations, you'd typically first name a local
hard disk, then CD-ROMs, and then HTTP/FTP mirrors).

Tip

You might need to add an GPG checking exception
for DVDs and CD-ROMs. Add
the following line to /etc/apt/apt.conf, if
it's not already in
/etc/apt/apt.conf.d/00trustcdrom:

APT::Authentication::TrustCDROM "true";

This does not work with
DVD/CD-ROM image files,
however.

A release can often be referred to both by its codename (e.g.
etch, lenny) and by
its status name (i.e. oldstable, stable,
testing, unstable). Referring to
a release by its codename has the advantage that you will never be surprised by
a new release and for this reason is the approach taken here. It does of
course mean that you will have to watch out for release announcements yourself.
If you use the status name instead, you will just see loads of updates for
packages available as soon as a release has happened.

4.4.1. Adding APT Internet sources

The default configuration is set up for installation from main Debian 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.

Debian HTTP or FTP mirror addresses can be found at http://www.debian.org/distrib/ftplist (look at the “list of Debian
mirrors” section). HTTP mirrors are generally speedier than FTP mirrors.

For example, suppose your closest Debian mirror is
http://mirrors.kernel.org. When inspecting that
mirror with a web browser or FTP program, you will notice that the main
directories are organized like this:

Note that the `dists' is added implicitly, and the arguments
after the release name are used to expand the path into multiple directories.

After adding your new sources, disable the previously existing
“deb” lines in sources.list by placing a
hash sign (#) in front of them.

4.4.3. Adding APT source from CD-ROM or DVD

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 must 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.

4.5. Upgrading packages

The recommended way to upgrade from previous Debian GNU/Linux releases is to
use the package management tool aptitude. This program
makes safer decisions about package installations than running
apt-get directly.

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

Next you should double-check that the APT source entries (in
/etc/apt/sources.list) refer either to
“lenny” or to “stable”. There should not be
any sources entries pointing to etch.

Note

Source lines for a CD-ROM will often refer to
“unstable”; although this may be confusing, you
should not change it.

4.5.1. Recording the session

It is strongly recommended that you use the /usr/bin/script
program to record a transcript of the upgrade session. Then if a problem
occurs, you will have a log of what happened, and if needed, can provide exact
information in a bug report. To start the recording, type:

# script -t 2>~/upgrade-lenny.time -a ~/upgrade-lenny.script

or similar. Do not put the typescript file in a temporary directory such as
/tmp or /var/tmp (files in those
directories may be deleted during the upgrade or during any restart).

The typescript will also allow you to review information that has scrolled
off-screen. Just switch to VT2 (using
Alt+F2)
and, after logging in, use
less -R ~root/upgrade-lenny.script to view
the file.

After you have completed the upgrade, you can stop script by
typing exit at the prompt.

If you have used the -t switch for
script you can use the scriptreplay
program to replay the whole session:

# scriptreplay ~/upgrade-lenny.time ~/upgrade-lenny.script

4.5.2. Updating the package list

First the list of available packages for the new release needs to be fetched.
This is done by executing:

# aptitude update

Running this the first time new sources are updated will print out some
warnings related to the availability of the sources. These warnings are
harmless and will not appear if you rerun the command again.

4.5.3. Make sure you have sufficient space for the upgrade

You have to make sure before upgrading your system that you have sufficient
hard disk space when you start the full system upgrade described in Section 4.5.7, “Upgrading the rest of the system”. First, any package needed for installation that
is fetched from the network is stored in
/var/cache/apt/archives (and the
partial/ subdirectory, during download), so you must make
sure you have enough space on the file system partition that holds
/var/ to temporarily download the packages that will be
installed in your system. After the download, you will probably need more
space in other file system partitions in order to both install upgraded
packages (which might contain bigger binaries or more data) and new packages
that will be pulled in for the upgrade. If your system does not have
sufficient space you might end up with an incomplete upgrade that might be
difficult to recover from.

Both aptitude and apt will show you
detailed information of the disk space needed for the installation. Before
executing the upgrade, you can see this estimate by running:

Running this command at the beginning of the upgrade process
may give an error, for the reasons described in the next sections. In that
case you will need to wait until you've done the minimal system upgrade as in
Section 4.5.6, “Minimal system upgrade” and upgraded your kernel
before running this command to estimate the disk
space.

If you do not have enough space for the upgrade, make sure you free up space
beforehand. You can:

Remove packages that have been previously downloaded for installation (at
/var/cache/apt/archives). Cleaning up the package cache by
running apt-get clean or aptitude clean
will remove all previously downloaded package files.

Remove forgotten packages. If you have
popularity-contest installed, you can use
popcon-largest-unused to list the packages you do not use
that occupy the most space. You can also use
deborphan or debfoster to find obsolete
packages (see Section 4.10, “Obsolete packages” ). Alternatively you can start
aptitude in “visual mode” and find obsolete packages under
“Obsolete and Locally Created Packages”.

Remove packages that take up too much space and are not currently
needed (you
can always reinstall them after the upgrade). You can list the packages that
take up the most disk space with dpigs (available in the
debian-goodies package) or with
wajig (running wajig size).

You can list packages that take up most of the disk space with
aptitude. Start
aptitude into “visual mode”,
select Views → New Flat Package
List (this menu entry is available only after etch
version), press l and enter ~i, press
S and enter ~installsize, then it
will give you nice list to work with. Doing this after upgrading
aptitude should give you
access to this new feature.

Remove translations and localization files from the system if they
are not needed. You can install the localepurge package and configure it so
that only a few selected locales are kept in the system. This will
reduce the disk space consumed at
/usr/share/locale.

Temporarily move to another system, or permanently remove, system logs residing
under /var/log/.

Use a temporary /var/cache/apt/archives: You
can use a temporary cache directory from another filesystem
(USB storage device, temporary hard disk,
filesystem already in use, ...)

Note

Do not use an NFS mount as the network
connection could be interrupted during the upgrade.

For example, if you have a USB drive mounted on /media/usbkey:

remove the packages that have been previously downloaded for
installation:

# apt-get clean

copy the directory
/var/cache/apt/archives to the
USB drive:

# cp -ax /var/cache/apt/archives /media/usbkey/

mount the temporary cache directory on the current one:

# mount --bind /media/usbkey/archives /var/cache/apt/archives

after the upgrade, restore the original
/var/cache/apt/archives directory:

# umount /media/usbkey/archives

remove the remaining /media/usbkey/archives.

You can create the temporary cache directory on whatever filesystem
is mounted on your system.

4.5.4. Upgrade apt and/or aptitude first

Several bug reports have shown that the versions of the aptitude and apt packages in etch are often unable to
handle the upgrade to lenny. In lenny, apt is better at dealing with complex chains
of packages requiring immediate configuration and aptitude is smarter at searching for
solutions to satisfy the dependencies. These two features
are heavily involved during the dist-upgrade to lenny, so it
is necessary to upgrade these two packages before upgrading
anything else.

The following command will upgrade both aptitude and apt:

# aptitude install aptitude apt dpkg

This step will also automatically upgrade libc6 and locales. At this point, some
running services will be restarted, including xdm,
gdm and kdm. As a consequence, local X11
sessions might be disconnected.

Upgrading with apt

Please note that using apt-get is not recommended for
the upgrade from etch to lenny. If you
do not have aptitude installed
you are recommended to install it first.

If you want to perform the upgrade with apt or if the upgrade with aptitude failed and you want to try the
upgrade with apt'
dependency chain resolution algorithm, you should run:

# apt-get install apt

Note that you will have to adapt other aptitude
commands to use apt-get instead.

4.5.5. Using aptitude's list of automatically-installed packages with apt

aptitude maintains a list
of packages that were installed automatically (for instance, as
dependencies of another package). In lenny, apt now has this feature as well.

The first time the lenny version of aptitude is run, it will read in its
list of automatically installed packages and convert it for use
with the lenny version of apt. If you have aptitude installed, you should at
least issue one aptitude
command to do the conversion. One way to do this is by searching for
a non-existent package:

# aptitude search "?false"

4.5.6. Minimal system upgrade

Because of certain necessary package conflicts between etch and lenny, running
aptitude dist-upgrade directly will often remove large
numbers of packages that you will want to keep. We therefore recommend a
two-part upgrade process, first a minimal upgrade to overcome these conflicts,
then a full dist-upgrade.

First, run:

# aptitude safe-upgrade

This has the effect of upgrading those packages which can be upgraded without
requiring any other packages to be removed or installed.

The next step will vary depending on the set of packages that you have
installed. These release notes give general advice about which method should
be used, but if in doubt, it is recommended that you examine the package
removals proposed by each method before proceeding.

Some common packages that are expected to be removed include base-config, hotplug, xlibs, netkit-inetd, python2.3, xfree86-common, and xserver-common. For more information about
packages obsoleted in lenny, see Section 4.10, “Obsolete packages”.

4.5.7. Upgrading the rest of the system

You are now ready to continue with the main part of the upgrade. Execute:

# aptitude 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 (or DVDs), 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”). This can be resolved by either using
aptitude to choose these packages for installation or by
trying aptitude -f install
package.

4.5.8. Possible issues during upgrade

If an operation using aptitude, apt-get,
or dpkg fails with the error

E: Dynamic MMap ran out of room

the default cache space is insufficient. You can solve this by either removing
or commenting lines you don't need in
/etc/apt/sources.list or increasing the cache size.
The cache size can be increased by setting APT::Cache-Limit
in /etc/apt/apt.conf. The following command will set it
to a value that should be sufficient for the upgrade:

# echo 'APT::Cache-Limit "12500000";' >> /etc/apt/apt.conf

This assumes that you do not yet have this variable set in that file.

Sometimes it's necessary to enable the APT::Force-LoopBreak
option in APT to be able to temporarily remove an essential package due to a
Conflicts/Pre-Depends loop. aptitude will alert you of this
and abort the upgrade. You can work around this by specifying the option -o
APT::Force-LoopBreak=1 on the aptitude command
line.

It is possible that a system's dependency structure can be so corrupt as to
require manual intervention. Usually this means using
aptitude or

# dpkg --remove package_name

to eliminate some of the offending packages, or

# aptitude -f install
# dpkg --configure --pending

In extreme cases you might have to force re-installation with a command like

# dpkg --install /path/to/package_name.deb

File conflicts should not occur if you upgrade from a “pure” etch system, but
can occur if you have unofficial backports installed. A file conflict will
result in an error like:

You can try to solve a file conflict by forcibly removing the package mentioned
on the last line of the error message:

# dpkg -r --force-depends package_name

After fixing things up, you should be able to resume the upgrade by repeating
the previously described aptitude commands.

During the upgrade, you will be asked questions regarding the configuration or
re-configuration of several packages. When 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 at a later time. You can search in the typescript file to
review the information that was on the screen during the upgrade.

4.6. Upgrading your kernel and related packages

This section explains how to upgrade your kernel and identifies potential
issues related to this upgrade. You can either install one of the linux-image-* packages provided by Debian, or
compile a customized kernel from source.

Note that a lot of information in this section is based on the assumption that
you will be using one of the modular Debian kernels, together with initramfs-tools and udev. If you choose to use a custom kernel that
does not require an initrd or if you use a different initrd generator, some of
the information may not be relevant for you.

4.6.1. Installing the kernel metapackage

When you dist-upgrade from etch to lenny, it is strongly recommended that you
install a new linux-image-2.6-* metapackage. This package may be installed
automatically by the dist-upgrade process. You can verify this by running:

# dpkg -l "linux-image*" | grep ^ii

If you do not see any output, then you will need to install a new linux-image
package by hand. To see a list of available linux-image-2.6 metapackages, run:

# apt-cache search linux-image-2.6- | grep -v transition

If you are unsure about which package to select, run uname
-r and look for a package with a similar name. For example, if you
see '2.6.18-6-686', it is recommended that you install linux-image-2.6-686. (Note that the k7 flavor no
longer exists; if you are currently using the k7 kernel flavor, you should
install the 686 flavor instead.) You may also use apt-cache
to see a long description of each package in order to help choose the best one
available. For example:

# apt-cache show linux-image-2.6-686

You should then use aptitude install to install it. Once
this new kernel is installed you should reboot at the next available
opportunity to get the benefits provided by the new kernel version.

For the more adventurous there is an easy way to compile your own custom kernel
on Debian GNU/Linux. Install the kernel-package tool and read the documentation in
/usr/share/doc/kernel-package.

If possible, it is to your advantage to upgrade the kernel package separately
from the main dist-upgrade to reduce the chances of a
temporarily non-bootable system.
Note that this should only be done after the
minimal upgrade process described in Section 4.5.6, “Minimal system upgrade”.

4.6.2. Device enumeration reordering

lenny features a more robust mechanism for hardware discovery than previous
releases. However, this may cause changes in the order devices are discovered
on your system, affecting the order in which device names are assigned. For
example, if you have two network adapters that are associated with two
different drivers, the devices eth0 and eth1 refer to may be swapped. Please
note that the new mechanism means that if you e.g. exchange ethernet adapters
in a running lenny system, the new adapter will also get a new interface name.

For network devices, you can avoid this reordering by using udev rules, more specifically, through the
definitions at
/etc/udev/rules.d/70-persistent-net.rules[4]. Alternatively you can
use the ifrename utility to bind physical devices to
specific names at boot time. See ifrename(8) and iftab(5) for more information. The two
alternatives (udev and
ifrename) should not be used at the same time.

For storage devices, you can avoid this reordering by using initramfs-tools and configuring it to load storage
device driver modules in the same order they are currently loaded. To do this,
identify the order the storage modules on your system were loaded by looking at
the output of lsmod. lsmod lists modules
in the reverse order that they were loaded in, i.e., the first module in the
list was the last one loaded. Note that this will only work for devices which
the kernel enumerates in a stable order (like PCI devices).

However, removing and reloading modules after initial boot will affect this
order. Also, your kernel may have some drivers linked statically, and these
names will not appear in the output of lsmod. You may be
able to decipher these driver names and load order from looking at
/var/log/kern.log, or the output of
dmesg.

Add these module names to /etc/initramfs-tools/modules in
the order they should be loaded at boot time. Some module names may have
changed between etch and lenny. For example, sym53c8xx_2 has become sym53c8xx.

You will then need to regenerate your initramfs image(s) by executing
update-initramfs -u -k all.

Once you are running a lenny kernel and udev, you may reconfigure your system to access
disks by an alias that is not dependent upon driver load order. These aliases
reside in the /dev/disk/ hierarchy.

4.6.3. Boot timing issues

If an initrd created with initramfs-tools is used to boot the system, in some
cases the creation of device files by udev can happen too late for the boot scripts to
act on.

The usual symptoms are that the boot will fail because the root file system
cannot be mounted and you are dropped into a debug shell. But if you
check afterwards, all devices that are needed are present in
/dev. This has been observed in cases where the root file
system is on a USB disk or on RAID, especially if LILO is used.

A workaround for this issue is to use the boot parameter
rootdelay=9. The value for the
timeout (in seconds) may need to be adjusted.

4.7. Things to do before rebooting

When aptitude dist-upgrade has finished, the “formal” upgrade
is complete, but there are some other things that should be taken care of
before the next reboot.

4.7.1. Rerun lilo

If you are using lilo as your
bootloader (it is the default bootloader for some installations of etch) it is
strongly recommended that you rerun lilo after the upgrade:

# /sbin/lilo

Notice this is needed even if you did not upgrade your system's kernel, as
lilo's second stage will change due to the package upgrade.

Also, review the contents of your /etc/kernel-img.conf and
make sure that you have do_bootloader = Yes in it. That
way the bootloader will always be rerun after a kernel upgrade.

If you encounter any issues when running lilo, review the
symbolic links in / to vmlinuz and
initrd and the contents of your
/etc/lilo.conf for discrepancies.

If you forgot to rerun lilo before the reboot or the system
is accidentally rebooted before you could do this manually, your system might
fail to boot. Instead of the lilo prompt, you will only see
LI when booting the system[5]. See Section 4.1.3, “Prepare for recovery” for
information on how to recover from this.

4.8. System boot hangs on Waiting for root file
system

Procedure to recover from /dev/hda
that became /dev/sda

Some users have reported that an upgrade could cause the kernel
not to find the system root partition after a system reboot.

In such case, the system boot will hang on the following message:

Waiting for root file system ...

and after a few seconds a bare busybox prompt will appear.

This problem can occur when the upgrade of the kernel introduces
the use of the new generation of IDE
drivers. The IDE disk naming convention for the
old drivers was hda, hdb,
hdc, hdd. The new drivers
will name the same disks respectively sda,
sdb, sdc,
sdd. The problem appears when the upgrade does
not generate a new /boot/grub/menu.lst file
to take the new naming convention into account. During the boot,
Grub will pass a system root partition to the kernel that the
kernel doesn't find.

4.8.1. How to avoid the problem before upgrading

One can avoid this problem entirely by using an identifier for
the root filesystem that does not change from one boot to the
next. There are two possible methods for doing this - labeling
the filesystem, or using the filesystem's universally unique
identifier (UUID). These methods are
supported in Debian since the 'etch' release.

The two approaches have advantages and disadvantages. The
labeling approach is more readable, but there may be problems
if another filesystem on your machine has the same label. The
UUID approach is uglier, but having two clashing UUIDs is highly
unlikely.

For the examples below we assume the root filesystem is on
/dev/hda6. We also assume your system has a
working udev installation and ext2 or ext3 filesystems.

To implement the labeling approach:

Label the filesystem (the name must be < 16 characters)
by running the command:
e2label /dev/hda6 rootfilesys

Edit /boot/grub/menu.lst and change the line:

# kopt=root=/dev/hda6 ro

to

# kopt=root=LABEL=rootfilesys ro

Note

Do not remove the # at the start of
the line, it needs to be there.

Update the kernel lines in
menu.lst by running the command
update-grub.

Edit /etc/fstab and change the line
that mounts the / partition, e.g.:

/dev/hda6 / ext3 defaults,errors=remount-ro 0 1

to

LABEL=rootfilesys / ext3 defaults,errors=remount-ro 0 1

The change that matters here is the first column, you
don't need to modify the other columns of this line.

The change that matters here is the first column, you
don't need to modify the other columns of this line.

4.8.2. How to recover from the problem after the upgrade

4.8.2.1. Solution 1

This is applicable when Grub shows you the menu interface for
selecting the entry you want to boot from. If such a menu does
not appear, try pressing the Esc key before the
kernel boots in order to make it appear. If you can't get
into this menu, try Section 4.8.2.2, “Solution 2” or Section 4.8.2.3, “Solution 3”.

In the Grub menu, highlight the entry you want to boot
from. Press the e key to edit the options
related to this entry. You will see something like:

press the e key and replace
hdX with
sdX
(X being the letter
a, b,
c or d depending of
your system). In my example the line becomes:

kernel /vmlinuz-2.6.26-1-686 root=/dev/sda6 ro

Then press Enter to save the
modification. If other lines show
hdX, change
these line too. Don't modify the entry similar to
root (hd0,0). Once all modifications
are done, press the b key. And your system
should now boot as usual.

4.8.2.2. Solution 2

Boot from Debian GNU/Linux installation media
(CD/DVD) and when
prompted, pick rescue to launch rescue
mode. Select your language, location, and keyboard mapping; then let it
configure the network (no matter whether it succeeds or not). After a
while, you should be asked to select the partition you want
to use as root file system. The proposed choices will look
something like:

If you know which partition is your root file system, choose
the appropriate one. If you don't, just try with the first. If it
complains about an invalid root file system partition, try the
next one, and so on. Trying one after the other shouldn't harm
your partitions and if you have only one operating system installed on
your disks, you should easily find the right root file system
partition. If you have many operating systems installed on your disks,
it would be better to know exactly which is the right
partition.

Once you have chosen a partition, you will be offered a range
of options. Pick the option of executing a shell in the
selected partition. If it complains that it cannot do that
then try with another partition.

Now you should have shell access as user root on your root
file system mounted on /target. You need access
to the contents of the /boot, /sbin
and /usr directories on your hard disk,
which should now be available under
/target/boot,
/target/sbin and
/target/usr. If these
directories need to be mounted from other partitions, do so
(see /etc/fstab if you have no idea of
which partition to mount).

4.8.2.3. Solution 3

Mount the partition where your /boot
directory is. If you don't know which one it is, use the
output of the command dmesg to find
whether your disk is known as hda,
hdb, hdc,
hdd or sda,
sdb, sdc,
sdd. Once you know which disk to work
on, for example sdb, issue the
following command to see the partition table of the disk
and to find the right partition:
fdisk -l /dev/sdb

Assuming that you have mounted the right partition under
/mnt and that this partition contains
the /boot directory and its content,
edit the /mnt/boot/grub/menu.lst
file.

4.9. Preparing for the next release

After the upgrade there are several things you can do to prepare for the next
release.

If the new kernel image metapackage was pulled in as a dependency of the old
one, it will be marked as automatically installed, which should be corrected:

# aptitude unmarkauto $(dpkg-query -W 'linux-image-2.6-*' | cut -f1)

Remove obsolete and unused packages as described in Section 4.10, “Obsolete packages”.
You should review which configuration files they use and consider purging
the packages to remove their configuration files.

4.10. Obsolete packages

Introducing several thousand new packages, lenny also retires and omits more
than two thousand old packages that were in etch. It provides no upgrade path
for these obsolete packages. While nothing prevents you from continuing to use
an obsolete package where desired, the Debian project will usually discontinue
security support for it a year after lenny's release[6], and will
not normally provide other support in the meantime. Replacing them with
available alternatives, if any, is recommended.

There are many reasons why packages might have been removed from the
distribution: they are no longer maintained upstream; there is no longer a
Debian Developer interested in maintaining the packages; the functionality they
provide has been superseded by different software (or a new version); or they
are no longer considered suitable for lenny due to bugs in them. In the latter
case, packages might still be present in the “unstable” distribution.

Detecting which packages in an updated system are “obsolete” is easy since the
package management front-ends will mark them as such. If you are using
aptitude, you will see a listing of these packages in the
“Obsolete and Locally Created Packages” entry. dselect
provides a similar section but the listing it presents might differ.

Also, if
you have used aptitude to manually install packages in etch
it will have kept track of those packages you manually installed and will be
able to mark as obsolete those packages pulled in by dependencies alone which
are no longer needed if a package has been removed. Also,
aptitude, unlike deborphan will not mark
as obsolete packages that you manually installed, as opposed to those that were
automatically installed through dependencies.

There are additional tools you can use to find obsolete packages such as
deborphan, debfoster or
cruft. deborphan is highly recommended,
although it will (in default mode) only report obsolete libraries: packages in
the “libs” or “oldlibs” sections that are not used by any other packages. Do not
blindly remove the packages these tools present, especially if you are using
aggressive non-default options that are prone to produce false positives. It
is highly recommended that you manually review the packages suggested for
removal (i.e. their contents, size and description) before you remove them.

4.10.1. Dummy packages

Some packages from etch have been split into several packages in lenny, often
to improve system maintainability. To ease the upgrade path in such cases,
lenny often provides “dummy” packages: empty packages that have the same name as
the old package in etch with dependencies that cause the new packages to be
installed. These “dummy” packages are considered obsolete packages after the
upgrade and can be safely removed.

Most (but not all) dummy packages' descriptions indicate their purpose.
Package descriptions for dummy packages are not uniform, however, so you might
also find deborphan with the --guess
options useful to detect them in your system. Note that some dummy packages
are not intended to be removed after an upgrade but are, instead, used to keep
track of the current available version of a program over time.

[2] This feature can be disabled by adding the parameter
panic=0 to your boot parameters.

[3] Debian's package management system normally
does not allow a package to remove or replace a file owned by another package
unless it has been defined to replace that package.

[4]
The rules there are automatically generated by the script
/etc/udev/rules.d/75-persistent-net-generator.rules to
have persistent names for network interfaces. Delete this symlink to disable
persistent device naming for NICs by udev.