Thicket data repository for the EEG
1{
2 "id": "https://mort.io/blog/docker-docker/",
3 "title": "Docker Docker",
4 "link": "https://mort.io/blog/docker-docker/",
5 "updated": "2017-05-06T00:00:00",
6 "published": "2017-05-06T00:00:00",
7 "summary": "<h1><a href=\"https://mort.io/blog/docker-docker/#bootstrapping-docker-for-arm64-aka-aarch64\">Bootstrapping Docker for ARM64 (aka AARCH64)</a></h1>\n<p>Basic process is:</p>\n<ul>\n<li>bootstrap ARM64 <code>go</code> toolchain on x86, and install</li>\n<li>build ARM64 <code>go1.7.5</code> toolchain needed for <code>docker</code> build</li>\n<li>bootstrap ARM64 <code>docker</code> v1.10.3</li>\n<li>use bootstrapped <code>docker</code> to provide containerised build environment for\nbuilding later versions</li>\n</ul>\n<p>Instructions below are for CentOS 7 for Reasons(tm). Package details and so on\nwill vary on other distros.</p>\n<h2><a href=\"https://mort.io/blog/docker-docker/#build-go-bootstrap-toolchain\">Build <code>go</code> bootstrap toolchain</a></h2>\n<p>On x86 host:</p>\n<ul>\n<li>build basic go1.4 sufficient to bootstrap</li>\n</ul>\n<pre><code><span><span><span>cd</span></span>\n</span><span><span><span>curl</span></span><span><span><span> -</span>O</span> https://storage.googleapis.com/golang/go1.4-bootstrap-20161024.tar.gz</span>\n</span><span><span><span>tar</span></span><span> xzvf go1.4-bootstrap-20161024.tar.gz</span>\n</span><span><span><span>mv</span></span><span> go go1.4</span>\n</span><span><span><span>cd</span></span><span> go1.4/src</span>\n</span><span><span><span>./make.bash</span></span>\n</span></code></pre>\n<ul>\n<li>cross-compile go1.7 (latest)</li>\n</ul>\n<pre><code><span><span><span>mkdir</span></span><span><span><span> -</span>p</span> <span><span>~</span></span>/go/src</span>\n</span><span><span><span>cd</span></span><span> <span><span>~</span></span>/go/src</span>\n</span><span><span><span>git</span></span><span> clone https://go.googlesource.com/go</span>\n</span><span><span><span>cd</span></span><span> go</span>\n</span><span><span><span>git</span></span><span> checkout go1.7.5</span>\n</span><span><span><span>cd</span></span><span> src</span>\n</span><span><span>GOOS</span><span>=</span><span>linux</span> <span>GOARCH</span><span>=</span><span>arm64</span> <span><span>./bootstrap.bash</span></span>\n</span></code></pre>\n<ul>\n<li>transfer cross-compiled toolchain to ARM64 host</li>\n</ul>\n<pre><code><span><span><span>scp</span></span><span> <span><span>~</span></span>/go/src/go-linux-arm64-bootstrap.tbz HOST:<span><span>~</span></span></span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/docker-docker/#build-arm64-go1-7-5\">Build ARM64 <code>go1.7.5</code></a></h2>\n<ul>\n<li>produce bootstrap toolchains</li>\n</ul>\n<pre><code><span><span><span>cd</span></span>\n</span><span><span><span>tar</span></span><span> xvf go-linux-arm64-bootstrap.tbz</span>\n</span></code></pre>\n<ul>\n<li>use the bootstrap toolchain to build a modern <code>go</code> install</li>\n</ul>\n<pre><code><span><span><span>mkdir</span></span><span><span><span> -</span>p</span> <span><span>~</span></span>/go/src</span>\n</span><span><span><span>cd</span></span><span> <span><span>~</span></span>/go/src</span>\n</span><span><span><span>git</span></span><span> clone https://go.googlesource.com/go</span>\n</span><span><span><span>cd</span></span><span> go</span>\n</span><span><span><span>git</span></span><span> checkout go1.7.5</span>\n</span><span><span><span>cd</span></span><span> src</span>\n</span><span><span>GOROOT_BOOTSTRAP</span><span>=</span><span><span><span>~</span></span>/go-linux-arm64-bootstrap</span> <span><span>./make.bash</span></span>\n</span><span><span><span>mv</span></span><span> <span><span>~</span></span>/go/src/go/bin <span><span>~</span></span>/go/bin</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/docker-docker/#bootstrap-arm64-docker\">Bootstrap ARM64 Docker</a></h2>\n<ul>\n<li>get a recent <code>git</code></li>\n</ul>\n<pre><code><span><span><span>sudo</span></span><span> yum remove git</span>\n</span><span><span><span>wget</span></span><span> https://github.com/git/git/archive/v2.12.2.tar.gz</span>\n</span><span><span><span>tar</span></span><span> xvf v2.12.2.tar.gz</span>\n</span><span><span><span>cd</span></span><span> git-<span>*</span></span>\n</span><span><span><span>which</span></span><span> git</span>\n</span><span><span><span>sudo</span></span><span> yum install perl-devel hg curl-devel</span>\n</span><span><span><span>make</span></span><span> configure</span>\n</span><span><span><span>./configure</span></span><span><span><span> --</span>prefix</span><span>=</span>/usr/local</span>\n</span><span><span><span>make</span></span><span><span><span> -</span>j8</span></span>\n</span><span><span><span>sudo</span></span><span> make install</span>\n</span></code></pre>\n<ul>\n<li>install dev dependencies</li>\n</ul>\n<pre><code><span><span><span>sudo</span></span><span> yum install btrfs-progs-devel device-mapper-devel</span>\n</span></code></pre>\n<ul>\n<li>clone source</li>\n</ul>\n<pre><code><span><span><span>cd</span></span><span> <span><span>~</span></span>/go</span>\n</span><span><span><span>mkdir</span></span><span><span><span> -</span>p</span> src/github.com/docker</span>\n</span><span><span><span>cd</span></span><span> src/github.com/docker</span>\n</span><span><span><span>git</span></span><span> clone git@github.com:docker/docker</span>\n</span><span><span><span>cd</span></span><span> docker</span>\n</span></code></pre>\n<ul>\n<li>build components</li>\n</ul>\n<pre><code><span><span><span>git</span></span><span> co v1.10.3</span>\n</span><span><span>(</span> <span><span>cd</span></span><span> vendor</span> <span>&&</span> <span>for</span><span> n <span>in</span> src/<span>*</span></span> <span>;</span> <span>do</span> <span><span>ln</span></span><span><span><span> -</span>s</span> <span><span>$</span><span>n</span></span></span> <span>;</span> <span>done</span><span> </span><span>)</span>\n</span><span><span><span>./hack/make.sh</span></span><span> dynbinary</span>\n</span><span><span><span>rm</span></span><span><span><span> -</span>rf</span> vendor</span> <span>&&</span> <span><span>git</span></span><span> checkout . <span><span>#</span></span><span> tidy up symlinking</span><span>\n</span></span></span></code></pre>\n<p>Note that a current bug in Ubuntu packaging metadata means a small edit needs to\nbe made to <code>./Dockerfile.aarch64</code>: change the <code>apt-get update &&</code> to <code>apt-get update ;</code> so that the build doesn\u2019t stop at the first hurdle, updating packages.</p>\n<ul>\n<li>run daemon</li>\n</ul>\n<pre><code><span><span><span>#</span></span><span> sudo rm -rf /var/lib/docker /etc/docker/config.json # DANGEROUS!</span><span>\n</span></span><span><span><span>sudo</span></span><span> ./bundles/1.10.3/dynbinary/docker daemon<span><span> -</span>D</span><span><span> --</span>group</span><span>=</span>wheel</span>\n</span></code></pre>\n<ul>\n<li>run client to check</li>\n</ul>\n<pre><code><span><span><span>$</span></span><span> PATH=<span><span>$</span><span>(</span><span><span>pwd</span></span><span> <span><span>-</span>P</span></span><span>)</span></span>/bundles/1.10.3/dynbinary/:<span><span>$</span><span>PATH</span></span></span>\n</span><span><span><span>$</span></span><span> docker version</span>\n</span><span><span><span>Client:</span></span>\n</span><span> <span><span>Version:</span></span><span> 1.10.3</span>\n</span><span> <span><span>API</span></span><span> version: 1.22</span>\n</span><span> <span><span>Go</span></span><span> version: go1.7.5</span>\n</span><span> <span><span>Git</span></span><span> commit: 20f81dde9</span>\n</span><span> <span><span>Built:</span></span><span> Tue Apr 4 00:27:13 2017</span>\n</span><span> <span><span>OS/Arch:</span></span><span> linux/arm64</span>\n</span><span>\n</span><span><span><span>Server:</span></span>\n</span><span> <span><span>Version:</span></span><span> 1.10.3</span>\n</span><span> <span><span>API</span></span><span> version: 1.22</span>\n</span><span> <span><span>Go</span></span><span> version: go1.7.5</span>\n</span><span> <span><span>Git</span></span><span> commit: 20f81dde9</span>\n</span><span> <span><span>Built:</span></span><span> Tue Apr 4 00:27:13 2017</span>\n</span><span> <span><span>OS/Arch:</span></span><span> linux/arm64</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/docker-docker/#build-docker\">Build Docker</a></h2>\n<ul>\n<li>reissue <code>make</code> using containerised build</li>\n</ul>\n<pre><code><span><span><span>export</span> <span>DOCKER_BUILDTAGS</span><span>=</span><span><span><span>'</span>apparmor selinux seccomp<span>'</span></span></span></span>\n</span><span><span><span>git</span></span><span> co v17.05.0-ce <span><span>#</span></span><span> or v1.12.3 or master or whatever</span><span>\n</span></span></span><span><span><span>make <span><span>#</span></span><span> transient failure of first build; restart succeeded</span><span>\n</span></span></span></span><span><span><span>make</span></span><span> deb</span>\n</span><span><span><span>mkdir</span></span><span> contrib/builder/rpm/aarch64</span>\n</span><span><span><span>make</span></span><span> rpm</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/docker-docker/#notes\">Notes</a></h2>\n<ul>\n<li>Resulting <code>17.05-dev</code> binaries fail due to missing <code>libapparmor.so</code></li>\n<li>Static binary build no longer supported?</li>\n<li><code>DOCKER_BUILDTAGS</code> environment variable no longer supported?</li>\n<li><code>1.12.3</code> and <code>1.13.1</code> also built</li>\n<li>Build of RPM or DEB packages fails due, I think, to DIND not working</li>\n</ul>",
8 "content": "<h1><a href=\"https://mort.io/blog/docker-docker/#bootstrapping-docker-for-arm64-aka-aarch64\">Bootstrapping Docker for ARM64 (aka AARCH64)</a></h1>\n<p>Basic process is:</p>\n<ul>\n<li>bootstrap ARM64 <code>go</code> toolchain on x86, and install</li>\n<li>build ARM64 <code>go1.7.5</code> toolchain needed for <code>docker</code> build</li>\n<li>bootstrap ARM64 <code>docker</code> v1.10.3</li>\n<li>use bootstrapped <code>docker</code> to provide containerised build environment for\nbuilding later versions</li>\n</ul>\n<p>Instructions below are for CentOS 7 for Reasons(tm). Package details and so on\nwill vary on other distros.</p>\n<h2><a href=\"https://mort.io/blog/docker-docker/#build-go-bootstrap-toolchain\">Build <code>go</code> bootstrap toolchain</a></h2>\n<p>On x86 host:</p>\n<ul>\n<li>build basic go1.4 sufficient to bootstrap</li>\n</ul>\n<pre><code><span><span><span>cd</span></span>\n</span><span><span><span>curl</span></span><span><span><span> -</span>O</span> https://storage.googleapis.com/golang/go1.4-bootstrap-20161024.tar.gz</span>\n</span><span><span><span>tar</span></span><span> xzvf go1.4-bootstrap-20161024.tar.gz</span>\n</span><span><span><span>mv</span></span><span> go go1.4</span>\n</span><span><span><span>cd</span></span><span> go1.4/src</span>\n</span><span><span><span>./make.bash</span></span>\n</span></code></pre>\n<ul>\n<li>cross-compile go1.7 (latest)</li>\n</ul>\n<pre><code><span><span><span>mkdir</span></span><span><span><span> -</span>p</span> <span><span>~</span></span>/go/src</span>\n</span><span><span><span>cd</span></span><span> <span><span>~</span></span>/go/src</span>\n</span><span><span><span>git</span></span><span> clone https://go.googlesource.com/go</span>\n</span><span><span><span>cd</span></span><span> go</span>\n</span><span><span><span>git</span></span><span> checkout go1.7.5</span>\n</span><span><span><span>cd</span></span><span> src</span>\n</span><span><span>GOOS</span><span>=</span><span>linux</span> <span>GOARCH</span><span>=</span><span>arm64</span> <span><span>./bootstrap.bash</span></span>\n</span></code></pre>\n<ul>\n<li>transfer cross-compiled toolchain to ARM64 host</li>\n</ul>\n<pre><code><span><span><span>scp</span></span><span> <span><span>~</span></span>/go/src/go-linux-arm64-bootstrap.tbz HOST:<span><span>~</span></span></span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/docker-docker/#build-arm64-go1-7-5\">Build ARM64 <code>go1.7.5</code></a></h2>\n<ul>\n<li>produce bootstrap toolchains</li>\n</ul>\n<pre><code><span><span><span>cd</span></span>\n</span><span><span><span>tar</span></span><span> xvf go-linux-arm64-bootstrap.tbz</span>\n</span></code></pre>\n<ul>\n<li>use the bootstrap toolchain to build a modern <code>go</code> install</li>\n</ul>\n<pre><code><span><span><span>mkdir</span></span><span><span><span> -</span>p</span> <span><span>~</span></span>/go/src</span>\n</span><span><span><span>cd</span></span><span> <span><span>~</span></span>/go/src</span>\n</span><span><span><span>git</span></span><span> clone https://go.googlesource.com/go</span>\n</span><span><span><span>cd</span></span><span> go</span>\n</span><span><span><span>git</span></span><span> checkout go1.7.5</span>\n</span><span><span><span>cd</span></span><span> src</span>\n</span><span><span>GOROOT_BOOTSTRAP</span><span>=</span><span><span><span>~</span></span>/go-linux-arm64-bootstrap</span> <span><span>./make.bash</span></span>\n</span><span><span><span>mv</span></span><span> <span><span>~</span></span>/go/src/go/bin <span><span>~</span></span>/go/bin</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/docker-docker/#bootstrap-arm64-docker\">Bootstrap ARM64 Docker</a></h2>\n<ul>\n<li>get a recent <code>git</code></li>\n</ul>\n<pre><code><span><span><span>sudo</span></span><span> yum remove git</span>\n</span><span><span><span>wget</span></span><span> https://github.com/git/git/archive/v2.12.2.tar.gz</span>\n</span><span><span><span>tar</span></span><span> xvf v2.12.2.tar.gz</span>\n</span><span><span><span>cd</span></span><span> git-<span>*</span></span>\n</span><span><span><span>which</span></span><span> git</span>\n</span><span><span><span>sudo</span></span><span> yum install perl-devel hg curl-devel</span>\n</span><span><span><span>make</span></span><span> configure</span>\n</span><span><span><span>./configure</span></span><span><span><span> --</span>prefix</span><span>=</span>/usr/local</span>\n</span><span><span><span>make</span></span><span><span><span> -</span>j8</span></span>\n</span><span><span><span>sudo</span></span><span> make install</span>\n</span></code></pre>\n<ul>\n<li>install dev dependencies</li>\n</ul>\n<pre><code><span><span><span>sudo</span></span><span> yum install btrfs-progs-devel device-mapper-devel</span>\n</span></code></pre>\n<ul>\n<li>clone source</li>\n</ul>\n<pre><code><span><span><span>cd</span></span><span> <span><span>~</span></span>/go</span>\n</span><span><span><span>mkdir</span></span><span><span><span> -</span>p</span> src/github.com/docker</span>\n</span><span><span><span>cd</span></span><span> src/github.com/docker</span>\n</span><span><span><span>git</span></span><span> clone git@github.com:docker/docker</span>\n</span><span><span><span>cd</span></span><span> docker</span>\n</span></code></pre>\n<ul>\n<li>build components</li>\n</ul>\n<pre><code><span><span><span>git</span></span><span> co v1.10.3</span>\n</span><span><span>(</span> <span><span>cd</span></span><span> vendor</span> <span>&&</span> <span>for</span><span> n <span>in</span> src/<span>*</span></span> <span>;</span> <span>do</span> <span><span>ln</span></span><span><span><span> -</span>s</span> <span><span>$</span><span>n</span></span></span> <span>;</span> <span>done</span><span> </span><span>)</span>\n</span><span><span><span>./hack/make.sh</span></span><span> dynbinary</span>\n</span><span><span><span>rm</span></span><span><span><span> -</span>rf</span> vendor</span> <span>&&</span> <span><span>git</span></span><span> checkout . <span><span>#</span></span><span> tidy up symlinking</span><span>\n</span></span></span></code></pre>\n<p>Note that a current bug in Ubuntu packaging metadata means a small edit needs to\nbe made to <code>./Dockerfile.aarch64</code>: change the <code>apt-get update &&</code> to <code>apt-get update ;</code> so that the build doesn\u2019t stop at the first hurdle, updating packages.</p>\n<ul>\n<li>run daemon</li>\n</ul>\n<pre><code><span><span><span>#</span></span><span> sudo rm -rf /var/lib/docker /etc/docker/config.json # DANGEROUS!</span><span>\n</span></span><span><span><span>sudo</span></span><span> ./bundles/1.10.3/dynbinary/docker daemon<span><span> -</span>D</span><span><span> --</span>group</span><span>=</span>wheel</span>\n</span></code></pre>\n<ul>\n<li>run client to check</li>\n</ul>\n<pre><code><span><span><span>$</span></span><span> PATH=<span><span>$</span><span>(</span><span><span>pwd</span></span><span> <span><span>-</span>P</span></span><span>)</span></span>/bundles/1.10.3/dynbinary/:<span><span>$</span><span>PATH</span></span></span>\n</span><span><span><span>$</span></span><span> docker version</span>\n</span><span><span><span>Client:</span></span>\n</span><span> <span><span>Version:</span></span><span> 1.10.3</span>\n</span><span> <span><span>API</span></span><span> version: 1.22</span>\n</span><span> <span><span>Go</span></span><span> version: go1.7.5</span>\n</span><span> <span><span>Git</span></span><span> commit: 20f81dde9</span>\n</span><span> <span><span>Built:</span></span><span> Tue Apr 4 00:27:13 2017</span>\n</span><span> <span><span>OS/Arch:</span></span><span> linux/arm64</span>\n</span><span>\n</span><span><span><span>Server:</span></span>\n</span><span> <span><span>Version:</span></span><span> 1.10.3</span>\n</span><span> <span><span>API</span></span><span> version: 1.22</span>\n</span><span> <span><span>Go</span></span><span> version: go1.7.5</span>\n</span><span> <span><span>Git</span></span><span> commit: 20f81dde9</span>\n</span><span> <span><span>Built:</span></span><span> Tue Apr 4 00:27:13 2017</span>\n</span><span> <span><span>OS/Arch:</span></span><span> linux/arm64</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/docker-docker/#build-docker\">Build Docker</a></h2>\n<ul>\n<li>reissue <code>make</code> using containerised build</li>\n</ul>\n<pre><code><span><span><span>export</span> <span>DOCKER_BUILDTAGS</span><span>=</span><span><span><span>'</span>apparmor selinux seccomp<span>'</span></span></span></span>\n</span><span><span><span>git</span></span><span> co v17.05.0-ce <span><span>#</span></span><span> or v1.12.3 or master or whatever</span><span>\n</span></span></span><span><span><span>make <span><span>#</span></span><span> transient failure of first build; restart succeeded</span><span>\n</span></span></span></span><span><span><span>make</span></span><span> deb</span>\n</span><span><span><span>mkdir</span></span><span> contrib/builder/rpm/aarch64</span>\n</span><span><span><span>make</span></span><span> rpm</span>\n</span></code></pre>\n<h2><a href=\"https://mort.io/blog/docker-docker/#notes\">Notes</a></h2>\n<ul>\n<li>Resulting <code>17.05-dev</code> binaries fail due to missing <code>libapparmor.so</code></li>\n<li>Static binary build no longer supported?</li>\n<li><code>DOCKER_BUILDTAGS</code> environment variable no longer supported?</li>\n<li><code>1.12.3</code> and <code>1.13.1</code> also built</li>\n<li>Build of RPM or DEB packages fails due, I think, to DIND not working</li>\n</ul>",
9 "content_type": "html",
10 "author": {
11 "name": "Unknown",
12 "email": null,
13 "uri": null
14 },
15 "categories": [],
16 "rights": null,
17 "source": "https://mort.io/atom.xml"
18}