aarch64架構(ARMv8)系統環境下編譯 Ambari

目錄



1 前言

大數據生態圈其實對 x86架構 支持是最友好的,但偶爾我們查看服務器信息時,如下圖所示,可以看到服務器CPU 架構爲 aarch64(屬於 ARMv8架構的一種執行狀態),例如鯤鵬920處理器,這樣我們再到官網下載二進制部署包時可能發現沒有對應的版本(並不是全部會受影響)。本文也由此開始,在 aarch64架構系統上編譯 Ambari 二進制部署包。
在這裏插入圖片描述

2 環境

yum install -y rpm-build
yum install -y gcc-c++
yum install -y python-devel
yum install -y git

環境變量配置如下,後面會依次安裝一下軟件,這裏可以先提前配置上

### set maven environment
MAVEN_HOME=/opt/installed/apache-maven-3.5.4
PATH=$MAVEN_HOME/bin:$PATH

### set java environment
JAVA_HOME=/opt/installed/jdk8u222-b10
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

### set Ant environment
export ANT_HOME=/opt/installed/apache-ant-1.9.15
export PATH=$PATH:$ANT_HOME/bin

### set sbt environment
SBT_HOME=/opt/installed/sbt
export PATH=$PATH:$SBT_HOME/bin

### set phantomjs environment
PHANTOMJS_HOME=/opt/installed/phantomjs
PATH=$PHANTOMJS_HOME/bin:$PATH

### set node environment
NODE_HOME=/opt/installed/node-v8.6.0-linux-arm64
PATH=$NODE_HOME/bin:$PATH

### set golang environment
GOROOT=/opt/installed/go/
GOPATH=/opt/installed/go/path
PATH=$GOROOT/bin:$PATH

export JAVA_HOME JRE_HOME CLASS_PATH MAVEN_HOME GOROOT GOPATH  PHANTOMJS_HOME  PATH

配置完環境變量後執行(統一配置到系統環境變量):source /etc/profile

部分的version信息如下圖:
part of version info

2.1 JDK

wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u222-b10/OpenJDK8U-jdk_aarch64_linux_hotspot_8u222b10.tar.gz
tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u222b10.tar.gz -C /opt/installed/

# 驗證
java -version

2.2 Maven

參考文檔

  • 配置 maven 鏡像 vim /opt/installed/apache-maven-3.5.4/conf/settings.xml
  • 務必配置上Maven 中央倉庫地址(因爲從2020-01-15號之後訪問maven中央僅支持 https 方式訪問)

<localRepository>/opt/maven_repo</localRepository>

<mirrors>
   <!-- 華爲雲鏡像 -->
    <mirror>
        <id>huaweimaven</id>
        <name>huawei maven</name>
        <url>https://mirrors.huaweicloud.com/repository/maven/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
    <!-- 阿里雲鏡像 -->
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
	
	<mirror>
      <id>central-repos1</id>
      <name>Central Repository 2</name>
      <url>https://repo1.maven.org/maven2/</url>
      <!-- 表示只爲central倉庫做鏡像,如果想爲所有的倉庫做鏡像那麼可以改爲 -->
      <mirrorOf>*</mirrorOf>
    </mirror>
    
</mirrors>
  • 【注意1】連接 http://s3-ap-southeast-1.amazonaws.com/dynamodb-local-singapore/release 無法訪問,暫時註釋
  • 【注意2】連接 http://mirrors.ibiblio.org/maven2 無法訪問,暫時註釋
wget https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
tar -zxf apache-maven-3.5.4-bin.tar.gz -C /opt/installed/

# 驗證
mvn -v

2.3 安裝 Ant

wget https://mirrors.tuna.tsinghua.edu.cn/apache//ant/binaries/apache-ant-1.9.15-bin.tar.gz
tar -zxf apache-ant-1.9.15-bin.tar.gz -C /opt/installed/
/opt/installed/apache-ant-1.9.15

# 配置環境變量,前面已配置,可以略去

# 查看版本
ant -version

wget https://repo1.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven-ant-tasks-2.1.3.jar -P $ANT_HOME/lib/

2.4 sbt 安裝

# 訪問 https://www.scala-sbt.org/download.html 頁面下載合適的版本
wget https://piccolo.link/sbt-1.3.10.zip
unzip sbt-1.3.10.zip -d /opt/installed/

# 設置參數(在開頭添加如下)
vim sbt

SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
# java $SBT_OPTS -jar /opt/installed/sbt/bin/sbt-launch.jar

# 查看版本信息
# /opt/installed/sbt/bin/sbt --version
sbt -V

2.5 node.js

設置如下環境變量

wget http://nodejs.org/dist/v8.6.0/node-v8.6.0-linux-arm64.tar.gz
tar -zxf node-v8.6.0-linux-arm64.tar.gz -C /opt/installed/

# 驗證
node -v
npm -v

# 前端包管理工具
npm install -g bower
# 基於node.js 的一個前端自動化構建工具
npm install -g gulp
# HTML5 構建工具
npm install -g brunch

node.js 安裝

2.6 安裝Phantomjs

爲了編譯加速最好將其替換爲國內鏡像(見下方),要不這個下載編譯實在是慢。

# 也可以下載對應版本的源碼包,然後 git init
#git clone https://github.com/ariya/phantomjs.git
git clone https://gitee.com/naivefool/phantomjs.git
cd phantomjs
git tag
git checkout 2.1.1
git submodule init
# 獲取代碼更新前更換爲國內 gitee 上的連接(見下面配置)
git submodule update

# 先執行編譯,之後會在 src/qt/qtbase/src/gui 目錄中下生成 Makefile
python build.py

# 第一次編譯可能報錯:Error:Invalid operands (*UND* and *UND* sections) for '*'
# 修改 Makefile 。將-O3修改爲-O2(大概在 16、17 行),重新啓動編譯即可
vim src/qt/qtbase/src/gui/Makefile

CFLAGS        = -pipe -O2 -fPIC -fvisibility=hidden -fno-exceptions -Wall -W -Wno-unused-parameter -Wno-main -D_REENTRANT $(DEFINES)
CXXFLAGS      = -pipe -O2 -fPIC -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x -fno-exceptions -Wall -W -D_REENTRANT $(DEFINES)

修改 phantomjs 源碼

python build.py
cp -r ../phantomjs /opt/installed/
# 驗證
phantomjs -v

當執行完 git submodule init 後,編輯當前項目 git 配置文件 vim .git/config

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[submodule "3rdparty-win"]
        url = https://gitee.com/naivefool/phantomjs-3rdparty-win.git
[submodule "qtbase"]
        url = https://gitee.com/naivefool/qtbase.git
[submodule "qtwebkit"]
        url = https://gitee.com/naivefool/qtwebkit.git

phantomjs安裝

2.7 搭建golang環境

wget https://dl.google.com/go/go1.9.linux-arm64.tar.gz

tar -zxf go1.9.linux-arm64.tar.gz
mv go /opt/installed


# 手動在“${GOPATH}”下創建三個目錄,這個目錄後面安裝 grafana 會用到
mkdir ${GOPATH}
cd ${GOPATH}
mkdir src bin pkg

# 驗證
go version

2.8 搭建文件服務器

yum install -y httpd

systemctl start httpd.service
systemctl enable httpd.service
systemctl status httpd.service

2.9 升級 cmake

保證系統的 CMake 版本 3.9 或者更高版本
cmake版本過低

# 查看版本。
cmake --version
# 移除舊版本
sudo yum remove cmake cmake-data

wget https://cmake.org/files/v3.9/cmake-3.9.2.tar.gz
tar -zxf cmake-3.9.2.tar.gz -C /opt/installed/
cd /opt/installed/cmake-3.9.2
./configure
make && make install

cmake    
cd /usr/bin/
ln -s /opt/installed/cmake-3.9.2/bin/cmake cmake
ln -s /opt/installed/cmake-3.9.2/bin/cpack cpack
ln -s /opt/installed/cmake-3.9.2/bin/ctest ctest

cmake --version

2.10 編譯leveldb

LevelDB 是一個在Google 編寫的快速鍵值存儲庫,它提供從字符串鍵到字符串值的有序映射。
關於Leveldb的更多信息請訪問官方鏈接

編譯 leveldbjni-all-1.8.jar 之前,需要先將 snappy 和 leveldb 編譯成靜態庫,
再將兩個靜態庫編譯進 leveldbjni.so 裏,最後生成leveldbjni-all-1.8.jar壓縮包。

編譯leveldbjni-all-1.8.jar之前,需要先將snappy和leveldb編譯成靜態庫,再將兩個靜態庫編譯進leveldbjni.so裏,最後生成leveldbjni-all-1.8.jar壓縮包。

參考:https://bbs.huaweicloud.com/forum/thread-22684-1-1.html 、https://support.huaweicloud.com/prtg-tpdl-kunpengbds/kunpengleveldbjniall_02_0003.html

2.10.1 編譯snappy-1.1.5

wget https://github.com/google/snappy/archive/1.1.5.tar.gz
tar -zxvf 1.1.5.tar.gz
cd snappy-1.1.5

./autogen.sh
./configure --with-pic
make -j20

# 編譯完成後,將在“snappy-1.1.5/.libs”目錄下生成libsnappy.so和libsnappy.a文件,將libsnappy.a文件拷貝到上一級目錄
# 將靜態庫拷貝到對應目錄,是爲了後續將靜態庫編譯進leveldbjni.so做準備。
cp .libs/libsnappy.a ./
export SNAPPY_HOME=`pwd`

2.10.2 編譯leveldb-1.20

  • 【注意】重點是根據文檔截圖,將已提交的 patch 合併到此版本代碼中
wget https://github.com/google/leveldb/archive/v1.20.tar.gz
tar -zxvf v1.20.tar.gz 
cd leveldb-1.20

