文章概述
MongoDB作为基于分布式文件存储的NoSQL数据库,被应用于多种数据量较大的场景使用。
随着2022年前后国产化系统的不断发展,AArch64处理器架构得到了广泛的采用,而国产化系统采用的往往不是全指令集的CPU,导致官网给出的MongoDB v5.0.0及更高版本包文件无法直接拿来运行,原因是缺少相应的指令集作为支撑,这时候就需要根据官方源码进行手动编译。
官方链接
官网 (mongodb.com)
官方文档 (mongodb.com)
官方Git项目 (github.com)
官方系统安装包下载 (mongodb.org)
官方社区适配包下载 (mongodb.com)
官方归档版本下载 (mongodb.com)
编译过程
系统配置 Kylin_AArch64_V10 8C/32G/200G
安装需要 GCC v8.2及以上版本
安装需要 Python3环境
1. 编译GCC
# 获取包文件 curl -kLO 'http://ftp.gnu.org/gnu/gcc/gcc-9.5.0/gcc-9.5.0.tar.xz' tar -xf gcc-9.5.0.tar.xz && cd gcc-9.5.0 # 安装系统依赖 yum install bzip2 wget gcc gcc-c++ -y # 查看需要的依赖包,可以提前下载,防止网络延迟后面执行download_prerequisites报错 cat contrib/download_prerequisites # 提前下载依赖包 curl -kLO 'https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2' curl -kLO 'https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2' curl -kLO 'https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz' curl -kLO 'https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.18.tar.bz2' # 下载安装 GCC 所需要的依赖包,由于提前下载,执行相当快 ./contrib/download_prerequisites # 创建构建文件夹 mkdir build && cd build # 配置编译 ../configure --disable-checking --enable-languages=c,c++ --disable-multilib # 开始编译,由于相当耗时,所以给予核心数量*2的编译线程数,耗时83m,大小6.2G make -j $(( $(nproc) * 2 )) # 进行安装 make install
备注:
--disable-multilib 只安装64位版本
--disable-checking 可以加快构建
--enable-checking 使得编译出的二进制程序可以使用gdb调试
--enable-checking=release 以软件发布版的标准来对编译时生成的代码进行一致性检查
--enable-languages=c,c++ 支持的高级语言类型和运行时库
--disable-multilib 禁止生成32位代码
2. 编译MongoDB
# 获取包文件 curl -kLO 'https://github.com/mongodb/mongo/archive/refs/tags/r5.0.11.tar.gz' tar -xf r5.0.11.tar.gz && cd mongo-r5.0.11 # 查看编译帮助 cat mongo-r5.0.11/docs/building.md # 安装系统依赖 yum install python3 python3-devel openssl-devel python3-pip yum install lzma xz-devel curl libcurl libcurl-devel -y # 安装python3编译依赖 python3 -m pip install -r etc/pip/compile-requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 查看帮助信息,没报错基本上就能往下走 python3 buildscripts/scons.py --help MONGO_VERSION=5.0.11 # 开始编译,默认编译到build/install/bin目录,耗时183m,大小36G python3 buildscripts/scons.py -j $(nproc) install-core \ MONGO_VERSION=5.0.11 \ --disable-warnings-as-errors \ CCFLAGS="-march=armv8-a+crc" \ --opt=on # 缩减体积,删除所有符号和重新定位信息 # 1.4G mongo -> 46M mongo # 4.6G mongod -> 83M mongod # 2.7G mongos -> 60M mongos cd build/install/bin && strip -s mongo* # 解决执行mongo命令报错 /lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found find /usr/lib64 /usr/local/lib64 -name 'libstdc++.so*' ln -nsf /usr/local/lib64/libstdc++.so.6.0.28 /lib64/libstdc++.so.6
备注:
--opt=on 启用编译时优化
install-core 编译出mongod、mongos
--disable-warnings-as-errors 忽略编译器警告
CCFLAGS="-march=armv8-a+crc" 当CPU不支持arm64v8.2a时使用