[PATCH] Fix the samba3 dependency hell

Andreas Schneider asn at samba.org
Thu Nov 24 07:41:02 UTC 2016


On Thursday, 24 November 2016 20:10:29 CET Andrew Bartlett wrote:
> On Thu, 2016-11-24 at 07:52 +0100, Andreas Schneider wrote:
> > On Wednesday, 23 November 2016 21:52:21 CET Michael Adam wrote:
> > > On 2016-11-22 at 17:36 +0100, Andreas Schneider wrote:
> > > > On Tuesday, 22 November 2016 14:20:00 CET Andreas Schneider
> > > > 
> > > > wrote:
> > > > > Hello,
> > > > > 
> > > > > last week I sent a patch to fix an issue with newer versions of
> > > > > the gold
> > > > > linker complaining about our circular dependencies.
> > > > > 
> > > > > This patch did not work on Ubuntu. It looks like I produces an
> > > > > issue
> > > > > with
> > > > > the Kerberos library. On Ubuntu 14.04 we link against openldap2
> > > > > libaries
> > > > > which link against Kerberos libraries. So when we link smbd we
> > > > > link
> > > > > against
> > > > > two Kerberos libaries, yay!
> > > > > 
> > > > > 
> > > > > However I needed a different approach to fix the circular
> > > > > dependencies.
> > > > > Yes, we have two of them:
> > > > > 
> > > > > param => smbconf
> > > > > smbconf => param
> > > > > 
> > > > > and
> > > > > 
> > > > > smbconf => smbregistry
> > > > > smbregistry => smbconf
> > > 
> > > There are more, just not so simple ones.
> > > I'll post a patchset that resolves another
> > > circular dep which I fixed 3 years ago.
> > > Just found the patch again. ;-)
> > > 
> > > > > I've tried to change smbconf first to only consume samba-
> > > > > hostconfig, but
> > > > > this didn't work. Decoupling param from smbconf is also not
> > > > > possible. So
> > > > > thinking about this mess there was only one solution.
> > > > > 
> > > > > As smbconf is a public library, param a subsystem and
> > > > > smbregistry a
> > > > > library
> > > > > the correct thing to do is to push everything in smbconf
> > > > > library.
> > > > > 
> > > > > That's what I did. So everything links against smbconf now.
> > > > > 
> > > > > 
> > > > > Please review the attached patchset and push if you're ok.
> > > > > 
> > > > > 
> > > > > 
> > > > > Thanks,
> > > > > 
> > > > > 	Andreas
> > > > 
> > > > Updated patchset
> > > 
> > > What is the update about? :-)
> > > (Sure I could diff the patchset files... ;-)
> > 
> > One additional small patch (the last one) and commit message updates.
> > 
> > > No final review yet, but a few initial thoughts:
> > > 
> > > - Why the 55 reformatting patches?
> > >   This kind of contradicts the samba guidelines
> > >   of only reformatting the contexts that we touch
> > >   with the actual changes.
> > 
> > a) There is no real formatting in that file
> > b) It makes it later easier to see what a patch actually changes. If
> > you have
> >    everything in one line and remove one or two dependencies it is
> > really hard
> >    to spot that. The motivation was to make reviewing real patches
> > much 
> >    simpler.
> 
> Moving things to one-thing-per-line sounds good. 
> 
> > > - Regarding the actual dependency changes, I would
> > >   like to think about this a little more, as I was
> > >   on it some time ago but got distracted. I assume
> > >   though that your approach is correct at least
> > >   for the short term.
> > 
> > I tried to remove the param dependency from smbconf, and only use
> > samba-
> > hostconfig but failed at lp_clustering() also other dependencies
> > like 
> > samba3util or samba3-util require param.
> > 
> > Then I tried it the other way around move smbconf stuff from param
> > into it's 
> > own library. This also doesn't work ...
> > 
> > 
> > The long term goal should be to remove the param/smbconf dependency
> > from most 
> > of the things. We need something more lightweight we pass down the
> > stack.
> 
> An easy option might be the lib/param loadparm system.  This sounds
> counter-intuitive, but because it doesn't depend on param, but you can
> plug in the source3 param code in, you break the dependency loop. 
> 
> The main loop, as I recall it, is from source3/param <-> smbregistry
> and everything that depends on.  Making the registry code consume a
> loadparm context, which is initialised at runtime with the source3
> param code, should help.

This fixes only smbregistry but not its dependencies. We need to start fixing 
them first ...

-- 
Andreas Schneider                   GPG-ID: CC014E3D
Samba Team                             asn at samba.org
www.samba.org



More information about the samba-technical mailing list