# 修改文件build_detect_platform,按照下圖修改250至252行,其中第250-251行是修改原行內容,而第252行是新增行。
vim build_detect_platform
#> 
echo "PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS $PLATFORM_SHARED_CFLAGS" >> $OUTPUT
echo "PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS $PLATFORM_SHARED_CFLAGS" >> $OUTPUT
echo "PLATFORM_SHARED_CFLAGS=" >> $OUTPUT


# 根據 https://support.huaweicloud.com/prtg-tpdl-kunpengbds/kunpengleveldbjniall_02_0006.html ,將相應的patch合入代碼,再執行編譯
#請嚴格按照 git 上的兩個 patch 合併
#https://github.com/Xingwd/leveldb/commit/abb05abdbd9a92440e41a33704fba783818929d4
#https://github.com/Xingwd/leveldb/commit/e521f3c4a0f92ba01a3b2a077517507c021a8cea
make -j20

export LEVELDB_HOME=`pwd`
cp out-static/libleveldb.a ./

2.10.3 編譯leveldbjni

詳情可以查看 https://support.huaweicloud.com/prtg-tpdl-kunpengbds/kunpengleveldbjniall_02_0003.html

git clone https://github.com/fusesource/leveldbjni.git
cd leveldbjni
export LEVELDBJNI_HOME=`pwd`

# 請按照文檔進行修改

sed -i 's/99-master-SNAPSHOT/1.8/g' `find . -name pom.xml`

# 編譯之前先按照官方文檔的故障排除,修復可能存在的問題
# https://support.huaweicloud.com/prtg-tpdl-kunpengbds/kunpengleveldbjniall_02_0005.html
mvn clean package -P download -P linux64-aarch64 -DskipTests
# 如果沒有其他問題,可以 install 到本地倉庫

# 查看編譯的結果
find ./ -name *.jar
#./leveldbjni-all/target/leveldbjni-all-1.8.jar
#./leveldbjni-linux64-aarch64/target/leveldbjni-linux64-aarch64-1.8.jar
#./leveldbjni-linux64/target/leveldbjni-linux64-1.8.jar
#./leveldbjni/target/leveldbjni-1.8.jar
#./leveldbjni/target/leveldbjni-1.8-tests.jar
#./leveldbjni/target/leveldbjni-1.8-sources.jar


# 驗證 leveldbjni-all-1.8.jar
# 解壓查看該jar包對應的目錄so的CPU架構是否正確
jar -xvf leveldbjni-all-1.8.jar
# 驗證libleveldbjni.so裏面是否包含了libsnappy.a和libleveldb.a的靜態庫,而不是鏈接其動態庫。
# 使用ldd命令查看,從結果來看,不包含snappy和leveldb模塊的動態庫鏈接
ldd ./META-INF/native/aarch64/libleveldbjni.so
ldd ./META-INF/native/linux64/libleveldbjni.so
# 選擇leveldb.so中的某個函數,查看leveldbjni.so的符號表,檢查該so中是否存在對應函數
nm ./META-INF/native/aarch64/libleveldbjni.so | grep ResumeCompactions
nm ./META-INF/native/linux64/libleveldbjni.so | grep ResumeCompactions

文件信息

2.11 安裝 Scala

# 下載頁面 https://www.scala-lang.org/download/all.html
wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz

tar -zxvf scala-2.11.8.tgz -C /opt/installed/

# 在環境變量中添加如下,並使其生效
### set sbt environment
SCALA_HOME=/opt/installed/scala-2.11.8
export PATH=$PATH:$SCALA_HOME/bin


# 安裝Protoc 之後,執行下面查看
scala -version



3 編譯依賴

Checkso工具爲移植性分析工具,該工具主要用於掃描安裝包中是否包含了X86的jar包/so/可執行程序等。

  • 【Checkso】爲華爲內部使用工具,暫無法下載。

  • 移植分析的一個示例 分析Hadoop

  • 可參考資料

  • 【注意】如果是複製的官方文檔,務必將<repositorys>標籤改爲<repositories>

    <repositories>
        <repository>
            <id>kunpengmaven</id>
            <name>kunpeng maven</name>
            <url>https://mirrors.huaweicloud.com/kunpeng/maven</url>
        </repository>
    </repositories>

3.1 編譯安裝 frontend-maven-plugin

git clone https://github.com/eirslett/frontend-maven-plugin.git
cd frontend-maven-plugin/
git tag
#git checkout -b 0.0.16 frontend-plugins-0.0.16
# git checkout frontend-plugins-1.9.1
# wget https://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.jar
# mvn install:install-file -Dfile=maven-clean-plugin-2.5.jar -DgroupId=org.apache.maven.plugins -DartifactId=maven-clean-plugin -Dversion=2.5 -Dpackaging=jar
git checkout frontend-plugins-0.0.16
mvn clean -DskipTests install

3.2 編譯jline-2.11

wget https://github.com/jline/jline2/archive/jline-2.11.tar.gz
tar -zxf jline-2.11.tar.gz
cd jline2-jline-2.11
#修改pom.xml,添加鯤鵬maven倉庫
# mvn package
mvn install

3.3 編譯jline-2.12

wget https://github.com/jline/jline2/archive/jline-2.12.tar.gz
tar -zxf jline-2.12.tar.gz
cd jline2-jline-2.12
#修改pom.xml,添加鯤鵬maven倉庫
# mvn package
mvn install

3.4 編譯jline-2.12.1

wget https://github.com/jline/jline2/archive/jline-2.12.1.tar.gz
tar -zxf jline-2.12.1.tar.gz
cd jline2-jline-2.12.1
#修改pom.xml,添加鯤鵬maven倉庫
# mvn package
mvn install

3.5 編譯jline-2.13

wget https://github.com/jline/jline2/archive/jline-2.13.tar.gz
tar -zxf jline-2.13.tar.gz
cd jline2-jline-2.13
#修改pom.xml,添加鯤鵬maven倉庫
# mvn package -DskipTests -Dmaven.javadoc.skip=true
mvn install

3.6 編譯jline-2.14.3

wget https://github.com/jline/jline2/archive/jline-2.14.3.tar.gz
tar -zxf jline-2.14.3.tar.gz
cd jline2-jline-2.14.3
#修改pom.xml,添加鯤鵬maven倉庫
# mvn package -DskipTests -Dmaven.javadoc.skip=true
mvn install -Dmaven.javadoc.skip=true -DskipTests
# cp ./target/jline-2.14.3.jar xxx/jython-2.7.1/extlibs/

3.7 編譯leveldbjni-all-1.8.jar

跳到 2.10 編譯leveldb

3.8 編譯netty-all-4.0.23.Final.jar

# 安裝apr-1.5.2源碼
wget https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
tar -zxf apr-1.5.2.tar.gz
cd apr-1.5.2
./configure --prefix=/opt/installed/apr
make
make install


# 安裝netty-tcnative-1.1.30.Fork2源碼
wget https://codeload.github.com/netty/netty-tcnative/tar.gz/netty-tcnative-1.1.30.Fork2
mv netty-tcnative-1.1.30.Fork2 netty-tcnative-1.1.30.Fork2.tar.gz
tar -zxf netty-tcnative-1.1.30.Fork2.tar.gz
cd netty-tcnative-netty-tcnative-1.1.30.Fork2
mvn install

# 安裝netty-4.0.23源碼
wget https://github.com/netty/netty/archive/netty-4.0.23.Final.tar.gz
tar -zxf netty-4.0.23.Final.tar.gz
cd netty-netty-4.0.23.Final
mvn install -DskipTests

3.9 編譯netty-all-4.0.29.Final

# 安裝apr-1.5.2源碼(已安裝,略去)

# 安裝netty-tcnative-1.1.33.Fork3源碼
wget https://codeload.github.com/netty/netty-tcnative/tar.gz/netty-tcnative-1.1.33.Fork3
mv netty-tcnative-1.1.33.Fork3 netty-tcnative-1.1.33.Fork3.tar.gz
tar -zxf netty-tcnative-1.1.33.Fork3.tar.gz
cd netty-tcnative-netty-tcnative-1.1.33.Fork3
mvn install

# 安裝netty-4.0.29源碼
wget https://github.com/netty/netty/archive/netty-4.0.29.Final.tar.gz
tar -zxf netty-4.0.29.Final.tar.gz
cd netty-netty-4.0.29.Final
mvn install -DskipTests

3.10 編譯 lz4-java-1.2.0.jar

wget https://github.com/lz4/lz4-java/archive/1.2.0.zip
unzip 1.2.0.zip
cd lz4-java-1.2.0
ant ivy-bootstrap
wget https://repo1.maven.org/maven2/org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar -P /root/.ant/lib/
# 如果報 SERVER ERROR: HTTPS Required url=http://repo1.maven.org/maven2 ,修改連接爲 https。
# 因爲從2020年1月15日開始,中央存儲庫不再支持通過純HTTP進行的不安全通信,並且要求對存儲庫的所有請求都通過HTTPS進行加密
# 例如如下錯誤,可以通過自建的 http 服務來解決。
# [ivy:resolve] :::: ERRORS
# [ivy:resolve] 	SERVER ERROR: HTTPS Required url=http://repo1.maven.org/maven2/com/carrotsearch/randomizedtesting/junit4-ant/2.0.9/junit4-ant-2.0.9.pom
# [ivy:resolve] 	SERVER ERROR: HTTPS Required url=http://repo1.maven.org/maven2/com/carrotsearch/randomizedtesting/junit4-ant/2.0.9/junit4-ant-2.0.9.jar
# [ivy:resolve] 
# [ivy:resolve] :: USE VERBOSE OR DEBUG MESSAGE LEVEL FOR MORE DETAILS
ant

# 如果報錯時
# ant ivy-bootstrap
# ls /usr/share/ant/lib /root/.ant/lib
# ant --execdebug

