[Debian-on-mobile-maintainers] Bug#1011166: Bug#1011166: pidgin breaks chatty autopkgtest: error while loading shared libraries: libjabber.so.0

Evangelos Ribeiro Tzaras devrtz-debian at fortysixandtwo.eu
Thu May 19 10:04:19 BST 2022


Hi,

On Wed, 2022-05-18 at 03:04 -0500, Richard Laager wrote:
> Control: notfound 1011166 pidgin/2.14.9-2
> Control: tags 1011166 patch
> 
> On 5/17/22 15:34, Paul Gevers wrote:
> > I note that 
> > the library moved location from /usr/lib/purple-
> > 2/libjabber.so.0.0.0 to 
> > /usr/lib/x86_64-linux-gnu/purple-2/libjabber.so.0.0.0.
> 
> I converted from an ancient compat version to modern debhelper. This 
> brought in multiarch support. Rather than fight it, I just went with 
> that, since the problem looked tractable.
> 
> > Naively I would 
> > have expected it to be picked up, but maybe the /purple-2 in the
> > middle 
> > of the path is preventing that.
> 
> -- BEGIN RED HERRING --
> 
> I would expect it to be picked up.
> 
> libpurple/plugin.c sets up the search path for that purple-2
> directory 
> (which is where all libpurple plugins are installed):
>      purple_plugins_add_search_path(LIBDIR);
> 
> In libpurple/Makefile.am, AM_CPPFLAGS has:
>      -DLIBDIR=\"$(libdir)/purple-$(PURPLE_MAJOR_VERSION)/\"
> 
> This should cause us to find libxmpp.so, the protocol plugin. It then
> needs to bring in libjabber.so, an internal library. It should be 
> finding this with RUNPATH, I believe:
> 
> $ readelf -a /usr/lib/x86_64-linux-gnu/purple-2/libxmpp.so  | grep -i
> path
>   0x000000000000001d (RUNPATH)            Library runpath: 
> [/usr/lib/x86_64-linux-gnu/purple-2]
> 
> If I run: LD_DEBUG=libs pidgin -n
> 
> That is indeed what happens:
>       43864:     find library=libjabber.so.0 [0]; searching
>       43864:      search 
> path=/usr/lib/x86_64-linux-gnu/purple-2/glibc-hwcaps/x86-64-
> v3:/usr/lib/x86_64-linux-gnu/purple-2/glibc-hwcaps/x86-64-
> v2:/usr/lib/x86_64-linux-gnu/purple-
> 2/tls/haswell/x86_64:/usr/lib/x86_64-linux-gnu/purple-
> 2/tls/haswell:/usr/lib/x86_64-linux-gnu/purple-
> 2/tls/x86_64:/usr/lib/x86_64-linux-gnu/purple-2/tls:/usr/lib/x86_64-
> linux-gnu/purple-2/haswell/x86_64:/usr/lib/x86_64-linux-gnu/purple-
> 2/haswell:/usr/lib/x86_64-linux-gnu/purple-2/x86_64:/usr/lib/x86_64-
> linux-gnu/purple-2 
>             (RUNPATH from file 
> /usr/lib/x86_64-linux-gnu/purple-2/libxmpp.so)
> 
> If I run: LD_DEBUG=libs chatty
> 
> It fails:
> 
>       43926:    find library=libjabber.so.0 [0]; searching
>       43926:     search path=/usr/lib/purple-2          (RUNPATH from
> file chatty)
>       43926:      trying file=/usr/lib/purple-2/libjabber.so.0
>       43926:     search cache=/etc/ld.so.cache
>       43926:     search 
> path=/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-v3:/lib/x86_64-linux-
> gnu/glibc-hwcaps/x86-64-v2:/lib/x86_64-linux-
> gnu/tls/haswell/x86_64:/lib/x86_64-linux-gnu/tls/haswell:/lib/x86_64-
> linux-gnu/tls/x86_64:/lib/x86_64-linux-gnu/tls:/lib/x86_64-linux-
> gnu/haswell/x86_64:/lib/x86_64-linux-gnu/haswell:/lib/x86_64-linux-
> gnu/x86_64:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu/glibc-
> hwcaps/x86-64-v3:/usr/lib/x86_64-linux-gnu/glibc-hwcaps/x86-64-
> v2:/usr/lib/x86_64-linux-gnu/tls/haswell/x86_64:/usr/lib/x86_64-
> linux-gnu/tls/haswell:/usr/lib/x86_64-linux-
> gnu/tls/x86_64:/usr/lib/x86_64-linux-gnu/tls:/usr/lib/x86_64-linux-
> gnu/haswell/x86_64:/usr/lib/x86_64-linux-gnu/haswell:/usr/lib/x86_64-
> linux-gnu/x86_64:/usr/lib/x86_64-linux-gnu:/lib/glibc-hwcaps/x86-64-
> v3:/lib/glibc-hwcaps/x86-64-
> v2:/lib/tls/haswell/x86_64:/lib/tls/haswell:/lib/tls/x86_64:/lib/tls:
> /lib/haswell/x86_64:/lib/haswell:/lib/x86_64:/lib:/usr/lib/glibc-
> hwcaps/x86-64-v3:/usr/lib/glibc-hwcaps/x86-64-
> v2:/usr/lib/tls/haswell/x86_64:/usr/lib/tls/haswell:/usr/lib/tls/x86_
> 64:/usr/lib/tls:/usr/lib/haswell/x86_64:/usr/lib/haswell:/usr/lib/x86
> _64:/usr/lib 
>         (system search path)
> 
> At first glance, it felt like the RUNPATH from chatty was winning
> over 
> that from libxmpp.so.
> 
> -- END RED HERRING --
> 
> Upon further investigation, the real issue is that chatty is directly
> linking to libjabber.so, and they're setting a RUNPATH to do it.
> 
> chatty's src/meson.build has:
> executable('chatty', chatty_sources, resources,
>    include_directories: src_inc,
>    dependencies: chatty_deps,
>    link_with: libchatty.get_static_lib(),
>    install: true,
>    install_rpath: purple_plugdir,
> )
> 
> Note the install_rpath.
> 
> and src/purple/meson.build has (manual wrapping added for email):
> 
> purple_plugdir = purple_dep.get_pkgconfig_variable('plugindir')
> jabber = meson.get_compiler('c').find_library(
>      'jabber', dirs: purple_plugdir)
> 
> In terms of "Who is at fault?", I blame chatty for explicitly linking
> to 
> an internal library. However, in fairness, I understand that they
> have 
> their reasons and a better solution was never found with upstream (at
> least in part because no significant changes are going to go into
> purple 
> 2 at this point):
> https://source.puri.sm/Librem5/chatty/-/issues/266
> 

thanks for the thorough analysis!

> The good news here is that a rebuild of chatty is all that's
> necessary. 

Indeed. I noticed this while preparing the upgrade to the latest
version.

> A binNMU should be sufficient to fix the bug. I've submitted a
> request 
> for one, but this was my first time, so I might have done something
> wrong.
> 
> To fix it fully correctly, though, I think we want a versioned 
> Build-Depends to ensure it cannot be built against an old libpurple0 
> (not that such a thing should happen). And a lintian override needs 
> updating. Here is a MR for that:
> https://salsa.debian.org/DebianOnMobile-team/chatty/-/merge_requests/21

Thanks for the patch! I'll upload a fixed version soon.

Evangelos

> 
> -- 
> Richard
> _______________________________________________
> Debian-on-mobile-maintainers mailing list
> Debian-on-mobile-maintainers at alioth-lists.debian.net
> https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/debian-on-mobile-maintainers



More information about the Debian-on-mobile-maintainers mailing list