编译安装mongodb

http://www.mongodb.org/

 

http://blog.csdn.net/tys1986blueboy/article/details/7013163

mongodb目前最新的版本是.8.2-rc3,其源码安装用了很多第三方的东西,比如JS引擎(目前官方推荐的是mozilla的Spider Monkey,以后可能改成google的V8,和node.js一样,呵呵)、正则表达式引擎(pcre)、安装构建工具scons(这东西还要用python来安装)、boost C++库等等。下面是安装实录:

1,下载需要的源文件和相关软件包:

 

[python] view plaincopyprint?
 
  1. [root@localhost mongodb]# wget http://downloads.mongodb.org/src/mongodb-src-r1.8.2-rc3.tar.gz  
  2.   
  3. [root@localhost mongodb]# wget http://sourceforge.net/projects/scons/files/scons/2.1.0.alpha.20101125/scons-2.1.0.alpha.20101125.tar.gz/download  
  4.   
  5. [root@localhost mongodb]# wget http://ftp.mozilla.org/pub/mozilla.org/js/js-1.7.0.tar.gz  
  6.   
  7. [root@localhost mongodb]# wget http://sourceforge.net/projects/pcre/files/pcre/7.4/pcre-7.4.tar.gz/download  

 

2,安装scons:

[python] view plaincopyprint?
 
  1. [root@localhost mongodb]# tar zxvf scons-2.1.0.alpha.20101125.tar.gz  
  2.   
  3. [root@localhost mongodb]# cd scons-2.1.0.alpha.20101125  
  4.   
  5. [root@localhost scons-2.1.0.alpha.20101125]# python setup.py install  


3,安装pcre:

[python] view plaincopyprint?
 
  1. [root@localhost mongodb]# tar zxvf pcre-7.4.tar.gz  
  2.   
  3. [root@localhost mongodb]# cd pcre-7.4  
  4.   
  5. [root@localhost pcre-7.4]# ./configure  
  6.   
  7. [root@localhost pcre-7.4]# make  
  8.   
  9. [root@localhost pcre-7.4]# make install  


4,安装Spider Monkey:

[python] view plaincopyprint?
 
  1. [root@localhost mongodb]# tar zxvf js-1.7.0.tar.gz  
  2.   
  3. [root@localhost mongodb]# cd js/src  
  4.   
  5. [root@localhost src]# export CFLAGS="-DJS_C_STRINGS_ARE_UTF8"  
  6.   
  7. [root@localhost src]# make -f Makefile.ref  
  8.   
  9. [root@localhost src]# JS_DIST=/usr make -f Makefile.ref export  


5,安装boost,yum方式比较偷懒:

 

[python] view plaincopyprint?
 
  1. [root@localhost src]# yum -y install boost boost-devel  


 

6,安装mongodb:

[python] view plaincopyprint?
 
  1. [root@localhost mongodb]# tar zxvf mongodb-src-r1.8.2-rc3.tar.gz  
  2.   
  3. [root@localhost mongodb]# cd mongodb-src-r1.8.2-rc3  
  4.   
  5. [root@localhost mongodb-src-r1.8.2-rc3]# scons all  
  6.   
  7. [root@localhost mongodb-src-r1.8.2-rc3]# scons --prefix=/usr/local/mongodb --full install  


7,启动mongodb来测试:

