Jak mogę zbudować MongoDB?

10

Wydaje mi się, że obecnie można to zrobić na dwa sposoby:

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

Usiadłem na mongo-nonx86widelcu. Zainstalowałem zależności zgodnie z opisem w Instalowanie Mongodb w Raspberry Pi i próbowałem zbudować MongoDB przy użyciu scons. Ale pojawia się następujący błąd:

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.

Kompilacja mongopizakończy się przy tym samym pliku z tym samym komunikatem o błędzie.

W międzyczasie zdałem sobie sprawę, że mój system był dramatycznie przestarzały. Ale nawet aktualizacja do najnowszych wersji nie rozwiązała problemu. W tym momencie zakładam, że rzeczywiście jest to problem z wolną pamięcią. Biorąc pod uwagę, że mam tylko wczesny model 256 MB.

Der Hochstapler
źródło
może występować problem z pamięcią - czy skonfigurowałeś podział pamięci? Ile masz wolnej pamięci przed uruchomieniem gcc?
abolotnov
@abolotnov: Odpowiem na te pytania, gdy tylko moja kompilacja mongopizostanie zakończona; D W tej chwili
badam
@abolotnov: Podział pamięci to 224/32. free -mpokazuje 177 za darmo.
Der Hochstapler
1
Plik binarny Mongodb znajduje się w communityrepozytorium w dystrybucji Arch ARM.
Jivings
@Jivings: Być może warto spróbować użyć Arch, ponieważ nigdzie się nie kompiluję w wydaniu Wheezy.
Der Hochstapler

Odpowiedzi:

9

Należy pamiętać, że ta odpowiedź dotyczyła tylko 256 MB wersji Raspberry Pi. Wersja 512 MB powinna mieć wystarczającą ilość wolnej pamięci do skompilowania MongoDB bez dodatkowych dostosowań

Czytając ogólnie o małej ilości pamięci, znalazłem sugestie, aby po prostu zwiększyć przestrzeń wymiany, aby naprawić sytuację.

Tak więc, po przeczytaniu odpowiedzi niedźwiedzia , byłem przekonany, że może to być ważna opcja. Jednak zdecydowałem się dodać przestrzeń wymiany bez korzystania z zRAM .

Bo ja nigdy nie mogę zapamiętać cały proces cokolwiek , I przestrzegać instrukcji Linux Dodaj plik wymiany - Poradniki przez Nixcraft.

  1. Utwórz przestrzeń wymiany plików / pamięci:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. Ustaw przestrzeń jako obszar wymiany:

    sudo mkswap /swapfile1
    
  3. Zezwalaj tylko rootowi na odczyt / zapis:

    sudo chmod 0600 /swapfile1
    
  4. Włącz obszar wymiany:

    sudo swapon /swapfile1
    

Potem sconszakończyłem się sukcesem i mogłem zainstalować MongoDB. W końcu użyłem mongopiwidelca.

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
Der Hochstapler
źródło
Miałem ten sam problem na modelu B i to rozwiązanie zadziałało. Thx
Mircea Nistor
DZIĘKUJEMY TAK DUŻO OLIWKI. Chciałbym zaznaczyć, że Model B nie miał dla mnie wystarczającej ilości wolnej pamięci i że po wykonaniu tej porady instalacja działała. Czy mógłbyś zmodyfikować notatkę w tej odpowiedzi, aby uznać, że dwie osoby z modelem B muszą postępować zgodnie z Twoimi instrukcjami?
Matthew Moisen
@MatthewMoisen: Miałem ten problem również z modelem B. Ale moja była pierwszą wersją z 256 MB pamięci RAM. Tylko druga wersja ma 512 MB.
Der Hochstapler
1

Mam opcję, która może działać. Jednak prawdopodobnie znacznie spowolni proces kompilacji.

Musisz skonfigurować ZRAM na swoim Pi. Zasadniczo kompresuje zużytą pamięć RAM, aby umożliwić użycie więcej, ale kosztem większego zużycia procesora.

Postępujemy zgodnie z instrukcjami tutaj, ale umieszczę je w poście, aby ułatwić przeglądanie.

Najpierw musisz być rootem, ponieważ wiele z tych poleceń wymaga rootowania:

sudo su

Następnie utwórz plik /etc/init.d/zramo następującej treści:

#!/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

Jeśli chcesz w prosty sposób uzyskać go na pi: sudo wget http://vps1.berboe.co.uk/zram.sh -O /etc/init.d/zram.

Następnie dodaj skrypt do listy start-at-boot, wykonując:

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

Następnie uruchom ponownie i wszystko powinno działać.

Po ponownym uruchomieniu komputera, uruchom polecenie: swapon -s. Dane wyjściowe powinny wyglądać mniej więcej tak:

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

Teraz ZRAM jest zainstalowany i jeśli spróbujesz skompilować tak, jak to zrobiłeś, zanim zadziała.

hifkanotiks
źródło
Dzięki za tę sugestię! Po prostu dodałem dodatkową przestrzeń wymiany bez użycia na razie zram. Próbuję teraz kontynuować kompilację.
Der Hochstapler,