鲲鹏软件迁移学习笔记(理论部分加实操作 中)
基于鲲鹏Maven仓进行Maven软件构建
Maven提供了一个仓库的功能存放编译好的Jar包。构建项目时只需要在项目中配置对应的依赖就能自动从仓库中下载Jar,但Maven中央仓库中部分Jar存在x86依赖无法在鲲鹏平台运行。而鲲鹏Maven仓存储了部分已在鲲鹏平台上编译好的Jar,通过配置鲲鹏Maven仓库构建时就能优先从鲲鹏Maven仓下载。
操作前提 1.远程登录ECS2.安装实验所需软件3.软件依赖分析(Hive)4.迁移软件包
首先登入华为云(步骤省略),进入华为云控制台,点击 “弹性云服务器ECS” 进入ECS管理界面,还是用fxce远程登入工具进行远程登入,其他远程登入工具也可用
需要先安装命令如 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仓库软件包
解压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软件包
解压
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
安装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
解压
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
下载完成后,解压rpmrebuild-2.14.tar.gz文件
tar xvfz rpmrebuild-2.14.tar.gz
安装
make
make install
安装完成
安装DependencyAdviso(华为鲲鹏分析扫描工具是一款可以简化客户应用迁移到TaiShan服务器或鲲鹏云服务(KC1,鲲鹏裸机)过程工具。当需要移植软件时。可先用该工具分析可移植和移植入,该工具解决了客户软件移植评估分析过程中人工分析投入大,准确率低,整体效率低下的痛点,通过该工具能够自动分析并输出指导报告。
在/opt目录下下载DependencyAdvisor安装包
cd /opt
解压
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的安装包
解压(当不知解压文件名时可以输入 ls查看)
tar -zxvf Porting-advisor-Kunpeng-linux-*.tar.gz
安装PortingAdvisor软件
cd Porting-advisor-Kunpeng-linux-*
bash install.sh web
回车三次
安装完成
安装CheckSo工具
切换到/home目录下
cd /home
解压checkSo.zip
unzip checkSo.zip
切换到/checkSo目录
cd /home/checkSo
添加权限
chmod +x *.sh
下载X86软件包
切换到/opt/depadv/depadmin/目录下
cd /opt/depadv/depadmin/
下载软件包
.依赖文件检查,通过工具检查当前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远程登入工具进行远程登入,其他远程登入工具也可用
需要先安装命令如 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执行成功
- 点赞
- 收藏
- 关注作者
评论(0)