summary refs log tree commit diff
path: root/pkgs/applications/networking/cluster/mesos/default.nix
blob: fe93a072b2cf6fd4c8898a62bbfa7947d891cd85 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
{ stdenv, lib, makeWrapper, fetchurl, fetchzip, curl, sasl, openssh, autoconf
, automake, libtool, unzip, gnutar, jdk, maven, python, wrapPython
, setuptools, distutils-cfg, boto, pythonProtobuf
}:

let version = "0.19.1";
in stdenv.mkDerivation {
  dontDisableStatic = true;

  name = "mesos-${version}";

  src = fetchurl {
    url = "http://www.apache.org/dist/mesos/${version}/mesos-${version}.tar.gz";
    sha256 = "12li5xqfcw3124qg3h2cji3yhrc7gbx91lj45zfliicwgjkbmyf1";
  };

  patches = [ ./darwin.patch ];

  buildInputs = [
    makeWrapper autoconf automake libtool curl sasl jdk maven
    python wrapPython boto distutils-cfg setuptools
  ];

  propagatedBuildInputs = [
    pythonProtobuf
  ];

  mavenRepo = import ./mesos-deps.nix { inherit stdenv curl; };

  preConfigure = ''
    export MAVEN_OPTS="-Dmaven.repo.local=$(pwd)/.m2"
    ln -s $mavenRepo .m2

    substituteInPlace src/launcher/fetcher.cpp \
      --replace '"tar' '"${gnutar}/bin/tar'    \
      --replace '"unzip' '"${unzip}/bin/unzip'

    substituteInPlace src/cli/mesos-scp        \
      --replace "'scp " "'${openssh}/bin/scp "
  '';

  configureFlags = [
    "--sbindir=\${out}/bin"
    "--with-python-headers=${python}/include"
    "--with-webui"
    "--with-java-home=${jdk}"
    "--with-java-headers=${jdk}/include"
    "--with-included-zookeeper"
  ];

  postInstall = ''
    rm -rf $out/var
    rm $out/bin/*.sh

    ensureDir $out/share/java
    cp src/java/target/mesos-*.jar $out/share/java

    shopt -s extglob
    MESOS_NATIVE_JAVA_LIBRARY=$(echo $out/lib/libmesos.*(so|dylib))
    shopt -u extglob

    ensureDir $out/nix-support
    touch $out/nix-support/setup-hook
    echo "export MESOS_NATIVE_JAVA_LIBRARY=$MESOS_NATIVE_JAVA_LIBRARY" >> $out/nix-support/setup-hook
    echo "export MESOS_NATIVE_LIBRARY=$MESOS_NATIVE_JAVA_LIBRARY" >> $out/nix-support/setup-hook

    # Inspired by: pkgs/development/python-modules/generic/default.nix
    ensureDir "$out/lib/${python.libPrefix}"/site-packages
    export PYTHONPATH="$out/lib/${python.libPrefix}/site-packages:$PYTHONPATH"
    ${python}/bin/${python.executable} src/python/setup.py install \
      --install-lib=$out/lib/${python.libPrefix}/site-packages \
      --old-and-unmanageable \
      --prefix="$out"
    rm -f "$out/lib/${python.libPrefix}"/site-packages/site.py*
  '';

  postFixup = ''
    if test -e $out/nix-support/propagated-build-inputs; then
      ln -s $out/nix-support/propagated-build-inputs $out/nix-support/propagated-user-env-packages
    fi

    for inputsfile in propagated-build-inputs propagated-native-build-inputs; do
      if test -e $out/nix-support/$inputsfile; then
        createBuildInputsPth $inputsfile "$(cat $out/nix-support/$inputsfile)"
      fi
    done

    # wrap the python programs
    declare -A pythonPathsSeen=()
    program_PYTHONPATH="$out/libexec/mesos/python"
    program_PATH=""
    _addToPythonPath "$out"
    for prog in mesos-cat mesos-ps mesos-scp mesos-tail; do
      wrapProgram "$out/bin/$prog" \
        --prefix PYTHONPATH ":" $program_PYTHONPATH
      true
    done
  '';

  meta = with lib; {
    homepage    = "http://mesos.apache.org";
    license     = licenses.asl20;
    description = "A cluster manager that provides efficient resource isolation and sharing across distributed applications, or frameworks";
    maintainers = with maintainers; [ cstrahan ];
    platforms   = with platforms; linux;
  };
}