On Wed, Jan 27, 2016 at 8:04 AM, Alexander Rojas
<alexan...@mesosphere.io> wrote:
> While valid, I feel that is a very un-unix way of doing this. There are a 
> couple of ideas from me here.
>
> 1. We should separate between a dev release and a normal release. The dev 
> release will include headers for people who want to build modules and other 
> mesos stuff, and the normal release only includes the executables.

The dev and normal releases are from the packaging point of view, when
someone installs pre-compiled Mesos binaries. Here we are talking
about users who run `./configure; make; make install`. For packaging,
I totally agree that we shouldn't bundle the 3rdparty stuff (and
distros won't let us do that anyways).

> 2. When building Mesos, we should avoid exporting unnecessary symbols. This 
> happens to me when building a framework which used a newer version of boost, 
> but when trying to link to mesos, it was taken boost symbols from Mesos, 
> rather annoying (I gave up at the end). I had this problem in the past but I 
> just cannot remember how it was solved.

True. The boost problem that you encountered is exactly the kind of
problem this effort is trying to address.
>
> With respect to Alex issue, I don’t see them as much of a problem as long as 
> we keep the standard behavior of the `--prefix` flag, which allows 
> installation of different versions in different directores.

Yup, we are not proposing to change any semantics of --prefix at all.

