Как я могу построить MongoDB?

10

Мне кажется, что сейчас есть два пути:

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

Я остановился на mongo-nonx86вилке. Я установил зависимости, как описано в разделе Установка Mongodb в Raspberry Pi, и попытался собрать 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остановится на том же файле с тем же сообщением об ошибке.

Тем временем я понял, что моя система сильно устарела. Но даже обновление до последних версий не решило проблему. На данный момент, я предполагаю, что это действительно проблема со свободной памятью. Учитывая, что у меня только ранняя модель 256 МБ.

Der Hochstapler
источник
может быть проблема с памятью - вы настроили разделение памяти? Сколько свободной памяти у вас есть до запуска gcc?
Аболотнов
@abolotnov: я отвечу на них, как только моя компиляция mongopiбудет завершена; D Поскольку я сейчас исследую эту авеню
Der Hochstapler
@abolotnov: разделение памяти - 224/32. free -mпоказывает 177 бесплатно.
Der Hochstapler
1
Бинарный файл Mongodb находится в communityхранилище в дистрибутиве Arch ARM.
Jivings
@Jivings: Может быть стоит попробовать использовать Arch, потому что я не собираюсь его компилировать в релиз Wheezy.
Der Hochstapler

Ответы:

9

Обратите внимание, что этот ответ относится только к 256-мегабайтной версии Raspberry Pi. Версия 512 МБ должна иметь достаточно свободной памяти для компиляции MongoDB без дополнительных настроек

Читая о ситуации с нехваткой памяти в целом, я нашел предложения просто увеличить пространство подкачки, чтобы исправить ситуацию.

Итак, после прочтения ответа Bearbin , я был убежден, что это может быть правильным вариантом. Однако я решил добавить пространство подкачки без использования zRAM .

Потому что я никогда не могу вспомнить весь процесс что - либо , я последовал за руководство Linux Добавление файла подкачки - Howto по Nixcraft.

  1. Создать файл подкачки / место для хранения:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. Установите пространство как область подкачки:

    sudo mkswap /swapfile1
    
  3. Разрешить только root для чтения / записи:

    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
Der Hochstapler
источник
У меня была такая же проблема на модели B, и это решение сработало. Спасибо
Мирча Нистор
СПАСИБО, ОЛИВЕР. Я хотел бы отметить, что у модели B не было достаточно свободной памяти для меня, и что после следования этому совету установка работала. Не могли бы вы изменить свою заметку в этом ответе, чтобы учесть, что два человека с моделью B должны следовать вашим шагам?
Мэтью Мойсен
@MatthewMoisen: у меня была эта проблема и с моделью B. Но у меня была первая ревизия с 256 МБ оперативной памяти. Только вторая ревизия получила 512 МБ.
Der Hochstapler
1

У меня есть вариант, который может сработать. Однако это, вероятно, значительно замедлит процесс компиляции.

Вам нужно настроить ZRAM на своем Pi. По сути, он сжимает используемую оперативную память, чтобы позволить вам использовать больше, но за счет увеличения загрузки ЦП.

Мы будем следовать инструкциям здесь, но я помещу их в пост для удобного просмотра.

Итак, во-первых, вам нужно быть пользователем root, так как многие из этих команд требуют root:

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 установлен, и если вы попытаетесь скомпилировать, как вы делали, прежде чем он может работать.

hifkanotiks
источник
Спасибо за это предложение! Я просто добавил дополнительное пространство подкачки без использования zram. Попытка продолжить сборку сейчас.
Der Hochstapler