鲲鹏软件迁移学习笔记(理论部分加实操作 中)

举报
QGS 发表于 2021/02/04 13:17:49 2021/02/04
【摘要】 基于鲲鹏Maven仓进行Maven软件构建Maven提供了一个仓库的功能存放编译好的Jar包。构建项目时只需要在项目中配置对应的依赖就能自动从仓库中下载Jar,但Maven中央仓库中部分Jar存在x86依赖无法在鲲鹏平台运行。而鲲鹏Maven仓存储了部分已在鲲鹏平台上编译好的Jar,通过配置鲲鹏Maven仓库构建时就能优先从鲲鹏Maven仓下载。操作前提 1.远程登录ECS2.安装实验所需软...

基于鲲鹏Maven仓进行Maven软件构建

Maven提供了一个仓库的功能存放编译好的Jar包。构建项目时只需要在项目中配置对应的依赖就能自动从仓库中下载Jar,但Maven中央仓库中部分Jar存在x86依赖无法在鲲鹏平台运行。而鲲鹏Maven仓存储了部分已在鲲鹏平台上编译好的Jar,通过配置鲲鹏Maven仓库构建时就能优先从鲲鹏Maven仓下载。

操作前提 1.远程登录ECS2.安装实验所需软件3.软件依赖分析(Hive)4.迁移软件包


首先登入华为云(步骤省略),进入华为云控制台,点击 “弹性云服务器ECS” 进入ECS管理界面,还是用fxce远程登入工具进行远程登入,其他远程登入工具也可用

注:如果是自己的虚拟机直接输入wget 命令 是无效的

需要先安装命令如 linux安装解压zip命令: yum install unzip  wget命令安装: yum -y install wget    linux安装tar命令:yum install -y tar


首先我登入xfce

假如公有地址192.168.1.1 私有地址192.168.1.10


云服务器的弹性公网IP地址可以通过点击“控制台”->“服务列表”->“计算”->“弹性云服务器ECS”进入服务器列表,复制公有地址。

接受秘钥输入“yes”,回车;

输入密码:3(输入密码时,命令行窗口不显示密码,输完之后直接键入回车)

通过该命令远程登入华为云弹性服务器ECS或自己的虚拟机服务器

打开xfce终端

LANG=en_US.UTF-8 ssh root@192.169.1.1

安装OpenJDK软件

下载软件包

cd

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/kunpeng-maven/OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz


解压软件包

tar -zxvf OpenJDK8U-jdk_aarch64_linux_hotspot_8u191b12.tar.gz

配置java环境变量

echo 'JAVA_HOME=/root/jdk8u191-b12' >> /etc/profile

echo 'PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile

导入JAVA环境变量配置

source /etc/profile

验证变量是否有效

java -version

有效如图

安装Maven软件包


cd

下载Maben仓库软件包

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/kunpeng-maven/apache-maven-3.5.4-bin.tar.gz

解压Maven安装包

tar -zxvf apache-maven-3.5.4-bin.tar.gz

maven环境变量配置

echo 'MAVEN_HOME=/root/apache-maven-3.5.4' >> /etc/profile
echo 'PATH=$PATH:$MAVEN_HOME/bin' >> /etc/profile

maven环境变量配置导入

source /etc/profile


验证maven仓库是否安装成功

mvn -v

安装成功


添加鲲鹏maven仓

sed  -i '246a <profile><id>securecentral</id><activation><activeByDefault>true</activeByDefault></activation><repositories><repository><id>kunpeng</id><url>https://mirrors.huaweicloud.cn/kunpeng/maven/</url><releases><enabled>true</enabled></releases></repository><repository><id>huaweicloud</id><url>https://mirrors.huaweicloud.cn/repository/maven/</url><releases><enabled>true</enabled></releases></repository></repositories></profile>' /root/apache-maven-3.5.4/conf/settings.xml

sed -i '158a <mirror><id>huaweicloud</id><mirrorOf>!kunpeng,!huaweicloud,*</mirrorOf><url>https://mirrors.huaweicloud.cn/repository/maven/</url></mirror>'  /root/apache-maven-3.5.4/conf/settings.xml

安装Dependency Advisor

下载Dependency Advisor软件包

cd
wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/kunpeng-maven/Dependency-advisor-Kunpeng-linux-1.1.3.tar.gz


解压

tar -zxvf Dependency-advisor-Kunpeng-linux-1.1.3.tar.gz

安装软件包

cd Dependency-advisor-Kunpeng-linux-1.1.3

./install.sh web

三次回车

等待6分钟左右

安装CheckSo工具

下载Checkso安装包

cd

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/kunpeng-maven/checkSo.zip

