Ubuntu Multiarch

I have started to update Woof to build from Ubuntu Precise Pangolin binary packages, and have run into an awkward problem.

Libraries that were previously in /lib and /usr/lib, are now in /lib/i386-linux-gnu and /usr/lib/i386-linux-gnu.

Or, in the case of x86 64-bit libs, /lib/x86_64-linux-gnu and /usr/lib/x86_64-linux-gnu.

The rationale behind this is explained here:
https://wiki.ubuntu.com/MultiarchSpec

This change is not even a standard. It causes a lot of problems in Woof.

I would rather everything stayed in standard locations, so I am hacking it so that the libraries get placed in /lib and /usr/lib, with these symlinks:

# ln -s ./ /lib/i386-linux-gnu
# ln -s ./ /usr/lib/i386-linux-gnu


...that is, /lib/i386-linux-gnu is a link to /lib, and /usr/lib/i386-linux-gnu is a link to /usr/lib.

I think that the symlinks will fix some cases where Ubuntu packages expect stuff to be in /lib/i386-linux-gnu and /usr/lib/i386-linux-gnu.

I am still working on some details of this.


Posted on 16 Mar 2012, 8:52


Comments:

Posted on 16 Mar 2012, 12:41 by technosaurus
easy fix
cd /usr/lib

ln -s . i386-linux-gnu

I have been doing this with X11R7 for a while and Rob Landley does it in aboriginal for /etc /lib /bin and /sbin as well as the /usr/local counterparts ... Not only does his method simplify things, but it also speeds up execution by shortening $PATH and $LD_LIBRARY_PATH (see strace output)

An alternative could be to keep them in place and symlink them individually, thus allowing you to do a switcheroo. If only autotools would allow you to change the builtin soname via an env variable at build time, all this would be moot.


Posted on 16 Mar 2012, 18:52 by 01micko
maverick
Yeah, they started that in maverick meerkat, that's why we threw it in the "too hard" basket. I mentioned in this blog some time ago and made my own hack but have since deleted that woof tree.


Posted on 16 Mar 2012, 18:55 by BarryK
Same thing, just looks different
technosaurus,
What I have done, "ln -s ./ /usr/lib/i386-linux-gnu" is the same thing. Or, I could have done "ln -s . /usr/lib/i386-linux-gnu", same thing, or I could have done "cd /usr/lib" first then done "ln -s . i386-linux-gnu".