如何构建MongoDB?


10

在我看来,目前有两种解决方法:

  1. https://github.com/skrabban/mongo-nonx86
  2. https://github.com/RickP/mongopi

我安顿了mongo-nonx86叉子。我按照Raspberry Pi中的Install Mongodb中的说明安装了依赖项,并尝试使用来构建MongoDB scons。但我收到以下错误:

generate_buildinfo(["build/buildinfo.cpp"], ['\n#include <string>\n#include <boost/version.hpp>\n\n#include "mongo/util/version.h"\n\nnamespace mongo {\n    const char * gitVersion() { return "%(git_version)s"; }\n    std::string sysInfo() { return "%(sys_info)s BOOST_LIB_VERSION=" BOOST_LIB_VERSION ; }\n}  // namespace mongo\n'])
gcc -o build/linux2/normal/third_party/pcre-8.30/pcre_exec.o -c -fPIC -fno-strict-aliasing -Wstrict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Wcast-align -Winvalid-pch -O3 -DBOOST_ALL_NO_LIB -D_SCONS -DMONGO_EXPOSE_MACROS -DSUPPORT_UTF8 -D_FILE_OFFSET_BITS=64 -DJS_C_STRINGS_ARE_UTF8 -DMONGO_HAVE_HEADER_UNISTD_H -DMONGO_HAVE_EXECINFO_BACKTRACE -DHAVE_SYNC_FETCH_AND_ADD -DALIGNMENT_IMPORTANT -DHAVE_BSWAP32 -DHAVE_BSWAP64 -DHAVE_CONFIG_H -Ibuild/linux2/normal/third_party/boost -Isrc/third_party/boost -Ibuild/linux2/normal/third_party/pcre-8.30 -Isrc/third_party/pcre-8.30 -Ibuild/linux2/normal -Isrc -Ibuild/linux2/normal/mongo -Isrc/mongo src/third_party/pcre-8.30/pcre_exec.c
gcc: internal compiler error: Killed (program cc1)
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions.
scons: *** [build/linux2/normal/third_party/pcre-8.30/pcre_exec.o] Error 4
scons: building terminated because of errors.

编译mongopi将在具有相同错误消息的完全相同的文件处停止。

同时,我意识到我的系统已经过时了。但是,即使升级到最新版本也无法解决问题。在这一点上,我假设这确实是空闲内存的问题。鉴于我只有一个早期的256 MB模型。


可能是内存问题-您是否配置了内存拆分?运行gcc之前,您有多少可用内存?
abolotnov

@abolotnov:我的汇编mongopi完成后,我会尽快回答这些问题; D正在探索这一途径时
Der Hochstapler 2013年

@abolotnov:内存分割为224/32。free -m显示177免费。
Der Hochstapler 2013年

1
Mongodb二进制文件位于communityArch ARM发行版的存储库中。
Jivings

@Jivings:使用Arch可能值得一试,因为在Wheezy发行版中我无法编译它。
Der Hochstapler

Answers:


9

请注意,此答案仅适用于256 MB版本的Raspberry Pi。512 MB版本应具有足够的可用内存来编译MongoDB,而无需进行其他调整

在阅读有关低内存情况的一般信息时,我发现了一些建议,可以简单地增加交换空间来补救这种情况。

因此,在阅读了Bearbin的答案之后,我确信这可能是一个有效的选择。但是,我选择使用zRAM来添加交换空间。

因为我永远都不记得任何事情的完整过程,所以我遵循了Nixcraft 的指南Linux Add a Swap File – Howto

  1. 创建交换文件/存储空间:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. 设置空间作为交换区域:

    sudo mkswap /swapfile1
    
  3. 仅允许root读取/写入:

    sudo chmod 0600 /swapfile1
    
  4. 启用交换区域:

    sudo swapon /swapfile1
    

之后,scons成功完成,我能够安装MongoDB。最后我用了mongopi叉子。

