On Wed, Aug 19, 2020 at 01:16:17PM +0100, Daniel P. Berrangé wrote:
On Wed, Aug 19, 2020 at 02:10:53PM +0200, Pavel Hrdina wrote:
> On Wed, Aug 19, 2020 at 01:22:58PM +0200, Pavel Hrdina wrote:
> > On Wed, Aug 19, 2020 at 12:47:40PM +0200, Andrea Bolognani wrote:
> > > Right now we're unconditionally adding RPATH information to the
> > > installed binaries and libraries, but that's not always desired.
> > >
> > > Debian explicitly passes --disable-rpath to configure, and while
> > > I haven't been able to find the same option in the spec file for
> > > either Fedora or RHEL, by running
> > >
> > > $ readelf -d /usr/bin/virsh | grep PATH
> > >
> > > I can see that the information is not present, so I assume they
> > > also strip it somehow.
> > >
> > > Both Debian and Fedora have wiki pages encouraging packagers to
> > > avoid setting RPATH:
> > >
> > >
https://wiki.debian.org/RpathIssue
> > >
https://fedoraproject.org/wiki/RPath_Packaging_Draft
> > >
> > > Given the above, it looks like it's actually better to not go
> > > out of our way to include that information in the first place.
> >
> > I need to look into this because I remember adding the rpath there as
> > a result that something was not working correctly but now I don't
> > remember what was it. Originally I did not have it there.
> >
> > Pavel
>
> So I managed to remember what was the issue. If you run install libvirt
> into custom directory like this:
>
> meson build --prefix /my/custom/dir
> ninja -C build install
>
> and after that running:
>
> /my/custom/dir/bin/virsh
>
> will fail with:
>
> /lib64/libvirt.so.0: version `LIBVIRT_PRIVATE_6.7.0' not found (required by
./bin/bin/virsh)
>
> This is what autotools did by default as well and I did not know that
> there is an option --disable-rpath as it's not in output of
> `./configure --help`.
>
> If we don't care about the use case of installing libvirt into custom
> prefix and breaking it it should be OK to remove this from meson but my
> guess is that we should not do it.
So it is only broken if you failed to set LD_LIBRARY_PATH.
rpath is basically hardcoding the association between the virsh
binary and the library so that it doesn't need LD_LIBRARY_PATH.
I'm ambivalent on whether that's important or not, though admittedly
it can avoid surprises for users not used to LD_LIBRARY_PATH type
issues.
IIUC, meson sets rpath automatically for the binaries so you can
run from the non-installed build dir. When you run install, it
then strips the rpath for the build dir, optionally replacing it
with the "install_rpath" value.
Agreed and since the fix is fairly simple I guess we can keep using
RPATH to not surprise and break some users. Otherwise I would also say
that these users should start using LD_LIBRARY_PATH.
Pavel