ARM环境手动编译StarRocks-2.0

1.背景

公司使用StarRocks作为实时数据库,由于云上环境有部分是ARM,而官方暂未提供ARM版的安装包或者docker环境镜像,只好自己手动编译。根据StarRocks官网的release,在2.0版本支持ARM环境,于是开始挠头编译 (ノへ ̄、)

2.主要参考

因为缺少相关资料,去Apache Doris官网找了ARM平台的编译流程作为主要参考,这里emmmm,不多说
|ω・`)
Apache Doris ARM编译

3.环境

3.1.内核版本内核版本3.2.StarRocks版本
commit 6ff9eab75bea921809868b1cae8bcb2d2f638bfc

4.编译

4.1.编译工具安装

4.1.1.安装gcc-10.1.0

下载gcc-10.1.0

wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.gz

解压后,下载依赖:

http://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
http://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
http://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
http://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2

解压这四个依赖,然后移动到 gcc-10.1.0 源码目录下,并重命名为 gmp、isl、mpc、mpfr。
下载并安装 automake-1.15(因为gcc10编译过程中会查找automake 1.15 版本)

https://ftp.gnu.org/gnu/automake/automake-1.15.tar.gz
tar xzf automake-1.15.tar.gz
./configure --prefix=/home/starrocks/tools/installed
make && make install
export PATH=/home/doris/tools/installed/bin:$PATH

编译GCC10:

cd gcc-10.1.0
./configure --prefix=/home/starrocks/tools/installed
make -j && make install
4.1.2.安装其他编译组件
  1. jdk-8u291-linux-aarch64.tar.gz
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
  1. cmake-3.19.8-Linux-aarch64.tar.gz
https://cmake.org/download/
  1. apache-maven-3.8.1-bin.tar.gz
https://maven.apache.org/download.cgi
  1. nodejs 16.3.0
https://nodejs.org/dist/v16.3.0/node-v16.3.0-linux-arm64.tar.xz

注:以上几个组件不需要编译,解压后就可以使用,不过记得配置环境变量!

  1. libtool-2.4.6.tar.gz
https://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.gz
cd  libtool-2.4.6/
./configure --prefix=/home/starrocks/tools/installed
make -j && make install
  1. binutils-2.36.tar.xz(获取bdf.h)
https://ftp.gnu.org/gnu/binutils/binutils-2.36.tar.bz2
./configure --prefix=/home/starrocks/tools/installed
make -j && make install

注:这里只安装binuntils的话在后面编译be时候有可能出现如下报错:
在这里插入图片描述so,这里需要再安装binutils-devel,按照rpm包即可

  1. binutils-devel-2.27-44.base.el7.aarch64.rpm
http://mirror.centos.org/altarch/7/os/aarch64/Packages/binutils-devel-2.27-44.base.el7.aarch64.rpm
rpm -ivh binutils-devel-2.27-44.base.el7.aarch64.rpm
  1. libiberty(编译BE用)
    这个库的源码就在 gcc-10.1.0 的源码包下
cd gcc-10.1.0/libiberty/
./configure --prefix=/home/starrocks/tools/installed
make

编译后会产生 libiberty.a,后续移动到StarRocks解压目录的thirdparty的 lib64 目录(没有新建一下)中即可。

4.2.编译StarRocks的第三库

解压源码目录到/home/starrocks/starrocks-src/下

cd /home/starrocks/starrocks-src/thirdparty
  1. 有网络情况下运行脚本,下载第三库
./download-thirdparty.sh

若没有联网,也可以运行脚本(稍微修改不下载只打印),将需要下载的第三方库地址列出来手动下载,新建thirdparty/src目录放入其中即可。

  1. 在starrocks源码目录下新增 custom_env.sh 并添加如下内容
export DORIS_THIRDPARTY=/home/starrocks/starrocks-src/thirdparty
export JAVA_HOME=/home/starrocks/tools/jdk1.8.0_291/
export DORIS_GCC_HOME=/home/starrocks/tools/installed/
export PATCH_COMPILER_RT=true
  1. 修改 build-thirdparty.sh 中的部分内容
    在 build_curl 中增加 configure 参数:–without-libpsl。如果不添加,则在最终编译Doris BE的链接阶段,可能报错:undefined reference to ‘psl_is_cookie_domain_acceptable’

  2. 执行 build-thirdparty.sh。
    重点来了,这里最大可能的报错!!!
    在这里插入图片描述
    libcrypto.a(sha1-armv8.0):relocation R_AARCH64_ADR_PREL_PG_HI21 against symbolz_errmsg’ which may bind externally can not be used when making a shared object; recompile with -fPIC
    其实这里的报错已经很明显了,但是一开始不太懂,卡在这里很久。openssl的shaxxx-armv8.0这个源码文件有些小问题,需要修改一下。
    解决方式:切换到openssl-1.0.2k的源码目录下,修改报错对应的文件:
    参考链接:
    https://github.com/openssl/openssl/compare/OpenSSL_1_1_1-stable…Romain-Geissler-1A:OpenSSL_1_1_1-stable
    这个链接是openssl-1.1.1的解决方式,对于openssl-1.0.2k只需要修改报错的对应文件即可,主要是以下两个文件:
    2.1.crypto/sha/asm/sha1-armv8.pl
    在这里插入图片描述
    2.2.crypto/sha/asm/sha512-armv8.pl
    在这里插入图片描述.extern OPENSSL_armcap_P .hidden OPENSSL_armcap_P 这两项两个文件里是没有的,也需要添加上!!!然后把要删除的删除即可!修改完源码后报错,重新运行 build-thirdparty.sh

  3. 编译到某个阶段报错怎么办
    不必从头开始编译,将此项报错的编译之前所有注释掉。解决调试这一项报错的第三方库即可。不用耗时编译其它编译OK的第三方库。
    在这里插入图片描述

4.3.编译StarRocks源码

第三方库全部可以编译通过后,开始编译源码
在StarRocks源码目录执行 sh build.sh 即可!
在这里插入图片描述
编译前将build.sh这里的USE_AVX2=ON改为OFF。
编译完成会输出到源码目录的output目录下,打包就可以放到对应ARM环境机器就可以安装了!!!

5.总结

说到底还是自己太菜,编译出问题就要解决好久 ╮(╯_╰)╭
不过废了几天时间总算编译完了,由于官方没有给出ARM环境的编译流程,就把自己的一顿下饭操作整理一下发出来,希望对有需要的人有那么一点帮助!
完结!
<( ̄▽ ̄)/

6.补充

启动be可能报错:libjvm.so: cannot open shared object file: No such file or directory
解决办法:
1.在系统中查找这个文件:

sudo find / -name libjvm.so

找到jdk安装包下面的对应文件目录
2.将.so文件路径的目录添加到/etc/ld.so.conf

vim /etc/ld.so.conf

在文件末尾新添加一行:上面查到的对应文件所在目录,例如:
/usr/local/java/jdk1.8.0_101/jre/lib/amd64/server
3.使得修改生效

sudo /sbin/ldconfig
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值