Read the disclaimer first. Performing some operations listed here may
leave you with an unbootable system. Make a backup first.
Linux is in the middle of a transition.
If you installed Debian using an x86 sarge CD (or older),
you may experience a couple of
issues if you were to install any program from 'stable' 'testing' or 'unstable' that
also installs the newest version of libc6 as a dependency.
This assumes upgrading libc6 will also upgrade the kernel (or remove it!), which has been true in
the past but may or may not be true at the moment.
If you used an etch CD to install Debian, these instructions do not apply to you.
Newer versions of Debian (etch for example) use a newer Linux kernel which uses
for management of devices. These device managers work in
different ways from each other, and only one can be used. Part of the kernel is
in the form of an initialization ramdisk image. The older kernels use programs from
'initrd-tools' to create the ramdisk, and newer kernels make use of programs
included in 'initramfs-tools' or 'yaird' (Yet Another mkInitRD). Although
its use is deprecated, it appears initrd-tools can still be used with newer
kernels to build an initrd.img provided a version more
recent than the one supplied with sarge is used (but I admit I'm not
absolutely certain this statement is accurate). Since the kernel
and one or the other of these tools depend on each other, installing an etch, lenny or sid
version of libc6 may try to remove the sarge 'oldstable' version of initrd-tools because
it is not compatible. Subsequently an attempt to remove the kernel may also be
made. Simply removing the kernel is of course not acceptable, so we need to
find a way to fix this situation.
There are three different ways to solve this problem. One options is to simply
never use programs compiled with the new version of libc6 and never upgrade
to a new linux-image kernel (the old kernels are called kernel-image). At least
not until you are ready to upgrade to etch that is. The
last kernel-image(s) were 2.4.27 and 2.6.8. This means either stay with programs
strictly from 'oldstable', and possibly from
(and clamav from
and never install programs from 'stable' 'testing' or
'unstable' that depend on the new version of libc6. Not all programs rely on a
newer libc6, so this does not mean you cannot install any programs from these
sources, but it does mean you should always test to see if a new program you
are installing wants to upgrade libc6 (and remove or upgrade your kernel).
To test, simply first 'simulate' the
installation with the '-s' argument, e.g.: 'apt-get -s <...>'. It's always a good idea
to do so anyway.
A second option to prevent problems is to install initrd-tools from
'stable' (actually, an older 'testing' version you get from me) just prior to upgrading
the kernel. Doing so may prevent a libc6
or kernel upgrade from trying to remove the kernel.
This does not necessarily prevent a kernel upgrade and migration to udev when libc6
is upgraded however. The
third option is to preemptively upgrade the kernel to one of the newer linux-image kernels. Since
the newer kernels use udev, this means your system will go through some
somewhat radical changes. In some cases devices that used to work may no longer
be detected and it is not impossible that some manual intervention may be needed
to get the system to recognize them (for example, some devices may need to be manually
created during boot up). If you are using RAID I cannot
recommend upgrading from one of the older kernel-image kernels to one of the new linux-image kernels.
Doing so may leave you with an
unbootable system. Kernel upgrades on a RAID system (other that security updates)
are generally not a good idea in my opinion. If you need RAID and you intend on
upgrading the kernel in the future, you may be better
off starting with an etch CD, and configuring RAID
during the installation.
The three methods above are not mutually exclusive. In other words, you could
choose all of them. If you choose to upgrade initrd-tools and then later upgrade
to a linux-image kernel, doing so would simply prevent removal of the old kernel.
If you do not upgrade initrd-tools then the old kernel may be removed, but since
we would be replacing the kernel, this is acceptable. If you desire to install
only 'oldstable' programs, this does not prevent you from upgrading the kernel if
you desire, but upgrading the kernel would not be necessary.
An additional note. If at some point you did upgrade libc6 to a 'stable' 'testing' or
'unstable' version and you are running the oldstable version of gcc-3.3 (probably 1:3.3.5-13)
you will also need to install the etch version of gcc-3.3 ( apt-get -t stable install gcc-3.3 )
or you risk a broken compiler.
Run apt-get update:
Do not perform any steps listed here until you read the notes above.
I also don't recommend doing them unless you plan on upgrading the kernel.
If you have chosen to keep your 'oldstable' sarge system and install only programs
from 'oldstable' and/or 'sarge-backports' then you do not need to perform any of these steps.
You should however add an 'oldstable' source in /etc/apt/sources.list and you
will probably want to give 'oldstable' top priority in
(at least until the day you upgrade to etch - then it should be removed or the priority
lowered to some number under 500).
First see if initrd-tools is installed:
dpkg -l initrd-tools
If this program is installed, it should report something like
"ii initrd-tools 0.1.81.1 tools to create initrd image for prepackaged".
If it is not installed, you may already be running a newer kernel that
does not use initrd-tools (test with 'uname -r'). If that is the case,
there is no need to continue. If you are running a kernel older than
2.4.1, I have no advice for you. Otherwise, upgrade initrd-tools:
dpkg -i initrd-tools_0.1.84.1_all.deb
If you don't plan on upgrading the kernel right away then you should probably prevent
initrd-tools from automatically upgrading to a newer version during 'apt-get upgrade'
because the etch version will upgrade libc6! Put the package on hold:
echo "initrd-tools hold" | dpkg --set-selections
If you are currently running a 2.4 kernel (2.4.1 or greater - use 'uname -r' to find out) then
you should run these next commands regardless whether you upgraded
initrd-tools or not. This may possibly solve a problem where an
initrd-img cannot be created for the 2.4 kernel when libc6 is upgraded:
chmod +x fix.mkinitrd
If you choose to install the new etch linux-image kernel
you will need to choose the kernel that is correct for your processor.
The 486 image will work with Intel or AMD. Here are the most common 32bit kernels:
linux-image-486 - Linux kernel image on 486-class machines
linux-image-686 - Linux kernel image on PPro/Celeron/PII/PIII/P4 machines
linux-image-k7 - Linux kernel image on AMD K7 machines
There are other x86 kernels available (including smp kernels), get a list of them and
choose the correct one:
apt-cache search linux-image | grep linux-image
Make a note of how your disks are mounted (make a copy of this). If you are
using a SATA drive and GRUB it's quite possibly the system will hang on reboot with:
"Waiting for root file system":
We install yaird (Yet Another Mkinitrd) to hopefully prevent this problem:
Always first simulate installations to make sure there are no surprises
(edit to suit your CPU if you like):
apt-get -s -t stable install linux-image-686 yaird udev
If everything looks OK (it will either remove one kernel and install
another, or simply upgrade to the new kernel), perform the install:
apt-get -t stable install linux-image-686 yaird udev
You may be asked to (re)Configure Locales.
If the existing kernel is going to be removed, you will be asked if you know
exactly what you are doing. You are going to have to answer 'Yes' (Yes - the whole
word) if you want to replace the kernel. Either you will be OK, or your system
will be hosed. If it previously did not say that a new kernel will be installed, then
it should be obvious that 'Yes' is the wrong answer. Accept the default 'Y' to
remaining prompts. Once the new kernel is installed, cross your fingers and reboot:
What kernel are we using?
This should show you are running kernel 2.6.18 or higher.
If you upgraded the kernel, this errata may effect you:
Buggy routers may cause network problems
If you experience network problems during the installation, this may be
caused by a router somewhere between you and the Debian mirror
that doesn't correctly handle window scaling.
and this kerneltrap article
You can work around this issue by disabling TCP window scaling.
Activate a shell and enter the following command:
echo 0> /proc/sys/net/ipv4/tcp_window_scaling
For the installed system you should probably not completely disable
TCP window scaling. The following command will set ranges for reading
and writing that should work with almost any router:
echo 4096 65536 65536 >/proc/sys/net/ipv4/tcp_rmem
echo 4096 65536 65536 >/proc/sys/net/ipv4/tcp_wmem
I suggest reading my post on this issue:
This website was created for the author's personal
use and entertainment. There is absolutely no warranty.
Use entirely at your own risk.
Any information contained herein is freely available
elsewhere and simply reinterpreted, or more likely
misinterpreted, and cannot be assumed to be accurate.
There are mistakes in this website and there may or
may not be any effort to correct those mistakes in the future.
The author accepts no responsibility for any loss
or damage caused by the use, lack of use, or misuse, of information
contained in this website.
Where links are provided to other websites,
the author accepts no responsibility and shall not be liable,
either directly or indirectly for the content,
legality, accuracy, reliability, suitability, quality
or decency of content, information, product, advice
or services provided by and contained in those sites.
Downloading any information from the Internet is done
at your own risk, and the risk can be substantial.
You knew that, right?
All trademarks are the property of their respective owners.
mr88talent at yahoo dot com
18 APR 2007