建议使用以下浏览器,以获得最佳体验。 IE 9.0+以上版本 Chrome 31+ 谷歌浏览器 Firefox 30+ 火狐浏览器
请选择 进入手机版 | 继续访问电脑版
设置昵称

在此一键设置昵称,即可参与社区互动!

确定
我再想想
选择版块
标签
您还可以添加5个标签
  • 没有搜索到和“关键字”相关的标签
  • 云产品
  • 解决方案
  • 技术领域
  • 通用技术
  • 平台功能
取消

Amber@银河护卫队

发帖: 16粉丝: 5

级别 : 版主

发消息 + 关注

发表于2020年02月07日 16:45:33 1441 2
直达本楼层的链接
楼主
显示全部楼层
[大数据] netty-all-4.1.34.Final.jar移植指南 ★★★

1、环境

类别

子项

版本

 

硬件

CPU

Kunpeng 920

OS

CentOS

7.6

Kernel

4.14

 

 

软件

GCC

4.8.5

OpenJDK

 

1.8.0_191

Maven

3.5.4

Apr

1.6.5

Openssl

1.1.1b

libressl

2.8.3

Netty-tcnative

2.0.22.Final

Netty

4.1.34

2、依赖安装

2.1安装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文件末尾处增加下面的代码:

JAVA_HOME=/opt/tools/installed/jdk8u191-b12

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME PATH

运行下面命令,使修改的环境变量生效:

source /etc/profile

2.2安装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文件末尾增加下面高亮代码:

JAVA_HOME=/opt/tools/installed/jdk8u191-b12

MAVEN_HOME=/opt/tools/installed/apache-maven-3.5.4

PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$PATH

export MAVEN_HOME JAVA_HOME PATH

运行下面的命令,是修改的环境变量生效:

source /etc/profile

修改maven配置文件中的:本地仓路径、远程仓等:

<!--默认在“~/.m2/”目录下,修改成你自己想保存的目录-->

<localRepository>/path/to/local/repo</localRepository>

 

<!--修改成自己搭建的maven仓库,ARM使能后的jar包替换到该仓库-->

<mirror>

</mirror>

2.3 其他依赖安装

2.3.1安装Gcc等依赖项

挂载OS镜像:

mount YOUR_OS.iso /media -o loop

修改/etc/yum.repos.d/Base.repo文件,配置yum本地源:

[Local]

name=CentOS-7.4 Local

baseurl=file:///media/

enabled=1

gpgcheck=0

运行下面的命令,使yum源配置生效:

yum clean all

yum makecache

yum安装GCC等相关依赖:

yum install git gcc gcc-c++ make cmake libtool autoconf automake -y

2.3.2解决-fsigned-char问题

1.使用command -v gcc命令寻找gcc所在路径(一般位于/usr/bin/gcc)

2.更改gcc的名字(比如改成gcc-impl)

3.在gcc所在目录执行vim gcc,并填入如下内容保存:

#! /bin/sh

/usr/bin/gcc-impl -fsigned-char “$@”

4.执行chmod +x gcc给脚本添加执行权限

5.使用与1-4步相似的方式给g++创建同名字的脚本文件

3、编译安装

下载apr-1.5.2源码,并编译安装(如已安装,请跳过)

wget https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz

tar –zxvf apr-1.5.2.tar.gz

cd apr-1.5.2

./configure

make

make install

 

 

netty-all-4.1.34.Final.jarpom.xml文件分析,依赖包tcnative-parent-2.0.22.Final需要编译:

<os.detection.classifierWithLikes></os.detection.classifierWithLikes>

    <tcnative.artifactId>netty-tcnative</tcnative.artifactId>

    <tcnative.version>2.0.22.Final</tcnative.version>

    <tcnative.classifier>${os.detected.classifier}</tcnative.classifier>

 

下载tcnative-parent-2.0.22.Final源码并解压

wget https://codeload.github.com/netty/netty-tcnative/tar.gz/netty-tcnative-parent-2.0.22.Final

mv netty-tcnative-parent-2.0.22.Final netty-tcnative-parent-2.0.22.Final.tar.gz

tar -zxvf netty-tcnative-parent-2.0.22.Final.tar.gz

    进入netty-tcnative解压目录

cd netty-tcnative-netty-tcnative-parent-2.0.22.Final

 