安装CheckSo工具

 unzip checkSo.zip  && chmod +x checkSo/*.sh


下载软件依赖分析Hive软件包

cd

wget -P /opt/depadv/depadmin/ https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/kunpeng-maven/hive_2_6_3_0_235-1.2.1000.2.6.3.0-235.noarch.rpm


软件包进行依赖检测命令(依赖检查结果保存在main.sh脚本所在目录的JarResult.log文件以及NonJarResult.log文件中。JarResult.log 文件中保存的是Jar包中包含的不兼容鲲鹏处理器的so。格式为:组件包名,jar包名,缺乏arm版本的so库文件名。NonJarResult.log文件中保存的是非Jar包中不兼容鲲鹏处理器的so)

cd checkSo && ./main.sh /opt/depadv/depadmin/hive_2_6_3_0_235-1.2.1000.2.6.3.0-235.noarch.rpm


查看两个文件中的内容

cat JarResult.log

cat NonJarResult.log

或者通过网页版查看,浏览器中输入 https://192.68.1.1:8082并访问  (一定要是自己的ip地址哦)

初始用户名depadmin  初始密码Admin@9000


输入需要分析的软件包hive_2_6_3_0_235-1.2.1000.2.6.3.0-235.noarch.rpm

分析成功的页面

等待几分钟


到迁移软件包步骤

下载Hive源码

cd

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/kunpeng-maven/hive-release-HDP-2.6.3.0-235-tag.tar.gz

解压

tar -zxvf hive-release-HDP-2.6.3.0-235-tag.tar.gz

编译编码

cd  hive-release-HDP-2.6.3.0-235-tag

mvn clean install -Phadoop-2 -DskipTests -Pdist -T 4C

等待几分钟即可

用CheckSo工具重新检测

cd /root/checkSo

rm -f JarResult.log NonJarResult.log

./main.sh /root/hive-release-HDP-2.6.3.0-235-tag/packaging/target/apache-hive-1.2.1000.2.6.3.0-235-bin.tar.gz

查看检测结果

cat *.log



基于鲲鹏开发套件实现软件包迁移

Linux软件包获取的途径有操作系统本地源,操作系统远端源,华为云鲲鹏镜像等,如果以上途径无法获取但有发行X86架构软件包,可以通过Porting Advisor工具指导用户将其重构成鲲鹏平台软件包,使用Porting Advisor工具将X86平台Knox rpm软件包重构成鲲鹏平台rpm软件包

操作前提:1.安装软件2.rpm迁移(knox)3.重构



首先登入华为云(步骤省略),进入华为云控制台,点击 “弹性云服务器ECS” 进入ECS管理界面,还是用fxce远程登入工具进行远程登入,其他远程登入工具也可用

注:如果是自己的虚拟机直接输入wget 命令 是无效的,需要先安装命令如 linux安装解压zip命令: yum install unzip  wget命令安装: yum -y install wget    linux安装tar命令:yum install -y tar


首先我登入xfce,用Xfce远程工具登入软件,登入华为云服务器

假如公有地址192.168.1.1 私有地址192.168.1.10


LANG=en_us.UTF-8 ssh root@192.68.1.1

安装rpmbuild(rpmbuild-setuptree命令默认将在当前用户目录下创建一个RPM构建跟目录结构,如果需要改变默认位置,可以修改配置文件:~/.rpmmacros中变量_topdir对应的值即可。)

yum install rpmdevtools

有如图提示,输入y即可



rpmdev-setuptree

安装rpmrebuild

下载rpmrebuild

mkdir rpmrebuild

cd rpmrebuild

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/package-migration/rpmrebuild-2.14.tar.gz

下载完成后,解压rpmrebuild-2.14.tar.gz文件

tar xvfz rpmrebuild-2.14.tar.gz

安装

make

make install

安装完成

安装DependencyAdviso(华为鲲鹏分析扫描工具是一款可以简化客户应用迁移到TaiShan服务器或鲲鹏云服务(KC1,鲲鹏裸机)过程工具。当需要移植软件时。可先用该工具分析可移植和移植入,该工具解决了客户软件移植评估分析过程中人工分析投入大,准确率低,整体效率低下的痛点,通过该工具能够自动分析并输出指导报告。

在/opt目录下下载DependencyAdvisor安装包

cd /opt

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/package-migration/Dependency-advisor-Kunpeng-linux-1.1.3.tar.gz

解压

tar -zxvf Dependency-advisor-Kunpeng-linux-1.1.3.tar.gz

安装

cd Dependency-advisor-Kunpeng-linux-1.1.3bash install.sh web

回车三次


安装完成

安装PortingAdvisor(PortingAdvisor工具的作用:华为鲲鹏代码迁移工具是一款可以简化客户应用迁移到TaiShan 100/200服务器或鲲鹏云服务(KC1、鲲鹏裸机)的过程的工具。对于源码移植扫描中心,当客户有X86平台上源代码的软件要移植到TaiShan 100/200服务器或鲲鹏云服务(KC1、鲲鹏裸机)上时,可用该工具的源码移植扫描中心自动分析出需修改的代码内容,并指导用户如何修改。源码移植扫描中心解决了用户代码兼容性人工排查困难、移植经验欠缺、反复依赖编译调试定位等痛点。)

进入 /opt目录下

cd /opt

下载PortingAdvisor的安装包

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/package-migration/Porting-advisor-Kunpeng-linux-2.1.1.SPC200.tar.gz

解压(当不知解压文件名时可以输入 ls查看)

tar -zxvf Porting-advisor-Kunpeng-linux-*.tar.gz


安装PortingAdvisor软件

cd Porting-advisor-Kunpeng-linux-*

bash install.sh web

回车三次


安装完成





安装CheckSo工具

切换到/home目录下

cd /home

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/package-migration/checkSo.zip

解压checkSo.zip

unzip checkSo.zip

切换到/checkSo目录

cd /home/checkSo

添加权限

chmod +x *.sh


下载X86软件包

切换到/opt/depadv/depadmin/目录下

cd /opt/depadv/depadmin/

下载软件包

wget https://sandbox-experiment-resource-north-4.obs.cn-north-4.myhuaweicloud.com/package-migration/knox_3_1_0_0_78-1.0.0.3.1.0.0-78.noarch.rpm



.依赖文件检查,通过工具检查当前rpm包是否包含X86依赖文件,以确定是否能在鲲鹏平台上直接运行


用CheckSo小工具检测:checkSo检测的结果,结果在main.sh文件同目录的JarResult.log文件和NonJarResult.log文件中。jar包检测结果在JarResult.log中。非jar包中的检测结果在NonJarResult.log中


cd /home/checkSo

./main.sh /opt/depadv/depadmin/knox_3_1_0_0_78-1.0.0.3.1.0.0-78.noarch.rpm

或使用网页版检测结果,登录“华为鲲鹏分析扫描工具”,在浏览器新标签页访问https://192.168.1.1:8082并访问,(一定要是自己的ip地址哦)

初始用户名depadmin 密码Admin@9000

点击分析

.重构

依赖文件检查发现存在x86依赖,不能直接在鲲鹏平台上运行,将x86 rpm重构成鲲鹏平台rpm

使用PortingAdvisor重构在终端窗口执行如下命令,

将knox_3_1_0_0_78-1.0.0.3.1.0.0-78.noarch.rpm拷贝到/opt/portadv/portadmin下

cd /opt/portadv/portadmin/

cp /opt/depadv/depadmin/knox_3_1_0_0_78-1.0.0.3.1.0.0-78.noarch.rpm .

登录“华为鲲鹏代码迁移工具”,在浏览器新标签页访问https://192.168.1.1:8084

初始用户名portadmin和密码Admin@9000,地址是云服务器的弹性公网IP

进入华为云控制台,鼠标移动到云桌面浏览器页面中左侧菜单栏,点击“服务列表”->“计算”->“弹性云服务器ECS”,进行查看并复制。注意:浏览器可能会提醒地址不安全,请点击“高级”设置“添加例外”->“获取证书” ->“确认安全例外”。进入“软件包构建中心”,如下图所示,输入下载的软件包名称knox_3_1_0_0_78-1.0.0.3.1.0.0-78.noarch.rpm,点击“构建软件包”。







构建完成后在/opt/portadv/portadmin/rpms/目录下生成knox_3_1_0_0_78-1.0.0.3.1.0.0-78.aarch64.rpm文件

CheckSo依赖检查通过CheckSo工具检查生成的rpm文件,以确认没有残留X86依赖文件。

切换/home/checkSo目录下

cd /home/checkSo

rm -f JarResult.log NonJarResult.log

./main.sh /opt/portadv/portadmin/rpms/knox_3_1_0_0_78-1.0.0.3.1.0.0-78.aarch64.rpm

查询成功


基于鲲鹏开发套件实现c/c++代码迁移(在鲲鹏云服务器上,完成源码编译类软件的打包、迁移环境配置及软件迁移等操作)


首先登入华为云(步骤省略),进入华为云控制台,点击 “弹性云服务器ECS” 进入ECS管理界面,还是用fxce远程登入工具进行远程登入,其他远程登入工具也可用

注:如果是自己的虚拟机直接输入wget 命令 是无效的

需要先安装命令如 linux安装解压zip命令: yum install unzip  wget命令安装: yum -y install wget    linux安装tar命令:yum install -y tar


首先我登入xfce

假如公有地址192.168.1.1 私有地址192.168.1.10

LANG=en_us.UTF-8 ssh root@192.168.1.1        (改为自己的ip地址)


代码扫描工具使用

解压源码包,执行生成MakeFile


cd

unzip  crcutil-42148a6df6986a257ab21c80f8eca2e54544ac4d.zip

cd crcutil-42148a6df6986a257ab21c80f8eca2e54544ac4d

sh autogen.sh

./configure

执行结果

代码扫描工具使用

Porting Advisor是华为鲲鹏代码迁移工具,是一款可以简化客户应用迁移到鲲鹏云服务的过程的工具。

cd

/opt/portadv/tools/cmd/bin/porting-advisor -S crcutil-42148a6df6986a257ab21c80f8eca2e54544ac4d --cmd make  --tos centos7.6


复制框中的路劲

cat /opt/protadv/tools/cmd/report/20200306110344/porting-advisor.csv


crcutil组件迁移

编译脚本修改 切换到组件目录下

cd /crcutil-42148a6df6986a257ab21c80f8eca2e54544ac4d

修改crcutil目录下的编译脚本autogen.sh

vim autogen.sh


修改crcutil目录下的编译脚本autogen.sh,键入“:88”回车定位至88行

ARCH_NAME=`arch`
if [ "$ARCH_NAME" == "x86" ]; then

fi
if [ "$ARCH_NAME" == "aarch64" ];then
   crcutil_flags="-DCRCUTIL_USE_MM_CRC32=1 -Wall  -Icode -Iexamples -Itests -march=armv8-a+crc"

修改如下图

源码部分修改

修改 code/platform.h文件 (编译宏修改)

vim code/platform.h

在管理宏定义的platform.h文件中增加HAVE_AARCH64宏定义:
键入“:23”定位到23行,单击键盘“i”进入编辑模式,在23行下方输入如下代码:


#if !defined(HAVE_AARCH64)
#if defined(__aarch64__) 
#define HAVE_AARCH64 1
#else
#define HAVE_AARCH64 0
#endif  // defined(__aarch64__) 
#endif  //! defined(HAVE_ARCH64)

修改code/crc32c_sse4.h文件

vim code/crc32c_sse4.h

添加代码

HAVE_AARCH64

40行末尾处添加如下代码

#if HAVE_AARCH64
#define CRC_UPDATE_WORD(crc, value) (crc = _mm_crc32_u64(crc, (value)))
#define CRC_UPDATE_BYTE(crc, value) \
     (crc = _mm_crc32_u8(static_cast<uint32>(crc), static_cast<uint8>(value)))
#endif

#if !HAVE_AARCH64

修改code/crc32c_sse4.cc文件

vim code/crc32c_sse4.cc

21行末尾处添加代码

HAVE_AARCH64

再增加__aarch64__编译宏分支:单击键盘“ESC”退出编辑,键入“:309”回车定位,添加如下代码

#if defined(__aarch64__)
   return true;
#endif


修改code/crc32c_simd_intrin.h文件
vim code/crc32c_simd_intrin.h

键入“:22”回车定位至22行,单击键盘“i”进入编辑模式

#if HAVE_AARCH64
namespace crcutil {
__forceinline uint64 _mm_crc32_u64(uint64 crc, uint64 value) {
  __asm__("crc32cx %w[c], %w[c], %x[v]":[c]"+r"(crc):[v]"r"(value));
  return crc;
}

__forceinline uint32 _mm_crc32_u32(uint32 crc, uint64 value) {
  __asm__("crc32cw %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(value));
  return crc;
}

__forceinline uint32 _mm_crc32_u8(uint32 crc, uint8 value) {
  __asm__("crc32cb %w[c], %w[c], %w[v]":[c]"+r"(crc):[v]"r"(value));
  return crc;
}
}  // namespace crcutil
#else

ESC”退出编辑,键入“:112”回车定位,再次单击“i”键进入编辑,添加代码

#endif

:wq 回车


修改examples/interface.cc文件

vim examples/interface.cc

定位如上

215末尾加入代码

|| HAVE_AARCH64

255行加入代码

|| HAVE_AARCH64

271行

#if (CRCUTIL_USE_MM_CRC32 && (HAVE_I386 || HAVE_AMD64 ))|| HAVE_AARCH64

源码编译安装

执行命令编译脚本,产生configure文件

cd /crcutil-42148a6df6986a257ab21c80f8eca2e54544ac4d 
sh autogen.sh 

执行configure文件,生成MakeFile文件
./configure --prefix=/usr/local/crcutil


安装
make -j4 install

组件测试

编译完成后可通过组件自带的测试用例,对功能正确性进行确认,编译后,在crcutil-42148a6df6986a257ab21c80f8eca2e54544ac4d目录下会生成测试用例(即usage可执行程序)

cd /crcutil-42148a6df6986a257ab21c80f8eca2e54544ac4d
ls


./usage


鲲鹏920执行成功

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

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

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。