On 2014-04-25 16:07 -0400, Frédéric Brière wrote:
> Package: fakeroot
> Version: 1.20-3
> Followup-For: Bug #636192
>
> Forgive me if I'm mistaken, but fakeroot still does not appear to work
> across architectures (at least the i386 version):
>
> $ dpkg -s fakeroot | grep ^Arch
> Architecture: i386
> $ dpkg -s ascii | grep ^Arch
> Architecture: amd64
> $ fakeroot-sysv ascii -v
> ERROR: ld.so: object 'libfakeroot-sysv.so' from LD_PRELOAD cannot be
> preloaded: ignored.
> ascii 3.14
>
>
> Maybe I'm wrong, but I think that the invocation of find in the
> assignment to $PATH was meant to be at runtime, but was instead done at
> compile-time.
Indeed, that is the problem.
> Replacing the hardcoded path list with the `find` command
> from Hilko's patch did the trick for me:
>
> $ fakeroot-sysv ascii -v
> ascii 3.14
To recap on that patch:
On 2013-05-20 16:52 +0200, Hilko Bengen wrote:
> The attached set of patches splits off the shared libraries into
> libfakeroot which is made Multi-Arch: same. A change to the fakeroot
> script causes all paths of the co-installed libfakeroot libraries to be
> found and put into the LD_LIBRARY_PATH.
>
> I have successfully tested that this works correctly on an amd64 system
> with both i386 and amd64 binaries. (With version 1.19-2, the i386
> binaries would not get fakerooted.)
>
> With my patch, this is how fakeroot finds the different multiarch paths:
>
> find /usr/lib -mindepth 1 -maxdepth 1 -type d -name '*-*-gnu*'| sed
> 's,$,/libfakeroot,' | tr '\n' ':'
Clint's objection was that running find could be rather expensive.
> I consider this to be somewhat of a hack. Perhaps something along the
> lines of
>
> ( dpkg --print-architecture; dpkg --print-foreign-architectures ) |\
> xargs -i dpkg-architecture -a{} -qDEB_HOST_MULTIARCH
>
> would be more appropriate...
Well, it would make fakeroot depend on dpkg-dev which is rather
undesirable.
I think the solution is for each libfakeroot:$ARCH to add its directory
to fakeroot's search path via a configuration file. Actually, those
already exist, namely the /etc/ld.so.conf.d/fakeroot-*.conf files. So
how about the patch below?
>From 603feb8d60d41f0eb0f80dfba684051e12bb8129 Mon Sep 17 00:00:00 2001
From: Sven Joachim <[email protected]>
Date: Wed, 15 Aug 2018 10:14:13 +0200
Subject: [PATCH] Make fakeroot multi-arch aware
Each libfakeroot:$ARCH package already adds an entry to
/etc/ld.so.conf.d/, reuse that for fakeroot's own search path.
Remove the lib{64,32}/fakeroot directories from the search path, since
those do not exist anymore.
Closes: #636192
---
scripts/fakeroot.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/scripts/fakeroot.in b/scripts/fakeroot.in
index eaf3f56..b740b4a 100755
--- a/scripts/fakeroot.in
+++ b/scripts/fakeroot.in
@@ -35,7 +35,7 @@ FAKEROOT_BINDIR=@bindir@
USEABSLIBPATH=@LDPRELOADABS@
LIB=lib@fakeroot_transformed@@DLSUFFIX@
-PATHS=@libdir@:${FAKEROOT_PREFIX}/lib64/libfakeroot:${FAKEROOT_PREFIX}/lib32/libfakeroot
+PATHS=@libdir@:$(echo $(grep -h ^/ /etc/ld.so.conf.d/fakeroot-*.conf) | sed -e 's/ /:/g')
FAKED=${FAKEROOT_BINDIR}/@faked_transformed@
FAKED_MODE="unknown-is-root"
--
2.18.0
I have left the directory for the native architecture at the front which
causes a duplicate entry. That should be harmless, but if it is
considered undesirable, it would also be possible to drop @libdir@: from
$PATHS. In that case fakeroot could even become an arch:all package.
Cheers,
Sven