Warning:DO NOT USE --force! This will seriously break your system. If you are coming to this guide too late and you have already used --force... there are ways to fix your system. Thesetwo do not even require a rescue disk.

In the simplest case, the update can be performed by doing:

pacman -Syu --ignore glibc
pacman -Su

Note: for installs that have not been updated during 2012, it will save you some time to do:

pacman -U http://pkgbuild.com/~allan/glibc-2.16.0-1-<arch>.pkg.tar.xz

where <arch> is replaced by i686 or x86_64 as required. Add a single "-d" if needed.

There are two possible issues that might occur during this update.

Issue 1: glibc dependency errors

If running "pacman -Syu --ignore glibc" gives:

warning: ignoring package glibc-2.16.0-2
warning: cannot resolve "glibc>=2.16", a dependency of "gcc-libs"
...
:: The following packages cannot be upgraded due to unresolvable dependencies:
binutils gcc gcc-libs
Do you want to skip the above packages for this upgrade [y/N]

Say "y" to skipping the packages, then install them all using (e.g.):

pacman -Sd binutils gcc gcc-libs

Note the use of a single "-d" only ignores the versioning of dependencies and not the actual dependency itself. Then finish the update using:

pacman -Su

Issue 2: The final "pacman -Su" still has conflicts in /lib

This means that you have files or folders still in /lib or pacman thinks a package apart from glibc still own /lib. You can see which package own files in /lib by using:

$ find /lib -exec pacman -Qo -- {} +

If any package apart from glibc is listed as owning a file, that package needs to be updated to install its files in /usr/lib. Any files unowned by a package should either be deleted or moved to /usr/lib and any directories within /lib need deleted (after they are empty...).

One common source of files in /lib is left overs from running depmod on a kernel update. For example:

error: No package owns /lib/modules/3.1.9-2-ARCH/modules.*

If no other files are in /lib/modules, you can safely remove that directory.

If after this the "pacman -Su" still has conflicts with /lib, this is because a package on your system other than glibc thinks it owns the /lib folder. Such packages can be detected using:

$ grep '^lib/' /var/lib/pacman/local/*/files | grep -v glibc

These packages need rebuilding so as not to include the /lib directory. Then the final "pacman -Su" will successfully install glibc.

You can confirm the update is complete by looking in your root directory to see that lib is a symlink to usr/lib.