MongoDB4.2.1之centos7环境下源码编译安装

一、编译环境要求
A modern C++ compiler capable of compiling C++17. One of the following is required:
GCC 8.0 or newer
Clang 7.0 (or Apple XCode 10.0 Clang) or newer
Visual Studio 2017 version 15.9 or newer (See Windows section below for details)
On Linux and macOS, the libcurl library and header is required. MacOS includes libcurl.
Fedora/RHEL - dnf install libcurl-devel
Ubuntu/Debian - apt-get install libcurl-dev
Python 3.7.x and Pip modules:
See the section “Python Prerequisites” below.
注:centos环境下编译MongoDB 4.2.1版本要求gcc版本8以上,要求安装libcurl-devel库,要求python3.7以上,如果采用输出带调试信息的编译,要求build目录所在磁盘剩余空间200G以上。
二、笔者编译安装的目的
修改每个collection最多创建64个索引的参数

三、编译步骤
1、下载mongodb 4.2.1的源码安装包

wget https://fastdl.mongodb.org/src/mongodb-src-r4.2.1.tar.gz

2、解压安装包

tar -zxvf mongodb-src-r4.2.1.tar.gz

3、libcurl主要功能就是用不同的协议连接和沟通不同的服务器,Linux环境下需要安装
#yum install -y libcurl-devel

4、安装python依赖的模块

pip3 install -r etc/pip/compile-requirements.txt

5、修改collection参数
4.0.x及之前版本可以通过修改src/mongo/db/storage/kv/kv_collection_catalog_entry.h里getMaxAllowedIndexes的值,默认64,即每个collection最大创建64个索引。4.2.x修改src/mongo/db/catalog/index_catalog_impl.cpp里面的
constexpr int kMaxNumIndexesAllowed = xxxx; xxxx为你需要的值,默认64。

6、开始编译

python3 buildscripts/scons.py --link-model=static --opt=on all

可以使用buildscripts/scons.py --help查看帮助,其中all表示编译所有,包括mongo、mongos、mongod,可以单独编译mongod,–release=RELEASE表示编译版本,默认编译带调试信息,编译后的包非常巨大,–opt=on表示优化编译时间。直接使用指导步骤里的命令编译耗时非常久,加上优化参数编译

7、如果未添加参数编译可以使用如下命令去除调试信息
编译后的mongod位于./build/opt/mongo/目录下,在./(/opt/mongodb/mongodb-src-r4.2.1/)当前目录下也会生产一份

objcopy --strip-debug ./mongod

8、编译完成后安装mongodb

python3 buildscripts/scons.py --prefix=/opt/mongo install

三、QA:
1、找不到curl/curl.h库
解决方法:

yum -y install libcurl-devel

2、warning,pip版本需要更新
解决方法:

pip3 install --upgrade pip==19.3.1

3、缺少模块
解决方法:

pip3 install psutil

4、缺少依赖模块
解决方法:
3.7版本需要一个新的包libffi-devel

yum install libffi-devel -y

安装完依赖包后需要重新make install编译安装python3.7,重新做软连接命令生效
如下是4.0.13源码安装时的报错

5、six版本低于要求版本
解决方案:

pip install six --upgrade --ignore-installed six

6、requests不满足要求
解决方案:

pip install --ignore-installed requests

7、error: Python.h: No such file or directory
解决方案:

yum install -y python-devel

8、找不到依赖库
#解决方案:将编译环境的libstdc++库拷贝到安装环境下,并重建软连接

#scp 192.168.0.233:/lib64/libstdc++.so.6.0.25 /lib64/
#rm -rf libstdc++.so.6
#ln -s libstdc++.so.6.0.25 libstdc++.so.6
点赞