在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:
先下载:
wget http://downloads.mongodb.org/src/mongodb-src-r1.4.0.tar.gz
解压:
tar -xvzf mongodb-src-r1.4.0.tar.gz
按mongo.spec定义的文件名和目录重新做一个压缩包出来:
mv mongodb-src-r1.4.0 mongo-1.4.0
tar -czf mongo-1.4.0.tar.gz mongo-1.4.0
- copy到打包目录:
cp mongo-1.4.0/rpm/mongo.spec /usr/src/redhat/SPECS/
cp mongo-1.4.0.tar.gz /usr/src/redhat/SOURCES/
- 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肯定就不行了)。后面的更改是为解决这个问题的,不过没有测试过。
- 开始编译打包:
rpmbuild -ba /usr/src/redhat/SPECS/mongo.spec
- 安装:
cp /usr/src/redhat/RPMS/x86_64/mongo.rpm .
rpm -ivh mongo.rpm
安装完成。