內(nèi)網(wǎng)環(huán)境arm操作系統(tǒng)編譯envoy1.11的操作步驟

環(huán)境準(zhǔn)備

需要一臺(tái)arm的機(jī)器甘畅,暫時(shí)采用root方式安裝城榛。

PS:如果其他用戶需要替換bazel依賴包,這里涉及到bazel依賴包軟連接問題歉提。
程序包清單如下(相關(guān)清單可以在百度網(wǎng)盤笛坦,下載鏈接: https://pan.baidu.com/s/1gt3Z6KlxnWoczp_YaRipoA 提取碼: zexq ):

bazel-dist-0.26.1.tar.gz
cmake-3.19.4.tar.gz
gcc-8.2.0.tar.xz
gmp-6.1.0.tar.xz
mpc-1.0.3.tar.gz
mpfr-3.1.4.tar.xz
isl-0.18.tar.xz
re2c-2.0.3.tar.gz
ninja-1.7.2.tar.gz
# bazel的依賴包,基于envoy1.11版本苔巨,其他版本需要自行下載版扩,部分下載包需要翻墻才能夠訪問
external.tar.gz

新建2個(gè)目錄

mkdir -p /root/tools/        # 放入相關(guān)程序包
mkdir -p /root/source/       # 放入envoy源碼,將istio-proxy目錄拷入該目錄

PS:如果代碼或者用戶需要替換的話要修改/tmp/build/目錄里面的md5值侄泽,這個(gè)后面會(huì)提到

bazel 0.26.1版本安裝

源碼安裝礁芦,程序包bazel-dist-0.26.1.tar.gz

cd /root/tools
mkdir bazel-0.26.1
cd bazel-0.26.1
# 將bazel-dist-0.26.1.tar.gz拷入當(dāng)前目錄,然后解壓
tar -zxvf bazel-dist-0.26.1.tar.gz
# 執(zhí)行bazel編譯安裝悼尾,這里需要配置jdk的JAVA_HOME,否則報(bào)錯(cuò)
env EXTRA_BAZEL_ARGS="--host_javabase=@local_jdk//:jdk" ./compile.sh
# 安裝成功后將軟連接配置到/usr/bin下
ln -s /root/tools/bazel-0.26.1/output/bazel /usr/bin/bazel

cmake 3.19.4版本安裝

源碼安裝cmake-3.19.4.tar.gz

cd /root/tools
# 將cmake-3.19.4.tar.gz拷入當(dāng)前目錄柿扣,然后解壓
tar -zxvf cmake-3.19.4.tar.gz
cd cmake-3.19.4
# 編譯安裝
./bootstrap
make && make install
## 查看安裝是否成功
cmake --version

gcc 8.2.0安裝

需要的程序包列表:

gcc-8.2.0.tar.xz
gmp-6.1.0.tar.xz
mpc-1.0.3.tar.gz
mpfr-3.1.4.tar.xz
isl-0.18.tar.xz

將以上程序包拷入/root/tools目錄下

cd /root/tools

# 安裝gmp
cd /root/tools/gmp-6.1.0
./configure --prefix=/usr/local/gmp-6.1.0
make && make install

# 安裝mpfr
cd /root/tools/mpfr-3.1.4
./configure --prefix=/usr/local/mpfr-3.1.4 --with-gmp=/usr/local/gmp-6.1.0
make && make install

# 安裝mpc
cd /root/tools/mpc-1.0.3
./configure --prefix=/usr/local/mpc-1.0.3 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4
make && make install

# 安裝isl-0.18網(wǎng)上查到的大部分都是--with-gmp但是這個(gè)有問題會(huì)報(bào)錯(cuò)gmp.h頭文件找不到,要改成--with-gmp-prefix
cd /root/tools/isl-0.18
./configure --prefix=/usr/local/isl-0.18  --with-gmp-prefix=/usr/local/gmp-6.1.0
make && make install

vim /etc/ld.so.conf
在include ld.so.conf.d/*.conf 這行下面加入如下配置
/lib
/lib64
/usr/lib
/usr/lib64
/usr/local/lib
/usr/local/lib64
/usr/local/gmp-6.1.0/lib
/usr/local/mpc-1.0.3/lib
/usr/local/mpfr-3.1.4/lib
退出

# 刷新緩存
ldconfig -v

# 安裝gcc-8.2.0
cd /usr/local/src/gcc-8.2.0
mkdir build && cd build
../configure --prefix=/usr/local/gcc-8.2.0 --with-gmp=/usr/local/gmp-6.1.0 --with-mpfr=/usr/local/mpfr-3.1.4 --with-mpc=/usr/local/mpc-1.0.3 --enable-checking=release --enable-languages=c,c++ --disable-multilib
# -j 后面的數(shù)字代表cpu的核數(shù)闺魏,4c的話就寫4未状,這樣編譯能快一點(diǎn),一般gcc編譯安裝都要1析桥,2個(gè)小時(shí)
make -j 4 && make install

# 修改環(huán)境變量
vim /etc/profile
# 結(jié)尾加入一行
export PATH=/usr/local/gcc-8.2.0/bin:$PATH
退出

重新打開窗口或者source /etc/profile
gcc -v
顯示gcc 8.2.0說明安裝成功

ninja 1.7.2安裝

程序包:re2c-2.0.3.tar.gz司草、ninja-1.7.2.tar.gz

cd /root/tools
# 將re2c-2.0.3.tar.gz艰垂、ninja-1.7.2.tar.gz拷入當(dāng)前目錄

# 安裝re2c
tar -zxvf re2c-2.0.3.tar.gz
cd /root/tools/re2c-1.0.3/
# 查看當(dāng)前是否有configure,如果沒有執(zhí)行下面的命令埋虹,有可以直接執(zhí)行./configure
autoreconf -i -W all(沒有configure可以先執(zhí)行Autotools)
./configure
make
make install

# 安裝ninja
tar -zxvf ninja-1.7.2.tar.gz
cd /root/tools/ninja
./configure.py --bootstrap
cp ninja /usr/bin/

git2.3安裝

# 需要git2.3以上版本才行猜憎,安裝步驟暫時(shí)略

bazel外網(wǎng)依賴

依賴包:external.tar.gz

88a6967590074595e7f600e3c5004e55這個(gè)是當(dāng)前envoy編譯目錄寫入文件的md5值(如果修改envoy的目錄這個(gè)md5值需要同步修改)解壓到envoy編譯的路徑下/tmp/build/88a6967590074595e7f600e3c5004e55

mkdir -p /tmp/build/88a6967590074595e7f600e3c5004e55

# 解壓bazel依賴包
cd /tmp/build/88a6967590074595e7f600e3c5004e55
tar -zxvf external.tar.gz

# 由于外網(wǎng)編譯后有一個(gè)bazel_tools的軟連接是連接到/tmp/build/install/10aa93b955a2fdcc3953bf717e363ff5這塊,所以需要把之前的/tmp/build/4787974792375e1391d63983118e5df0目錄下的文件都拷貝一份
mkdir -p /tmp/build/install/10aa93b955a2fdcc3953bf717e363ff5
# 把/tmp/build/4787974792375e1391d63983118e5df0目錄下的文件拷到/tmp/build/install/10aa93b955a2fdcc3953bf717e363ff5下
cp /tmp/build/4787974792375e1391d63983118e5df0/* /tmp/build/install/10aa93b955a2fdcc3953bf717e363ff5/

編譯envoy

mkdir -p /root/source
# 將istio-proxy代碼拷入
cd /root/resource/istio-proxy
# git 初始化
git init .
git add .
git config --global user.email "xxx@abcde.com"
git config --global user.name "XX XX"
git commit -m "init commit"

#修改external_envoy目錄下面編譯文件.bazelrc文件搔课,增加四行
build:release -c opt
build:release --strip=always
build:release --copt -DENVOY_IGNORE_GLIBCXX_USE_CXX11_ABI_ERROR=1
build:release --define tcmalloc=disabled

#修改external_envoy/bazel下面編譯BULID文件envoy_build_system.bzl
cd istio-proxy/external_envoy/bazel
調(diào)整def _envoy_copts編譯選項(xiàng)中的-Werror修改為-Wno-error

#修改istio-proxy目錄下的Makefile拉宗,修改BAZEL_BUILD_ARGS編譯選項(xiàng)
cd istio-proxy

調(diào)整BAZEL_BUILD_ARGS編譯選項(xiàng)的值為下所示:
BAZEL_BUILD_ARGS ?= --config=release -c opt --fetch=false --features=pure
調(diào)整編譯使用的編譯器為最新安裝的版本的gcc和g++
CC := /usr/local/gcc-8.2.0/bin/gcc
CXX := /usr/local/gcc-8.2.0/bin/g++

# 編譯
make build_envoy

編譯時(shí)間比較長(zhǎng),觀察編譯結(jié)果

FAQ

1. 當(dāng)出現(xiàn)依賴bazel_tools和envoy包找不到或者不存在時(shí)辣辫,報(bào)錯(cuò)誤如下圖所示時(shí):
    - 出現(xiàn)原因:
    沒有在tmp/bulid的external目錄下面旦事,創(chuàng)建對(duì)應(yīng)的bazel_tools和envoy的軟連接
    - 解決辦法:
    創(chuàng)建對(duì)應(yīng)的軟連接:
    cd /tmp/build/88a6967590074595e7f600e3c5004e55/external
    ln -s /tmp/build/install/3bf05f491d03a17ecdb487f537d4c587/_embedded_binaries/embedded_tools      bazel_tools
    ln -s /root/source/istio-proxy/external_envoy   envoy
1620461518500.png
2. 當(dāng)出現(xiàn)基礎(chǔ)庫文件未定義時(shí),報(bào)錯(cuò)信息如圖所示:
    - 出現(xiàn)原因:
    gcc安裝不正確急灭,或者與編譯bazel的gcc版本上存在差異姐浮,版本過低或過高
    - 解決辦法:
    獲取正確的gcc版本,重新安裝葬馋。并將usr/lib/libstdc++.so動(dòng)態(tài)庫文件卖鲤,用新版本的替代。
1620461571879.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畴嘶,一起剝皮案震驚了整個(gè)濱河市蛋逾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窗悯,老刑警劉巖区匣,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蒋院,居然都是意外死亡亏钩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門欺旧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姑丑,“玉大人,你說我怎么就攤上這事辞友≌ぐВ” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵称龙,是天一觀的道長(zhǎng)留拾。 經(jīng)常有香客問我,道長(zhǎng)茵瀑,這世上最難降的妖魔是什么间驮? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮马昨,結(jié)果婚禮上竞帽,老公的妹妹穿的比我還像新娘扛施。我一直安慰自己,他們只是感情好屹篓,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布疙渣。 她就那樣靜靜地躺著,像睡著了一般堆巧。 火紅的嫁衣襯著肌膚如雪妄荔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天谍肤,我揣著相機(jī)與錄音啦租,去河邊找鬼。 笑死荒揣,一個(gè)胖子當(dāng)著我的面吹牛篷角,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播系任,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼恳蹲,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了俩滥?” 一聲冷哼從身側(cè)響起嘉蕾,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎霜旧,沒想到半個(gè)月后错忱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颁糟,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年航背,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棱貌。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖箕肃,靈堂內(nèi)的尸體忽然破棺而出婚脱,到底是詐尸還是另有隱情,我是刑警寧澤勺像,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布障贸,位于F島的核電站,受9級(jí)特大地震影響吟宦,放射性物質(zhì)發(fā)生泄漏篮洁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一殃姓、第九天 我趴在偏房一處隱蔽的房頂上張望袁波。 院中可真熱鬧瓦阐,春花似錦、人聲如沸篷牌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽枷颊。三九已至戳杀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夭苗,已是汗流浹背信卡。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留题造,地道東北人傍菇。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像晌梨,于是被迫代替她去往敵國(guó)和親桥嗤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容