EPEL MongoDB不会在EC2 Amazon AMI上启动

时间:2014-01-01 20:13:02

标签: mongodb amazon-web-services amazon-ec2

使用Amazon Linux AMI 2013.09.2 - ami-bba18dd2(64位)

我想使用EPEL提供的mongodb,因为它是使用SSL支持编译的。

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

Dependency Installed:
<snip>
Complete!

好像安装没有错误。

当我启动mongod时,我得到的只是这个神秘的错误。

[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

我看到的唯一方向是直接从mongodb下载二进制文件。同样,我更喜欢EPEL版本,因为它包含ssl支持

https://askubuntu.com/questions/180319/mongod-fails-to-start-with-error-mongod-symbol-lookup-error-mongod-undefined

有没有办法让EPEL版本起作用?

3 个答案:

答案 0 :(得分:3)

最重要的一点是我想要启用SSL选项。我找不到任何简单的答案,所以我希望这有助于其他人冒险走这条路。

启用选项的EPEL版本是使用Amazon AMI从amzn1 linux repo获取的pcre-devel的不兼容版本构建的。

我只是从EPEL源RPM重建了mongodb二进制文件,并且安装了RPM并且工作正常。

不得不拉下其他包来做。

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-3.14.5.10-3.el6.src.rpm 

这些软件包会公开发布给其他任何与此相关的人,并与AGPL许可证保持一致。

它需要将近45分钟才能重建,因此我提出了一个小型仓库,这样我就不必重新构建每个新实例以及其他一些指令,如果其他人想要使用它们的话。

说明: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

回复档案:http://mongodb.ssl.amzn1.bauman.in/mongodb.ssl.amzn1.bauman.in.repo

答案 1 :(得分:3)

你完全正确地重新编译。

错误是由libpcreRE::Init()的签名更改为仅std::string而不是char*引起的。如果您获得更新版本的libpcrecpp,则会修复此问题,该版本会添加旧接口以进行向后比较。

如果您擅长破译C ++符号,这很明显。

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

名称之间的唯一区别是Ss vs c,它表示参数类型。 Ss表示std::string,c表示char*

希望能为你提供一个很好的答案。

答案 2 :(得分:0)

这个答案超过1年前,但似乎同样的问题仍然存在。 好消息是mongodb.org有针对Amazon Linux的预编译rpm包。关于MongoDB文档的instruction