<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"/>
  <title>Get Gearpump Distribution - Gearpump 0.7.1 Documentation</title>
  
   <meta name="description" content="How to Get Your Gearpump Distribution">
  

  

  <link rel="stylesheet" href="css/bootstrap-3.3.5.min.css">
  <style>
    body {
      padding-top: 60px;
      padding-bottom: 40px;
    }
  </style>
  <link rel="stylesheet" href="css/main.css">
  <link rel="stylesheet" href="css/pygments-default.css">
  <script src="js/vendor/modernizr-2.6.1-respond-1.1.0.min.js"></script>
</head>
<body>
  <!--[if lt IE 7]>
    <p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p>
  <![endif]-->

  <div class="navbar navbar-inverse navbar-fixed-top" id="topbar">
    <div class="container">
      <div class="navbar-header">
        <a class="navbar-brand" href="http://gearpump.io">Gearpump
          <span class="label label-primary" style="font-size: .6em">0.7.1</span>
        </a>
      </div>
      <div class="collapse navbar-collapse">
        <ul class="nav navbar-nav">
          <li><a href="index.html">Overview</a></li>

          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Introduction<b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li><a href="submit-your-1st-application.html">Submit Your 1st Application</a></li>
              <li><a href="commandline.html">Client Command Line</a></li>
              <li class="divider"></li>
              <li><a href="basic-concepts.html">Basic Concepts</a></li>
              <li><a href="features.html">Technical Highlights</a></li>
              <li><a href="message-delivery.html">Reliable Message Delivery</a></li>
              <li><a href="performance-report.html">Performance</a></li>
              <li><a href="gearpump-internals.html">Gearpump Internals</a></li>
            </ul>
          </li>

          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Deploying<b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li class="dropdown-header">Deployment</li>
              <li><a href="deployment-docker.html">Docker</a><li>
              <li><a href="deployment-local.html">Local</a><li>
              <li><a href="deployment-standalone.html">Standalone</a></li>
              <li><a href="deployment-yarn.html">YARN</a></li>
              <li class="divider"></li>
              <li><a href="deployment-ha.html">High Availability</a></li>
              <li><a href="deployment-msg-delivery.html">Reliable Message Delivery</a></li>
              <li><a href="deployment-configuration.html">Configuration</a></li>
              <li class="divider"></li>
              <li><a href="deployment-security.html">Security</a></li>
            </ul>
          </li>

          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">Programming Guide<b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li><a href="dev-write-1st-app.html">Write Your 1st App</a></li>
              <li><a href="dev-custom-serializer.html">Customized Message Passing</a></li>
              <li class="divider"></li>
              <li><a href="api/scala/index.html">Scala API</a></li>
              <li><a href="api/java/index.html">Java API</a></li>
              <li><a href="dev-rest-api.html">RESTful API</a></li>
              <li class="divider"></li>
              <li><a href="dev-connectors.html">Gearpump Connectors</a></li>
              <li class="divider"></li>
              <li><a href="dev-storm.html">Storm Compatibility</a></li>
              <!--
              <li><a href="dev-samoa.html">Samoa Compatibility</a></li>
              <li class="divider"></li>
              <li><a href="dev-iot.html">Gearpump with IoT</a></li>
              -->
            </ul>
          </li>

          <li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">More<b class="caret"></b></a>
            <ul class="dropdown-menu">
              <li><a href="how-to-contribute.html">How to Contribute</a></li>
              <li><a href="coding-style.html">Coding Style</a></li>
              <li class="divider"></li>
              <li><a href="faq.html">FAQ</a><li>
              <li><a href="about.html">About</a></li>
            </ul>
          </li>
        </ul>
      </div>
    </div>
  </div>

  <div class="container" id="content">
   
    <h1 class="title">How to Get Your Gearpump Distribution</h1>
   

   <h3 id="prepare-the-binary">Prepare the binary</h3>
<p>You can either download pre-build release package or choose to build from source code.</p>

<h4 id="download-release-binary">Download Release Binary</h4>

<p>If you choose to use pre-build package, then you don&#8217;t need to build from source code. The release package can be downloaded from:</p>

<h5 id="download-pagedownloadhtml"><a href="/download.html">Download page</a></h5>

<h4 id="build-from-source-code">Build from Source code</h4>

<p>If you choose to build the package from source code yourself, you can follow these steps:</p>

<p>1). Clone the Gearpump repository</p>

<div class="highlight"><pre><code class="language-bash">  git clone https://github.com/gearpump/gearpump.git
  <span class="nb">cd </span>gearpump</code></pre></div>

<p>2). Build package</p>

