On Tuesday, August 25, 2015 7:58:44 PM Alan McKinnon wrote:
> On 25/08/2015 19:43, Fernando Rodriguez wrote:
> > On Tuesday, August 25, 2015 12:30:09 PM Alan McKinnon wrote:
> >> On 25/08/2015 04:28, Fernando Rodriguez wrote:
> >>> On Monday, August 24, 2015 9:31:38 PM Alan McKinnon wrote:
> >>>> Does anyone have an opinion to offer on bug 501468?
> >>>>
> >>>> https://bugs.gentoo.org/show_bug.cgi?id=501468
> >>>>
> >>>> It's been annoying me for a week now with this message:
> >>>>
> >>>> !!! existing preserved libs:
> >>>>>>> package: www-client/firefox-40.0.2
> >>>>  *  - /usr/lib64/firefox/libmozalloc.so
> >>>>  *      used by /usr/lib64/thunderbird/components/libdbusservice.so
> >>>> (mail-client/thunderbird-38.2.0)
> >>>>  *      used by /usr/lib64/thunderbird/components/libmozgnome.so
> >>>> (mail-client/thunderbird-38.2.0)
> >>>>  *      used by
> >>>> /usr/lib64/thunderbird/distribution/extensions/{e2fda1a4-762b-4020-
b5ad-
> >>> a41df1933103}/components/libcalbasecomps.so
> >>>> (mail-client/thunderbird-38.2.0)
> >>>>  *      used by 4 other files
> >>>>
> >>>>
> >>>> Both Mozilla products ship this file:
> >>>>
> >>>> $ locate libmozalloc
> >>>> /usr/lib64/firefox/libmozalloc.so
> >>>> /usr/lib64/thunderbird/libmozalloc.so
> >>>>
> >>>> and according to preserved libs, thunderbird linked to the firefox copy.
> >>>> The only offered solution on the bug is to use a MASK variable, which
> >>>> seems to me an ugly hammer to swat a fly.
> >>>>
> >>>> I was wondering if there's a better way been developed in the last 
year.
> >>>
> >>> Actually, now I have a general idea of what's going on and that sounds 
> > like an 
> >>> acceptable solution but perhaps I could be better. This is what happens:
> >>>
> >>> 1. revdep-rebuild uses ldd to find breakage. It finds breakage in 
> >>> libdbusservice.so because firefox uses tricks to preload the library from 
> > it's 
> >>> directory.
> >>> 2. revdep-rebuild find that thunderbird provides the library and thinks 
it 
> >>> needs to be rebuild. (And wrongly tells you that firefox links against 
it).
> >>>
> >>> A better way would be:
> >>>
> >>> 1. same as step 1 above
> >>> 2. revdep-rebuild checks the package that provides the broken binary (in 
> > this 
> >>> case the firefox package), if this package also provides the missing 
> > library 
> >>> then it's safe to ignore the problem.
> >>> 3. same as step 2 above.
> >>>
> >>> Another solution is to make patch firefox to use RPATH so ldd can find 
> >>> the 
> >>> labraries, this would also make prelink work better with firefox but it's 
> >>> probably not ideal to mantain.
> >>
> >>
> >> that does make sense. In my case, it's not revdep-rebuild causing
> >> problems, it's the preserved-rebuild message at the end of emerge -v
> >>
> >> At this level is there a difference?
> > 
> > I don't know the details but it seems to me that portage either uses 
revdep-
> > rebuild to find breakage (without scanning the whole system) before 
deleting 
> > the old libs for good or duplicates some of it's logic. Come to think of 
it, 
> > the SEARCH_DIR_MASK may not be ideal because if I understand what it does 
> > correctly then real breakage in firefox won't be detected.
> > 
> 
> My thought too. To me, SEARCH_DIR_MASK is fine for things like
> /opt/skype because it's binary and either works or it doesn't, and when
> it doesn't there's not much I can do about it.
> 
> It may be the least sucky of all available solutions, but it's still
> swatting a fly with a hammer

I may have found  a better solution. I patched my ebuild [1], but you should 
be able to just add the following to LDFLAGS in /etc/portage/env:

Wl,-rpath,/usr/lib/firefox,-rpath,/usr/lib/firefox/components,-
rpath,/usr/lib/browser/components

If you do the same for thunderbird (adjusting the library dirs) you should be 
able to remove the SEARCH_DIR_MASK. I also patched the ebuild not to install 
that file on /etc/revdep-rebuild. If you use prelink firefox will start a 
little 
faster on a slow machine.

You can tell if it worked by running:

# ldd /usr/lib/firefox/components/libdbusservice.so | grep libxul

It should output something like:

libxul.so => /usr/lib64/firefox/libxul.so (0x00007fcc22eb8000)

instead of:

libxul.so => not found


[1] 
https://github.com/fernando-rodriguez/portage-overlay/blob/master/www-client/firefox/firefox-41.0.ebuild#L254
-- 
Fernando Rodriguez

Reply via email to