开发者
资源
#鲲鹏训练营BoostKit专场#OmniStream 编译手册(带命令注释 + 补充配置)配置操作指南(第一天)
#鲲鹏训练营BoostKit专场#OmniStream 编译手册(带命令注释 + 补充配置)配置操作指南(第一天)
发表于2025/11/30
6802

写在最前:

注意事项(避坑指南,务必阅读)

  1. 依赖下载问题:部分组件(如 BoostKit-ksl、BoostKit-kaccjson)可能因网络受限无法从华为官网下载,可从镜像仓库获取:https://gitee.com/one-more-bowl-at-most/omnistream_dependency,建议所需软件可以提前下载,直接上传到固定文件夹。
  2. 服务器资源要求:编译过程(尤其是 LLVM、OmniStream 核心)消耗 CPU 和内存较大,建议服务器规格≥8U32G;若资源不足(如编译时卡顿、报错 “内存溢出”),需扩容。
  3. 并行度调整:$PARALLELISM 需根据实际 CPU 核心数调整(例如 16 核 CPU 可设为 16,32 核设为 32),避免线程过多导致系统卡顿或编译失败(推荐值:CPU 核心数 ×1,不超过核心数 ×1.5)。
  4. 环境变量生效问题:若编译时提示 “找不到头文件”“找不到库文件”,需先执行 source /etc/profile 确保环境变量生效;若仍报错,检查环境变量中路径是否与实际安装路径一致(如 JDK、LLVM 的安装目录是否正确)。
  5. 补丁应用问题:安装 snappy、librdkafka 时需应用指定补丁,若补丁应用失败(提示 “文件不匹配”),需确认源码版本是否正确(snappy 需为 openEuler-24.03-LTS-SP1 版本,librdkafka 需为 2.6.1 版本)。

一、操作系统要求

  • OS:OpenEuler 22.03 LTS SP3(仅支持该版本,确保依赖兼容性,避免版本不匹配导致编译失败)
  • 内存:32G以上

二、核心配置补充(前置必执行)

# 1. 配置编译并行度(根据机器CPU核心数调整,示例为8核,推荐设为CPU核心数,如16核设为16)
export PARALLELISM=8

# 说明:后续所有编译命令中的 -j$PARALLELISM 均依赖此变量,需先执行此命令再进行后续步骤

*如果不进行这步的,下面涉及-j$PARALLELISM的命令,可以改成-j16或-j32。(编译时主要看内存,只要内存够,其他不是问题。)

三、安装依赖组件

说明:所有组件统一安装在 /opt/buildtools/ 目录下,便于环境管理和路径统一配置,避免分散存放导致的依赖找不到问题。

1. 通过 yum 安装基础依赖(一键安装系统级工具)

# 安装核心依赖:包含编译器(GCC)、压缩库(zlib)、版本控制(git)、构建工具(cmake)等
# 同时包含开发库(如openssl-devel)、Python工具链、测试工具(CUnit)等编译必需组件
yum install -y sudo patch glibc zip unzip zlib wget curl tar gcc java gcc-c++ make rpm git python3 cpio cmake autoconf automake gettext-devel libtool meson openssl-devel libuuid-devel python3-pyelftools python-pyelftools gcc-c++ libaio-devel ncurses-devel CUnit-devel libiscsi-devel json-c-devel libcmocka-devel python3-pip python3-requests byacc flex binutils-devel bison boost boost-devel python3-devel doxygen dos2unix google-benchmark google-benchmark-devel libasan glibc-devel libasan-static jq bsdtar expect openssh vim strace python-jenkins python-concurrent-log-handler python3-gevent python3-marshmallow python3-pyyaml python-pandas python-xlrd python-retrying python-esdk-obs-python rpm-build

2. 安装 JAVA(OpenJDK 8,适配 OmniStream 依赖)**可以使用bisheng JDK代替。

# 2.1 创建JDK安装目录(-p参数确保目录不存在时自动创建,避免报错)
mkdir -p /opt/buildtools/openjdk8

# 2.2 进入安装目录,下载OpenJDK 8(aarch64架构,适配鲲鹏等ARM芯片,确保与系统架构一致)
cd /opt/buildtools/openjdk8 && wget https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u462-b08/OpenJDK8U-jdk_aarch64_linux_hotspot_8u462b08.tar.gz

# 2.3 解压下载的tar.gz包(z=处理gz格式,x=解压,v=显示解压过程,f=指定目标文件)
tar -zxvf OpenJDK8U-jdk_aarch64_linux_hotspot_8u462b08.tar.gz

# 2.4 删除安装包(解压后无需保留,节省磁盘空间)
rm -rf OpenJDK8U-jdk_aarch64_linux_hotspot_8u462b08.tar.gz

3. 安装 Cmake(3.28.2 版本,编译核心工具)

# 3.1 进入工具安装根目录
cd /opt/buildtools/

