1. 程式人生 > >ARM64從原始碼編譯docker(v1.9.1)

ARM64從原始碼編譯docker(v1.9.1)

在X86_64機器fedora系統下,不要使用官方編譯的rpm包,交叉編譯bootstrap會出現異常,使用原始碼編譯的go.

1.編譯X86_64的go binary

cd /root
git clone https://github.com/golang/go
git checkout go1.4.2
cd src/
./make.bash //先編譯一個go x86_64
mv /root/go /root/go1.4//因為go1.5beta程式碼固定了go路徑

2.下載go1.5.1,使用go1.4為arm64交叉編譯bootstrap,或者直接checkout go1.5.1

cd
go/src/ GOOS=linux GOARCH=arm64 ./bootstrap.bash

3. 拷貝go-linux-arm64-bootstrap.tbz到Arm64機器上繼續編譯其他模組

scp go-linux-arm64-bootstrap.tbz xxx //
//下載go1.5.1程式碼
git checkout go1.5.1
cd go/src
GOROOT=/path/to/go/bootstrap
GOROOT_BOOTSTRAP=$GOROOT ./all.bash

4. 下載docker原始碼並編譯

git clone https://github.com/jefby/docker.git
git checkout jefby-v1.9.1 //找到最新的v1.9.1版本 AUTO_GOPATH=1 ./hack/make.sh dynbinary //編譯動態版本 ./hack/make.sh binary //靜態版本,根據github docker社群的評論,似乎是用Redhat系列不能用靜態版本的,因為預設使用了devicemapper,而不是ubuntu使用的aufs

5. 需要安裝glibc-static

在docker v1.9.1版本中,hack/make.sh dynbinary中依然依賴libc.a和libpthread.a庫,所以需要安裝glibc-static rpm包,提供這兩個庫~

6. 修改hack/make.sh增加set -x

新增除錯選項,進行debug,檢視到底是什麼地方出現錯誤

7.安裝必須的一些pkg

yum install -y device-mapper-devel
yum install -y btrfs-progs-devel

8.docker pull 的時候提示錯誤Server error: Status 0 while fetching image layer

解決方法:
在/etc/hosts後面新增對docker網站的dns解析

162.242.195.84 index.docker.io
162.242.195.84 registry-1.docker.io