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.