Bagaimana saya bisa membangun MongoDB?

10

Sepertinya saya saat ini ada dua cara untuk melakukan ini:

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

Saya memilih mongo-nonx86garpu. Saya menginstal dependensi seperti yang dijelaskan dalam Instal Mongodb di Raspberry Pi dan mencoba membangun MongoDB menggunakan scons. Tapi saya mendapatkan kesalahan berikut:

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.

Kompilasi mongopiakan berhenti pada file yang sama persis dengan pesan kesalahan yang sama.

Sementara itu, saya menyadari bahwa sistem saya sudah usang secara dramatis. Tetapi bahkan meningkatkan ke versi terbaru tidak menyelesaikan masalah. Pada titik ini, saya berasumsi bahwa ini memang masalah dengan memori bebas. Mengingat bahwa saya hanya memiliki model 256 MB awal.

Der Hochstapler
sumber
bisa jadi masalah memori - sudahkah Anda mengonfigurasi pemisahan memori? Berapa banyak memori bebas yang Anda miliki sebelum menjalankan gcc?
abolotnov
@abolotnov: Saya akan menjawabnya begitu kompilasi saya mongopiselesai; D Saat saya menjelajahi jalan itu sekarang
Der Hochstapler
@abolotnov: Pemecahan memori adalah 224/32. free -mmenunjukkan 177 gratis.
Der Hochstapler
1
Biner Mongodb ada di communityrepositori pada distro Arch ARM.
Jivings
@Jivings: Mungkin patut dicoba untuk menggunakan Arch, karena saya tidak akan mengkompilasinya pada rilis Wheezy.
Der Hochstapler

Jawaban:

9

Harap dicatat bahwa jawaban ini hanya berlaku untuk Raspberry Pi versi 256 MB. Versi 512 MB harus memiliki memori bebas yang cukup untuk mengkompilasi MongoDB tanpa penyesuaian tambahan

Saat membaca tentang situasi dengan memori rendah secara umum, saya menemukan saran untuk hanya menambah ruang swap untuk memperbaiki situasi.

Jadi, setelah membaca jawaban bearbin , saya yakin bahwa ini bisa menjadi pilihan yang valid. Namun, saya memilih untuk menambah ruang swap tanpa menggunakan zRAM .

Karena saya tidak pernah dapat mengingat proses penuh untuk apa pun , saya mengikuti panduan Linux Menambahkan File Swap - Howto oleh Nixcraft.

  1. Buat file swap / ruang penyimpanan:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. Tetapkan ruang sebagai area swap:

    sudo mkswap /swapfile1
    
  3. Hanya izinkan root untuk membaca / menulis:

    sudo chmod 0600 /swapfile1
    
  4. Aktifkan area swap:

    sudo swapon /swapfile1
    

Setelah itu, sconsselesai dengan sukses dan saya bisa menginstal MongoDB. Saya menggunakan mongopigarpu pada akhirnya.

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
sumber
Saya memiliki masalah yang sama pada model B dan solusi ini berhasil. Thx
Mircea Nistor
TERIMA KASIH BANYAK OLIVER. Saya ingin menunjukkan bahwa Model B tidak memiliki memori bebas yang cukup untuk saya dan bahwa setelah mengikuti saran ini instalasi berhasil. Maukah Anda mengubah catatan Anda dalam jawaban ini untuk mempertimbangkan bahwa dua orang dengan Model B perlu mengikuti langkah-langkah Anda?
Matthew Moisen
@ MatthewMoisen: Saya punya masalah dengan Model B juga. Tapi saya adalah revisi pertama dengan 256 MB RAM. Hanya revisi kedua yang mendapat 512 MB.
Der Hochstapler
1

Saya memiliki opsi yang mungkin berfungsi. Namun, itu mungkin akan secara dramatis memperlambat proses kompilasi Anda.

Anda perlu mengatur ZRAM pada Pi Anda. Pada dasarnya kompres RAM yang digunakan untuk memungkinkan Anda menggunakan lebih banyak, tetapi dengan biaya penggunaan CPU yang lebih banyak.

Kami akan mengikuti instruksi di sini tetapi saya akan menempatkannya di pos agar mudah dilihat.

Jadi pertama-tama, Anda harus root karena banyak dari perintah ini membutuhkan root:

sudo su

Kemudian, buat file bernama /etc/init.d/zramdengan konten berikut:

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

Jika Anda ingin cara mudah untuk mendapatkannya di Pi: sudo wget http://vps1.berboe.co.uk/zram.sh -O /etc/init.d/zram.

Kemudian, tambahkan skrip Anda ke daftar mulai saat boot dengan melakukan:

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

Kemudian reboot dan semuanya akan berfungsi.

Setelah reboot, jalankan perintah ini: swapon -s. Outputnya harus agak seperti ini:

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

Sekarang, ZRAM terinstal dan jika Anda mencoba untuk mengkompilasi seperti yang Anda lakukan sebelumnya mungkin berhasil.

hifkanotiks
sumber
Terima kasih atas saran ini! Saya baru saja menambahkan ruang swap tambahan tanpa menggunakan zram untuk saat ini. Mencoba melanjutkan kompilasi sekarang.
Der Hochstapler