在过去的几天里,我尝试了很多让在Linaro集群上运行Ubuntu 16.04 for ARM64(aarch64)的mongo shell。我目前正在为ARM架构上的meteorjs开发下一个版本的分支。
TL; DR
虽然mongod(DB)在构建之后运行良好但尚未出现问题,但在构建之后无法获得正在运行的mongo shell [甚至没有javascript(mozjs)支持]。
mkdir -p /tmp/mongo-build cd /tmp/mongo-build git clone --branch "r3.2.6" --depth 1 https://github.com/mongodb/mongo.git cd mongo scons --disable-warnings-as-errors --prefix=/tmp/mongo-build/mongo --js-engine=mozjs mongo mongod
即使这个版本将在所有经过测试的平台和体系结构(ARM on armv7l,aarch64,amd64)上运行,在编译期间没有问题,运行程序时的结果也不同。
只需运行mongo shell并尝试连接到不存在的实例
./mongo mongodb://localhost:5002/sample
这将给出这个输出:
MongoDB shell version: 3.2.6 connecting to: mongodb://localhost:5002/sample 2016-07-05T14:10:23.772+0200 W NETWORK [thread1] Failed to connect to 127.0.0.1:5002, reason: errno:111 Connection refused 2016-07-05T14:10:23.772+0200 E QUERY [thread1] Error: couldn't connect to server localhost:5002, connection attempt failed : connect@src/mongo/shell/mongo.js:223:14 @(connect):1:6 exception: connect failed
而不是这个,ARM上的输出只是:
MongoDB shell version: 3.2.6 Segmentation fault (core dumped)
在我看来,TCP连接部分可能会提出" SEGMENTATION FAULT"但我无法调试。
我很高兴有任何帮助来实现这一目标。
提前致谢 汤姆
答案 0 :(得分:5)
在运行了更多尝试和编译后,我更改了mongodb发布的分支并使用r3.3.9。
使用相同的scons参数时,似乎没有任何问题。我还没有深入研究版本中的细节和变化,但是对于我来说,运行版本是正常的
mkdir -p /tmp/mongo-build cd /tmp/mongo-build git clone --branch "r3.3.9" --depth 1 https://github.com/mongodb/mongo.git cd mongo scons --disable-warnings-as-errors --prefix=/tmp/mongo-build/mongo --js-engine=mozjs mongo mongod
答案 1 :(得分:1)
如果您发出./mongo --help,二进制文件仍然有效,但连接存在处理不存在的数据库的问题。 Seg Faulting而不是在不存在的数据库中优雅地失败。由于空指针取消引用。
违规代码在 /src/mongo/client/mongo_uri_connect.cpp
if (!_user.empty()) {
ret->auth(_makeAuthObjFromOptions(ret->getMaxWireVersion()));
}
return ret;
}
据称这是从3.2.8到3.3.9。
https://jira.mongodb.org/browse/SERVER-23126
另一方面,如果你需要分片添加"核心"到scons线。 对于mongod,mongos和mongo来说,它们都包含在构建中。
scons --disable-warnings-as-errors --prefix=/tmp/mongo-build/mongo --js-engine=mozjs core
解决这个问题的一个好方法是将其指向现有数据库而不是示例数据库。