[root@localhost bin]# ./mongod --dbpath /tmp
./mongod: error while loading shared libraries: libpcrecpp.so.0: cannot open shared object file: No such file or directory
[python] view plaincopyprint?
 
  1. [root@localhost bin]# ./mongod --dbpath /tmp  
  2.   
  3. ./mongod: error while loading shared libraries: libpcrecpp.so.0: cannot open shared object file: No such file or directory  
  4.   
  5. [root@localhost bin]# LD_DEBUG=libs ./mongod -v  
  6.   
  7. ......  
  8.   
  9. 29656:       trying file=/lib64/tls/x86_64/libpcrecpp.so.0  
  10.   
  11. 29656:       trying file=/lib64/tls/libpcrecpp.so.0  
  12.   
  13. 29656:       trying file=/lib64/x86_64/libpcrecpp.so.0  
  14.   
  15. 29656:       trying file=/lib64/libpcrecpp.so.0  
  16.   
  17. 29656:       trying file=/usr/lib64/tls/x86_64/libpcrecpp.so.0  
  18.   
  19. 29656:       trying file=/usr/lib64/tls/libpcrecpp.so.0  
  20.   
  21. 29656:       trying file=/usr/lib64/x86_64/libpcrecpp.so.0  
  22.   
  23. 29656:       trying file=/usr/lib64/libpcrecpp.so.0  
  24.   
  25. 29656:  
  26.   
  27. ./mongod: error while loading shared libraries: libpcrecpp.so.0: cannot open shared object file: No such file or directory  
  28.   
  29. [root@localhost bin]# ln -s /usr/local/lib/libpcrecpp.so.0 /usr/lib64/libpcrecpp.so.0  
  30.   
  31. [root@localhost bin]# ll /usr/lib64/libpcrecpp.so.0  
  32.   
  33. lrwxrwxrwx 1 root root 30 Jun  11:57 /usr/lib64/libpcrecpp.so.0 -> /usr/local/lib/libpcrecpp.so.0  
  34.   
  35. [root@localhost bin]# ./mongod --dbpath /tmp  
  36.   
  37. Wed Jun  11:57:38 [initandlisten] MongoDB starting : pid=29700 port=27017 dbpath=/tmp 64-bit  
  38.   
  39. Wed Jun  11:57:38 [initandlisten] db version v1.8.2-rc3, pdfile version 4.5  
  40.   
  41. Wed Jun  11:57:38 [initandlisten] git version: nogitversion  
  42.   
  43. Wed Jun  11:57:38 [initandlisten] build sys info: Linux localhost.localdomain 2.6.18-128.el5 #1 SMP Wed Jan 21 10:41:14 EST 2009 x86_64 BOOST_LIB_VERSION=1_33_1  
  44.   
  45. Wed Jun  11:57:38 [initandlisten] waiting for connections on port 27017  
  46.   
  47. Wed Jun  11:57:38 [websvr] web admin interface listening on port 28017  


 

 

 

 

 

 

 

在debian下安装mongoDB
 
[python] view plaincopyprint?
 
  1. 1. apt-get install scons  
  2. 2. apt-get install libpcrecpp0 ( Perl 5 Compatible Regular Expression Library - C++ runtime files )  
  3. 3. apt-get install libpcre3-dev - Perl 5 Compatible Regular Expression Library - development files  
  4. 4. apt-get install libboost1.35-dev (boost 库, 官网最新为1.4)  
  5. 5. apt-get install libpcap-dev  
  6. 6. apt-get install libmozjs-dev  
  7. 7. apt-get install xulrunner-dev (gecko库)  
  8. 8.  wget http://fastdl.mongodb.org/src/mongodb-src-r1.4.4.tar.gz  
  9. 9. tar zxvf mongodb-src-r1.4.4.tar.gz  
  10. 10.cd 源代码解压目录  
  11. 11. scons --sharedclient=SHAREDCLIENT all --prefix=/home/liubao/mongodb/mongodb  
  12. 12. scons --prefix=/usr/local/enginc/mongodb  install   

mongoDB是用C++写的,在编译的过程中用到gecko的库。内部应该用了很多js的操作。而且看到了类似json.cpp文件。不知道数据是不是以json格式压缩存储的。明天看看这个东东怎么用。

还注意到一个问题。mongoDB是自己写的driver;而canssandra一类的则是用Thrift的协议进行跨语言通信;不知道这是出于性能的考虑还是其它的原因

 

 

 

 