# 編譯成功之後,在 dist 有如下 jar
# lz4-1.2-SNAPSHOT.jar  lz4-1.2-SNAPSHOT-javadoc.jar  lz4-1.2-SNAPSHOT.pom  lz4-1.2-SNAPSHOT-sources.jar
mvn install:install-file -Dfile=dist/lz4-1.2-SNAPSHOT.jar -DgroupId=net.jpountz.lz4 -DartifactId=lz4 -Dversion=1.2-SNAPSHOT -Dpackaging=jar
mvn install:install-file -Dfile=dist/lz4-1.2-SNAPSHOT.jar -DgroupId=net.jpountz.lz4 -DartifactId=lz4 -Dversion=1.2.0 -Dpackaging=jar

【缺少證書,不選用此方法】如果上面報 SERVER ERROR: HTTPS Required url 錯誤,可以通過 Nginx 代理轉爲 https

# wget http://nginx.org/download/nginx-1.18.0.tar.gz
# tar -zxf nginx-1.18.0.tar.gz
# cd nginx-1.18.0
# # 告訴等會安裝的文件要放在哪裏
# ./configure --prefix=/opt/installed/nginx-1.18.0 --with-http_ssl_module
# make
# # 安裝到配置的路徑
# make install
# 
# ############
# systemctl stop httpd.service
# /opt/installed/nginx-1.18.0/sbin/nginx
# /opt/installed/nginx-1.18.0/sbin/nginx -s reload

將缺失的jar 下載到本地 http 文件索引路徑下,然後本地 /etc/hosts 中臨時配置 repo1.maven.org 指向本地,然後開啓 http 服務。
編譯完畢後可以臨時關閉,用的時候再開啓。

cd /var/www/html/maven2
ls org/apache/ant/ant/1.8.2/
wget https://repo1.maven.org/maven2/org/apache/ant/ant/1.8.2/ant-1.8.2.pom -P org/apache/ant/ant/1.8.2/
wget https://repo1.maven.org/maven2/org/apache/ant/ant/1.8.2/ant-1.8.2.jar -P org/apache/ant/ant/1.8.2/
ls org/apache/ant/ant-junit/1.8.2/
wget https://repo1.maven.org/maven2/org/apache/ant/ant-junit/1.8.2/ant-junit-1.8.2.pom -P org/apache/ant/ant-junit/1.8.2/
wget https://repo1.maven.org/maven2/org/apache/ant/ant-junit/1.8.2/ant-junit-1.8.2.jar -P org/apache/ant/ant-junit/1.8.2/
ls junit/junit/4.10/
wget https://repo1.maven.org/maven2/junit/junit/4.10/junit-4.10.pom -P junit/junit/4.10/
wget https://repo1.maven.org/maven2/junit/junit/4.10/junit-4.10.jar -P junit/junit/4.10/
ls asm/asm/3.3.1/
wget https://repo1.maven.org/maven2/asm/asm/3.3.1/asm-3.3.1.pom -P asm/asm/3.3.1/
wget https://repo1.maven.org/maven2/asm/asm/3.3.1/asm-3.3.1.jar -P asm/asm/3.3.1/
ls com/google/guava/guava/10.0.1/
wget https://repo1.maven.org/maven2/com/google/guava/guava/10.0.1/guava-10.0.1.pom -P com/google/guava/guava/10.0.1/
wget https://repo1.maven.org/maven2/com/google/guava/guava/10.0.1/guava-10.0.1.jar -P com/google/guava/guava/10.0.1/
ls commons-io/commons-io/2.3/
wget https://repo1.maven.org/maven2/commons-io/commons-io/2.3/commons-io-2.3.pom -P commons-io/commons-io/2.3/
wget https://repo1.maven.org/maven2/commons-io/commons-io/2.3/commons-io-2.3.jar -P commons-io/commons-io/2.3/
ls com/google/code/gson/gson/2.0/
wget https://repo1.maven.org/maven2/com/google/code/gson/gson/2.0/gson-2.0.pom -P com/google/code/gson/gson/2.0/
wget https://repo1.maven.org/maven2/com/google/code/gson/gson/2.0/gson-2.0.jar -P com/google/code/gson/gson/2.0/
ls org/simpleframework/simple-xml/2.6.2/
wget https://repo1.maven.org/maven2/org/simpleframework/simple-xml/2.6.2/simple-xml-2.6.2.pom -P org/simpleframework/simple-xml/2.6.2/
wget https://repo1.maven.org/maven2/org/simpleframework/simple-xml/2.6.2/simple-xml-2.6.2.jar -P org/simpleframework/simple-xml/2.6.2/
ls com/carrotsearch/randomizedtesting/randomizedtesting-runner/2.0.9/
wget https://repo1.maven.org/maven2/com/carrotsearch/randomizedtesting/randomizedtesting-runner/2.0.9/randomizedtesting-runner-2.0.9.pom -P com/carrotsearch/randomizedtesting/randomizedtesting-runner/2.0.9/
wget https://repo1.maven.org/maven2/com/carrotsearch/randomizedtesting/randomizedtesting-runner/2.0.9/randomizedtesting-runner-2.0.9.jar -P com/carrotsearch/randomizedtesting/randomizedtesting-runner/2.0.9/
ls xpp3/xpp3/1.1.3.3/
wget https://repo1.maven.org/maven2/xpp3/xpp3/1.1.3.3/xpp3-1.1.3.3.pom -P xpp3/xpp3/1.1.3.3/
wget https://repo1.maven.org/maven2/xpp3/xpp3/1.1.3.3/xpp3-1.1.3.3.jar -P xpp3/xpp3/1.1.3.3/
ls org/apache/ant/ant-parent/1.8.2/
wget https://repo1.maven.org/maven2/org/apache/ant/ant-parent/1.8.2/ant-parent-1.8.2.pom -P org/apache/ant/ant-parent/1.8.2/
wget https://repo1.maven.org/maven2/org/apache/ant/ant-parent/1.8.2/ant-parent-1.8.2.jar -P org/apache/ant/ant-parent/1.8.2/
ls com/google/guava/guava-parent/10.0.1/
wget https://repo1.maven.org/maven2/com/google/guava/guava-parent/10.0.1/guava-parent-10.0.1.pom -P com/google/guava/guava-parent/10.0.1/
wget https://repo1.maven.org/maven2/com/google/guava/guava-parent/10.0.1/guava-parent-10.0.1.jar -P com/google/guava/guava-parent/10.0.1/
ls asm/asm-parent/3.3.1/
wget https://repo1.maven.org/maven2/asm/asm-parent/3.3.1/asm-parent-3.3.1.pom -P asm/asm-parent/3.3.1/
wget https://repo1.maven.org/maven2/asm/asm-parent/3.3.1/asm-parent-3.3.1.jar -P asm/asm-parent/3.3.1/
ls org/sonatype/oss/oss-parent/5/
wget https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/5/oss-parent-5.pom -P org/sonatype/oss/oss-parent/5/
wget https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/5/oss-parent-5.jar -P org/sonatype/oss/oss-parent/5/
ls stax/stax-api/1.0.1/
wget https://repo1.maven.org/maven2/stax/stax-api/1.0.1/stax-api-1.0.1.pom -P stax/stax-api/1.0.1/
wget https://repo1.maven.org/maven2/stax/stax-api/1.0.1/stax-api-1.0.1.jar -P stax/stax-api/1.0.1/
ls stax/stax/1.2.0/
wget https://repo1.maven.org/maven2/stax/stax/1.2.0/stax-1.2.0.pom -P stax/stax/1.2.0/
wget https://repo1.maven.org/maven2/stax/stax/1.2.0/stax-1.2.0.jar -P stax/stax/1.2.0/
ls org/apache/ant/ant-launcher/1.8.2/
wget https://repo1.maven.org/maven2/org/apache/ant/ant-launcher/1.8.2/ant-launcher-1.8.2.pom -P org/apache/ant/ant-launcher/1.8.2/
wget https://repo1.maven.org/maven2/org/apache/ant/ant-launcher/1.8.2/ant-launcher-1.8.2.jar -P org/apache/ant/ant-launcher/1.8.2/
ls org/hamcrest/hamcrest-core/1.1/
wget https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.pom -P org/hamcrest/hamcrest-core/1.1/
wget https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar -P org/hamcrest/hamcrest-core/1.1/
ls com/google/guava/guava-bootstrap/10.0.1/
wget https://repo1.maven.org/maven2/com/google/guava/guava-bootstrap/10.0.1/guava-bootstrap-10.0.1.pom -P com/google/guava/guava-bootstrap/10.0.1/
wget https://repo1.maven.org/maven2/com/google/guava/guava-bootstrap/10.0.1/guava-bootstrap-10.0.1.jar -P com/google/guava/guava-bootstrap/10.0.1/
ls org/hamcrest/hamcrest-parent/1.1/
wget https://repo1.maven.org/maven2/org/hamcrest/hamcrest-parent/1.1/hamcrest-parent-1.1.pom -P org/hamcrest/hamcrest-parent/1.1/
wget https://repo1.maven.org/maven2/org/hamcrest/hamcrest-parent/1.1/hamcrest-parent-1.1.jar -P org/hamcrest/hamcrest-parent/1.1/
ls org/apache/commons/commons-parent/24/
wget https://repo1.maven.org/maven2/org/apache/commons/commons-parent/24/commons-parent-24.pom -P org/apache/commons/commons-parent/24/
wget https://repo1.maven.org/maven2/org/apache/commons/commons-parent/24/commons-parent-24.jar -P org/apache/commons/commons-parent/24/
ls org/apache/apache/9/
wget https://repo1.maven.org/maven2/org/apache/apache/9/apache-9.pom -P org/apache/apache/9/
wget https://repo1.maven.org/maven2/org/apache/apache/9/apache-9.jar -P org/apache/apache/9/
ls org/mvel/mvel2/2.1.5.Final/
wget https://repo1.maven.org/maven2/org/mvel/mvel2/2.1.5.Final/mvel2-2.1.5.Final.pom -P org/mvel/mvel2/2.1.5.Final/
wget https://repo1.maven.org/maven2/org/mvel/mvel2/2.1.5.Final/mvel2-2.1.5.Final.jar -P org/mvel/mvel2/2.1.5.Final/
ls ant-contrib/cpptasks/1.0b5/
wget https://repo1.maven.org/maven2/ant-contrib/cpptasks/1.0b5/cpptasks-1.0b5.pom -P ant-contrib/cpptasks/1.0b5/
wget https://repo1.maven.org/maven2/ant-contrib/cpptasks/1.0b5/cpptasks-1.0b5.jar -P ant-contrib/cpptasks/1.0b5/
ls ant/ant/1.6.5/
wget https://repo1.maven.org/maven2/ant/ant/1.6.5/ant-1.6.5.pom -P ant/ant/1.6.5/
wget https://repo1.maven.org/maven2/ant/ant/1.6.5/ant-1.6.5.jar -P ant/ant/1.6.5/
ls xerces/xercesImpl/2.8.1/
wget https://repo1.maven.org/maven2/xerces/xercesImpl/2.8.1/xercesImpl-2.8.1.pom -P xerces/xercesImpl/2.8.1/
wget https://repo1.maven.org/maven2/xerces/xercesImpl/2.8.1/xercesImpl-2.8.1.jar -P xerces/xercesImpl/2.8.1/
ls org/apache/apache/4/
wget https://repo1.maven.org/maven2/org/apache/apache/4/apache-4.pom -P org/apache/apache/4/
wget https://repo1.maven.org/maven2/org/apache/apache/4/apache-4.jar -P org/apache/apache/4/
ls org/apache/apache/3/
wget https://repo1.maven.org/maven2/org/apache/apache/3/apache-3.pom -P org/apache/apache/3/
wget https://repo1.maven.org/maven2/org/apache/apache/3/apache-3.jar -P org/apache/apache/3/
ls xml-apis/xml-apis/1.3.03/
wget https://repo1.maven.org/maven2/xml-apis/xml-apis/1.3.03/xml-apis-1.3.03.pom -P xml-apis/xml-apis/1.3.03/
wget https://repo1.maven.org/maven2/xml-apis/xml-apis/1.3.03/xml-apis-1.3.03.jar -P xml-apis/xml-apis/1.3.03/
ls org/apache/apache/1/
wget https://repo1.maven.org/maven2/org/apache/apache/1/apache-1.pom -P org/apache/apache/1/
wget https://repo1.maven.org/maven2/org/apache/apache/1/apache-1.jar -P org/apache/apache/1/

