EPEL MongoDB在EC2 Amazon AMI上无法启动

4

使用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支持。
是否有办法让EPEL版本正常工作?
参考链接:https://askubuntu.com/questions/180319/mongod-fails-to-start-with-error-mongod-symbol-lookup-error-mongod-undefined
3个回答

3

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

EPEL版本的选项已启用,但与Amazon AMI从amzn1 linux存储库获取的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


你的回答对我很有帮助,但并不是通过重新编译源代码来解决问题。基本上,需要在系统上安装 pcre,这样一切就恢复正常了,而无需重建或重新编译任何内容。这是我的问题/答案帖子,解释了我解决这个问题的过程。 - Giacomo1968

3
你在重新编译时是完全正确的。
错误是由于libpcre更改了RE::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 与 c,这表明它们所代表的参数类型不同。Ss 表示 std :: string,而 c 表示 char *
希望这能为你解答为什么会发生这种情况。

这个问题可以通过获取更新版本的libpcrecpp来解决。我在将MongoDB从1.8升级到2.4.12时,在Scientific Linux上安装时遇到了“_ZN7pcrecpp2RE4InitEPKcPKNS_10RE_OptionsE”问题。对我有用的解决方法不是重新编译源代码,而是通过“yum install”升级“pcre”。之后,MongoDB 2.4.12如预期般启动。感谢您的见解! - Giacomo1968
这是我的问题/答案帖子,解释了我解决这个问题的过程:链接 - Giacomo1968

0

这个回答已经超过1年了,但似乎同样的问题仍然存在。 好消息是mongodb.org为Amazon Linux提供了预编译的rpm包。只需按照MongoDB文档中的指示进行操作。


mongodb-org软件包不包含所需的SSL支持,这正是我原来遇到的问题。我不得不拉取源代码包并重新编译RPM。 - bauman.space

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接