>
>
>> On 26 Jan 2016, at 19:54, Kapil Arya <ka...@mesosphere.io> wrote:
>>
>> Thanks for the feedback, Alex! I have inlined my responses.
>>
>>> First, I think we should support two use cases: installing 3rdparty
>>> packages and exposing them in the local build. As a Mesos (module)
>>> developer, I may have different versions of Mesos on my machine and I
>>> install neither of them to avoid conflicts. If I develop a module for a
>>> particular Mesos version (i.e. build), I would like to use artifacts of
>>> that build without installing them anywhere.
>>
>> That's a valid use case. How about "installing" the 3rdparty packages
>> by setting their $PREFIX to $(top_builddir)/3rdparty? That way, one
>> can append "-I$(top_builddir)/3rdparty/include" to CPPFLAGS and
>> "$(top_builddir)/3rdparty/lib" to their LD_LIBRARY_PATH when building
>> modules? We can also update libprocess/Mesos to also use these
>> locations instead of passing a dozen "-I" and "-L" flags during
>> compilation. I am guessing this won't be too intrusive to the overall
>> build system.
>>
>>> Second, additionally 3rdparty packages, how about modules we provide with
>>> Mesos, e.g. FixedResourceEstimator? Also if in the future we decide to
>>> refactor default implementations into modules (e.g. hierarchical
>>> allocator), we should install them somewhere.
>>
>> We have a ticket (https://issues.apache.org/jira/browse/MESOS-1940)
>> for it :-). We should just install them in $(pkglibdir). That's the
>> default location for distro packaging as well. That's not too hard to
>> do. Just that we need to decide which modules should be installed.
>>
>> Best,
>> Kapil
>>
>>
>>> On Wed, Jan 20, 2016 at 8:09 AM, Kapil Arya <ka...@mesosphere.io> wrote:
>>>
>>>> On Wed, Jan 20, 2016 at 2:04 AM, Marco Massenzio <m.massen...@gmail.com>
>>>> wrote:
>>>>> Great thinking, Kapil!
>>>>> (I'm one who got the headache :)
>>>>>
>>>>> However, having recently gone through the effort of having to figure out
>>>> it
>>>>> all, my +1 goes for *good documentation* of what is necessary.
>>>>
>>>> Totally with you on this :)
>>>>
>>>>
>>>>> When installing stuff / magic happening behind the scenes, it is always
>>>>> difficult to ensure it works on all "supported" platforms (and let's not
>>>>> even go into non-supported ones) and we would also run the risk that
>>>> future
>>>>> changes may inadvertently break it.
>>>>>
>>>>> Bear also in mind that folks (who may not be using the --prefix) may be
>>>>> "surprised" to find incompatible/unexpected versions of
>>>> glog/protobuf/etc.
>>>>> in the /usr/local system dir.
>>>>
>>>> This is the reason why we want to put it inside Mesos "owned"
>>>> directories (e.g., /usr/local/include/mesos/3rdparty,
>>>> /usr/lib64/mesos/3rdparty) so that this whole operation is side-effect
>>>> free for other applications/packages installed on the system.
>>>>
>>>>> We could also provide "exemplary scripts" that automate (most of) the
>>>>> tedious work and example build files, alongside documentation.
>>>>> If folks agree that this is a desirable alternative, I'm happy to help
>>>> out
>>>>> - as mentioned, I've recently been through this, so memory is still
>>>> fresh.
>>>>
>>>> I think several of us have developed such scripts by now. However, the
>>>> problem is maintainability as they get out-of-sync whenever a 3rdparty
>>>> component is updated in Mesos :-/.
>>>>
>>>>>
>>>>> My 2c.
>>>>>
>>>>> --
>>>>> *Marco Massenzio*
>>>>> http://codetrips.com
>>>>>
>>>>> On Tue, Jan 19, 2016 at 10:22 PM, Kapil Arya <ka...@mesosphere.io>
>>>> wrote:
>>>>>
>>>>>> On Tue, Jan 19, 2016 at 11:58 PM, James Peach <jor...@gmail.com> wrote:
>>>>>>>
>>>>>>>> On Jan 19, 2016, at 2:03 PM, Kapil Arya <ka...@mesosphere.io> wrote:
>>>>>>>>
>>>>>>>> Hi All,
>>>>>>>>
>>>>>>>> I wanted to get your opinion on installing the 3rdparty packages
>>>> glog,
>>>>>>>> protobuf, boost and picojson[1] when installing Mesos itself. These
>>>>>>>> packages are required to build Mesos modules.
>>>>>>>
>>>>>>> An alternative approach could be to hide these headers so they are
>>>>>> internal to Mesos and not incidentally required by innocent modules.
>>>> IIRC
>>>>>> this should be fairly easy for picojson, but (much) harder for glog,
>>>>>> protobuf and boost.
>>>>>>
>>>>>> That's a lot of work and super hard to maintain IMHO :(.
>>>>>>
>>>>>>>> Currently, a module write has to manually install these 3rdparty
>>>>>>>> packages, either system-wide or locally, and update the compilation
>>>>>>>> flags such as CPPFLAGS to point to the installation which is
>>>>>>>> error-prone. Further, one might have a system-wide installation with
>>>>>>>> the wrong package version, causing even more headache.
>>>>>>>
>>>>>>> If you are looking at this, could you please also look at these:
>>>>>>>        https://issues.apache.org/jira/browse/MESOS-2537
>>>>>>>        https://issues.apache.org/jira/browse/MESOS-4096
>>>>>>>
>>>>>>> MESOS-2537 provides consistent behaviour for building against
>>>> optionally
>>>>>> bundled dependencies (and fixes the --enable-foo semantics).
>>>>>>
>>>>>> I'll take a look at this one.
>>>>>>
>>>>>>> MESOS-4096 makes it impossible to run stout tests against a protobuf
>>>>>> that is not version 2.5.0.
>>>>>>
>>>>>> At some point, AlexR and I tried to work on it, but with the stout
>>>>>> directory structure, it got harder to fix then it seemed at first.
>>>>>>
>>>>>>>
>>>>>>>> The proposal here is to install these 3rdparty packages when
>>>>>>>> installing Mesos. To avoid any conflicts with system-wide or local
>>>>>>>> installation, we can install them as follows:
>>>>>>>>
>>>>>>>> ${PREFIX}/include/mesos/3rdparty -- for header files
>>>>>>>> ${PREFIX}/<LIBDIR>/mesos/3rdparty -- for library files (LIBDIR can be
>>>>>>>> lib or lib64 depending upon the installation)
>>>>>>>>
>>>>>>>> where PREFIX refers to the `--prefix` flag for Mesos configure
>>>> script.
>>>>>>>>
>>>>>>>> We would then update `mesos.pc` with the correct flags so that a
>>>>>>>> module write can simply use `pkg-config` to get all the required
>>>>>>>> flags.
>>>>>>>>
>>>>>>>> I have created an issue
>>>>>>>> https://issues.apache.org/jira/browse/MESOS-4434 to track this.
>>>>>>>>
>>>>>>>> Best,
>>>>>>>> Kapil
>>>>>>>>
>>>>>>>>
>>>>>>>> [1]: picojson is currently installed in ${PREFIX}/include. See
>>>>>>>> https://issues.apache.org/jira/browse/MESOS-3909
>>>>>>>
>>>>>>
>>>>
>

Reply via email to