Lxd-4.0.2 在arm架構下原始碼編譯
Lxd-4.0.2在arm架構下原始碼編譯
1、安裝過程
1.環境:centos7.6-aarch64
2.安裝epel源
yum -y install epel-release
3.安裝lxd依賴包
yum install acl autoconf dnsmasq-base git golang libacl1* libtool make rsync squashfs-tools tar tcl xz-utils ebtables
yum install -y glibc-static #編譯時需要的c庫
4.原始碼編譯一些依賴庫
由於arm版本的yum包給的會比較老,所以需要原始碼安裝以下
libcap-2.40,libuv-v1.9.0 ,lxc-4.0.2,pkg-config-0.29
5.安裝lxd的庫依賴
cd lxd-4.0.2
export GOPATH=$(pwd)/_dist
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
make deps
將環境變數匯入到~/.bashrc
export CGO_CFLAGS="-I/root/lxd-4.0.2/_dist/deps/sqlite/ -I/root/lxd-4.0.2/_dist/deps/libco/ -I/root/lxd-4.0.2/_dist/deps/raft/include/ -I/root/lxd-4.0.2/_dist/deps/dqlite/include/" export CGO_LDFLAGS="-L/root/lxd-4.0.2/_dist/deps/sqlite/.libs/ -L/root/lxd-4.0.2/_dist/deps/libco/ -L/root/lxd-4.0.2/_dist/deps/raft/.libs -L/root/lxd-4.0.2/_dist/deps/dqlite/.libs/" export LD_LIBRARY_PATH="/root/lxd-1.0.2/_dist/deps/sqlite/.libs/:/root/lxd-4.0.2/_dist/deps/libco/:/root/lxd-4.0.2/_dist/deps/raft/.libs/:/root/lxd-4.0.2/_dist/deps/dqlite/.libs/" export CGO_LDFLAGS_ALLOW="-Wl,-wrap,pthread_create"
Source ~/.bashrc
make
2、解決c的編譯依賴問題
1、make deps的時候會用到libuv1這個非同步io的庫,交叉編譯失敗也是此原因導致,需要再arm-gcc的環境下原始碼編譯一次libuv1
2、Lxc的安裝,yum安裝的lxc只有可執行檔案,沒有lib.so的庫,編譯lxd需要找到這些庫,比如:lxc.so.1,lxd啟動會呼叫的庫
3、Lxc原始碼編譯的時候,在/usr/include/linux/prctl.h已經定義了prctl_mm_map的結構體,所以需要在/root/lxc-lxc-4.0.2/src/lxc/initutils.h將此結構體註釋掉,然後再make
4、pkg-config --cflags -- lxc #no package #就是說找不到lxc.pc這個檔案,沒有支援pkg-config這個方法,原始碼安裝會解決這個問題
5、我的Arm環境下的gcc版本比較低,不支援c99標準,for迴圈i自增變數會報錯,我的編譯是此檔案報錯:
/root/lxd-4.0.2/lxd/include/memory_utils.h
解決方式,給自增變數先增加型別
static inline void free_string_list(char **list) { if (list) { int i; for ( i = 0; list[i]; i++) free(list[i]); free_disarm(list); } }
3、解決lxd的依賴問題
至此,基本問題已解決,在lxd目錄下執行make
然後等了一會我的程序被殺掉了,檢視原因,發現是記憶體不足導致的,之後增加記憶體進行再次編譯
成功編譯出二進位制檔案
cd ${GOPATH}/bin目錄下,執行./lxd
報錯,找不到liblxc.so
Liblxc.so、libuv.so這些make install時都會安裝再/usr/local/lib下,解決方法:
cd /etc/ld.so.conf.d/
vim lxc-aarch64.conf 新增
/usr/local/lib
執行ldconfig
交叉編譯需要先安裝交叉編譯的gcc工具,改過好多問題,未編譯成功,有大佬交叉編譯成功,歡迎留言 觀摩一番