[python] view plaincopyprint?
 
    1. apt-get install scons  
    2.   
    3. E: Sub-process /usr/bin/dpkg returned an error code (1)问题解决办法:  
    4.   
    5. 此时可以这样解决:  
    6. cd /var/lib/dpkg  
    7. sudo mv info info.bak  
    8. sudo mkdir info  

 

 

 

 

http://code.freedomho.com/48526.html

mongodb 编译安装使用(Linux)    下载:http://www.mongodb.org/downloads:http://www.mongodb.org/downloads

    安装:
        $gzip -d mongodb-linux-x86_64-2.6.4.gz (直接解压即可)
        
        所有可执行文件在bin目录下
        或者也可以使用源码安装,因为我需要使用源码自带的mongodb c++ api,所以本次把源码安装的过程也记录下;
        (1)    下载安装scons
        scons: http://sourceforge.net/projects/scons/files/scons/2.3.3/:http://sourceforge.net/projects/scons/files/scons/2.3.3/
        $tar zxvf scons-2.3.3.tar.gz 
        $cd scons
        $python setup.py install
        
        (2)    编译mongodb
        $tar -xf mongodb-src-r2.6.4.tar.tar
        $cd mongodb-src-r2.6.4 & scons all
        根据帮助说明mongodb-src-r2.6.4/docs/build.md,scons 的目标文件为mongod,mongos,mongo,mongoclient,发现没有生成mongoclient,why?
 
        (3)    下载boost,官方推荐使用1.49.0
        boost:http://www.boost.org/:http://www.boost.org/
        $tar zxvf boost_1_49_0.tar.gz
        $cd boost_1_49_0
        $./bootstrap.sh
        $./b2 install
 
        (4)    下载mongo-cxx-drive,目前2.6是稳定版
         mongo-cxx-drive: git clone https://github.com/mongodb/mongo-cxx-driver.git:https://github.com/mongodb/mongo-cxx-driver.git
         $cd mongo-cxx-driver
         $scons all   
          
        libmongoclient.a便是我们使用C++操作数据库所需要的库文件了
        
    使用:
        $cd  bin & mkdir ../data
        $./mongod --dbpath ../data
        
        默认27017端口启动,指定数据目录../data.
        $./mongo
        
        本地客户端启动,并测试,保存一个简单的json对象,通过findOne获取db.foo第一个,通过find获取db.foo所有文档。
        
        其他,通过help可查看其他操作
        

    使用c++ drive api
        以mongo-cxx-driver/src/mongo/client/examples/clientTest为例,
        g++ -g -o clientTest clientTest.cpp -I../../../ -I/share/source/mongodb-src-r2.6.4/src/third_party -I/share/source/mongodb-src-r2.6.4/src/third_party/boost/boost/thread/pthread -L/share/git/easy/dep/mongo-cxx-driver/build/linux2/normal -L/share/source/mongodb-src-r2.6.4/build/linux2/normal/third_party/boost -L/usr/local/lib -lmongoclient -lboost_filesystem -lboost_system -lboost_thread -lboost_regex
        其编译过程中,需要从mongo-cxx-driver/build/linux2/normal/中拷贝version.h,config.h,error_codes.h,error_codes.cpp.
        
    参考:
        mongo入门系列:http://blog.csdn.net/mengxiangyue/article/details/8943573
        关于Mongodb的全面总结,学习mongodb的人,可以从这里开始!         :http://blog.csdn.net/jakenson/article/details/7060431
        mongodb api:http://api.mongodb.org/
        c++ mongodb driver:http://docs.mongodb.org/ecosystem/drivers/cpp/
        记录一下源码安装MongoDB的过程 :http://blog.csdn.net/tys1986blueboy/article/details/7013163
 
 
http://www.sulabs.net/?p=359

MongoDB 是一个高性能分布式文件存储数据库,通常采用官方的二进制包进行安装,整理记录下手工编译的方法。
准备工作:
CentOS 6.x 64位系统,建议采用多核CPU,在多核并行编译时,物理内存不能少于8G,否则会频繁使用交换分区,导致编译时间过长。在 Xeon E3 1230 V2/8G 配置下编译大概耗时30分钟。