3.11 編譯snappy-java-1.0.4.1

wget https://gitee.com/mirrors/snappy-java/repository/archive/snappy-java-1.0.4.1
mv snappy-java-1.0.4.1 snappy-java-1.0.4.1.zip
unzip snappy-java-1.0.4.1.zip
mv snappy-java snappy-java-1.0.4.1
cd snappy-java-1.0.4.1
# 1.修改Makefile文件中,snappy壓縮包下載地址(註釋原下載地址,替換新的)。
# 2.修改Makefile文件中解壓命令(註釋原解壓命令,替換新的)。
vim Makefile
make

# 如果報如下錯誤
#gzip: stdin: not in gzip format
#tar: Child returned status 1
#tar: Error is not recoverable: exiting now
rm -rf target/snappy-1.0.4.tar.gz
# 註釋Makefile文件中,snappy壓縮包下載地址,手動下載對應的snappy-1.0.4.tar.gz
wget https://src.fedoraproject.org/lookaside/pkgs/snappy/snappy-1.0.4.tar.gz/b69151652e82168bc5c643bcd6f07162/snappy-1.0.4.tar.gz -P target/

# 編譯出的jar包位於:target/snappy-java-1.0.4.1.jar
cd ..
mvn install:install-file -Dpackaging=jar -Dfile=snappy-java-1.0.4.1/target/snappy-java-1.0.4.1.jar -DgroupId=org.xerial.snappy -DartifactId=snappy-java -Dversion=1.0.4.1

3.12 編譯snappy-java-1.0.5

已編譯,這裏略過,可參考 snappy-java-1.0.4.1,1.0.5 移植指南(CentOS 7.6)> 編譯

3.13 編譯snappy-java-1.1.0.1

wget https://gitee.com/mirrors/snappy-java/repository/archive/1.1.0.1
mv 1.1.0.1 snappy-java-1.1.0.1.zip
unzip snappy-java-1.1.0.1.zip
mv snappy-java snappy-java-1.1.0.1
cd snappy-java-1.1.0.1
# 1.修改Makefile文件中,註釋掉 #curl -o$@ http://snappy.googlecode.com/files/snappy-$(VERSION).tar.gz
# 2.修改Makefile文件中解壓命令(註釋原解壓命令,替換新的)。 $(TAR) xvf $< -C $(TARGET)
vim Makefile
wget https://src.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.0.tar.gz/c8f3ef29b5281e78f4946b2d739cea4f/snappy-1.1.0.tar.gz -P target/
# 將版本修改爲 1.1.0.1
vim pom.xml
make
# 編譯出的jar包位於:target/snappy-java-1.1.0.1.jar
cd ..
mvn install:install-file -Dpackaging=jar -Dfile=snappy-java-1.1.0.1/target/snappy-java-1.1.0.1.jar -DgroupId=org.xerial.snappy -DartifactId=snappy-java -Dversion=1.1.0.1

3.14 編譯snappy-java-1.1.1.3

wget https://gitee.com/mirrors/snappy-java/repository/archive/1.1.1.3
mv 1.1.1.3 snappy-java-1.1.1.3.zip
unzip snappy-java-1.1.1.3.zip
mv snappy-java snappy-java-1.1.1.3
cd snappy-java-1.1.1.3
# 1.修改Makefile文件中,註釋掉	38  #curl -o$@ http://snappy.googlecode.com/files/snappy-$(VERSION).tar.gz
# 2.修改Makefile文件中解壓命令(註釋原解壓命令,替換新的)。$(TAR) xvf $< -C $(TARGET)
vim Makefile
wget https://src.fedoraproject.org/repo/pkgs/snappy/snappy-1.1.1.tar.gz/8887e3b7253b22a31f5486bca3cbc1c2/snappy-1.1.1.tar.gz -P target/
make

# 如果報 Download failed. Obtain the jar manually and place it at /root/.sbt/launchers/0.13.5/sbt-launch.jar,手動下載
wget http://dl.bintray.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.5/sbt-launch.jar -P /root/.sbt/launchers/0.13.5/
# 然後 註釋掉sbt文件的該行(340):-sbt-launch-repo) require_arg path "$1" "$2" && sbt_launch_repo="$2" && shift 2 ;;。
vim sbt

# 編譯出的jar包位於:target/snappy-java-1.1.1.3.jar
mvn install:install-file -Dpackaging=jar -Dfile=target/snappy-java-1.1.1.3.jar -DgroupId=org.xerial.snappy -DartifactId=snappy-java -Dversion=1.1.1.3

將缺失的jar 下載到本地

cd /var/www/html/maven2
ls jline/jline/2.11/
mkdir -p jline/jline/2.11/
cp /opt/maven_repo/jline/jline/2.11/jline-2.11.pom jline/jline/2.11/
cp /opt/maven_repo/jline/jline/2.11/jline-2.11.jar jline/jline/2.11/
ls org/scala-lang/scala-library/2.10.4/
wget https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.4/scala-library-2.10.4.pom -P org/scala-lang/scala-library/2.10.4/
wget https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.4/scala-library-2.10.4.jar -P org/scala-lang/scala-library/2.10.4/
ls org/scala-lang/scala-compiler/2.10.4/
wget https://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.10.4/scala-compiler-2.10.4.pom -P org/scala-lang/scala-compiler/2.10.4/
wget https://repo1.maven.org/maven2/org/scala-lang/scala-compiler/2.10.4/scala-compiler-2.10.4.jar -P org/scala-lang/scala-compiler/2.10.4/
ls org/apache/ivy/ivy/2.3.0/
wget https://repo1.maven.org/maven2/org/apache/ivy/ivy/2.3.0/ivy-2.3.0.pom -P org/apache/ivy/ivy/2.3.0/
wget https://repo1.maven.org/maven2/org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar -P org/apache/ivy/ivy/2.3.0/
ls com/jcraft/jsch/0.1.46/
wget https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.46/jsch-0.1.46.pom -P com/jcraft/jsch/0.1.46/
wget https://repo1.maven.org/maven2/com/jcraft/jsch/0.1.46/jsch-0.1.46.jar -P com/jcraft/jsch/0.1.46/
ls org/scala-sbt/test-interface/1.0/
wget https://repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.pom -P org/scala-sbt/test-interface/1.0/
wget https://repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar -P org/scala-sbt/test-interface/1.0/
ls org/scala-lang/scala-reflect/2.10.4/
wget https://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.10.4/scala-reflect-2.10.4.pom -P org/scala-lang/scala-reflect/2.10.4/
wget https://repo1.maven.org/maven2/org/scala-lang/scala-reflect/2.10.4/scala-reflect-2.10.4.jar -P org/scala-lang/scala-reflect/2.10.4/
ls org/apache/apache/7/
wget https://repo1.maven.org/maven2/org/apache/apache/7/apache-7.pom -P org/apache/apache/7/
wget https://repo1.maven.org/maven2/org/apache/apache/7/apache-7.jar -P org/apache/apache/7/
ls org/sonatype/oss/oss-parent/6/
wget https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/6/oss-parent-6.pom -P org/sonatype/oss/oss-parent/6/
wget https://repo1.maven.org/maven2/org/sonatype/oss/oss-parent/6/oss-parent-6.jar -P org/sonatype/oss/oss-parent/6/
ls org/scala-lang/jline/2.10.4/
wget https://repo1.maven.org/maven2/org/scala-lang/jline/2.10.4/jline-2.10.4.pom -P org/scala-lang/jline/2.10.4/
wget https://repo1.maven.org/maven2/org/scala-lang/jline/2.10.4/jline-2.10.4.jar -P org/scala-lang/jline/2.10.4/
ls org/fusesource/jansi/jansi/1.4/
wget https://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.4/jansi-1.4.pom -P org/fusesource/jansi/jansi/1.4/
wget https://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.4/jansi-1.4.jar -P org/fusesource/jansi/jansi/1.4/
ls org/codehaus/codehaus-parent/4/
wget https://repo1.maven.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.pom -P org/codehaus/codehaus-parent/4/
wget https://repo1.maven.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.jar -P org/codehaus/codehaus-parent/4/
ls org/scala-lang/scala-library/2.10.3/
wget https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.3/scala-library-2.10.3.pom -P org/scala-lang/scala-library/2.10.3/
wget https://repo1.maven.org/maven2/org/scala-lang/scala-library/2.10.3/scala-library-2.10.3.jar -P org/scala-lang/scala-library/2.10.3/

