¿Cómo puedo construir MongoDB?

10

Me parece que actualmente hay dos formas de hacerlo:

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

Me conformé con el mongo-nonx86tenedor. Instalé las dependencias como se describe en Instalar Mongodb en Raspberry Pi e intenté construir MongoDB usando scons. Pero me sale el siguiente error:

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 compilación mongopise detendrá exactamente en el mismo archivo con el mismo mensaje de error.

Mientras tanto, me di cuenta de que mi sistema estaba dramáticamente desactualizado. Pero incluso actualizar a las últimas versiones no resolvió el problema. En este punto, supongo que de hecho es un problema con la memoria libre. Dado que solo tengo un modelo temprano de 256 MB.

Der Hochstapler
fuente
podría ser un problema de memoria: ¿ha configurado la división de memoria? ¿Cuánta memoria libre tienes antes de ejecutar gcc?
abolotnov
@abolotnov: las responderé tan pronto como mongopitermine mi compilación ; D Mientras estoy explorando esa avenida ahora mismo
Der Hochstapler
@abolotnov: la división de memoria es 224/32. free -mmuestra 177 gratis.
Der Hochstapler
1
El binario de Mongodb está en el communityrepositorio en la distribución Arch ARM.
Jivings
@Jivings: Vale la pena intentar usar Arch, porque no voy a ir a ninguna parte compilándolo en el lanzamiento de Wheezy.
Der Hochstapler

Respuestas:

9

Tenga en cuenta que esta respuesta solo se aplica a la versión de 256 MB de Raspberry Pi. La versión de 512 MB debería tener suficiente memoria libre para compilar MongoDB sin ajustes adicionales

Mientras leía sobre situaciones de poca memoria en general, encontré sugerencias para simplemente aumentar el espacio de intercambio para remediar la situación.

Entonces, después de leer la respuesta de bearbin , estaba convencido de que esta podría ser una opción válida. Sin embargo, opté por agregar espacio de intercambio sin utilizar zRAM .

Como nunca recuerdo el proceso completo de nada , seguí la guía Linux Add a Swap File - Howto de Nixcraft.

  1. Crear archivo de intercambio / espacio de almacenamiento:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. Configure el espacio como área de intercambio:

    sudo mkswap /swapfile1
    
  3. Solo permita que la raíz lea / escriba:

    sudo chmod 0600 /swapfile1
    
  4. Habilitar área de intercambio:

    sudo swapon /swapfile1
    

Luego, se sconscompletó con éxito y pude instalar MongoDB. Usé el mongopitenedor al final.

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
fuente
Tuve el mismo problema en un modelo B y esta solución funcionó. Thx
Mircea Nistor
MUCHAS GRACIAS OLIVER. Me gustaría señalar que el Modelo B no tenía suficiente memoria libre para mí y que después de seguir este consejo la instalación funcionó. ¿Le importaría alterar su nota en esta respuesta para considerar que dos personas con el Modelo B necesitaban seguir sus pasos?
Matthew Moisen
@MatthewMoisen: También tuve este problema con un Modelo B. Pero la mía fue la primera revisión con 256 MB de RAM. Solo la segunda revisión obtuvo 512 MB.
Der Hochstapler
1

Tengo una opción que podría funcionar. Sin embargo, probablemente disminuirá drásticamente su proceso de compilación.

Necesitas configurar ZRAM en tu Pi. Básicamente, comprime la RAM utilizada para permitirle usar más, pero a costa de un mayor uso de la CPU.

Seguiremos las instrucciones aquí, pero las pondré en la publicación para facilitar su visualización.

Primero, debes ser root ya que muchos de estos comandos requieren root:

sudo su

Luego, cree un archivo llamado /etc/init.d/zramcon los siguientes contenidos:

#!/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 quieres una manera fácil de obtener en el Pi: sudo wget http://vps1.berboe.co.uk/zram.sh -O /etc/init.d/zram.

Luego, agregue su script a la lista de inicio en el arranque haciendo:

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

Luego reinicie y todo debería funcionar.

Después del reinicio, ejecute este comando: swapon -s. La salida debería ser algo así:

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

Ahora, ZRAM está instalado y si intenta compilar como lo hizo antes, podría funcionar.

hifkanotiks
fuente
Gracias por esta sugerencia! Simplemente he agregado espacio de intercambio adicional sin utilizar zram por ahora. Intentando continuar compilando ahora.
Der Hochstapler