Curious issue with -b output when building Samba master branch
Richard Sharpe
realrichardsharpe at gmail.com
Mon Feb 9 13:39:34 MST 2015
On Sat, Feb 7, 2015 at 11:07 AM, Andrew Bartlett <abartlet at samba.org> wrote:
> On Wed, 2015-02-04 at 15:47 -0800, Richard Sharpe wrote:
>> On Wed, Feb 4, 2015 at 1:40 PM, Richard Sharpe
>> <realrichardsharpe at gmail.com> wrote:
>> > Hi,
>> >
>> > when I run my own configure.xxx script that passes essentially what
>> > RedHat passes to configure on a Samba 4.1.x build, I see the following
>> > in the configure log,
>> >
>> > Dynconfig[SOCKET_DIR]:
>> > : '/var/run'
>> > Dynconfig[MODULESDIR]:
>> > : '/usr/lib64/samba'
>> > Dynconfig[WINBINDD_PRIVILEGED_SOCKET_DIR]:
>> > : '/var/lib/samba/winbindd_privileged'
>> >
>> > but MODULESDIR is different when I run smbd -b:
>> >
>> > LMHOSTSFILE: /etc/samba/lmhosts
>> > LIBDIR: /usr/lib
>> > MODULESDIR: /home/rsharpe/somedir/samba/bin/modules
>> > SHLIBEXT: so
>> > LOCKDIR: /var/lib/samba
>> >
>> > Why is this? How can I force the binary to have the correct thing
>> > because I want to be able to copy these binaries to the correct place
>> > on a remote node and have things work correctly.
>>
>> OK, I think I have found the source of this disturbing behavior. In
>> dynconfig/wscript I see this little snippet of code:
>>
>> def get_override(bld):
>> override = { 'MODULESDIR' : 'bin/modules',
>> 'PYTHONDIR' : 'bin/python',
>> 'PYTHONARCHDIR' : 'bin/python',
>> 'BINDIR' : 'bin',
>> 'SBINDIR' : 'bin',
>> 'CODEPAGEDIR' : 'codepages',
>> 'SCRIPTSBINDIR' : 'source4/scripting/bin',
>> 'SETUPDIR' : 'source4/setup'
>> }
>> return override
>>
>> def dynconfig_cflags(bld, list=None):
>> '''work out the extra CFLAGS for dynconfig.c'''
>> cflags = []
>> for varname in dynconfig.keys():
>> if list and not varname in list:
>> continue
>> value = bld.env[varname]
>> if not Options.is_install:
>> override = get_override(bld)
>> if varname in override:
>> value = os.path.join(bld.env.srcdir, override[varname])
>> cflags.append('-D%s="%s"' % (varname, value))
>> return cflags
>>
>> Which would seem to be overriding a bunch of things if you are not
>> doing a make install.
>>
>> Can anyone explain to me the reason for this?
>
> This is so that when we run 'make test', the in-tree binaries are used,
> so you don't have to be root and run 'make install' first, and so you
> always test the code you just built.
>
>> In the environment I am working in I have a bunch of people who want
>> to have reasonable turn-around for changes and will want to copy the
>> just built binary to a set of other machines.
>
> Given Samba is no longer has a static smbd, copying the
> just-built-binary is going to give much pain - almost none of the file
> server is in smbd for example (look how tiny that is these days).
>
>> Having to go through an rpmbuild or a make install just to get one
>> changed binary is an enormous pain.
>
> Picking the wrong changed binary is also going to be an even more
> enormous pain.
>
>> Is there some other way rather than hacking out that piece of code?
>
> They should do a make install, using DESTDIR=/tmp/my-prefix trick that
> our packages use to avoid needing to install as root. That way an rsync
> of the whole install tree (which is what I would suggest you really
> want) will be possible.
Can you be more specific about the trick?
Is it DESTDIR=/tmp/xxx waf configure or what?
--
Regards,
Richard Sharpe
(何以解憂?唯有杜康。--曹操)
More information about the samba-technical
mailing list