3.15 編譯snappy-java-1.1.1.6

wget https://gitee.com/mirrors/snappy-java/repository/archive/1.1.1.6
mv 1.1.1.6 snappy-java-1.1.1.6.zip
unzip snappy-java-1.1.1.6.zip
mv snappy-java snappy-java-1.1.1.6
cd snappy-java-1.1.1.6
# 1.修改Makefile文件中,註釋掉	38  #curl -o$@ http://snappy.googlecode.com/files/snappy-$(VERSION).tar.gz
# 2.修改Makefile文件中解壓命令(註釋原解壓命令,替換新的)。$(TAR) xvf $< -C $(TARGET)
vim Makefile
mkdir target
cp ../snappy-java-1.1.1.3/target/snappy-1.1.1.tar.gz target/
make

# 如果報 Download failed. Obtain the jar manually and place it at /root/.sbt/launchers/0.13.6/sbt-launch.jar,手動下載
wget http://dl.bintray.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.6/sbt-launch.jar -P /root/.sbt/launchers/0.13.6/
# 然後 註釋掉sbt文件的該行(340):-sbt-launch-repo) require_arg path "$1" "$2" && sbt_launch_repo="$2" && shift 2 ;;。
vim sbt

# 編譯出的jar包位於:target/snappy-java-1.1.1.6.jar
mvn install:install-file -Dpackaging=jar -Dfile=target/snappy-java-1.1.1.6.jar -DgroupId=org.xerial.snappy -DartifactId=snappy-java -Dversion=1.1.1.6

3.16 編譯snappy-java-1.1.1.7

wget https://github.com/xerial/snappy-java/archive/1.1.1.7.zip
mv 1.1.1.7.zip snappy-java-1.1.1.7.zip
unzip snappy-java-1.1.1.7.zip
cd snappy-java-1.1.1.7
# 1.修改Makefile文件中,註釋掉	38  #curl -o$@ http://snappy.googlecode.com/files/snappy-$(VERSION).tar.gz
# 2.修改Makefile文件中解壓命令(註釋原解壓命令,替換新的)。$(TAR) xvf $< -C $(TARGET)
vim Makefile
mkdir target
cp ../snappy-java-1.1.1.3/target/snappy-1.1.1.tar.gz target/
make

# 編譯出的jar包位於:target/snappy-java-1.1.1.7.jar
mvn install:install-file -Dpackaging=jar -Dfile=target/snappy-java-1.1.1.7.jar -DgroupId=org.xerial.snappy -DartifactId=snappy-java -Dversion=1.1.1.7

3.17 編譯snappy-java-1.1.2.6

wget https://gitee.com/mirrors/snappy-java/repository/archive/1.1.2.6
mv 1.1.2.6 snappy-java-1.1.2.6.zip
unzip snappy-java-1.1.2.6.zip
mv snappy-java snappy-java-1.1.2.6
cd snappy-java-1.1.2.6
# 1.修改Makefile文件中,註釋掉	38  #curl -o$@ http://snappy.googlecode.com/files/snappy-$(VERSION).tar.gz
# 2.修改Makefile文件中解壓命令(註釋原解壓命令,替換新的)。$(TAR) xvf $< -C $(TARGET)
vim Makefile
wget http://repository.timesys.com/buildsources/s/snappy/snappy-1.1.2/snappy-1.1.2.tar.gz -P target/

# 如果報 Download failed. Obtain the jar manually and place it at /root/.sbt/launchers/0.13.9/sbt-launch.jar,手動下載
wget http://dl.bintray.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.9/sbt-launch.jar -P /root/.sbt/launchers/0.13.9/
# 然後 註釋掉sbt文件的該行(340):-sbt-launch-repo) require_arg path "$1" "$2" && sbt_launch_repo="$2" && shift 2 ;;。
vim sbt

make
# 編譯出的jar包位於:target/snappy-java-1.1.2.6.jar
mvn install:install-file -Dpackaging=jar -Dfile=target/snappy-java-1.1.2.6.jar -DgroupId=org.xerial.snappy -DartifactId=snappy-java -Dversion=1.1.2.6

3.18 編譯 snappy-1.1.7

# 下載 https://github.com/google/snappy/releases/tag/1.1.7
wget https://github.com/google/snappy/archive/1.1.7.tar.gz
mv 1.1.7.tar.gz snappy-1.1.7.tar.gz
tar -zxvf snappy-1.1.7.tar.gz
cd snappy-1.1.7

mkdir build
cd build
cmake ../
make install

# 修改CMakeLists.txt文件開啓動態鏈接庫編譯,將該選項從“OFF”改爲“ON”。
cd ..
vim CMakeLists.txt
# 大概在 第(6 行)
option(BUILD_SHARED_LIBS "Build shared libraries(DLLs)." ON)

3.19 編譯安裝netty-4.1.17

wget https://github.com/netty/netty/archive/netty-4.1.17.Final.tar.gz
tar -zxf netty-4.1.17.Final.tar.gz
cd netty-netty-4.1.17.Final

# 修改“pom.xml”,註釋以下代碼(大概在 594-600 行)和 187 行
vim pom.xml

# 去除一下測試代碼中的錯誤
mv transport/src/test/java/io/netty/channel/PendingWriteQueueTest.java transport/src/test/java/io/netty/channel/PendingWriteQueueTestjava
mv codec/src/test/java/io/netty/handler/codec/ByteToMessageCodecTest.java codec/src/test/java/io/netty/handler/codec/ByteToMessageCodecTestjava
mv handler/src/test/java/io/netty/handler/stream/ChunkedWriteHandlerTest.java handler/src/test/java/io/netty/handler/stream/ChunkedWriteHandlerTestjava
mv handler/src/test/java/io/netty/handler/flush/FlushConsolidationHandlerTest.java handler/src/test/java/io/netty/handler/flush/FlushConsolidationHandlerTestjava

mvn install -DskipTests

3.20 編譯Hbase-shaded-netty-2.1.0

wget https://github.com/apache/hbase-thirdparty/archive/rel/2.1.0.tar.gz
mv 2.1.0.tar.gz hbase-thirdparty-rel-2.1.0.tar.gz
tar -zxf hbase-thirdparty-rel-2.1.0.tar.gz
cd hbase-thirdparty-rel-2.1.0

# 修改“hbase-shaded-netty/pom.xml”文件,將“x86_64”修改爲“aarch_64”。(大概在 128、129 行)
vim hbase-shaded-netty/pom.xml

mvn clean install

3.21 編譯commons-crypto-1.0.0

wget https://github.com/apache/commons-crypto/archive/CRYPTO-1.0.0.tar.gz
tar -zxvf CRYPTO-1.0.0.tar.gz
cd commons-crypto-CRYPTO-1.0.0
mvn clean install -DskipTests

3.22 編譯scala-compiler-2.11.8

編譯此依賴需要先編譯 jline-2.12.1

# 下載scala-2.11.8源碼
git clone https://github.com/scala/scala.git
cp -r scala scala-2.11.8
cd scala-2.11.8
git checkout v2.11.8
sed -i "48,48s%)%),\n\ \ \ \ Keys.\`package\`\ := bundle.value%g" project/Osgi.scala
sbt package

# 編譯完成之後的 scala-compiler.jar 在如下路徑下
build-sbt/pack/lib/scala-compiler.jar

mvn install:install-file -Dpackaging=jar -Dfile=build-sbt/pack/lib/scala-compiler.jar \
-DgroupId=org.scala-lang -DartifactId=scala-compiler -Dversion=2.11.8

3.23 編譯scala-compiler-2.11.12

cd ..
cp -r scala scala-2.11.12
cd scala-2.11.12
git checkout v2.11.12
sed -i "50,50s%)%),\n\ \ \ \ Keys.\`package\`\ := bundle.value%g" project/Osgi.scala
sbt package

# 編譯完成之後的 scala-compiler.jar 在如下路徑下
ll build/pack/lib/

mvn install:install-file -Dpackaging=jar -Dfile=build/pack/lib/scala-compiler.jar \
-DgroupId=org.scala-lang -DartifactId=scala-compiler -Dversion=2.11.12

3.24 編譯scala-compiler-2.12.7

cd ..
wget https://codeload.github.com/scala/scala/tar.gz/v2.12.7
tar -zxf scala-2.12.7.tar.gz.gz
cd scala-2.12.7
sbt package

# 編譯完成之後的 scala-compiler.jar 在如下路徑下
build-sbt/pack/lib/scala-compiler.jar

mvn install:install-file -Dpackaging=jar -Dfile=build-sbt/pack/lib/scala-compiler.jar \
-DgroupId=org.scala-lang -DartifactId=scala-compiler -Dversion=2.12.7

3.25 編譯安裝netty-4.0.52源碼

wget https://github.com/netty/netty/archive/netty-4.0.52.Final.tar.gz
tar -zxvf netty-4.0.52.Final.tar.gz
cd netty-netty-4.0.52.Final
# 修改“netty-netty-4.0.52.Final/pom.xml”,註釋以下代碼(592-598行)
vim pom.xml +592

mvn install -DskipTests

