Docker Docker
· 2 min read · May 06, 2017 · #old #docker #arm64Bootstrapping Docker for ARM64 (aka AARCH64)
Basic process is:
- bootstrap ARM64
gotoolchain on x86, and install - build ARM64
go1.7.5toolchain needed fordockerbuild - bootstrap ARM64
dockerv1.10.3 - use bootstrapped
dockerto provide containerised build environment for building later versions
Instructions below are for CentOS 7 for Reasons(tm). Package details and so on will vary on other distros.
Build go bootstrap toolchain
On x86 host:
- build basic go1.4 sufficient to bootstrap
cd
curl -O https://storage.googleapis.com/golang/go1.4-bootstrap-20161024.tar.gz
tar xzvf go1.4-bootstrap-20161024.tar.gz
mv go go1.4
cd go1.4/src
./make.bash- cross-compile go1.7 (latest)
mkdir -p ~/go/src
cd ~/go/src
git clone https://go.googlesource.com/go
cd go
git checkout go1.7.5
cd src
GOOS=linux GOARCH=arm64 ./bootstrap.bash- transfer cross-compiled toolchain to ARM64 host
scp ~/go/src/go-linux-arm64-bootstrap.tbz HOST:~Build ARM64 go1.7.5
- produce bootstrap toolchains
cd
tar xvf go-linux-arm64-bootstrap.tbz- use the bootstrap toolchain to build a modern
goinstall
mkdir -p ~/go/src
cd ~/go/src
git clone https://go.googlesource.com/go
cd go
git checkout go1.7.5
cd src
GOROOT_BOOTSTRAP=~/go-linux-arm64-bootstrap ./make.bash
mv ~/go/src/go/bin ~/go/binBootstrap ARM64 Docker
- get a recent
git
sudo yum remove git
wget https://github.com/git/git/archive/v2.12.2.tar.gz
tar xvf v2.12.2.tar.gz
cd git-*
which git
sudo yum install perl-devel hg curl-devel
make configure
./configure --prefix=/usr/local
make -j8
sudo make install- install dev dependencies
sudo yum install btrfs-progs-devel device-mapper-devel- clone source
cd ~/go
mkdir -p src/github.com/docker
cd src/github.com/docker
git clone git@github.com:docker/docker
cd docker- build components
git co v1.10.3
( cd vendor && for n in src/* ; do ln -s $n ; done )
./hack/make.sh dynbinary
rm -rf vendor && git checkout . # tidy up symlinkingNote that a current bug in Ubuntu packaging metadata means a small edit needs to be made to ./Dockerfile.aarch64: change the apt-get update && to apt-get update ; so that the build doesn’t stop at the first hurdle, updating packages.
- run daemon
# sudo rm -rf /var/lib/docker /etc/docker/config.json # DANGEROUS!
sudo ./bundles/1.10.3/dynbinary/docker daemon -D --group=wheel- run client to check
$ PATH=$(pwd -P)/bundles/1.10.3/dynbinary/:$PATH
$ docker version
Client:
Version: 1.10.3
API version: 1.22
Go version: go1.7.5
Git commit: 20f81dde9
Built: Tue Apr 4 00:27:13 2017
OS/Arch: linux/arm64
Server:
Version: 1.10.3
API version: 1.22
Go version: go1.7.5
Git commit: 20f81dde9
Built: Tue Apr 4 00:27:13 2017
OS/Arch: linux/arm64Build Docker
- reissue
makeusing containerised build
export DOCKER_BUILDTAGS='apparmor selinux seccomp'
git co v17.05.0-ce # or v1.12.3 or master or whatever
make # transient failure of first build; restart succeeded
make deb
mkdir contrib/builder/rpm/aarch64
make rpmNotes
- Resulting
17.05-devbinaries fail due to missinglibapparmor.so - Static binary build no longer supported?
DOCKER_BUILDTAGSenvironment variable no longer supported?1.12.3and1.13.1also built- Build of RPM or DEB packages fails due, I think, to DIND not working