[libvirt] libprl_sdk.so.7 library dependancies

Maxim Nestratov mnestratov at virtuozzo.com
Fri Nov 27 18:08:03 UTC 2015

27.11.2015 20:46, Daniel P. Berrange пишет:
> On Fri, Nov 27, 2015 at 07:48:10PM +0300, Maxim Nestratov wrote:
>> 26.11.2015 20:08, Maxim Nestratov пишет:
>>> 26.11.2015 18:19, Daniel P. Berrange пишет:
>>>> In debugging some recent problem I was rather surprised to find that
>>>> libvirt.so was linked against Qt, X11 and GObject.  It turns out that
>>>> this is due to the VZ driver linking to libprl_sdk.so which pulls in
>>>> all these libs:
>>>>   $ ldd /usr/lib64/libprl_sdk.so.7.0.26
> [snip]
>>>> This is bad for several reasons - libvirt should not pull in any GUI
>>>> libraries
>>>> at all, since virt hosts typically want to avoid any deps on this kind
>>>> of
>>>> packages in order to get a minimal hypervisor node install. Second, with
>>>> libgobject in particular, this library abort()s when it hits out of
>>>> memory
>>>> conditions. This is absolutely against the policy of libvirt.so which is
>>>> that we must feed all errors back to the caller and *never* abort a
>>>> program
>>>> using libvirt.so
>>>> Since it is not in Fedora, I'm using libprlsdk.so from an RPM I built
>>>> myself -  libprlsdk-7.0.26-1.fc22.x86_64.  So possibly this is just a
>>>> mistake in the way I built the library ?  If this long list of deps
>>>> is normal / expected though, then we have a much bigger problem that
>>>> I don't think we can solve in libvirt.
>>> Indeed we have this kind of dependencies and I don't like them either.
>>> It's a kind of legacy
>>> stuff we have right now. Actually I didn't realize before that we are
>>> linking with GUI libs.
>>> Having looked at this problem now, I don't think this is really necessary
>>> to be linked
>>> against. We'll try to get rid of such dependencies asap.
>> We got rid of all unnecessary dependencies and have just commited changes
>> under
>> 7.0.45 version.  Please try this new version and see if it is ok now. Just
>> in case, source
>> code is available here https://src.openvz.org/projects/OVZ/repos/libprlsdk
> Ok, that looks much improved - now I only see it linking
> $ ldd /lib64/libprl_sdk.so
> 	linux-vdso.so.1 (0x00007ffd29b63000)
> 	libz.so.1 => /usr/lib64/libz.so.1 (0x00007f011f4f3000)
> 	libdl.so.2 => /usr/lib64/libdl.so.2 (0x00007f011f2ee000)
> 	librt.so.1 => /usr/lib64/librt.so.1 (0x00007f011f0e6000)
> 	libQtXml.so.4 => /usr/lib64/libQtXml.so.4 (0x00007f011ee9f000)
> 	libQtNetwork.so.4 => /usr/lib64/libQtNetwork.so.4 (0x00007f011eb4a000)
> 	libQtCore.so.4 => /usr/lib64/libQtCore.so.4 (0x00007f011e643000)
> 	libpthread.so.0 => /usr/lib64/libpthread.so.0 (0x00007f011e426000)
> 	libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f011e0a3000)
> 	libm.so.6 => /usr/lib64/libm.so.6 (0x00007f011dda1000)
> 	libgcc_s.so.1 => /usr/lib64/libgcc_s.so.1 (0x00007f011db8a000)
> 	libc.so.6 => /usr/lib64/libc.so.6 (0x00007f011d7c8000)
> 	/lib64/ld-linux-x86-64.so.2 (0x000055f66d762000)
> 	libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f011d54f000)
> 	libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f011d102000)
> 	libgthread-2.0.so.0 => /usr/lib64/libgthread-2.0.so.0 (0x00007f011ceff000)
> 	libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007f011cbc6000)
> 	libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007f011c977000)
> 	libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007f011c692000)
> 	libcom_err.so.2 => /usr/lib64/libcom_err.so.2 (0x00007f011c48e000)
> 	libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007f011c25b000)
> 	libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007f011c04c000)
> 	libkeyutils.so.1 => /usr/lib64/libkeyutils.so.1 (0x00007f011be48000)
> 	libresolv.so.2 => /usr/lib64/libresolv.so.2 (0x00007f011bc2c000)
> 	libselinux.so.1 => /usr/lib64/libselinux.so.1 (0x00007f011ba09000)
> 	libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f011b798000)
> So none of the GUI stuff is there anymore which is nice.
> I guess you actually use QT as part of your library ?  It has abort-on
> OOM behaviour which is not so nice for libvirt given our policy in this
> area. We can't very well ask you to rewrite your code, so probably
> just have to document this aspect of the VZ driver.
> Regards,
> Daniel
Yes, we use it as a part of our library by historical reasons and I'm 
afraid rewriting it is
not an option for us. But sure we can document it. Could you give a hint 
what documents
we should alter?

More information about the libvir-list mailing list