[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