簡體   English   中英

在ARM上構建mongo shell 3.2.x(armv7l / arm64 / aarch64) - 分段錯誤

[英]Build mongo shell 3.2.x on ARM (armv7l/arm64/aarch64) - segmentation fault

在過去的幾天里,我嘗試了在Linaro集群上運行Ubuntu 16.04 for ARM64(aarch64)的mongo shell。 我目前正在為ARM體系結構上的meteorjs開發下一個版本的fork。

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

即使這個版本將在所有經過測試的平台和架構(Linux on armv7l,aarch64,amd64)上運行,在編譯期間沒有問題,運行程序的結果也不同。

在amd64上構建后運行mongo命令:

只需運行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

在aarch64 / armv7l上構建后運行mongo命令:

而不是這個,ARM上的輸出只是:

MongoDB shell version: 3.2.6
Segmentation fault (core dumped)

在我看來,TCP連接部分可能會提出“SEGMENTATION FAULT”但我無法調試它。

我很高興有任何幫助來實現這一目標。

在此先感謝湯姆

在運行了更多的嘗試和編譯之后,我更改了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

如果您發出./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行添加“core”。 對於mongod,mongos和mongo來說,它們都包含在構建中。

scons --disable-warnings-as-errors --prefix=/tmp/mongo-build/mongo --js-engine=mozjs core

解決這個問題的一個好方法是將其指向現有數據庫而不是示例數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM