MongoDB를 어떻게 만들 수 있습니까?


10

현재이 문제를 해결하는 두 가지 방법이있는 것 같습니다.

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

나는 mongo-nonx86포크에 정착했다 . Raspberry Pi에 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동일한 오류 메시지와 함께 동일한 파일에서 컴파일 이 중지됩니다.

그동안 시스템이 오래되었다는 것을 깨달았습니다. 그러나 최신 버전으로 업그레이드해도 문제가 해결되지 않았습니다. 이 시점에서 실제로 메모리 여유 공간에 문제가 있다고 가정합니다. 초기 256MB 모델 만 있다고 가정합니다.


메모리 문제 일 수 있습니다-메모리 분할을 구성 했습니까? gcc를 실행하기 전에 얼마나 많은 여유 메모리가 있습니까?
abolotnov 2013

@abolotnov : 편집 mongopi이 완료 되 자마자 답변 해 드리겠습니다 .D 지금 바로 그 길을 탐험하고 있습니다.
Der Hochstapler

@abolotnov : 메모리 분할은 224/32입니다. free -m177 무료 보여줍니다.
Der Hochstapler

1
Mongodb 바이너리는 communityArch ARM 배포판 의 저장소에 있습니다.
Jivings 2013

@Jivings : Wheezy 릴리스에서 컴파일하지 않아도 Arch를 사용할 수 있습니다.
Der Hochstapler

답변:


9

이 답변은 256MB 버전의 Raspberry Pi에만 적용됩니다. 512MB 버전에는 추가 조정없이 MongoDB를 컴파일 할 수있는 충분한 여유 메모리가 있어야합니다.

일반적으로 메모리 부족 상황에 대해 읽는 동안 스왑 공간을 늘려 상황을 해결하는 제안을 찾았습니다.

따라서 bearbin의 답변 을 읽은 후 이것이 유효한 옵션 일 수 있다고 확신했습니다. 그러나 zRAM 사용 하지 않고 스왑 공간을 추가하기로 결정했습니다 .

나는 무엇이든 에 대한 전체 프로세스를 기억할 수 없기 때문에 나는 리눅스 스왑 파일 추가 – Howto by Nixcraft 가이드 를 따랐다.

  1. 스왑 파일 / 저장 공간 만들기 :

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. 스왑 영역으로 공간을 설정하십시오.

    sudo mkswap /swapfile1
    
  3. 루트 만이 읽기 / 쓰기를 허용하십시오 :

    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

너무 고마워 올리버. 모델 B에 충분한 여유 메모리가 없었으며이 조언을 따른 후 설치가 작동했음을 지적하고 싶습니다. 이 답변에서 메모를 변경하여 모델 B를 가진 두 사람이 단계를 따라야한다고 생각 하시겠습니까?
Matthew Moisen 2016 년

@ MatthewMoisen : Model B 에서도이 문제가 발생했습니다. 그러나 광산은 256MB RAM의 첫 번째 개정판이었습니다. 두 번째 개정판 만 512MB를 갖습니다.
Der Hochstapler 2016 년

1

작동 할 있는 옵션이 있습니다 . 그러나 컴파일 프로세스 속도가 크게 느려질 수 있습니다.

Pi에서 ZRAM을 설정해야합니다. 기본적으로 사용되는 RAM을 압축하여 더 많이 사용할 수 있지만 더 많은 CPU 사용 비용이 발생합니다.

여기서 지침을 따르지만 쉽게 볼 수 있도록 게시물에 넣겠습니다.

따라서 먼저 많은 명령에 루트가 필요하므로 루트가되어야합니다.

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

Pi에서 쉽게 얻을 수있는 방법을 원한다면 : 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.