1.安装依赖的软件包
# yum install pcre-devel python-devel scons

2.从官方下载最新的源码包
http://www.mongodb.org/downloads

3.使用Py 编译工具scons 进行编译并安装
# tar zxf mongdb-src.tar.gz
//解压
# cd mongodb-src
# scons -j 8 all               //使用8线程并行编译,推荐使用CPU核心数
# scons –prefix=/usr/local/mongo install
// 如果需要lib库和include头文件 需要加上 –full 参数如下:
# scons –prefix=/usr/local/mongo –full install

4.添加mongodb 用户和配置
# useradd mongodb -M -s /sbin/nologin

//创建目录,根据需要进行自定义
# mkdir -pv /etc/mongo                      //配置文件路径
# mkdir -pv /var/lib/mongo                 //数据存储路径
# mkdir -pv /var/log/mongo                //日志文件路径
# mkdir -pv /var/run/mongodb            //Pid 路径

//将源码包中的配置文件复制到 /etc/mongo 下
# cp mongodb-src/rpm/mongod.conf /etc/mongo

//给予日志和数据路径mongodb用户组访问权限
# chown -R mongodb.mongodb /var/log/mongodb
# chown -R mongodb.mongodb /var/lib/mongodb

5. 编辑配置文件
# vi /etc/mongo/mongod.conf
—–配置参考下面的路径进行或查阅配置说明文档——
dbpath = /var/lib/mongo
logpath = /var/log/mongo
pidfilepath = /var/run/mongodb/mongod.pid
directoryperdb = true
logappend = true
noauth = true
port = 27017
maxConns = 1024
fork = true
rest = true
quota = true
quotaFiles = 1024
nssize = 16
—–配置参考结束——

6.配置开机启动文件
//将下列脚本保存为 mongod 并存放在/etc/rc.d/init.d/ 下,并给与执行权限

1 #!/bin/sh
2 #
3 # mongodb      init file for starting up the MongoDB server
4 #
5 # chkconfig:   - 20 80
6 # description: Starts and stops the MongDB daemon that handles all \
7 #              database requests.
8  
9 # Source function library.
10 . /etc/rc.d/init.d/functions
11  
12 exec="/usr/local/mongo/bin/mongod"
13 prog="mongod"
14 logfile="/var/log/mongodb/mongodb.log"
15 options=" -f /etc/mongo/mongod.conf"
16  
17 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
18  
19 lockfile="/var/lock/subsys/mongod"
20  
21 start() {
22     [ -x $exec ] || exit 5
23     echo -n $"Starting $prog: "
24     daemon --user mongodb "$exec --quiet $options run >> $logfile 2>&1 &"
25     retval=$?
26     echo
27     [ $retval -eq 0 ] && touch $lockfile
28     return $retval
29 }
30  
31 stop() {
32     echo -n $"Stopping $prog: "
33     killproc $prog
34     retval=$?
35     echo
36     [ $retval -eq 0 ] && rm -f $lockfile
37     return $retval
38 }
39  
40 restart() {
41     stop
42     start
43 }
44  
45 reload() {
46     restart
47 }
48  
49 force_reload() {
50     restart
51 }
52  
53 rh_status() {
54     # run checks to determine if the service is running or use generic status
55     status $prog
56 }
57  
58 rh_status_q() {
59     rh_status >/dev/null 2>&1
60 }
61  
62  
63 case "$1" in
64     start)
65         rh_status_q && exit 0
66         $1
67         ;;
68     stop)
69         rh_status_q || exit 0
70         $1
71         ;;
72     restart)
73         $1
74         ;;
75     reload)
76         rh_status_q || exit 7
77         $1
78         ;;
79     force-reload)
80         force_reload
81         ;;
82     status)
83         rh_status
84         ;;
85     condrestart|try-restart)
86         rh_status_q || exit 0
87         restart
88         ;;
89     *)
90         echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
91         exit 2
92 esac
93 exit $?