# 3.2 下载Cmake(Linux aarch64架构版本,适配ARM芯片,避免x86版本不兼容)
wget https://github.com/Kitware/CMake/releases/download/v3.28.2/cmake-3.28.2-linux-aarch64.tar.gz

# 3.3 解压Cmake安装包
tar -zxvf cmake-3.28.2-linux-aarch64.tar.gz

# 3.4 删除安装包(节省空间)
rm -rf cmake-3.28.2-linux-aarch64.tar.gz

# 3.5 删除系统默认的cmake(避免旧版本冲突,若系统未安装则忽略“不存在”报错)
rm -rf /usr/local/bin/cmake

# 3.6 创建软链接:将新安装的cmake链接到系统PATH目录,实现全局调用(无需额外配置PATH)
ln -sf cmake-3.28.2-linux-aarch64/bin/cmake /usr/local/bin/cmake 

# 3.7 链接cmake的共享配置文件(确保cmake能找到默认模块,避免配置时缺少依赖)
ln -sf cmake-3.28.2-linux-aarch64/share/cmake-3.28 /usr/local/share/

4. 安装 Maven(3.8.3 版本,Java 项目构建工具)

# 4.1 创建Maven安装目录
mkdir -p /opt/buildtools/apache-maven

# 4.2 进入目录,下载Maven二进制包(bin.zip为编译好的可执行版本,无需额外编译)
cd /opt/buildtools/apache-maven && wget https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.8.3/apache-maven-3.8.3-bin.zip

# 4.3 解压zip包(unzip直接处理zip格式,无需额外参数)
unzip apache-maven-3.8.3-bin.zip

# 4.4 删除安装包(节省空间)
rm -rf apache-maven-3.8.3-bin.zip

5. 安装 LLVM(15.0.4 版本,编译器基础设施)

# 5.1 创建LLVM安装目录
mkdir -p /opt/buildtools/LLVM-15.0.4

# 5.2 定义LLVM安装目录变量(后续编译用,避免硬编码路径,便于维护)
export LLVM_install_dir=/opt/buildtools/LLVM-15.0.4

# 5.3 进入目录,下载LLVM源码包(llvmorg-15.0.4为官方稳定标签版本)
cd /opt/buildtools/LLVM-15.0.4 && wget https://github.com/llvm/llvm-project/archive/refs/tags/llvmorg-15.0.4.tar.gz

# 5.4 解压源码包
tar -zxvf llvm-project-llvmorg-15.0.4.tar.gz

# 5.5 删除源码包(节省空间)
rm -rf llvm-project-llvmorg-15.0.4.tar.gz

# 5.6 创建编译目录(推荐“源码外编译”,避免污染源码目录,便于清理和重新编译)
mkdir -p /opt/buildtools/LLVM-15.0.4/llvm-project-llvmorg-15.0.4/build

# 5.7 进入编译目录,执行cmake配置(参数详细说明见注释)
cd /opt/buildtools/LLVM-15.0.4/llvm-project-llvmorg-15.0.4/build
cmake -G "Unix Makefiles" \
  -DLLVM-TARGETS_TO_BUILD="host;ARM;X86;AArch64;BPE" \  # 支持的目标架构:本地主机+ARM/X86/AArch64/BPE(覆盖主流架构)
  -DCMAKE_BUILD_TYPE=Release \  # 构建类型:Release(开启编译优化,无调试信息,适合生产环境)
  -DLLVM_BUILD_LLVM_DYLIB=true \  # 生成LLVM动态库(.so文件,便于其他项目动态链接)
  -DLLVM_ENABLE_RTTI=ON \  # 开启C++ RTTI(运行时类型信息,OmniStream部分依赖需要)
  -DLLVM_ENABLE_PROJECTS="clang;lld;libunwind;compiler-rt;lldb" \  # 同时构建的子项目:clang编译器、lld链接器等核心组件
  -DCMAKE_INSTALL_PREFIX=/usr/local/ \  # 安装路径:系统全局目录(便于其他项目引用)
  ../llvm  # 源码目录:指向llvm核心源码的CMakeLists.txt所在路径

# 5.8 并行编译(-j$PARALLELISM:使用8个线程,加速编译,减少耗时)这里是根据设置来处理的,你可以用make -j32 代替。但前提是内存要够。
make -j $PARALLELISM

# 5.9 安装LLVM到指定路径(/usr/local/),完成后系统可全局调用llvm工具链
make install

6. 安装 googletest(1.14.0 版本,C++ 单元测试框架)

# 6.1 进入工具安装根目录
cd /opt/buildtools

# 6.2 从GitHub克隆googletest源码(官方仓库,确保源码完整性)
git clone https://github.com/google/googletest.git

# 6.3 进入目录,切换到1.14.0版本(标签v1.14.0,确保版本稳定,避免开发版bug)
cd googletest && git checkout tags/v1.14.0

# 6.4 cmake配置(使用默认配置,生成Makefile,无需额外参数)
cmake CMakeLists.txt

# 6.5 并行编译
make -j$PARALLELISM

