******************************************************

Prevent libc6 upgrade problems:

Home
******************************************************
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 udev instead of devfs 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 backports.org (and clamav from volatile) 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.
Run apt-get update:
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 /etc/apt/preferences (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:
cd /usr/local/src
wget http://www200.pair.com/mecham/initrd-tools_0.1.84.1_all.deb
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:
cd
wget http://www200.pair.com/mecham/fix.mkinitrd
chmod +x fix.mkinitrd
./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":
df

We install yaird (Yet Another Mkinitrd) to hopefully prevent this problem:
http://www200.pair.com/mecham/spam/waiting_for_root_file_system.html

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:

reboot

What kernel are we using?
uname -r

This should show you are running kernel 2.6.18 or higher.
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.

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.
See #401435 and this kerneltrap article for details.
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:
http://marc.info/?l=postfix-users&m=117457942431349

******************************************************

Disclaimer:

******************************************************
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