# chkconfig –add mongod
//设置为开机启动
# service mongod start
// 进行启动并测试27017端口是否开放,如果配置有误,请查阅 /var/log/mongo  下的日志输出信息

7. PHP的MongoDB 扩展安装
从 http://pecl.php.net/  搜索mongo 并获取最新稳定版的扩展包
# tar zxf mongo-1.3.0.tgz
# cd mongo-1.3.0
# /usr/local/php/bin/phpize
# ./configure –with-php-config=/usr/local/php/bin/php-config   // 注意php-config 安装路径
# make && make install
//解压并配置进行安装

编辑php.ini 配置文件在末行添加
extension=mongo.so
//如果之前从未安装其它扩展,需要先指定extension_dir 扩展目录
完成后重启PHP,查看phpinfo 有mongo 的项目出现则安装成功.

 

 

 

 http://duoyun.org/topic/51556970ca60a10d420148e4

java 简单,略过。
python

$ git clone git://github.com/mongodb/mongo-python-driver.git pymongo
$ cd pymongo/
$ python setup.py install

c++
操作系统环境:centos 6.2 final
安装boost库,推荐1.49版本。
cd boost_1_49_0
./bootstrap.sh

./b2

./b2 install

下载2.2最新驱动
wget http://downloads.mongodb.org/cxx-driver/mongodb-linux-x86_64-v2.2-latest.tgz
tar zxf mongodb-linux-x86_64-v2.2-latest.tgz
cd mongo-cxx-driver-v2.2
yum -y install scons
scons
scons install
ldconfig /usr/local/lib
安装成功。
测试
cat tutorial.cpp

#include<cstdlib>#include<iostream>#include"mongo/client/dbclient.h"void run(){
  mongo::DBClientConnection c;
  c.connect("localhost");}int main(){try{
    run();
    std::cout <<"connected ok"<< std::endl;}catch(const mongo::DBException&e ){
    std::cout <<"caught "<< e.what()<< std::endl;}return EXIT_SUCCESS;}

[root@ccj mongo-cxx-driver-v2.2]#g++ tutorial.cpp -lmongoclient -lboost_thread -lboost_filesystem -lboost_program_options
[root@ccj mongo-cxx-driver-v2.2]# ./a.out
connected ok

注意:
在centos 5.6编译报错,g++版本低了,可尝试换成gcc 4.4
$ scons --cxx=g++-4.4 --ldflags=/usr/lib
https://github.com/mongodb/mongo/pull/230

 

 

http://www.huilog.com/?p=117

在centos 5.4上把mongodb 1.4.0编译成rpm包安装

rpm包还是比较好管理和升级的,今天试着把mongodb 1.4.0做成rpm包。

网上的文章比较少,只有自己摸索着做了。

首先需要先做一些准备工作:

安装epel库,这一步可有可无。
wget http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
rpm -ivh epel-release-5-3.noarch.rpm

安装一些相关的rpm,编译或运行mongo需要这些:
yum install -y bzip2-devel python-devel libicu-devel chrpath zlib-devel nspr-devel readline-devel ncurses-devel boost-devel pcre-devel js-devel readline-devel git tcsh scons gcc-c++ glibc-devel js js-devel

还需要将centos 5.4上的boost从1.33升级到1.38,mongodb建议1.34以上,更好的支持高并发情况。如果不升级,编译的时候会有相关的警告信息。

这一块想了很多办法,从官网http://www.boost.org/上下载源码包编译成rpm没有成功,而且版本差异过大,担心会有问题,所以偷了一下懒,直接用网上的src.rpm了。

下载:
wget ftp://195.220.108.108/linux/sourceforge/g/project/gr/gridiron2/support-files/FC10%20source%20RPMs/boost-1.38.0-1.fc10.src.rpm
或:
wget http://mirror.transact.net.au/sourceforge/g/project/gr/gridiron2/support-files/FC10%20source%20RPMs/boost-1.38.0-1.fc10.src.rpm

