blob: 78399aa756bd195a7243143a934da111b1dfbda8 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- This is broken by doc revisioning.
-->
<link rel="shortcut icon" href="../../img/favicon.ico">
<title>Setting Up Go to Contribute to Newt and Newtmgr Tools - Apache Mynewt</title>
<link href="../../css/bootstrap-3.0.3.min.css" rel="stylesheet">
<link rel="stylesheet" href="../../css/highlight.css">
<link href="../../css/base.css" rel="stylesheet">
<link href="../../css/custom.css" rel="stylesheet">
<link href="../../css/v2.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<script>
(function(i, s, o, g, r, a, m) {
i["GoogleAnalyticsObject"] = r;
(i[r] =
i[r] ||
function() {
(i[r].q = i[r].q || []).push(arguments);
}),
(i[r].l = 1 * new Date());
(a = s.createElement(o)), (m = s.getElementsByTagName(o)[0]);
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m);
})(window, document, "script", "//www.google-analytics.com/analytics.js", "ga");
ga("create", "UA-72162311-1", "auto");
ga("send", "pageview");
</script>
</head>
<body class="Setting Up Go to Contribute to Newt and Newtmgr Tools">
<div class="container">
<div class="row v2-main-banner">
<a class="logo-cell" href="/">
<img class="logo" src="/img/logo.png">
</a>
<div class="tagline-cell">
<h4 class="tagline">An OS to build, deploy and securely manage billions of devices</h4>
</div>
<div class="news-cell">
<div class="well">
<h4>Latest News:</h4> <a href="/download">Apache Mynewt 1.12.0, Apache NimBLE 1.7.0 </a> released (April 4, 2024)
</div>
</div>
</div>
</div>
<nav id="navbar" class="navbar navbar-inverse affix-top" data-spy="affix" data-offset-top="150" role="navigation">
<div class="container">
<!-- Collapsed navigation -->
<div class="navbar-header">
<!-- Expander button -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<!-- Expanded navigation -->
<div class="navbar-collapse collapse">
<!-- Main navigation -->
<ul class="nav navbar-nav navbar-right">
<li
class=""
>
<a href="/"><i class="fa fa-home" style="font-size: larger;"></i></a>
</li>
<li
class="important"
>
<a href="/quick-start/">Quick Start</a>
</li>
<li
class=""
>
<a href="/about/">About</a>
</li>
<li
class=""
>
<a href="/talks/">Talks</a>
</li>
<li
class="active"
>
<a href="/documentation/">Documentation</a>
</li>
<li
class=""
>
<a href="/download/">Download</a>
</li>
<li
class=""
>
<a href="/community/">Community</a>
</li>
<li
class=""
>
<a href="/events/">Events</a>
</li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="row">
<div class="col-md-3 v2-sidebar sidebar-container"><div id="docSidebar" class="hidden-print" role="complementary">
<div class="top">
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search documentation" />
</div>
</form>
</div>
</div>
<ul class="toc-nav">
<li class="doc-version"><select class="form-control" onchange="if (this.value) window.location.href=this.value">
<option value="/latest">
Version: master
</option>
<option value="/v1_12_0/" >
Version: 1.12.0
</option>
<option value="/v1_11_0/" >
Version: 1.11.0
</option>
<option value="/v1_10_0/" >
Version: 1.10.0
</option>
<option value="/v1_9_0/" >
Version: 1.9.0
</option>
<option value="/v1_8_0/" >
Version: 1.8.0
</option>
<option value="/v1_7_0/" >
Version: 1.7.0
</option>
<option value="/v1_6_0/" >
Version: 1.6.0
</option>
<option value="/v1_5_0/" >
Version: 1.5.0
</option>
<option value="/v1_4_0/" >
Version: 1.4.0
</option>
<option value="/v1_3_0/os/introduction" selected="selected" >
Version: 1.3.0
</option>
<option value="/v1_2_0/os/introduction" >
Version: 1.2.0
</option>
<option value="/v1_1_0/os/introduction" >
Version: 1.1.0
</option>
<option value="/v1_0_0/os/introduction" >
Version: 1.0.0
</option>
<option value="/v0_9_0/os/introduction" >
Version: 0.9.0
</option>
</select></li>
<li ><a href="../../os/introduction/">Mynewt Documentation</a>
</li>
<li><a href="
../../newt/install/prev_releases/
">Appendix</a>
<ul>
<li >
<a href="../../newt/install/prev_releases/">Installing Previous Releases of Newt</a>
</li>
<li >
<a href="../../newtmgr/prev_releases/">Installing Previous Releases of Newtmgr</a>
</li>
<li class="active">
<a href="./">Setting Up Go to Contribute to Newt and Newtmgr Tools</a>
</li>
<li >
<a href="../ide/">Using an IDE to Develop Mynewt Applications</a>
</li>
<li >
<a href="../how_to_edit_docs/">Edit Docs</a>
</li>
<li >
<a href="../answers/">FAQ</a>
</li>
</ul>
</li>
</ul>
</div></div>
<div class="col-md-9" role="main">
<div class="doc-header">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="/documentation/">Docs</a></li>
<li>&raquo; <a href="newt/install/prev_releases/">Appendix</a></li>
<li>&raquo; Setting Up Go to Contribute to Newt and Newtmgr Tools</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/apache/mynewt-site/blob/master/docs/faq/go_env.md"
class="icon icon-github"> Edit on GitHub</a>
</li>
</ul>
</div>
</div>
<div class="alert alert-warning">
<p>
Version 1.3.0 is not the most recent version of the Apache Mynewt
documentation. Click <a href="/latest">here</a> to read the latest
version.
</p>
</div>
<h2 id="contributing-to-newt-or-newtmgr-tools">Contributing to Newt or Newtmgr Tools</h2>
<p>Newt and Newtmgr are written in Go (golang). This guide shows you how to install Go and setup your environment to update and build the tools if you want to: </p>
<ul>
<li>
<p>Build the tools with latest updates from the master branch on Linux or Windows platforms. </p>
<p><strong>Note:</strong> For Mac OS, you can use the <code>brew install mynewt-newt -HEAD</code> and the <code>brew install mynewt-newtmgr --HEAD</code> commands.</p>
</li>
<li>
<p>Contribute to newt or newtmgr features or fix bugs.</p>
</li>
</ul>
<p>This guide shows you how to perform the following:</p>
<ol>
<li>Install Mac OS X, Linux, Windows. (Tasks that are specific to each platform are called out.)</li>
<li>Setup the Go environment.</li>
<li>Download the source, build, and install the newt or newtmgr tools.</li>
<li>Update and rebuild the tools. </li>
</ol>
<p><strong>Note:</strong> You will also need to read and follow the instructions from the <a href="/faq/answers/">FAQ</a> to set up your git repos to submit changes.</p>
<h3 id="step-1-installing-go">Step 1: Installing Go</h3>
<p>The latest master branch of newt and newtmgr requires GO version 1.10. You can skip this step and proceed to Step 2 if you already have Go version 1.10 installed.</p>
<p><br></p>
<h4 id="installing-go-on-mac-os-x">Installing Go on Mac OS X</h4>
<p>If you do not have Homebrew installed, run the following command. You will be prompted for your sudo password.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ ruby -e &quot;$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&quot;
</code></pre></div>
<p>You can also extract (or <code>git clone</code>) Homebrew and install it to /usr/local.</p>
<p><br>
Use brew to install Go:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ brew install go
==&gt;
...
...
==&gt; Summary
🍺 /usr/local/Cellar/go/1.10.3: 8,170 files, 336.8MB
</code></pre></div>
<p>You can also download the Go package directly from (https://golang.org/dl/) and install it in /usr/local/bin instead of brewing it. </p>
<p><br></p>
<h4 id="installing-go-on-linux-and-windows">Installing Go on Linux and Windows</h4>
<p>You can download Go from <a href="https://golang.org/dl/">https://golang.org/dl/</a>.</p>
<p><br></p>
<h3 id="step-2-setting-up-your-go-environment">Step 2: Setting Up Your Go Environment</h3>
<p>This section describes the Go environment and how to setup a Go workspace. If you already have a Go workspace for your other Go projects, you can skip this step and proceed to Step 3.</p>
<p>Go provides an environment to compile Go code, construct Go packages, and import Go code. You will use Go commands to import the newt or newtmgr package repository into your local Go environment. The Go language environment dictates a specific directory structure, or workspace in Go parlance. It must contain three sibling directories with the names <strong>src</strong>, <strong>pkg</strong> and <strong>bin</strong>: </p>
<ul>
<li>src contains Go source files organized into packages (one package per directory)</li>
<li>pkg contains package objects</li>
<li>bin contains the Go application executables that Go builds and installs.</li>
</ul>
<p>The <strong>GOPATH</strong> environment variable specifies the location of your workspace. To setup this workspace environment, create a <strong>dev</strong> directory and then a <strong>go</strong> directory under it. Set the GOPATH environment variable to this directory where you will clone the newt and newtmgr repositories.</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ cd $HOME
$ mkdir -p dev/go
$ cd dev/go
$ export GOPATH=`pwd`
</code></pre></div>
<p><br>
Add the following export statements to your ~/.bash_profile file and source the file:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>export GOPATH=$HOME/dev/go
export PATH=$GOPATH/bin:$PATH
</code></pre></div>
<p><br></p>
<h3 id="step-3-downloading-the-source-and-installing-the-tools">Step 3: Downloading the Source and Installing the Tools</h3>
<p>Newt and newtmgr are individual Go packages and have their own git repositories. You can download the source and install one or both tools.</p>
<p>We use the <code>go get</code> command to download the source, build, and install the binary in the <strong>$GOPATH/bin</strong> directory. </p>
<p><br></p>
<h4 id="downloading-and-installing-the-newt-tool">Downloading and Installing the Newt Tool</h4>
<p>The newt Go package is <strong>mynewt.apache.org/newt/newt</strong> and is stored in the <a href="https://github.com/apache/mynewt-newt">Apache Mynewt newt tool repository mirrored on github</a>. </p>
<p>Download the newt package source and install the tool:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$cd $GOPATH
$go get mynewt.apache.org/newt/newt
$cd $GOPATH/src/mynewt.apache.org/newt
$ls
DISCLAIMER RELEASE_NOTES.md util
INSTALLING.md build.sh viper
LICENSE newt yaml
NOTICE newtmgr
README.md newtvm
$git status
On branch master
Your branch is up-to-date with &#39;origin/master&#39;.
nothing to commit, working directory clean
</code></pre></div>
<p><br>
<strong>Note:</strong> The source code under the <strong>newtmgr</strong> directory is no longer used or updated. The current <strong>newtmgr</strong> source has its own Git repository.</p>
<p><br>
Check that the newt binary is installed and you are using the one from ** $GOPATH/bin**:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ls $GOPATH/bin/newt
~/dev/go/bin/newt
$which newt
~/dev/go/bin/newt
$newt version
Apache Newt version: 1.1.0-dev
</code></pre></div>
<p><br></p>
<h4 id="downloading-and-installing-the-newtmgr-tool">Downloading and Installing the Newtmgr Tool</h4>
<p>The newtmgr Go package is <strong>mynewt.apache.org/newtmgr/newtmgr</strong>. It is stored in the <a href="https://github.com/apache/mynewt-newtmgr">Apache Mynewt newtmgr tool repository mirrored on github</a>.</p>
<p>Download the newtmgr package and install the tool:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$cd $GOPATH
$go get mynewt.apache.org/newtmgr/newtmgr
$cd $GOPATH/src/mynewt.apache.org/newtmgr
$ls
LICENSE NOTICE README.md newtmgr nmxact
$git status
On branch master
Your branch is up-to-date with &#39;origin/master&#39;.
nothing to commit, working directory clean
</code></pre></div>
<p><br>
Check that the newtmgr binary is installed and you are using the one from <strong>$GOPATH/bin</strong>:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$ls $GOPATH/bin/newtmgr
~/dev/go/bin/newtmgr
$which newtmgr
~/dev/go/bin/newtmgr
</code></pre></div>
<p><br></p>
<h3 id="step-4-updating-and-rebuilding-the-tools">Step 4: Updating and Rebuilding the Tools:</h3>
<p>This section shows you how to rebuild the newt and newtmgr tools with the latest updates from the master branch or after you have made changes in your branch. </p>
<p>Here is the general procedure to rebuild either the newt or newtmgr tool. The only difference is the directory where you will be executing the commands from. You will need to repeat the procedure to rebuild both tools.</p>
<ol>
<li>Change to the directory where the local Git repository for the tool is installed.</li>
<li>Pull the latest changes from the master branch. If you made changes you will need to rebase with <strong>origin master</strong> (See <a href="/faq/answers/">FAQ</a>).</li>
<li>Build and install the tool.</li>
</ol>
<p><br>
Change to the directory where the source for the tool is installed.</p>
<p>For the <strong>newt</strong> tool:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$cd $GOPATH/src/mynewt.apache.org/newt/newt
</code></pre></div>
<p>For the <strong>newtmgr</strong> tool:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$cd $GOPATH/src/mynewt.apache.org/newtmgr/newtmgr
</code></pre></div>
<p><br>
After you change to the specific tool directory, get the latest updates from the master branch. If you made changes and need to rebase with the origin, add the <code>--rebase origin master</code> arguments to the <code>git pull</code> command:</p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$git pull
</code></pre></div>
<p><br>
Build and install the tool. The updated binary will be installed in the <strong>$GOPATH/bin</strong> directory: </p>
<div class="codehilite" style="background: #ffffff"><pre style="line-height: 125%;"><span></span><code>$go install
</code></pre></div>
<p>You can run the <code>ls -l</code> command to check the modification time for the binary to ensure the new version is installed. </p>
<div class="row">
<ul class="nav nav-pills" style="margin-bottom: 10px">
<li>
</li>
<li class="pull-right">
</li>
</ul>
</div>
<footer class="row">
<div class="col-xs-12">
<p class="copyright">Apache Mynewt is available under Apache License, version 2.0.</p>
</div>
<div class="col-xs-12">
<div class="logos">
<a href="https://www.apache.org/">
<img src="/img/asf_logo_wide_small.png" alt="Apache" title="Apache">
</a>
<p>
Copyright © 2015-2021 The Apache Software Foundation.<br>
<small class="footnote">
Apache Mynewt, Mynewt, Apache, the Apache feather logo, and the Apache Mynewt
project logo are either registered trademarks or trademarks of the Apache
Software Foundation in the United States and other countries.
</small>
</p>
<a href="">
<img src="https://www.countit.com/images/add_to_slack.png" alt="Slack Icon" title="Join our Slack Community" />
</a>
</div>
</div>
<a href="https://www.apache.org/licenses/">
<button class="button-footer-asf">
License
</button>
</a>
<a href="https://www.apache.org/foundation/sponsorship.html">
<button class="button-footer-asf">
Sponsorship
</button>
</a>
<a href="https://www.apache.org/foundation/thanks.html">
<button class="button-footer-asf">
Thanks
</button>
</a>
<a href="https://www.apache.org/security/">
<button class="button-footer-asf">
Security
</button>
</a>
<a href="https://apache.org/events/current-event">
<button class="button-footer-asf">
ASF Events
</button>
</a>
</footer>
</div>
</div>
</div>
<script src="../../js/jquery-1.10.2.min.js"></script>
<script src="../../js/bootstrap-3.0.3.min.js"></script>
<script src="../../js/highlight.pack.js"></script>
<script src="../../js/base.js"></script>
<script src="../../js/custom.js"></script>
<script src="search/main.js"></script>
</body>
</html>