db level locking enabled: 1
mongod --help for help and startup options
Sun Feb 10 13:05:33
Sun Feb 10 13:05:33 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Sun Feb 10 13:05:33
Sun Feb 10 13:05:33 [initandlisten] MongoDB starting : pid=2182 port=27017 dbpath=/data/db/ 32-bit host=raspberrypi
Sun Feb 10 13:05:33 [initandlisten]
Sun Feb 10 13:05:33 [initandlisten] ** NOTE: This is a development version (2.1.1) of MongoDB.
Sun Feb 10 13:05:33 [initandlisten] **       Not recommended for production.
Sun Feb 10 13:05:33 [initandlisten]
Sun Feb 10 13:05:33 [initandlisten] ** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
Sun Feb 10 13:05:33 [initandlisten] **       see http://blog.mongodb.org/post/137788967/32-bit-limitations
Sun Feb 10 13:05:33 [initandlisten] **       with --journal, the limit is lower
Sun Feb 10 13:05:33 [initandlisten]
Sun Feb 10 13:05:33 [initandlisten] db version v2.1.1, pdfile version 4.5
Sun Feb 10 13:05:33 [initandlisten] git version: f457ff42ec37f2562d1a5ff06b4d96a861414c94
Sun Feb 10 13:05:33 [initandlisten] build info: Linux raspberrypi 3.2.27+ #250 PREEMPT Thu Oct 18 19:03:02 BST 2012 armv6l BOOST_LIB_VERSION=1_49
Sun Feb 10 13:05:33 [initandlisten] options: {}
Sun Feb 10 13:05:34 [initandlisten] waiting for connections on port 27017
Sun Feb 10 13:05:34 [websvr] admin web console waiting for connections on port 28017

我在模型B上遇到了相同的问题,并且此解决方案有效。Thx
Mircea Nistor 2013年

非常感谢您。我想指出,Model B没有足够的可用内存供我使用,在遵循了此建议之后,安装工作开始了。您介意更改此答案中的注释以考虑到需要两个具有模型B的人来执行您的步骤吗?
Matthew Moisen

@MatthewMoisen:我也遇到了模型B的问题。但是我的是第一个带有256 MB RAM的版本。仅第二修订版具有512 MB。
Der Hochstapler 2013年

1

我有一个选项,威力工作。但是,这可能会大大减慢您的编译过程。

您需要在Pi上设置ZRAM。基本上,它压缩已使用的RAM以允许您使用更多的RAM,但是以更多的CPU使用为代价。

我们将按照此处的说明进行操作但为了便于查看,我会将其张贴在帖子中。

所以首先,您需要成为root用户,因为其中许多命令都需要root用户:

sudo su

然后,创建一个/etc/init.d/zram具有以下内容的文件:

#!/bin/bash

### BEGIN INIT INFO
#Provides: zram
#Required-Start:
#Required-Stop:
#Default-Start: 2 3 4 5
#Default-Stop: 0 1 6
#Short-Description: Increased Performance In Linux With zRam (Virtual Swap Compressed in RAM)
#Description: Adapted for Raspian (Rasberry pi) by eXtremeSHOK.com using https://raw.github.com/gionn/etc/master/init.d/zram
### END INIT INFO

start() {
    mem_total_kb=$(grep MemTotal /proc/meminfo | grep -E --only-matching '[[:digit:]]+')

    modprobe zram

    sleep 1
    #only using 50% of system memory, comment the line below to use 100% of system memory
    mem_total_kb=$((mem_total_kb/2))

    echo $((mem_total_kb * 1024)) > /sys/block/zram0/disksize

    mkswap /dev/zram0

    swapon -p 100 /dev/zram0
}

stop() {
    swapoff /dev/zram0
    sleep 1
    rmmod zram
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        sleep 3
        start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        RETVAL=1
esac

如果你想要一个简单的方法来得到它的皮:sudo wget http://vps1.berboe.co.uk/zram.sh -O /etc/init.d/zram

然后,通过执行以下操作,将脚本添加到启动时列表:

chmod +x /etc/init.d/zram
update-rc.d zram defaults

然后重新启动,它应该可以正常工作。

重新引导后,运行以下命令:swapon -s。输出应如下所示:

Filename Type Size Used Priority
/var/swap file 524284 0 -1
/dev/zram0 partition 237900 0 100

现在,已安装ZRAM,并且如果您尝试像以前一样进行编译,则它可能会起作用。


感谢您的建议!我只是简单地添加了额外的交换空间,而暂时不使用zram。现在尝试继续编译。
Der Hochstapler 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.