tcnative-parent-2.0.22.Finalpom.xml文件分析,需要编译依赖jar包:apr-1.6.5libressl-2.8.3openssl-1.1.1b

 

     <defaultJarFile>${project.build.directory}/${project.build.finalName}.jar</defaultJarFile>

    <nativeJarFile>${project.build.directory}/${project.build.finalName}-${os.detected.classifier}.jar</nativeJarFile>

    <nativeLibOnlyDir>${project.build.directory}/native-lib-only</nativeLibOnlyDir>

    <nativeJarWorkdir>${project.build.directory}/native-jar-work</nativeJarWorkdir>

    <aprVersion>1.6.5</aprVersion>

    <aprSha256>70dcf9102066a2ff2ffc47e93c289c8e54c95d8dda23b503f9e61bb0cbd2d105</aprSha256>

    <boringsslBranch>chromium-stable</boringsslBranch>

    <libresslVersion>2.8.3</libresslVersion>

    <!--

      See https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/SHA256 for the SHA256 signature

    -->

    <libresslSha256>9b640b13047182761a99ce3e4f000be9687566e0828b4a72709e9e6a3ef98477</libresslSha256>

    <opensslMinorVersion>1.1.1</opensslMinorVersion>

    <opensslPatchVersion>b</opensslPatchVersion>

    <opensslVersion>${opensslMinorVersion}${opensslPatchVersion}</opensslVersion>

    <opensslSha256>ae51d08bba8a83958e894946f15303ff894d75c2b8bbd44a852b64e3fe11d0d6</opensslSha256>

 

修改pom.xml,屏蔽boringssl的编译,原因见FAQ


image.png


编译打包到maven本地仓库(该步会有如下类似报错,解决方法见下一步)

mvn install


image.png


修改pom.xml,注释掉下载apr-1.6.5的部分(有两处)




image.png

image.png


并下载apr-1.6.5,放置于以下位置

wget https://archive.apache.org/dist/apr/apr-1.6.5.tar.gz

mv apr-1.6.5.tar.gz openssl-static/target

继续编译打包到maven本地仓库(该步会有如下类似报错,解决方法见下一步)

mvn install



image.png


修改openssl-static/pom.xml,注释掉下载openssl-1.1.1b的部分(有三处)




image.png


image.png



image.png







并下载openssl-1.1.1b,放置于以下位置

wget https://ftp.openssl.org/source/old/1.1.1/openssl-1.1.1b.tar.gz

mv openssl-1.1.1b.tar.gz openssl-static/target

继续编译打包到maven本地仓库(该步会有如下报错,解决方法见下一步)

mvn install



image.png


将前面下载的apr-1.6.5,拷贝放置于以下位置

 cp openssl-static/target/apr-1.6.5.tar.gz libressl-static/target

继续编译打包到maven本地仓库(该步会有如下类似报错,解决方法见下一步)

mvn install


image.png



修改libressl-static/pom.xml,注释掉下载libressl-2.8.3的部分(有一处)



image.png


并下载libressl-2.8.3,放置于以下位置

wget http://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-2.8.3.tar.gz

mv libressl-2.8.3.tar.gz libressl-static/target

编译打包到maven本地仓库

mvn install

 

编译netty-4.1.34源码,并解压

wget https://github.com/netty/netty/archive/netty-4.1.34.Final.tar.gz

tar -zxvf netty-4.1.34.Final.tar.gz

查看pom.xml,确认有包含aarch_64架构,可以不做处理。

</requireMavenVersion>

                <requireProperty>

                  <regexMessage>

                    x86_64/AARCH64 JDK must be used.

                  </regexMessage>

                  <property>os.detected.arch</property>

                  <regex>^(x86_64|aarch_64)$</regex>

                </requireProperty>

补充:如果只有X86_64,则需要将以下内容注释掉。

image.png




编译打成jar包, netty-all-4.1.34.Final.jar放置于netty-netty-4.1.34.Final/all/target目录

mvn package -DskipTests

4FAQ

Question1

为何在编译netty-tcnative时屏蔽boringssl?

Answer1

 若编译时不屏蔽boringssl,会报tcnative openssl版本(1.0.2l)与boringssl中需要的C语言宏定义库不完全兼容导致的。并且,由于boringssl是google自己开发并自己使用,并不希望第三方软件使用,去掉此部分风险小,因此采用屏蔽此部分的方法。

Question2

可能会出现找不到jni.h和jni_md.h的报错


image.png



Answer2

修改${netty-netty-4.1.17.Final}/transport-native-unix-common/pom.xml

所有关键字CFLAGS(有四个,请根据实际情况确认),加入:

-fsigned-char -I/usr/lib/jvm/java/include -I/usr/lib/jvm/java/include/linux

image.png



Question3

编译过程中找不到linux-aarch_64-fedora.2.0.7.Final.jar的报错image.png

Answer3

修改pom.xml文件做如下修改,删除fedora,重新执行命令编译。

image.png

 

 


举报
分享

分享文章到朋友圈

分享文章到微博

中电高科

发帖: 3粉丝: 0

级别 : 合作伙伴

发消息 + 关注

发表于2020年06月19日 15:31:43
直达本楼层的链接
沙发
显示全部楼层
很棒的帖子,很厉害! 求助大佬,能否发一份arm64版的netty***.jar包?版本号>=4.1.34均可,邮箱:43358908@qq.com,谢谢!
点赞 评论 引用 举报

龙井问茶

发帖: 5粉丝: 0

级别 : 新手上路

发消息 + 关注

发表于2020年08月20日 10:55:33
直达本楼层的链接
板凳
显示全部楼层

mvn package -DskipTests是只打包,如果要装到本地仓库可执行mvn install -DskipTests


点赞 评论 引用 举报

游客

富文本
Markdown
您需要登录后才可以回帖 登录 | 立即注册