<div class="highlight"><pre><code class="language-bash">  <span class="c">## Please use scala 2.11</span>
  <span class="c">## The target package path: target/gearpump-$VERSION.zip</span>
  sbt clean assembly packArchiveZip</code></pre></div>

<p>After the build, there will be a package file gearpump-${version}.zip generated under output/target/ folder.</p>

<p><strong>NOTE:</strong>
  Please set JAVA_HOME environment before the build.</p>

<p>On linux:</p>

<div class="highlight"><pre><code class="language-bash">  <span class="nb">export </span><span class="nv">JAVA_HOME</span><span class="o">={</span>path/to/jdk/root/path<span class="o">}</span></code></pre></div>

<p>On Windows:</p>

<div class="highlight"><pre><code class="language-bash">  <span class="nb">set </span><span class="nv">JAVA_HOME</span><span class="o">={</span>path/to/jdk/root/path<span class="o">}</span></code></pre></div>

<p><strong>NOTE:</strong>
The build requires network connection. If you are behind an enterprise proxy, make sure you have set the proxy in your env before running the build commands.
For windows:</p>

<div class="highlight"><pre><code class="language-bash">Set <span class="nv">HTTP_PROXY</span><span class="o">=</span>http://host:port
<span class="nb">set </span><span class="nv">HTTPS_PROXY</span><span class="o">=</span> http://host:port</code></pre></div>

<p>For Linux:</p>

<div class="highlight"><pre><code class="language-bash"><span class="nb">export </span><span class="nv">HTTP_PROXY</span><span class="o">=</span>http://host:port
<span class="nb">export </span><span class="nv">HTTPS_PROXY</span><span class="o">=</span> http://host:port</code></pre></div>

<h3 id="gearpump-package-structure">Gearpump package structure</h3>

<p>You need to flatten the .zip file to use it, on Linux, you can</p>

<div class="highlight"><pre><code class="language-bash"><span class="c">## please replace ${version} below with actual version used</span>
unzip gearpump-<span class="k">${</span><span class="nv">version</span><span class="k">}</span>.zip</code></pre></div>

<p>After decompression, the directory structure looks like picture 1.</p>

<p><img src="img/layout.png" alt="Layout" /></p>

<p>Under bin/ folder, there are script files for Linux(bash script) and Windows(.bat script).</p>

<table>
  <thead>
    <tr>
      <th>script</th>
      <th>function</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>local</td>
      <td>You can start the Gearpump cluster in single JVM(local mode), or in a distributed cluster(cluster mode). To start the cluster in local mode, you can use the local /local.bat helper scripts, it is very useful for developing or troubleshooting.</td>
    </tr>
    <tr>
      <td>master</td>
      <td>To start Gearpump in cluster mode, you need to start one or more master nodes, which represent the global resource management center. master/master.bat is launcher script to boot the master node.</td>
    </tr>
    <tr>
      <td>worker</td>
      <td>To start Gearpump in cluster mode, you also need to start several workers, with each worker represent a set of local resources. worker/worker.bat is launcher script to start the worker node.</td>
    </tr>
    <tr>
      <td>services</td>
      <td>This script is used to start backend REST service and other services for frontend UI dashboard.</td>
    </tr>
  </tbody>
</table>

<p>Please check <a href="commandline.html">Command Line Syntax</a> for more information for each script.</p>


  </div> <!-- /container -->

  <script src="js/vendor/jquery-2.1.4.min.js"></script>
  <script src="js/vendor/bootstrap-3.3.5.min.js"></script>
  <script src="js/vendor/anchor-1.1.1.min.js"></script>
  <script src="js/main.js"></script>

  <!-- MathJax Section -->
  <script type="text/x-mathjax-config">
    MathJax.Hub.Config({
      TeX: { equationNumbers: { autoNumber: "AMS" } }
    });
  </script>
  <script>
    // Note that we load MathJax this way to work with local file (file://), HTTP and HTTPS.
    // We could use "//cdn.mathjax...", but that won't support "file://".
    (function(d, script) {
      script = d.createElement('script');
      script.type = 'text/javascript';
      script.async = true;
      script.onload = function(){
        MathJax.Hub.Config({
          tex2jax: {
            inlineMath: [ ["$", "$"], ["\\\\(","\\\\)"] ],
            displayMath: [ ["$$","$$"], ["\\[", "\\]"] ],
            processEscapes: true,
            skipTags: ['script', 'noscript', 'style', 'textarea', 'pre']
          }
        });
      };
      script.src = ('https:' == document.location.protocol ? 'https://' : 'http://') +
        'cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML';
      d.getElementsByTagName('head')[0].appendChild(script);
    }(document));
  </script>
</body>
</html>
