epel mongodb will not start on ec2 amazon ami

epel mongodb will not start on ec2 amazon ami  using -'mongodb,amazon-web-services,amazon-ec2'

Using Amazon Linux AMI 2013.09.2 - ami-bba18dd2 (64-bit)

I want to use the mongodb provided by EPEL because it is compiled with SSL support.

[root@domU-12-31-39-02-19-B8 ec2-user]# yum install mongodb-server
  mongodb-server.x86_64 0:2.4.6-1.el6                                           

Dependency Installed:

It seems like it installs with no errors.

When I start the mongod, all I get is this cryptic error.  

[root@domU-12-31-39-02-19-B8 ec2-user]# mongod
mongod --help for help and startup options
mongod: symbol lookup error: mongod: undefined symbol: _ZN7pcrecpp2RE4InitEPKcPKNS_10RE_OptionsE

The only direction I see is to download the binaries directly from mongodb.  Again, I would prefer the EPEL version because it contains ssl support


Is there a way to get the EPEL version to work?

asked Sep 30, 2015 by mcasudhir
0 votes

3 Answers

0 votes

You were absolutely right in recompiling.

The error was caused by libpcre changing the signature of RE::Init() to only take a std::string, rather than a char*. This is fixed if you get a newer version of libpcrecpp, which adds the old interface for backwards compat.

If you're good at deciphering C++ symbols, this is obvious.

[ worr on setzer ] ( ~ ) % nm -D /usr/lib64/libpcrecpp.so.0 | grep Init
0000000000005700 T _ZN7pcrecpp2RE4InitEPKcPKNS_10RE_OptionsE
0000000000005670 T _ZN7pcrecpp2RE4InitERKSsPKNS_10RE_OptionsE

The only difference between the names is Ss vs c, which is indicative of the argument types. Ss means std::string and c means char*.

Hope that gives you a good answer as to why this happened.

answered Sep 30, 2015 by sachin wagh
0 votes

The biggest point was that I wanted the SSL option enabled. I couldn't find any simple answers, so I hope this helps anyone else venturing down this road.

The version from EPEL with the option enabled is built with an incompatible version of pcre-devel the Amazon AMI gets from the amzn1 linux repo.

I simply rebuilt the mongodb binary from the EPEL source RPM and the resulting RPM installed and worked fine.

Had to pull down other packages to do it.

yum install rpm-build redhat-rpm-config gcc  gcc-c++ make yum install openssl-devel snappy-devel v8-devel boost-devel python-devel python-nose scons pcre-devel readline-devel libpcap-devel gperftools-devel ‚Äďy

rpmbuild --rebuild mongodb-2.4.6-1.el6.src.rpm
rpmbuild --rebuild python-pymongo-2.5.2-3.el6.src.rpm 
rpmbuild --rebuild v8- 

The packages are posted publicly for anyone else who struggles with this and to stay consistent with the AGPL license.

It took almost 45 minutes for it to rebuild, so I put up a small repo so that I don't have to rebuild every new instance as well as some instructions if others want to use any of it.

Instructions: http://mongodb.ssl.amzn1.bauman.in

wget http://mongodb.ssl.amzn1.bauman.in/mongodb.ssl.amzn1.bauman.in.repo
sudo mv mongodb.ssl.amzn1.bauman.in.repo /etc/yum.repos.d/mongodb.ssl.amzn1.bauman.in.repo
sudo yum install mongodb-server mongodb python-pymongo python-pymongo-gridfs -y

Repo file: http://mongodb.ssl.amzn1.bauman.in/mongodb.ssl.amzn1.bauman.in.repo

answered Sep 30, 2015 by loknath.ganji
0 votes

This answer is more than 1 year ago, but it seems same problem is still exists. Good news is mongodb.org has a pre-compiled rpm packeages for Amazon Linux. just follows instruction on MongoDB document.

answered Sep 30, 2015 by ashishshukla