ARM64從原始碼編譯docker(v1.9.1)
阿新 • • 發佈:2019-01-04
在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