在這裏插入圖片描述

3.26 編譯安裝netty-tcnative-parent-2.0.6.Final

詳細參看 https://support.huaweicloud.com/prtg-tpdl-kunpengbds/kunpengnettyall4052_02_0004.html

wget https://codeload.github.com/netty/netty-tcnative/tar.gz/netty-tcnative-parent-2.0.6.Final
mv netty-tcnative-netty-tcnative-parent-2.0.6.Final.tar.gz.gz netty-tcnative-parent-2.0.6.Final.tar.gz
tar -zxvf netty-tcnative-parent-2.0.6.Final.tar.gz
cd netty-tcnative-netty-tcnative-parent-2.0.6.Final

# 修改“pom.xml”,屏蔽boringssl的編譯。註釋 472 行引入的模塊
# 同時還需 註釋掉該文件中兩處下載apr-1.6.3的部分。(322行、373行)
vim pom.xml

# 下載apr-1.6.3,放置於以下位置
wget https://archive.apache.org/dist/apr/apr-1.6.2.tar.gz -P openssl-static/target

# 改爲 apr 自己安裝的目錄:/opt/installed/apr
vim openssl-dynamic/pom.xml +171

# 修改“openssl-static/pom.xml”,註釋掉該文件中3處下載openssl-1.0.2l的部分(136-140行、202-206行、252-256行)
vim openssl-static/pom.xml +136
# 下載openssl-1.0.2l,放置於以下位置
wget https://ftp.openssl.org/source/old/1.0.2/openssl-1.0.2l.tar.gz
mv openssl-1.0.2l.tar.gz openssl-static/target

# 將下載的apr-1.6.2,放置於以下位置
cp openssl-static/target/apr-1.6.2.tar.gz libressl-static/target
# 修改“libressl-static/pom.xml”,註釋掉該文件中1處下載libressl-2.5.5的部分(141行、173行)
vim libressl-static/pom.xml +141
wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.5.5.tar.gz
mv libressl-2.5.5.tar.gz libressl-static/target

mvn install -DskipTests

netty-tcnative-parent-2.0.6.Final編譯成功

3.27 編譯安裝netty-tcnative-parent-2.0.7.Final

詳細參看 https://support.huaweicloud.com/prtg-tpdl-kunpengbds/kunpengnettyall4117_02_0004.html

wget https://codeload.github.com/netty/netty-tcnative/tar.gz/netty-tcnative-parent-2.0.7.Final
mv netty-tcnative-parent-2.0.7.Final netty-tcnative-parent-2.0.7.Final.tar.gz
tar -zxvf netty-tcnative-parent-2.0.7.Final.tar.gz
cd netty-tcnative-netty-tcnative-parent-2.0.7.Final

# 修改pom.xml,屏蔽boringssl的編譯。註釋 272 行引入的模塊
# 同時還需 註釋掉該文件中兩處下載apr-1.6.3的部分。(322行、373行)

# 下載apr-1.6.3,放置於以下位置
wget https://archive.apache.org/dist/apr/apr-1.6.3.tar.gz
mv apr-1.6.3.tar.gz openssl-static/target

# 修改“openssl-static/pom.xml”,註釋掉該文件中3處下載openssl-1.0.2l的部分(135-140行、203-207行、254-258行)
vim openssl-static/pom.xml
# 下載openssl-1.0.2l,放置於以下位置
wget https://ftp.openssl.org/source/old/1.0.2/openssl-1.0.2l.tar.gz
mv openssl-1.0.2l.tar.gz openssl-static/target

mvn install -DskipTests

cp openssl-static/target/apr-1.6.3.tar.gz libressl-static/target
mvn install -DskipTests

3.28 編譯Jansi-1.0.jar

wget https://github.com/fusesource/jansi-native/archive/jansi-native-1.0.zip
unzip jansi-native-1.0.zip
cd jansi-native-jansi-native-1.0/
# 註釋掉 pom.xml 的 157-172 行。 gpg.skip=true
mvn clean -Dplatform=linux64 package

3.29 編譯 Jansi-1.4.jar

wget https://github.com/fusesource/jansi/archive/jansi-1.4.tar.gz
tar -zxf jansi-1.4.tar.gz
cd jansi-jansi-1.4

#修改pom.xml,註釋掉下面125-148行的這部分內容

mvn clean install

3.30 安裝Protoc

這部分直接參考華爲文檔 鯤鵬大數據解決方案 > 移植指南(Apache)> Hadoop 3.1.1 移植指南(CentOS 7.6)> 配置編譯環境> 安裝Protoc

# 安裝Protoc 之後,執行下面查看
protoc --version

wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz
tar -zxf protobuf-2.5.0.tar.gz -C /opt/installed/
cd /opt/installed/protobuf-2.5.0

# 安裝依賴庫
# wget http://124.193.70.227:18080/ambari/repodata/repomd.xml -P /root/HDP/repodata/
yum -y install patch automake libtool

# 上傳protoc.patch到服務器,打補丁,其中protoc.patch的路徑視實際情況而定。
cp /root/protoc.patch ./src/google/protobuf/stubs/
cd ./src/google/protobuf/stubs/
patch -p1 < protoc.patch
cd -

# 編譯並安裝到系統默認目錄。
./autogen.sh && ./configure CFLAGS='-fsigned-char' && make -j8 && make install


# 這一步非常重要,否則後面編譯 HBase 就會出現問題
mvn install:install-file -DgroupId=com.google.protobuf -DartifactId=protoc -Dversion=2.5.0 -Dclassifier=linux-aarch_64 -Dpackaging=exe -Dfile=/usr/local/bin/protoc



4 編譯 Ambari

4.1 下載 Ambari 源碼

wget https://github.com/hortonworks/ambari-release/archive/AMBARI-2.7.3.0-139-tag.tar.gz
tar -zxf AMBARI-2.7.3.0-139-tag.tar.gz -C /opt/installed
cd /opt/installed/ambari-release-AMBARI-2.7.3.0-139-tag/

export PHANTOMJS_ARCH="arm64"
git config --global http.sslverify false

4.2 編譯_posixsubprocess32.so

# 通過命令安裝python2-subprocess32
yum install -y python2-subprocess32.aarch64
# 在 /usr/lib64/python2.7/site-packages/_posixsubprocess.so 處獲得 _posixsubprocess.so
mv /usr/lib64/python2.7/site-packages/_posixsubprocess.so /usr/lib64/python2.7/site-packages/_posixsubprocess32.so

# 在ambari的源碼中"ambari-common/src/main/python/ambari_commons/libs"目錄下執行命令
cd ambari-common/src/main/python/ambari_commons/libs
cp -r x86_64 aarch64

cp /usr/lib64/python2.7/site-packages/_posixsubprocess32.so aarch64/
rm -rf aarch64/_posixsubprocess.so

4.3 編譯_speedups.so

# 從ambari源碼中“ambari-common/src/main/python/ambari_simplejson/__init__.py"文件中100行可知simplejson的版本爲2.0.9
vim /opt/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-common/src/main/python/ambari_simplejson/__init__.py

# pip 安裝
## 如果失敗表示 pip 未安裝
pip --version
whereis python
# 訪問https://pypi.org/project/pip/官網進行下載
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
sudo python get-pip.py

在這裏插入圖片描述


# 下載simplejson源碼並解壓
pip download simplejson==2.0.9
tar -zxf simplejson-2.0.9.tar.gz
cd simplejson-2.0.9

# 編譯simplejson
python setup.py build
# 編譯好的so文件在build/lib.linux-aarch64-2.7/simplejson/_speedups.so
ls build/lib.linux-aarch64-2.7/simplejson/

# 使用編譯完成的_speedups.so替換掉 ambari-common/src/main/python/ambari_simplejson/目錄下的_speedups.so
cp build/lib.linux-aarch64-2.7/simplejson/_speedups.so \
/opt/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-common/src/main/python/ambari_simplejson/_speedups.so

4.4 編譯 Phoenix-5.0.0

# 獲取 Phoenix 源碼
# wget https://github.com/hortonworks/phoenix-release/archive/HDP-3.0.0.0-1634-tag.tar.gz
# yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64
wget https://github.com/apache/phoenix/archive/v5.0.0-HBase-2.0.tar.gz
tar -zxvf v5.0.0-HBase-2.0.tar.gz
cd phoenix-5.0.0-HBase-2.0

# 修改Pom.xml,添加華爲鯤鵬的maven倉庫。
vim pom.xml +42
#   <repository>
#     <id>kunpengmaven</id>
#     <name>kunpeng maven</name>
#     <url>https://mirrors.huaweicloud.com/kunpeng/maven</url>
#   </repository>

# 編譯安裝
# 編譯成功後將在源碼目錄下./phoenix-assembly/target/目錄生成phoenix-5.0.0-HBase-2.0.tar.gz包。
mvn clean install -DskipTests -Dmaven.javadoc.skip=true
ll ./phoenix-assembly/target/

# 將 打好的 jar 方法 http 服務器索引目錄下
mkdir -p /var/www/html/packages/tar/
cp phoenix-assembly/target/phoenix-5.0.0-HBase-2.0.tar.gz /var/www/html/packages/tar/

如果報如下錯誤

[ERROR] Failed to execute goal on project phoenix-core: Could not resolve dependencies for project org.apache.phoenix:phoenix-core:jar:5.0.0-HBase-2.0: Failed to collect dependencies at org.apache.hbase:hbase-testing-util:jar:2.0.0 -> org.apache.hbase:hbase-server:jar:2.0.0 -> org.glassfish.web:javax.servlet.jsp:jar:2.3.2 -> org.glassfish:javax.el:jar:3.0.1-b06-SNAPSHOT: Failed to read artifact descriptor for org.glassfish:javax.el:jar:3.0.1-b06-SNAPSHOT: Could not transfer artifact org.glassfish:javax.el:pom:3.0.1-b06-SNAPSHOT from/to central-repos1 (http://repo1.maven.org/maven2/): Failed to transfer file: http://repo1.maven.org/maven2/org/glassfish/javax.el/3.0.1-b06-SNAPSHOT/javax.el-3.0.1-b06-SNAPSHOT.pom. Return code is: 501 , ReasonPhrase:HTTPS Required. -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :phoenix-core

解決:$MAVEN_HOME/conf/setting.xml 中配置阿里的鏡像

如果報 ERROR] java.lang.NoClassDefFoundError: scala/reflect/internal/Trees 導致 Phoenix - Spark 失敗。可以這樣解決,將 phoenix-spark/pom.xml 插件 net.alchim31.maven:scala-maven-plugin 編譯的 scala 版本改爲 2.11.0

