一、配置编译环境
安装基本库
使用yum安装。
yum install wget patch openssl-devel zlib-devel automake libtool make cmake libstdc++-static glibc-static git gcc gcc-c++
安装OpenJDK
下载OpenJDK源码并安装到指定目录(如“/opt/tools/installed”)。
wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u191-b12/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz
tar -zxf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz
mv jdk8u191-b12 /opt/tools/installed/
配置java环境变量,在“/etc/profile”文件末尾处增加下面的代码。
export JAVA_HOME=/opt/tools/installed/jdk8u191-b12
export PATH=$JAVA_HOME/bin:$PATH
按ESC键,输入:wq保存并退出。
运行下面命令,使修改的环境变量生效。
source /etc/profile
安装Maven
下载并安装到指定目录(如“/opt/tools/installed”)。
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
mv apache-maven-3.5.4 /opt/tools/installed/
修改Maven环境变量,在/etc/profile文件末尾增加下面代码。
export MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4
export PATH=$MAVEN_HOME/bin:$PATH
运行下面的命令,是修改的环境变量生效。
source /etc/profile
修改Maven配置文件中的:本地仓路径、远程仓等。
配置文件路径:“/opt/tools/installed/apache-maven-3.5.4/conf/settings.xml”
本地仓库配置:
<localRepository>/path/to/local/repo</localRepository>
说明:
本地仓库地址默认在“~/.m2/”目录下,如果想修改成指定目录,则修改localRepository标签,没有特殊需求,可不必修改该参数。
<mirror>
<id>huaweimaven</id>
<name>huawei maven</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
<mirrorOf>central</mirrorOf>
</mirror>
远程仓库配置(修改成自己搭建的Maven仓库,如果没有,可以下面配置):
<mirror>
<id>huaweimaven</id>
<name>huawei maven</name>
<url>https://mirrors.huaweicloud.com/repository/maven/</url>
<mirrorOf>central</mirrorOf>
</mirror>
当编译环境不能访问外网,需要在settings.xml配置文件中添加代理配置,具体内容如下:
<proxies>
<proxy>
<id>optional</id>
<active>true</active>
<protocol>http</protocol>
<username>用户名</username>
<password>密码</password>
<host>代理服务器网址</host>
<port>代理服务器端口</port>
<nonProxyHosts>local.net|some.host.com</nonProxyHosts>
</proxy>
</proxies>
安装GCC
挂载OS镜像。
mount YOUR_OS.iso /media -o loop
说明:
YOUR_OS.iso用实际的iso包名代替。
备份yum repo文件,清空/etc/yum.repos.d/目录文件。
cp -r /etc/yum.repos.d /etc/yum.repos.d-bak
rm /etc/yum.repos.d/*
须知:
请确认已经备份所有repo文件后,在rm删除界面输入y表示同意删除。
修改/etc/yum.repos.d/local.repo文件,配置yum本地源。
[Local]
name=CentOS-7.6 Local
baseurl=file:///media/
enabled=1
gpgcheck=0
运行下面的命令,使yum源配置生效。
yum clean all
yum makecache
yum安装GCC相关软件。
yum -y install gcc.aarch64 gcc-c++.aarch64 gcc-gfortran.aarch64 libgcc.aarch64
安装cmake
Hadoop编译要求3.12及以上版本,本文以安装cmake 3.12.4版本为例。
下载cmake安装包。
wget https://cmake.org/files/v3.12/cmake-3.12.4.tar.gz
解压安装包。
tar -zxf cmake-3.12.4.tar.gz
编译安装cmake。
cd cmake-3.12.4
./bootstrap
make -j8
make install
安装Protoc
下载并解压源码。
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
mv protobuf-2.5.0 /opt/tools/installed/
cd /opt/tools/installed/protobuf-2.5.0
安装依赖库。
yum -y install patch automake libtool
上传protoc.patch到服务器,打补丁,其中protoc.patch的路径视实际情况而定。
cp protoc.patch ./src/google/protobuf/stubs/
cd ./src/google/protobuf/stubs/
patch -p1 < protoc.patch
cd -
patch补丁下载路径:
https://mirrors.huaweicloud.com/kunpeng/archive/kunpeng_solution/bigdata/Patch/protoc.zip
编译并安装到系统默认目录。
./autogen.sh && ./configure CFLAGS=’-fsigned-char’ && make -j8 && make install
二、执行移植分析
请依据《CheckSo 用户指南》扫描Ranger安装包,分析得出需要移植的第三方依赖包如下表格。
原始jar | so文件 |
---|---|
hbase-shaded-netty-2.1.0.jar | liborg_apache_hbase_thirdparty_netty_transport_native_epoll_x86_64.so |
leveldbjni-all-1.8.jar | libleveldbjni.so |
netty-all-4.0.52.Final.jar | libnetty_transport_native_epoll_x86_64.so |
snappy-java-1.0.5.jar | libsnappyjava.so |
pamCredValidator.uexe | 可编译ranger源码得到 |
credValidator.uexe | 可编译ranger源码得到 |
三、编译依赖库
- 请参考表 依赖包编译参考编译第三方依赖包,表1 依赖包编译参考 | 依赖包名称 | 编译方法 | | —- | —- | | netty-all-4.0.52.Final.jar | 编译步骤请参考《netty-all-4.0.52.Final.jar 移植指南(CentOS 7.6)》。 | | snappy-java-1.0.5.jar | 编译步骤请参考《scala-compiler-2.11.8,2.11.12,2.12.7.jar 移植指南(CentOS 7.6)》。 | | leveldbjni-all-1.8.jar | 编译步骤请参考《leveldbjni-all-1.8.jar 移植指南(CentOS 7.6)》。 | | hbase-shaded-netty-2.1.0.jar | 编译步骤请参考《Hbase-shaded-netty-2.1.0 移植指南(CentOS 7.6)》。 |
编译完成的jar包替换到自己搭建的maven仓库和本地仓库中。
四、编译ranger
安装依赖库。
yum -y install pam-devel- 从Github上下载HDP3.1 Ranger源码并解压。
wget https://github.com/hortonworks/ranger-release/archive/HDP-3.1.0.0-78-tag.tar.gz
tar -xzf HDP-3.1.0.0-78-tag.tar.gz - 进入ranger源码解压目录。
cd ranger-release-HDP-3.1.0.0-78-tag 修改pom.xml,在文件第295行,修改Maven仓库源。
<url>https://repo.hortonworks.com/content/repositories/releases/</url>
修改pom.xml,在文件第292行,添加Maven仓库源。
<repository> <id>kunpengmaven</id> <name>kunpeng maven</name> <url>https://mirrors.huaweicloud.com/kunpeng/maven</url> </repository>
修改ranger-util/pom.xml,注释第44-60行。
- 执行编译。
mvn package assembly:assembly -DskipTests -Drat.skip=true - 编译成功后,将在源码的target目录生成Ranger安装用到的tar.gz包。
五、制作rpm包
安装rpmbuild工具
在鲲鹏平台安装rpmbuild工具。
- 下载rpmbuild工具的rpm包。
wget http://rpmfind.net/linux/fedora/linux/releases/31/Everything/aarch64/os/Packages/r/rpmrebuild-2.11-12.fc31.noarch.rpm 安装rpmbuild工具。rpm -ivh rpmrebuild-2.11-12.fc31.noarch.rpm
分析x86 rpm包
须知:
如下操作在X86服务器上执行。下载X86 版本的HDP 安装包。
wget http://public-repo-1.hortonworks.com/HDP/centos7/3.x/updates/3.1.0.0/HDP-3.1.0.0-centos7-rpm.tar.gz
tar -xf HDP-3.1.0.0-centos7-rpm.tar.gz- 根据《Ambari 2.7.3 部署指南(CentOS 7.6)》3.9章节配置本地HDP源。
- 下载下面的工具压缩包并解压。https://mirrors.huaweicloud.com/kunpeng/archive/kunpeng_solution/bigdata/Tools/tools.zip
- rebuild.sh —该脚本功能主要负责是负责对rpm包的spec文件的提取和rpm包打包功能。
- checkso工具—主要是扫描rpm包里面包含哪些so、jar包、bin执行文件。
- 从HDP解压的组件包里拷贝ranger对应的rpm包到指定目录(假设/opt/rpmtest/HDP/ranger/)。
- 执行rebuild.sh来对ranger的rpm包进行spec文件生成。
./rebuild.sh rebuild /opt/rpmtest/HDP/ranger/ 会在当前目录下创建workdir目录,并将对应的rpm包的spec生成,存放在指定目录。
检查rpm包的so文件、jar包
须知:
如下操作在ARM服务器上执行。将上述生成的spec文件拷贝到ARM服务器上备用。
- 解压上面获取的checkso工具。
- 删除checkSo文件夹中的临时结果文件。
rm -rf result/*
rm -rf temp_unzip_dir/*
rm -rf tmp_unzip/* - 执行脚本检查rpm包是否包含有so的jar包、so、可执行bin文件等。./checkrpm.sh /opt/rpmtest/HDP/ranger/
执行完以后在result目录下生成对应的检查结果。查看发现:
- 如下两个rpm包含有so的jar包ranger_3_1_0_0_78-admin-1.2.0.3.1.0.0-78.x86_64.rpm
ranger_3_1_0_0_78-kms-1.2.0.3.1.0.0-78.x86_64.rpm - 如下1个rpm包含有二进制可执行文件ranger_3_1_0_0_78-usersync-1.2.0.3.1.0.0-78.x86_64.rpm
- vim result/JarResult.log 记录包含哪些含有so的jar包
- vim result/out.csv #该文件主要记录替换jar包所在rpm包里面的路径
- vim result/BinResult.log
制作rpm包
须知:
如下操作在ARM服务器上执行。
以下以ranger_3_1_0_0_78-usersync-1.2.0.3.1.0.0-78.x86_64.rpm打包过程进行举例。
- 如下两个rpm包含有so的jar包ranger_3_1_0_0_78-admin-1.2.0.3.1.0.0-78.x86_64.rpm
对ranger_3_1_0_0_78-2.0.0.3.1.0.0-78.noarch.rpm进行解包。
mkdir tmprpm
cd tmprpm
cp -r /opt/rpmtest/HDP/ranger/ranger_3_1_0_0_78-usersync-1.2.0.3.1.0.0-78.x86_64.rpm .
rpm2cpio ranger_3_1_0_0_78-usersync-1.2.0.3.1.0.0-78.x86_64.rpm | cpio -idv- 替换上面扫描的jar文件为aarch64版本(tmprpm/usr/hdp/3.1.0.0-78/ranger-usersync/native)。
- aarch64版本的credValidator.uexe和pamCredValidator.uexe在章节6编译的ranger组件目录ranger-release-HDP-3.1.0.0-78-tag目录下查找。
cd ranger-release-HDP-3.1.0.0-78-tag
find ./ -name “*.uexe” - 将对应的aarch64版本的uexe文件拷贝替换tmprpm/usr/hdp/3.1.0.0-78/ranger-usersync/native/下的uexe文件。
- aarch64版本的credValidator.uexe和pamCredValidator.uexe在章节6编译的ranger组件目录ranger-release-HDP-3.1.0.0-78-tag目录下查找。
- 创建打包目录。
mkdir -p /root/rpmbuild/BUILDROOT/ranger_3_1_0_0_78-usersync-1.2.0.3.1.0.0-78.aarch64 - 拷贝需要打包的文件到上述目录中。
cp -rd usr /root/rpmbuild/BUILDROOT/ranger_3_1_0_0_78-usersync-1.2.0.3.1.0.0-78.aarch64/ - 打包rpm文件。
rpmbuild -ba /opt/rpmtest/workdir/ranger_3_1_0_0_78-usersync-1.2.0.3.1.0.0-78.x86_64.rpm/ranger_3_1_0_0_78-usersync.spec - 生成的rpm包在/root/rpmbuild/RPMS/aarch64/。说明:
- 目录/root/rpmbuild/BUILDROOT/是固定的,不可更改。
- spec文件是在上面x86服务器上解析获取。
六、故障排除
问题1:编译报错:“An Ant BuildException has occurred: exec returned: 1”
问题现象
编译报错:“An Ant BuildException has occurred: exec returned: 1”。
解决方法
修改“ranger-release-HDP-3.1.0.0-78-tag/ranger-util/pom.xml”。
注释44行到60行:
问题2:编译报错:Could not resolve dependencies for project org.apache.ranger:ranger-knox-plugin:jar:1.2.0.3.1.0.0-78
问题现象
编译报错:Could not resolve dependencies for project org.apache.ranger:ranger-knox-plugin:jar:1.2.0.3.1.0.0-78。
问题分析
由于远程仓库没有对应版本的jar包,所以报错。
解决方法
可以修改ranger-release-HDP-3.1.0.0-78-tag/pom.xml的295行仓库链接为HDP的仓库,具体链接如下:
http://repo.hortonworks.com/content/repositories/releases/
问题3:编译报错:Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.6:install-node-and-npm
问题现象
编译报错:Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.6:install-node-and-npm。
解决方法
修改ranger-release-HDP-3.1.0.0-78-tag/security-admin/pom.xml文件中的frontend-maven-plugin插件配置:
vim ranger-release-HDP-3.1.0.0-78-tag/security-admin/pom.xml
在674-675行插入这两行:
<nodeDownloadRoot>http://nodejs.org/dist/</nodeDownloadRoot>
<npmDownloadRoot>http://registry.npmjs.org/npm/-/</npmDownloadRoot>