Comment puis-je construire MongoDB?

10

Il me semble qu'il y a actuellement deux façons de procéder:

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

Je me suis contenté de la mongo-nonx86fourchette. J'ai installé les dépendances comme décrit dans Installer Mongodb dans Raspberry Pi et j'ai essayé de construire MongoDB en utilisant scons. Mais j'obtiens l'erreur suivante:

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 compilation mongopis'arrêtera exactement dans le même fichier avec le même message d'erreur.

En attendant, j'ai réalisé que mon système était dramatiquement dépassé. Mais même la mise à niveau vers les dernières versions n'a pas résolu le problème. À ce stade, je suppose que c'est effectivement un problème de mémoire libre. Étant donné que je n'ai qu'un premier modèle de 256 Mo.

Der Hochstapler
la source
pourrait être un problème de mémoire - avez-vous configuré la répartition de la mémoire? De combien de mémoire libre disposez-vous avant d'exécuter gcc?
abolotnov
@abolotnov: J'y répondrai dès que ma compilation de mongopisera terminée; D Comme j'explore cette avenue en ce moment
Der Hochstapler
@abolotnov: La répartition de la mémoire est de 224/32. free -mmontre 177 gratuit.
Der Hochstapler
1
Le binaire Mongodb se trouve dans le communityréférentiel de la distribution Arch ARM.
Jivings
@Jivings: Cela pourrait valoir la peine d'utiliser Arch, car je ne vais nulle part le compiler sur la version Wheezy.
Der Hochstapler

Réponses:

9

Veuillez noter que cette réponse ne s'applique qu'à la version 256 Mo du Raspberry Pi. La version 512 Mo devrait avoir suffisamment de mémoire libre pour compiler MongoDB sans ajustements supplémentaires

En lisant sur les situations de faible mémoire en général, j'ai trouvé des suggestions pour simplement augmenter l'espace de swap pour remédier à la situation.

Donc, après avoir lu la réponse de Bearbin , j'étais convaincu que cela pouvait être une option valable. Cependant, j'ai choisi d'ajouter de l'espace de swap sans utiliser zRAM .

Parce que je ne me souviens jamais du processus complet pour rien , j'ai suivi le guide Linux Add a Swap File - Howto de Nixcraft.

  1. Créer un fichier d'échange / espace de stockage:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. Configurer l'espace comme zone d'échange:

    sudo mkswap /swapfile1
    
  3. Autoriser uniquement root à lire / écrire:

    sudo chmod 0600 /swapfile1
    
  4. Activer la zone d'échange:

    sudo swapon /swapfile1
    

Après, sconsterminé avec succès et j'ai pu installer MongoDB. J'ai mongopifinalement utilisé la fourche.

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
la source
J'ai eu le même problème sur un modèle B et cette solution a fonctionné. Thx
Mircea Nistor
MERCI BEAUCOUP OLIVER. Je voudrais souligner que le modèle B n'avait pas suffisamment de mémoire libre pour moi et qu'après avoir suivi ce conseil, l'installation a fonctionné. Pourriez-vous modifier votre note dans cette réponse pour considérer que deux personnes avec le modèle B devaient suivre vos étapes?
Matthew Moisen
@MatthewMoisen: J'ai également eu ce problème avec un modèle B. Mais la mienne a été la première révision avec 256 Mo de RAM. Seule la deuxième révision a obtenu 512 Mo.
Der Hochstapler
1

J'ai une option qui pourrait fonctionner. Cependant, cela ralentira probablement considérablement votre processus de compilation.

Vous devez configurer ZRAM sur votre Pi. Fondamentalement, il compresse la RAM utilisée pour vous permettre d'en utiliser plus, mais au prix d'une utilisation plus importante du processeur.

Nous suivrons les instructions ici mais je les mettrai dans le message pour une visualisation facile.

Donc, tout d'abord, vous devez être root car beaucoup de ces commandes nécessitent root:

sudo su

Ensuite, créez un fichier appelé /etc/init.d/zramavec le contenu suivant:

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

Si vous voulez un moyen facile d'obtenir sur le Pi: sudo wget http://vps1.berboe.co.uk/zram.sh -O /etc/init.d/zram.

Ensuite, ajoutez votre script à la liste de démarrage au démarrage en faisant:

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

Redémarrez ensuite et tout devrait fonctionner.

Après le redémarrage, exécutez la commande suivante : swapon -s. La sortie devrait ressembler à ceci:

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

Maintenant, ZRAM est installé et si vous essayez de compiler comme vous l'avez fait avant, cela pourrait fonctionner.

hifkanotiks
la source
Merci pour cette suggestion! J'ai simplement ajouté un espace de swap supplémentaire sans utiliser zram pour l'instant. Essayer de continuer la compilation maintenant.
Der Hochstapler