詳細的可以查看我在華爲雲的 鯤鵬論壇 上回復的該問題的解決方法    (YoreYuan)
pom.xml 修改scala版本

4.5 編譯 hadoop-3.1.1

執行移植分析

# 安裝Protoc
protoc --version
# yum install openssl-devel zlib-devel automake libtool cmake
# 下載鏈接:https://github.com/hortonworks/hadoop-release/archive/HDP-3.0.0.0-1634-tag.tar.gz。
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.1.1/hadoop-3.1.1-src.tar.gz
tar -zxvf hadoop-3.1.1-src.tar.gz
cd hadoop-3.1.1-src

# 執行基礎編譯命令。
mvn install -DskipTests -Pdist,native -Dtar -Dmaven.javadoc.skip=true


# 添加snappy庫編譯命令。
mvn install -DskipTests -Pdist,native -Dtar -Dsnappy.lib=/usr/local/lib64 -Dbundle.snappy -Dmaven.javadoc.skip=true

# 編譯成功後,將在源碼下的“hadoop-dist/target/”目錄生成tar.gz包。
ls hadoop-dist/target/

# 將編譯成功後的 hadoop-3.1.1.tar.gz 放到 http 文件服務索引路徑
ls /var/www/html/packages/tar/
cp hadoop-dist/target/hadoop-3.1.1.tar.gz /var/www/html/packages/tar/

如果報如下錯誤,收到下載到本地倉庫

[ERROR] Failed to execute goal on project hadoop-aws: Could not resolve dependencies for project org.apache.hadoop:hadoop-aws:jar:3.1.1: Could not find artifact com.amazonaws:DynamoDBLocal:jar:1.11.86 in nexus-aliyun (http://maven.aliyun.com/nexus/content/groups/public) -> [Help 1]

通過上面可以看到在 Hadoop 下的 hadoop-aws 中引入的 com.amazonaws:DynamoDBLocal:jar:1.11.86 無法獲取,解決

# 查找 DynamoDBLocal 所在位置
grep -rn "Apache Hadoop Amazon Web Services support" ./
vim hadoop-tools/hadoop-aws/pom.xml +420

# 可以發現其scope 爲 test,因此我們可以直接將其註釋掉
#420    <!-- <dependency>
#421       <groupId>com.amazonaws</groupId>
#422       <artifactId>DynamoDBLocal</artifactId>
#423       <version>${dynamodb.local.version}</version>
#424       <scope>test</scope>
#425       <exclusions>
#426         <exclusion>
#427           <groupId>org.hamcrest</groupId>
#428           <artifactId>hamcrest-core</artifactId>
#429         </exclusion>
#430         <exclusion>
#431           <groupId>org.eclipse.jetty</groupId>
#432           <artifactId>jetty-http</artifactId>
#433         </exclusion>
#434         <exclusion>
#435           <groupId>org.apache.commons</groupId>
#436           <artifactId>commons-lang3</artifactId>
#437         </exclusion>
#438       </exclusions>
#439     </dependency>-->


# 將此測試類註釋掉
mv hadoop-tools/hadoop-aws/src/test hadoop-tools/hadoop-aws/src/test_back

hadoop 編譯成功

4.6 編譯 hbase-2.1.0

務必 aarch64 下編譯 安裝Protoc
因爲 google 倉庫在 2.5.0 不提供 aarch64位的支持。

protoc --version
# 下載鏈接:https://github.com/hortonworks/hbase-release/archive/HDP-3.0.0.0-1634-tag.tar.gz。
wget http://archive.apache.org/dist/hbase/2.1.0/hbase-2.1.0-src.tar.gz
tar -zxf hbase-2.1.0-src.tar.gz
cd hbase-2.1.0

# 執行編譯。
# validate -Denforcer.skip=true
# mvn package -Pdist,native, -DskipTests -Dtar -Dmaven.javadoc-skip=true assembly:single validate -Denforcer.skip=true
mvn clean package  -DskipTests assembly:single
# 編譯成功後,將在源碼下的“hbase-assembly/target/”目錄生成tar.gz包。
ls hbase-assembly/target/
# 拷貝到 http 索引資源包路徑下
cp hbase-assembly/target/hbase-2.1.0-bin.tar.gz /var/www/html/packages/tar/

針對 HBASE-19146 問題,是因爲HBase用到了protobuf,用於RPC消息的序列化和反序列化。編譯時通過 Maven 插件protobuf-maven-plugin將源代碼中的*.proto文件 轉換成Java源文件,然後再通過 Java 編譯器編譯成 jar 包。這個 Maven 插件依賴於 protoc,根據聲明 ${os.detected.classifier},Maven會自動對應不同的體系架構,從Maven倉庫中下載相應的二進 制執行文件。這是非常方便的Maven內建機制,用於自動支持不同平臺的Java依賴,但是HBase依賴於 一個很老版本的protoc 2.5.0, 但是Google還未開始從這個版本支持aarch64。

對比 HBase 的另一個模塊hbase-protocol-shaded,應用了protoc 3.5.1-1
/hbase-protocol-shaded/pom.xml中第 39 行、 79-96行)這個版本已經有aarch64的支持,編譯是成功的。

4.7 編譯安裝 grafana-2.6.0

參考 編譯安裝Grafana

wget https://github.com/grafana/grafana/archive/v2.6.0.tar.gz
mv v2.6.0.tar.gz grafana-v2.6.0.tar.gz
tar -zxf grafana-v2.6.0.tar.gz