安装:
rpm -ivh boost-1.38.0-1.fc10.src.rpm

打包:
rpmbuild -ba /usr/src/redhat/SPECS/boost.spec

用刚刚编译的rpm包升级本机的boost:

rpm -Uvh /usr/src/redhat/RPMS/x86_64/boost-1.38.0-1.x86_64.rpm /usr/src/redhat/RPMS/x86_64/boost-devel-1.38.0-1.x86_64.rpm

查看一下:
[root@x64test ~]# rpm -qa | grep boost
boost-devel-1.38.0-1
boost-1.38.0-1

OK了,都是1.38版本的。

还要重新编译pcre,自带的编译时没带–enable-unicode-properties参数,用自带的编译出来的mongdb启动时会提示:
[root@x64test ~]# mongod 
warning: some regex utf8 things will not work.  pcre build doesn’t have –enable-unicode-properties

我们下载src.rpm包重新编译:
[root@x64test ~]# wget http://mirrors.sohu.com/centos/5.4/os/SRPMS/pcre-6.6-2.el5_1.7.src.rpm
[root@x64test ~]# rpm -ivh pcre-6.6-2.el5_1.7.src.rpm 
[root@x64test ~]# vi /usr/src/redhat/SPECS/pcre.spec 
%configure –enable-utf8
改成:
%configure –enable-utf8 –enable-unicode-properties

[root@x64test ~]# rpmbuild -ba /usr/src/redhat/SPECS/pcre.spec

[root@x64test ~]# rpm -Uvh /usr/src/redhat/RPMS/x86_64/pcre-6.6-2.7.x86_64.rpm
[root@x64test ~]# rpm -Uvh /usr/src/redhat/RPMS/x86_64/pcre-devel-6.6-2.7.x86_64.rpm

下面开始编译mongodb 1.4.0:

1) 先下载:
wget http://downloads.mongodb.org/src/mongodb-src-r1.4.0.tar.gz

2) 解压:
tar -xvzf mongodb-src-r1.4.0.tar.gz

3) 按mongo.spec定义的文件名和目录重新做一个压缩包出来:
mv mongodb-src-r1.4.0  mongo-1.4.0 
tar -czf mongo-1.4.0.tar.gz mongo-1.4.0

4) copy到打包目录:
cp mongo-1.4.0/rpm/mongo.spec /usr/src/redhat/SPECS/
cp mongo-1.4.0.tar.gz /usr/src/redhat/SOURCES/

5) mongo.spec有个小bug,还得改下:

vi /usr/src/redhat/SPECS/mongo.spec

找到第71行,将:
/usr/sbin/useradd -M -r -U -d /var/lib/mongo -s /bin/false 
-c mongod mongod > /dev/null 2>&1
换成:
/usr/sbin/useradd -M -r -d /var/lib/mongo -s /bin/false 
-c mongod mongod > /dev/null 2>&1

或者:
/usr/sbin/useradd -M -r -d /var/lib/mongo -s /bin/false 
-c mongod mongod > /dev/null 2>&1 || true

这是一个bug,useradd没有-U这个参数,小写的-u倒是有。不改这个编译完成后,mongo-server会安装不成功。

上面一个更改经过测试没有问题,但是需要确保安装的时候系统内没有mongod用户存在,如果这个用户存在的话还是会报错(rpm -Uvh肯定就不行了)。后面的更改是为解决这个问题的,不过没有测试过。

6) 开始编译打包:
rpmbuild -ba /usr/src/redhat/SPECS/mongo.spec

7) 安装:
cp /usr/src/redhat/RPMS/x86_64/mongo*.rpm .
rpm -ivh mongo*.rpm

安装完成。

此条目发表在Mongodb分类目录。将固定链接加入收藏夹。
 
 

 

 

 

posted @ 2015-03-04 18:57  陳聽溪  阅读(1360)  评论(0)    收藏  举报