甲骨文ARM服务器上编译MongoDB 3.6.2

环境
服务器类型:arm服务器
操作系统:centos7.5
mongodb版本:3.6.13
gcc 版本5.3.0
scons版本:3.1.1
pip版本:7.1.0
编译GCC5.4.0
官方编译文档中明确要求3.6版本的编译要求gcc的版本在5.3.0以上,见下图:

gcc下载
gcc5.3.0的下载路径如下

http://ftp.gnu.org/gnu/gcc/gcc-5.3.0/gcc-5.3.0.tar.gz

解压

tar -xvf gcc-5.3.0.tar.gz

安装gcc的依赖

cd gcc-5.3.0/
./contrib/download_prerequisites (在解压根目录中执行)

编译gcc

cd ../ && mkdir gcc-build-5.3.0 && cd gcc-build-5.3.0
 
# configure
../gcc-5.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
# 编译
make  # 需要等待很久,视机器性能而定
make install

切换gcc版本
虽然新版本的gcc已经安装完毕,都是系统还是会调用旧版本的gcc4.9.2,这里需要切换gcc版本

# 切换gcc到新版本
update-alternatives --install /usr/bin/gcc gcc /opt/gcc-5.3.0 300

验证gcc版本切换成功

[root@localhost ~]# g++ --version
g++ (GCC) 5.3.0

安装scons
下载scons
下载地址:

http://prdownloads.sourceforge.net/scons/scons-3.1.1.tar.gz

安装scons所需依赖

yum install pcre-devel python-devel

解压安装

tar -zxvf scons-3.1.1.tar.gz 
cd scons-3.1.1
python setup.py install

验证是否安装成功

scons -h
-------------------------------输出如下-------------------------
usage: scons [OPTION] [TARGET] ...
 
SCons Options:
  -b, -d, -e, -m, -S, -t, -w, --environment-overrides, --no-keep-going,
  --no-print-directory, --print-directory, --stop, --touch
                              Ignored for compatibility.
  -c, --clean, --remove       Remove specified targets and dependencies.
  -C DIR, --directory=DIR     Change to DIR before doing anything.
  --cache-debug=FILE          Print CacheDir debug info to FILE.
  --cache-disable, --no-cache

编译mongodb
安装所需依赖

yum install openssl openssl-devel

下载mongodb安装包
下载地址:

wget https://github.com/mongodb/mongo/archive/r3.6.2.zip

解压进入目录

unzip mongo-r3.6.13.zip
cd mongo-r3.6.13 

安装python 依赖包

pip install -r buildscripts/requirements.txt

这里我用的pip版本是7.1.0,如果这个命令执行有问题不妨我我这个版本的pip试试。

源码编译mongodb核心组件

scons core CCFLAGS=-march=armv8-a+crc -j8 MONGO_VERSION=3.6.2 --link-model=static --opt=on --release=RELEASE

如果要编译全部组件,请执行下面命令:

scons all CCFLAGS=-march=armv8-a+crc -j8 MONGO_VERSION=3.6.2 --link-model=static --opt=on --release=RELEASE

注意,在arm服务器上编译,这里的CCFLAGS=-march=armv8-a+crc不能省,否则会报错如下:

这点官方编译文档已经明确指出:

编译过程中还遇到一些问题,下面是遇到的问题以及解决方法:
1、问题1

解决:

pip install --upgrade setuptools

2、问题2
报错如下:

_cffi_backend.c:15:17: 致命错误:ffi.h:

解决:

yum install -y libffi-devel

安装
创建安装目录

mkdir /opt/mongodb-build

安装

scons --prefix=/opt/mongodb-build  CCFLAGS=-march=armv8-a+crc  install

# 如果需要lib库和include头文件 需要加上 –full 参数如下:

scons –prefix=/opt/mongodb-build  CCFLAGS=-march=armv8-a+crc –full install

设置环境目录:

export LD_LIBRARY_PATH=/usr/local/lib64/

安装结束后会在/opt/mongodb-build 生成mongodb的安装文件,至此编译结束,下面就是部署配置了

文件体积太大,去除程序调试信息

[root@atom bin]#ls -lah
total 3.4G
drwxr-xr-x. 2 root root   65 Oct 22 07:54 .
drwxr-xr-x. 3 root root  100 Oct 21 21:53 ..
-rwxr-xr-x. 1 root root 1.1G Oct 21 06:30 mongo
-rwxr-xr-x. 1 root root 104M Oct 22 07:54 mongod
-rwxr-xr-x. 1 root root 2.2G Oct 21 09:29 mongos
-rwxr--r--. 1 root root 1.8K Oct 21 21:53 resmoke.py
[root@atom bin]#objcopy --strip-debug ./mongo
[root@atom bin]#objcopy --strip-debug ./mongos
[root@atom bin]#objcopy --strip-debug ./mongoperf
[root@atom bin]#objcopy --strip-debug ./mongod
[root@atom bin]#ls -lah
total 230M
drwxr-xr-x. 2 root root   65 Oct 22 08:08 .
drwxr-xr-x. 3 root root  100 Oct 21 21:53 ..
-rwxr-xr-x. 1 root root  55M Oct 22 08:01 mongo
-rwxr-xr-x. 1 root root 104M Oct 22 07:54 mongod
-rwxr-xr-x. 1 root root  72M Oct 22 08:08 mongos
-rwxr--r--. 1 root root 1.8K Oct 21 21:53 resmoke.py
[root@atom bin]#

mongodb的部署配置
创建数据目录,日志目录,配置目录

cd /opt/mongodb-build
mkdir data logs conf
touch logs/mongo.log
touch conf/mongo.conf

编辑配置文件

vim conf/mongo.conf

dbpath=/opt/mongodb-build/data
ogpath=/opt/mongodb-build/log/mongo.log
logappend=true
journal=true
quiet=true
port=27017
fork=true #后台运行
bind_ip=0.0.0.0 #允许任何IP进行连接
auth=false #是否授权连接

启动mongodb服务端

./bin/mongod -f /opt/mongodb-build/conf/mongo.conf

进入mongodb客户端

./bin/mongo

总结
以上就是arm上编译安装mongodb的步骤啦,如果各位看官在安装过程中有疑问,欢迎在评论去交流~

点赞