blob: 33b8be6339d7bc16cdde93523026f5440c8ecc2e [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta http-equiv="CACHE-CONTROL" content="NO-CACHE">
<meta charset="UTF-8">
<title>Development Setup</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="generator" content="Jekyll v2.4.0">
<link rel="stylesheet" href="/css/font-awesome.min.css">
<link rel="stylesheet" href="/css/screen.css">
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<script src="/js/jquery-3.2.1.min.js"></script>
<!--[if lt IE 9]>
<script src="/js/html5shiv.min.js"></script>
<script src="/js/respond.min.js"></script>
<![endif]-->
<script src="/js/screen.js"></script>
<script type="text/javascript" src="/assets/javascripts/bundle.js" charset="utf-8"></script>
</head>
<body>
<header role="banner">
<nav class="mobile-nav show-on-mobiles">
<ul>
<li class="">
<a href="/">Home</a>
</li>
<li class="current">
<a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
</li>
</li>
<li class="">
<a href="/downloads/">Downloads</a>
</li>
<li class="">
<a href="/talks/">Talks</a>
</li>
<li class="">
<a href="/news/">News</a>
</li>
<li class="">
<a href="/develop/">Develop</a>
</li>
<li class="">
<a href="/help/">Help</a>
</li>
</ul>
</nav>
<div class="grid">
<div class="unit one-third center-on-mobiles">
<h1>
<a href="/">
<span class="sr-only">Apache Mnemonic</span>
<img src="/img/mnemonic_logo_v2.png" width="289" alt="Mnemonic Logo" class="logo">
</a>
<a href="https://www.apache.org/events/current-event.html">
<img src="https://www.apache.org/events/current-event-234x60.png"/>
</a>
</h1>
</div>
<nav class="main-nav unit two-thirds hide-on-mobiles">
<ul>
<li class="">
<a href="/">Home</a>
</li>
<li class="current">
<a href="/docs/">Doc<span class="show-on-mobiles">s</span><span class="hide-on-mobiles">umentation</span></a>
</li>
</li>
<li class="">
<a href="/downloads/">Downloads</a>
</li>
<li class="">
<a href="/talks/">Talks</a>
</li>
<li class="">
<a href="/news/">News</a>
</li>
<li class="">
<a href="/develop/">Develop</a>
</li>
<li class="">
<a href="/help/">Help</a>
</li>
</ul>
</nav>
</div>
<!-- Return to Top -->
<a href="#top" id="return-to-top"><i class="fa fa-chevron-up"></i></a>
</header>
<section class="docs">
<div class="grid">
<div class="docs-nav-mobile unit whole show-on-mobiles">
<select onchange="if (this.value) window.location.href=this.value">
<option value="">Navigate the docs…</option>
<optgroup label="Overview">
<option value="/docs/arch.html">Architecture</option>
<option value="/docs/features.html">Features</option>
<option value="/docs/modes.html">Mnemonic Modes</option>
<option value="/docs/memsrvcmp.html">Durable Memory Service Comparison</option>
<option value="/docs/integration.html">Integration with other projects</option>
<option value="/docs/domusecases.html">DOM Use Cases</option>
<option value="/docs/dcmusecases.html">DCM Use Cases</option>
<option value="/docs/msusecases.html">MS Use Cases</option>
<option value="/docs/sparkusecases.html">Apache Spark Integration Use Cases</option>
<option value="/docs/hadoopusecases.html">Apache Hadoop Integration Use Cases</option>
<option value="/docs/gcdata.html">Java GC data</option>
<option value="/docs/security.html">Security</option>
</optgroup>
<optgroup label="Usage">
<option value="/docs/getstarted.html">Get Started</option>
<option value="/docs/devsetup.html">Development Setup</option>
<option value="/docs/submitchanges.html">Submit Changes</option>
<option value="/docs/build.html">Project Build</option>
<option value="/docs/runtest.html">Run tests</option>
<option value="/docs/docker.html">Docker usage</option>
</optgroup>
</select>
</div>
<div class="unit four-fifths">
<article>
<h1>Development Setup</h1>
<p>This document provides a best practice for general development setup,
we suggest to use this practice on your first try for code contribution.</p>
<p>It is based on Docker and simple for preparation, no root privilege needed except for Docker and Git installation.</p>
<ul>
<li>Install Git on your system <a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git" target="_blank">Git-scm</a></li>
<li><a href="https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup" target="_blank">First-Time Git Setup</a>
<code>bash
$ git config --global user.name "&lt;Your Name&gt;"
$ git config --global user.email "&lt;Your Email Address&gt;"
</code></li>
<li>Install Docker on your system <a href="https://www.docker.com/" target="_blank">Docker Official Website</a></li>
<li>Install IDE on your Linux/MacOS/Windows box <a href="https://www.jetbrains.com/idea/" target="_blank">IntelliJ IDEA Official Website</a></li>
<li>Register an account on Github for yourself if not yet have one</li>
<li>Log into Github and fork <a href="https://github.com/apache/mnemonic" target="_blank">Apache Mnemonic repository</a>.
<a href="https://help.github.com/articles/fork-a-repo/" target="_blank">Fork and Set up Git</a></li>
<li>Configure Apache Mnemonic repo. as upstream remote in your local repository
<code>bash
$ cd &lt;your_project_folder&gt;
$ git remote add upstream https://github.com/apache/mnemonic.git
</code></li>
<li>Prepare Mnemonic Docker image on you system
<code>bash
$ docker build -t mnedev https://github.com/apache/mnemonic.git#:docker/docker-CentOS
$ # --------- OR ---------
$ docker build -t mnedev https://github.com/apache/mnemonic.git#:docker/docker-Ubuntu
</code></li>
<li>Mount your host repo. to Docker container, this following command would hide the original Mnemonic project folder in container
<code>bash
$ docker run -it -v &lt;mnemonic_project_folder&gt;:/ws/mnemonic mnedev
</code></li>
<li>Open Mnemonic project in the IDE</li>
</ul>
<p>After setup, you are able to edit project code on your host while compiling and test your code in isolated Docker environment.
Please leave enough space for docker based compiling and testing (&gt;30G for test running)</p>
<div class="section-nav">
<div class="left align-right">
<a href="/docs/getstarted.html" class="prev">Back</a>
</div>
<div class="right align-left">
<a href="/docs/submitchanges.html" class="next">Next</a>
</div>
</div>
<div class="clear"></div>
</article>
</div>
<div class="unit one-fifth hide-on-mobiles">
<aside>
<h4>Overview</h4>
<ul>
<li class=""><a href="/docs/arch.html">Architecture</a></li>
<li class=""><a href="/docs/features.html">Features</a></li>
<li class=""><a href="/docs/modes.html">Mnemonic Modes</a></li>
<li class=""><a href="/docs/memsrvcmp.html">Durable Memory Service Comparison</a></li>
<li class=""><a href="/docs/integration.html">Integration with other projects</a></li>
<li class=""><a href="/docs/domusecases.html">DOM Use Cases</a></li>
<li class=""><a href="/docs/dcmusecases.html">DCM Use Cases</a></li>
<li class=""><a href="/docs/msusecases.html">MS Use Cases</a></li>
<li class=""><a href="/docs/sparkusecases.html">Apache Spark Integration Use Cases</a></li>
<li class=""><a href="/docs/hadoopusecases.html">Apache Hadoop Integration Use Cases</a></li>
<li class=""><a href="/docs/gcdata.html">Java GC data</a></li>
<li class=""><a href="/docs/security.html">Security</a></li>
</ul>
<h4>Usage</h4>
<ul>
<li class=""><a href="/docs/getstarted.html">Get Started</a></li>
<li class="current"><a href="/docs/devsetup.html">Development Setup</a></li>
<li class=""><a href="/docs/submitchanges.html">Submit Changes</a></li>
<li class=""><a href="/docs/build.html">Project Build</a></li>
<li class=""><a href="/docs/runtest.html">Run tests</a></li>
<li class=""><a href="/docs/docker.html">Docker usage</a></li>
</ul>
</aside>
</div>
<div class="clear"></div>
</div>
</section>
<footer role="contentinfo">
<p><div align="center">Apache Mnemonic, Mnemonic, Apache, and the Mnemonic logo are trademarks of The Apache Software Foundation.</div>
<div align="center"> Copyright &copy;&nbsp;2021 <a href="https://www.apache.org/">The Apache Software Foundation</a></div></p>
</footer>
<script>
var anchorForId = function (id) {
var anchor = document.createElement("a");
anchor.className = "header-link";
anchor.href = "#" + id;
anchor.innerHTML = "<span class=\"sr-only\">Permalink</span><i class=\"fa fa-link\"></i>";
anchor.title = "Permalink";
return anchor;
};
var linkifyAnchors = function (level, containingElement) {
var headers = containingElement.getElementsByTagName("h" + level);
for (var h = 0; h < headers.length; h++) {
var header = headers[h];
if (typeof header.id !== "undefined" && header.id !== "") {
header.appendChild(anchorForId(header.id));
}
}
};
document.onreadystatechange = function () {
if (this.readyState === "complete") {
var contentBlock = document.getElementsByClassName("docs")[0] || document.getElementsByClassName("news")[0];
if (!contentBlock) {
return;
}
for (var level = 1; level <= 6; level++) {
linkifyAnchors(level, contentBlock);
}
}
};
</script>
</body>
</html>