MongoDB(0)- 原始碼編譯

weixin_33912445發表於2018-03-07

轉載自部落格
雖然MongoDB官方提供了可執行的MongoDB供下載,但本著開源的工程都自己編譯一次,於是從Git上的原始碼來編譯MongoDB,官方的文件都是英文,中文文件找了幾個部落格,過程寫的都不夠全(可能是遇到的問題不一樣)。在此記錄一下本人從原始碼編譯MongoDB的全過程,希望能對有心人有幫助。

環境要求

官方文件docs/building.md中提出的要求如下

  • A modern and complete C++11 compiler. One of the following is required:
  1. VS2015 Update 2 or newer
  2. GCC 5.3.0
  3. Clang 3.4 (or Apple XCode 5.1.1 Clang) or newer
  • Python 2.7
  • SCons 2.3.5 or newer (for MSVC 2015 support)

可知,在centos中需要保證的環境有:

  • gcc 5.3.0
  • python 2.7
  • scons 2.3.5

編譯升級gcc

我這臺伺服器為CentOS-7,上面的gcc版本比較低,版本如下:

[root@localhost gcc-5.3.0]# g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)
Copyright © 2015 Free Software Foundation, Inc.
本程式是自由軟體;請參看原始碼的版權宣告。本軟體沒有任何擔保;
包括沒有適銷性和某一專用目的下的適用性擔保。

我使用了一個ftp映象站下載GCC 5.3.0的原始碼壓縮包。 然後進行解壓和安裝依賴。

解壓gcc-5.3.0.tar.gz

# 在/opt/gcc-5.3.0目錄中安裝gcc
tar -xvf gcc-5.3.0.tar.gz

下載安裝依賴,下載安裝gcc需要的三個依賴

cd gcc-5.3.0/
./contrib/download_prerequisites (在解壓根目錄中執行)

注意 上一步下載依賴,需要使用wget命令、解壓bz2檔案等,確保安裝了命令具,安裝方法如下:

yum -y install bzip2
yum -y install wget

依賴下載完成後,編譯,更新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到新版本
update-alternatives --install /usr/bin/gcc gcc /opt/gcc-5.3.0/gcc-5.3.0

我重新ssh登入後看到更新生效

[root@localhost ~]# g++ --version
g++ (GCC) 5.3.0
Copyright © 2015 Free Software Foundation, Inc.
本程式是自由軟體;請參看原始碼的版權宣告。本軟體沒有任何擔保;
包括沒有適銷性和某一專用目的下的適用性擔保。

安裝python、scons

檢視python版本,滿足要求,不做修改。

[root@localhost gcc-5.3.0]# python -V
Python 2.7.5

安裝scons下載地址,下載scons-3.0.1.tar.gz版本。

# 依賴解決
yum install pcre-devel python-devel
# 解壓安裝
tar -zxvf scons-3.0.1.tar.gz && cd scons-3.0.1
python setup.py install

驗證scons安裝是否成功,輸入scons -h會顯示提示資訊。

[root@localhost gcc-5.3.0]# 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

從git上下載MongoDB原始碼

# 下載原始碼
git clone git://github.com/mongodb/mongo.git
cd mongo
# 列出所有版本
git tag -l  
# 檢出 需要安裝的版本
git checkout r3.6.3  

官方文件中介紹,linux下編譯需要安裝openssl-devel
On Linux, you will need to install a compiler gcc or clang, as well as glibc headers which are usually included in a package named glibc-devel.

  • On Debian and Ubuntu systems, you must install the libssl-dev package to compile with SSL support.
  • On Red Hat and CentOS systems, you must install the openssl-devel package to compile with SSL support.

openssl-devel安裝命令如下:

yum install openssl openssl-devel

安裝python 依賴包,通過在程式碼根目錄中執行如下命令

# 在mongoDB解壓根目錄中執行
pip install -r buildscripts/requirements.txt

編譯MongoDB原始碼並安裝

注意本人開始編譯所有元件,等待很久以後磁碟空間不夠用,退出時編譯已佔用了12G空間以上,若需要編譯所有,請留意磁碟大小。

# 編譯所有元件,需要很大磁碟空間,注意虛擬機器磁碟大小
scons all

# 編譯核心元件 mongod, mongos, shell
scons core

# 安裝( 安裝到/opt/mongo )
scons --prefix=/opt/mongo  install
# 如果需要lib庫和include標頭檔案 需要加上 –full 引數如下:
# scons –prefix=/opt/mongo  –full install

備註:/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的問題請參考
https://itbilu.com/linux/management/NymXRUieg.html

相關文章