Re: introducing curl-minimal and libcurl-minimal RPM packages

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thursday, March 17, 2016 14:44:21 Przemek Klosowski wrote:
> On 03/17/2016 02:00 PM, Kamil Dudka wrote:
> > On Thursday 17 March 2016 13:21:42 Przemek Klosowski wrote:
> >> Could you summarize the argument against something like
> >> 
> >> libcurl_version=REGULAR;
> >> if(!(lp=dlopen("/usr/lib64/libcurl.so",RTLD_NOW))  {
> >> 
> >>        lp=dlopen("/usr/lib64/libcurl-minimal.so",RTLD_NOW);
> >>        libcurl_version=MINIMAL;
> >> 
> >> }
> >> if (!lp) abort("Can't load libcurl because ",dlerror());
> > 
> > I was (by mistake) speaking about loading libcurl's run-time dependencies
> > by dlopen(), which is implemented for OpenLDAP in RHEL-5.  It used to
> > cause
> > problems and was removed from upstream curl long time ago.
> > 
> > Nevertheless, most of the reasons are valid for loading libcurl itself,
> > too:
> > 
> > - Your example would require libcurl-devel to be installed because it
> > provides> 
> >    the /usr/lib64/libcurl.so symlink.  This would be yet another
> >    *run-time*
> >    
> >    dependency of the package you patched.  See the following bug for 
example:
> >      https://bugzilla.redhat.com/215928
> 
> wait, why does libcurl.so sit in libcurl-devel? could it be simply in
> libcurl?

According to Fedora Packaging Guidelines, unversioned shared library files 
should be installed by -devel packages:

https://fedoraproject.org/wiki/Packaging:Guidelines?rd=Packaging/Guidelines#Devel_Packages

If you click on the link above your question, you will see that there was 
exactly the same problem with openldap-devel.  So it is nothing specific
to libcurl.

> of 548 /usr/lib64/lib*.so  files on my system, 358 are in
> lib*-devel packages and 190 are in regular lib* packages.
> 
> Is it a broader problem with how packages keep their libs, i.e. is one
> group or the other violating some policy?

Different packages have different policies for maintaining ABI compatibility.

> > - This approach is not compatible with the dependency scanner of
> > rmp-build.
> > 
> > - You would need to patch this way every single package to be able to load
> > 
> >    libcurl-minimal.  It is very likely that maintainers of upstream
> >    projects
> >    would reject such Fedora-specific patches.
> 
> No, this would be only required for the curl---all the other packages
> should expect regular libcurl.so

Then it would not solve the problem with dnf because dnf uses libcurl via the 
python-pycurl binding (not the curl executable).

> > - Loading libcurl by dlopen() changes the order of global initialization
> > 
> >    of system libraries (such as OpenSSL, NSS, and OpenLDAP), which itself
> >    causes bugs from time to time.
> > 
> > There was a similar proposal for libcurl to load TLS libraries by
> > dlopen().
> > 
> > You can read the response of the upstream curl maintainer:
> >      https://lists.mayfirst.org/pipermail/vtls/2015-February/000020.html
> 
> Yes, the portability argument.... I see the problem here....
> 
> 
> 
> What if you created a 'minimal curl' package that would jam
> libcurl-minimal into curl:
> 
>     LD_PRELOAD=/usr/lib64/libcurl-minimal.so curl

I will not support any solution that would allow to install multiple instances
of libcurl on a single system.  We (as curl maintainers) have no control about 
which packages link which libraries and it could sooner or later happen that 
both instances of libcurl are loaded in a single process through higher-level 
libraries, which is not a scenario supported by upstream.

Apart from that, LD_PRELOAD is IMO as evil as RPATH, which we are discouraged 
from using in Fedora packages.  LD_PRELOAD is pretty useful while debugging.  
However, if you use it in production, it usually causes more problems than it 
solves.

Kamil
--
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxxx
http://lists.fedoraproject.org/admin/lists/devel@xxxxxxxxxxxxxxxxxxxxxxx




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Fedora Announce]     [Fedora Kernel]     [Fedora Testing]     [Fedora Formulas]     [Fedora PHP Devel]     [Kernel Development]     [Fedora Legacy]     [Fedora Maintainers]     [Fedora Desktop]     [PAM]     [Red Hat Development]     [Gimp]     [Yosemite News]
  Powered by Linux