Come posso costruire MongoDB?


10

Mi sembra che al momento ci siano due modi per farlo:

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

Ho optato per la mongo-nonx86forchetta. Ho installato le dipendenze come descritto in Installa Mongodb in Raspberry Pi e ho provato a costruire MongoDB usando scons. Ma ottengo il seguente errore:

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.

La compilazione mongopisi interromperà nello stesso file esatto con lo stesso messaggio di errore.

Nel frattempo, mi sono reso conto che il mio sistema era drammaticamente obsoleto. Ma anche l'aggiornamento alle ultime versioni non ha risolto il problema. A questo punto, suppongo che sia effettivamente un problema con la memoria libera. Dato che ho solo un modello iniziale da 256 MB.


potrebbe essere un problema di memoria - hai configurato la suddivisione della memoria? Quanta memoria libera hai prima di eseguire gcc?
abolotnov,

@abolotnov: risponderò non appena la mia compilation mongopisarà completata; D Mentre sto esplorando quella strada proprio ora
Der Hochstapler,

@abolotnov: la suddivisione della memoria è 224/32. free -mmostra 177 gratis.
Der Hochstapler,

1
Il binario di Mongodb è nel communityrepository sulla distro di Arch ARM.
Jivings

@Jivings: potrebbe valere la pena di usare Arch, perché non vado da nessuna parte a compilarlo sulla versione di Wheezy.
Der Hochstapler,

Risposte:


9

Questa risposta si applica solo alla versione da 256 MB di Raspberry Pi. La versione da 512 MB dovrebbe avere memoria libera sufficiente per compilare MongoDB senza ulteriori aggiustamenti

Durante la lettura di situazioni di memoria insufficiente in generale, ho trovato suggerimenti per aumentare semplicemente lo spazio di swap per porre rimedio alla situazione.

Quindi, dopo aver letto la risposta di Bearbin , ero convinto che questa potesse essere un'opzione valida. Tuttavia, ho scelto di aggiungere spazio di swap senza utilizzare zRAM .

Poiché non riesco mai a ricordare l'intero processo per nulla , ho seguito la guida Linux Aggiungi un file di scambio - Howto di Nixcraft.

  1. Crea file di swap / spazio di archiviazione:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. Imposta lo spazio come area di scambio:

    sudo mkswap /swapfile1
    
  3. Consenti solo a root di leggere / scrivere:

    sudo chmod 0600 /swapfile1
    
  4. Abilita area di swap:

    sudo swapon /swapfile1
    

Successivamente, sconscompletato con successo e sono stato in grado di installare MongoDB. Ho usato la mongopiforcella alla fine.

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

Ho avuto lo stesso problema su un modello B e questa soluzione ha funzionato. Thx
Mircea Nistor

GRAZIE TANTO OLIVER. Vorrei sottolineare che il modello B non aveva memoria libera sufficiente per me e che dopo aver seguito questo consiglio l'installazione ha funzionato. Ti dispiacerebbe modificare la tua nota in questa risposta per considerare che due persone con Modello B dovevano seguire i tuoi passi?
Matthew Moisen,

@MatthewMoisen: ho avuto questo problema anche con un modello B. Ma la mia è stata la prima revisione con 256 MB di RAM. Solo la seconda revisione ha ottenuto 512 MB.
Der Hochstapler,

1

Ho un'opzione che potrebbe funzionare. Tuttavia, probabilmente rallenterà notevolmente il processo di compilazione.

Devi configurare ZRAM sul tuo Pi. Fondamentalmente comprime la RAM utilizzata per consentire di utilizzare di più, ma a scapito di un maggiore utilizzo della CPU.

Seguiremo le istruzioni qui, ma le inserirò nel post per una facile visualizzazione.

Quindi, per prima cosa, devi essere root poiché molti di questi comandi richiedono root:

sudo su

Quindi, crea un file chiamato /etc/init.d/zramcon il seguente contenuto:

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

Se volete un modo semplice per farlo sul Pi: sudo wget http://vps1.berboe.co.uk/zram.sh -O /etc/init.d/zram.

Quindi, aggiungi lo script all'elenco di avvio all'avvio facendo:

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

Quindi riavviare e dovrebbe funzionare tutto.

Dopo il riavvio, eseguire questo comando: swapon -s. L'output dovrebbe essere un po 'così:

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

Ora, ZRAM è installato e se provi a compilare come hai fatto prima che potesse funzionare.


Grazie per questo suggerimento! Ho semplicemente aggiunto ulteriore spazio di swap senza utilizzare zram per ora. Prova di continuare la compilazione ora.
Der Hochstapler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.