# 6.6 安装到系统目录(默认/usr/local/,便于OmniStream编译时引用)
make install

7. 安装 jemalloc(5.3.0 版本,高效内存分配器)

# 7.1 进入工具安装根目录
cd /opt/buildtools

# 7.2 克隆jemalloc源码(官方仓库)
git clone https://github.com/jemalloc/jemalloc.git

# 7.3 进入目录,切换到5.3.0版本(稳定版本,适配OmniStream内存管理需求)
cd jemalloc && git checkout tags/5.3.0

# 7.4 生成配置脚本(参数说明:--disable-initial-exec-tls适配部分环境;--with-lg-page=16配置页面大小)
./autogen.sh --disable-initial-exec-tls --with-lg-page=16

# 7.5 并行编译并安装(&&确保编译成功后才执行安装,避免安装失败的不完整文件)
make -j$PARALLELISM && make install

8. 安装 nlohmann Json(3.11.3 版本,C++ JSON 库)

# 进入工具安装根目录
cd /opt/buildtools

# 克隆源码并指定版本分支(-b v3.11.3:切换到3.11.3版本)
git clone https://github.com/nlohmann/json.git -b v3.11.3

# 进入目录,创建编译目录
cd json && mkdir build && cd build

# cmake配置(../指向源码根目录的CMakeLists.txt)
cmake ..

# 并行编译并安装
make -j$PARALLELISM && make install

9. 安装 snappy(1.1.10 版本,压缩库)

# 进入工具安装根目录
cd /opt/buildtools

# 从openEuler仓库克隆snappy源码(适配openEuler系统)
git clone https://gitee.com/src-openeuler/snappy.git

# 进入目录,切换到openEuler 24.03 LTS SP1适配版本
cd snappy && git checkout tags/openEuler-24.03-LTS-SP1-release

# 解压snappy核心源码包(仓库中包含的源码压缩包)
tar -zxvf snappy-1.1.10.tar.gz

# 删除压缩包
rm -f snappy-1.1.10.tar.gz

# 进入核心源码目录,应用补丁(适配openEuler系统,移除不必要依赖)
cd snappy-1.1.10 && \
patch -p1 < ../add-option-to-enable-rtti-set-default-to-current-ben.patch && \  # 启用RTTI补丁
patch -p1 < ../remove-dependency-on-google-benchmark-and-gmock.patch  # 移除google-benchmark依赖补丁

# 创建编译目录
mkdir -p build && cd build

# cmake配置:禁用基准测试和单元测试,生成动态库,启用位置无关代码
cmake -DSNAPPY_BUILD_BENCHMARKS=OFF \
  -DSNAPPY_BUILD_TESTS=OFF \
  -DBUILD_SHARED_LIBS=ON \
  -DCMAKE_POSITION_INDEPENDENT_CODE=ON  .. 

# 并行编译并安装
make -j$PARALLELISM && make install

10. 安装 rocksdb(8.11.4 版本,键值存储数据库)

# 进入工具安装根目录
cd /opt/buildtools

# 从Facebook仓库克隆rocksdb源码
git clone https://github.com/facebook/rocksdb.git

# 进入目录,切换到8.11.4版本
cd rocksdb && git checkout tags/v8.11.4

# 创建编译目录
mkdir -p build && cd build

# cmake配置:启用snappy压缩,Release模式,启用RTTI,禁用gflags依赖
cmake .. -DWITH_SNAPPY=1 -DCMAKE_BUILD_TYPE=Release -DUSE_RTTI=1 -DWITH_GFLAGS=0

# 并行编译并安装
make -j$PARALLELISM && make install

11. 安装 xxHash(0.8.2 版本,哈希算法库)

# 进入工具安装根目录,克隆xxHash源码
cd /opt/buildtools && git clone https://github.com/Cyan4973/xxHash.git

# 进入目录,切换到0.8.2版本
cd xxHash && git checkout tags/v0.8.2

# 创建编译目录
mkdir -p build && cd build

# 使用非官方cmake配置(../cmake_unofficial为源码中的cmake配置目录)
cmake ../cmake_unofficial && cmake --build .

# 安装到系统目录
cmake --build . --target install

12. 安装 BoostKit-ksl(鲲鹏软件库,性能优化组件)

# 进入工具安装根目录,创建ksl目录
cd /opt/buildtools && mkdir ksl && cd ksl

# 下载BoostKit-ksl(鲲鹏架构优化库,需从华为官网下载,若网络受限可从gitee镜像获取)
# 镜像地址:https://gitee.com/one-more-bowl-at-most/omnistream_dependency
wget https://www.hikunpeng.com/boostkit/library/system?subtab=kpglibc&bread=false

# 解压zip包,安装rpm包(aarch64架构,适配ARM芯片)
unzip BoostKit-ksl_2.5.1.zip && rpm -ivh boostkit-ksl-*.aarch64.rpm

第二天,我们将进行编译OmniStream,敬请期待。

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