# 搭建好golang環境,並將源碼移動到“GOPATH”目錄下的“src”目錄
mv grafana-2.6.0 ${GOPATH}/src/
# 拷貝grafana-2.6.0項目編譯過程中本身的依賴到src對應目錄
cd ${GOPATH}/src/grafana-2.6.0
mkdir -p ../github.com/grafana/grafana/pkg
cp pkg/* ../github.com/grafana/grafana/pkg/ -rf

# 執行後端編譯
go run build.go setup
go run build.go build

# 跳過phantomjs報錯(因爲系統中已安裝),執行前端編譯
npm config set registry "https://registry.npmjs.org/"
npm config set strict-ssl false
# 可以只安裝與grunt-cli相關的
npm install --force
# npm install -g grunt-cli
grunt --force

# 拷貝phantomjs可執行文件到相應目錄,打包時將自動將phantomjs打包到grafana的rpm包中。
cp /opt/installed/phantomjs/bin/phantomjs vendor/phantomjs/

# 打包
#go run build.go package
./node_modules/grunt-cli/bin/grunt release --force

如果報如下錯誤

Loading "grunt-karma.js" tasks...ERROR
>> TypeError: Cannot read property 'prototype' of undefined
Warning: Task "karma:test" not found. Used --force, continuing.

解決:

# 方便查看錯誤信息
npm install grunt-contrib-imagemin --save-dev
#npm install -g grunt
#mkdir /opt/installed/go/path/src/grafana-2.6.0/node_modules/gifsicle
npm install grunt-util-args
npm install karma
# [email protected]
npm install grunt-karma

#npm install --save-dev karma@~0.12.0
# npm uninstall -g grunt
#npm install grunt --save-dev
#npm install grunt-autoprefixer --save

4.8 接着4.1繼續完後後續Ambari 源碼的編譯

cd /opt/installed/ambari-release-AMBARI-2.7.3.0-139-tag

# 修改CPU架構
# 參考 [問題27](https://support.huaweicloud.com/prtg-hdp-kunpengbds/kunpengambarihdp_02_0015.html#kunpengambarihdp_02_0015__section133321452103219)
#  將所有pom.xml文件中的“needarch”值,從“x86_64”和“noarch”改爲“aarch64”
#
# 修改ambari-agent/pom.xml中304行爲“aarch64”
vim ambari-agent/pom.xml
du -sh `find . -name *.rpm`

# 將所有pom.xml文件中的“needarch”值,從“x86_64”和“noarch”改爲“ aarch64 ”
grep -rn "needarch"  ./
#./ambari-agent/pom.xml:304:          <needarch>aarch64</needarch>
#./ambari-infra/ambari-infra-assembly/pom.xml:74:              <needarch>noarch</needarch>
#./ambari-infra/ambari-infra-assembly/pom.xml:114:                  <needarch>noarch</needarch>
#./ambari-logsearch/ambari-logsearch-assembly/pom.xml:66:              <needarch>noarch</needarch>
#./ambari-metrics/ambari-metrics-assembly/pom.xml:203:              <needarch>x86_64</needarch>
#./ambari-metrics/ambari-metrics-assembly/pom.xml:465:                  <needarch>x86_64</needarch>
#./ambari-metrics/ambari-metrics-assembly/pom.xml:545:                  <needarch>x86_64</needarch>
#./ambari-server/pom.xml:563:          <needarch>x86_64</needarch>
vim ambari-agent/pom.xml +304
vim ambari-infra/ambari-infra-assembly/pom.xml +74
vim ambari-infra/ambari-infra-assembly/pom.xml +114
vim ambari-logsearch/ambari-logsearch-assembly/pom.xml +66
vim ambari-metrics/ambari-metrics-assembly/pom.xml +203
vim ambari-metrics/ambari-metrics-assembly/pom.xml +465
vim ambari-metrics/ambari-metrics-assembly/pom.xml +545
vim ambari-server/pom.xml +563


# 將安裝nodejs中下載的node-v8.6.0-linux-arm64.tar.gz和v4.5版nodejs移動到maven本地倉
mkdir -p /opt/maven_repo/com/github/eirslett/node/8.6.0/
mkdir -p /opt/maven_repo/com/github/eirslett/node/4.5.0/
cp /root/yore_ambari/node-v8.6.0-linux-arm64.tar.gz /opt/maven_repo/com/github/eirslett/node/8.6.0/
wget http://nodejs.org/dist/v4.5.0/node-v4.5.0-linux-arm64.tar.gz --no-check-certificate
cp node-v4.5.0-linux-arm64.tar.gz /opt/maven_repo/com/github/eirslett/node/4.5.0/


# 下載yarn到maven本地倉。
wget https://github.com/yarnpkg/yarn/releases/download/v1.1.0/yarn-v1.1.0.tar.gz --no-check-certificate
wget https://github.com/yarnpkg/yarn/releases/download/v0.23.2/yarn-v0.23.2.tar.gz --no-check-certificate
mkdir -p /opt/maven_repo/com/github/eirslett/yarn/1.1.0/
mkdir -p /opt/maven_repo/com/github/eirslett/yarn/0.23.2/yarn-0.23.2./
cp yarn-v1.1.0.tar.gz  /opt/maven_repo/com/github/eirslett/yarn/1.1.0/yarn-1.1.0.tar.gz
cp yarn-v0.23.2.tar.gz  /opt/maven_repo/com/github/eirslett/yarn/0.23.2/yarn-0.23.2./yarn-v0.23.2.tar.gz

# 設置yarn取消ssl驗證
tar -zxf yarn-v0.23.2.tar.gz
mv dist  yarn-v0.23.2
cd yarn-v0.23.2
bin/yarn config set strict-ssl false

# 配置npm代理
npm config set strict-ssl false
npm config set registry http://registry.npmjs.org/


# 修改ambari-web/package.json,將phantomjs版本修改爲 2.1.1
grep -rn "phantomjs"  ./


vim /opt/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-web/package.json +41
vim /opt/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-web/node_modules/mocha-phantomjs/package.json 
# 第26 行刪除"karma-phantomjs-launcher": "0.1"。27 行改爲安裝的 phantomjs 版本(2.1.1)
vim ambari-admin/src/main/resources/ui/admin-web/package.json
# storm 版本改爲 1.1.0 
# vim ambari-metrics/ambari-metrics-storm-sink/pom.xml +34

# 修改ambari-metrics/pom.xml 中倉庫地址
vim /opt/installed/ambari-release-AMBARI-2.7.3.0-139-tag/ambari-metrics/pom.xml
## 將hbase,hadoop,grafana,Phoenix地址和文件名修改成提供的地址和相應版本
# <hbase.tar>http://192.168.1.26/packages/tar/hbase-2.1.0-bin.tar.gz</hbase.tar>
# <hbase.folder>hbase-2.1.0-bin.tar.gz</hbase.folder>
# <hadoop.tar>http://192.168.1.26/packages/tar/hadoop-3.1.1.tar.gz</hadoop.tar>
# <hadoop.folder>hadoop-3.1.1.tar.gz</hadoop.folder>
# <grafana.folder>grafana-2.6.0</grafana.folder>
# #<grafana.tar>http://192.168.1.26/packages/tar/grafana-2.6.0.tar.gz</grafana.tar>
# <phoenix.tar>http://192.168.1.26/packages/tar/phoenix-5.0.0-HBase-2.0.tar.gz</phoenix.tar>


# 修改ambari-metrics/pom.xml中hdp的url爲http://repo.hortonworks.com/content/repositories/releases
# 將以下標籤中 ur l改爲 http://repo.hortonworks.com/content/repositories/releases
vim ambari-metrics/pom.xml +84


# 修改ambari-admin/src/main/resources/ui/admin-web/package.json 中 karma-phantomjs-launcher爲1.0。
# "karma-phantomjs-launcher": "1.0",
vim ambari-admin/src/main/resources/ui/admin-web/package.json +26


# 執行grep -rn "oss\.sonatype" 將查找出的所有pom中的該maven倉庫註釋掉(對應的整個 repository 標籤)。
# ambari-infra/pom.xml:63:      <id>oss.sonatype.org</id>
# ambari-infra/pom.xml:65:      <url>https://oss.sonatype.org/content/groups/staging</url>
# ambari-logsearch/pom.xml:81:      <id>oss.sonatype.org</id>
# ambari-logsearch/pom.xml:83:      <url>https://oss.sonatype.org/content/groups/staging</url>
# ambari-server/pom.xml:1851:      <id>oss.sonatype.org</id>
# ambari-server/pom.xml:1853:      <url>https://oss.sonatype.org/content/groups/staging</url>
# ambari-serviceadvisor/pom.xml:62:      <id>oss.sonatype.org</id>
# ambari-serviceadvisor/pom.xml:64:      <url>https://oss.sonatype.org/content/groups/staging</url>
# pom.xml:107:      <id>oss.sonatype.org</id>
# pom.xml:109:      <url>https://oss.sonatype.org/content/groups/staging</url>
vim ambari-infra/pom.xml +63
vim ambari-logsearch/pom.xml +81
vim ambari-server/pom.xml +1851
vim ambari-serviceadvisor/pom.xml +62
vim pom.xml +107


# 將所有https://repository.apache.org/content/repositories/snapshots/ 改爲http://repository.apache.org/content/repositories/snapshots/
grep -rn "repository.apache.org"
# ambari-infra/pom.xml:77:      <url>https://repository.apache.org/content/groups/staging/</url>
# ambari-infra/pom.xml:81:      <url>https://repository.apache.org/content/repositories/snapshots/</url>
# ambari-logsearch/pom.xml:95:      <url>https://repository.apache.org/content/groups/staging/</url>
# ambari-logsearch/pom.xml:99:      <url>https://repository.apache.org/content/repositories/snapshots/</url>
# ambari-metrics/pom.xml:62:    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
# ambari-metrics/pom.xml:65:    <distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
# ambari-metrics/pom.xml:90:      <url>https://repository.apache.org/content/repositories/snapshots</url>
# pom.xml:59:    <distMgmtSnapshotsUrl>https://repository.apache.org/content/repositories/snapshots</distMgmtSnapshotsUrl>
# pom.xml:62:    <distMgmtStagingUrl>https://repository.apache.org/service/local/staging/deploy/maven2</distMgmtStagingUrl>
# pom.xml:121:      <url>https://repository.apache.org/content/groups/staging/</url>
# pom.xml:125:      <url>https://repository.apache.org/content/repositories/snapshots/</url>

編譯執行

# 整體編譯
mvn -B install package rpm:rpm -DnewVersion=2.7.3.0.0 -DskipTests -Dmaven.test.skip=true -Drat.numUnapprovedLicenses=1000 -Dpython.ver="python>=2.6" -Drat.skip -Dcheckstyle.skip

# 編譯各個模塊
mvn clean package -Dbuild-rpm -Dmaven.test.skip=true -DskipTests -Drat.numUnapprovedLicenses=1000 -Dpython.ver="python>=2.6"

5 彙總

5.1 資源路徑

Item Path
下載的資源包 /root/yore_ambari
jar 包相關資源和編譯 /root/yore_ambari/_jar
Maven 本地倉庫路徑 /opt/maven_repo
安裝路徑 /opt/installed
http文件服務路徑 /var/www/html/

5.2 編譯彙總目錄表

的表示已編譯完成,未打 的表示還存在問題。

  • _posixsubprocess32.so
  • _speedups.so
  • AMBARI-2.7.3.0-139
  • Apache/2.4.6
  • apache-ant-1.9.15
  • apache-maven-3.5.4
  • apr-1.5.2
  • cmake-3.9.2
  • commons-crypto-1.0.0
  • go1.9.linux-arm64
  • gcc-4.8.5
  • grafana-2.6.0
  • hadoop-3.1.1
  • hbase-2.1.0
  • Hbase-shaded-netty-2.1.0
  • Jansi-1.4
  • Jansi-native1.0
  • jdk_aarch64_linux_hotspot_8u222b10
  • jline-2.11
  • jline-2.12
  • jline-2.12.1
  • jline-2.13
  • jline-2.14.3
  • leveldb-1.20
  • leveldbjni-all-1.8
  • lz4-java-1.2.0
  • netty-tcnative-1.1.30.Fork2
  • netty-tcnative-1.1.33.Fork3
  • netty-tcnative-parent-2.0.6.Final
  • netty-tcnative-parent-2.0.7.Final
  • netty-all-4.0.23
  • netty-all-4.0.29
  • netty-all-4.0.52
  • netty-all-4.1.17
  • node-v8.6.0-linux-arm64
  • Phantomjs 2.1.1
  • phoenix-5.0.0-HBase-2.0
  • pip-20.1
  • protobuf-2.5.0
  • python2-subprocess32.aarch64
  • sbt-1.3.10
  • scala-compiler-2.11.8
  • scala-compiler-2.11.12
  • scala-compiler-2.12.7
  • simplejson-2.0.9
  • snappy-1.1.5
  • snappy-1.1.7
  • snappy-java-1.0.4.1
  • snappy-java-1.0.5
  • snappy-java-1.1.0.1
  • snappy-java-1.1.1.3
  • snappy-java-1.1.1.6
  • snappy-java-1.1.1.7
  • snappy-java-1.1.2.6

6 🎉鏡像 🎉 及連接

編譯到這裏的時候腦海中是不是會浮現出 小朋友 你是否有好多問號(《聽媽媽的話-周杰倫》)的畫面,我只是想在 aarch64的系統上部署 HDP,而僅編譯 Ambari 就費了這麼多時間,華爲也給了官方文檔,能否提供一份編譯成功的鏡像包讓我們直接下載呢?通過翻閱文檔終於找到了:

ARM 版軟件包下載地址



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章