[PATCH] Fix the samba3 dependency hell
Andrew Bartlett
abartlet at samba.org
Thu Nov 24 17:45:47 UTC 2016
On Thu, 2016-11-24 at 08:41 +0100, Andreas Schneider wrote:
> 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 ...
Indeed. If it were easy, it would have been solved long ago. I'm very
keen to see this fixed, because the allow_undefined_symbols it
introduces isn't ideal, as for those we can't use link-time library
versioning to lock the libs together.
Andrew Bartlett
--
Andrew Bartlett http://samba.org/~abartlet/
Authentication Developer, Samba Team http://samba.org
Samba Developer, Catalyst IT http://catalyst.net.nz/services/samba
More information about the samba-technical
mailing list