ฉันจะสร้าง MongoDB ได้อย่างไร


10

ดูเหมือนว่าฉันจะมีสองทางที่จะไปเกี่ยวกับเรื่องนี้:

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

ฉันตัดสินmongo-nonx86ส้อม ผมติดตั้งการอ้างอิงตามที่อธิบายในการติดตั้ง MongoDB ในราสเบอร์รี่ 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 MB เท่านั้น


อาจเป็นปัญหาหน่วยความจำ - คุณกำหนดค่าการแบ่งหน่วยความจำแล้วหรือยัง คุณมีหน่วยความจำว่างเท่าไหร่ก่อนที่จะรัน gcc
abolotnov

@abolotnov: ฉันจะตอบคำถามเหล่านั้นทันทีที่การรวบรวมmongopiเสร็จสมบูรณ์ D ขณะที่ฉันกำลังสำรวจถนนสายนี้ในตอนนี้
Der Hochstapler

@abolotnov: การแบ่งหน่วยความจำคือ 224/32 free -mแสดง 177 ฟรี
Der Hochstapler

1
Mongodb ไบนารีอยู่ในcommunityพื้นที่เก็บข้อมูลบน Arch ARM distro
Jivings

@Jivings: อาจจะคุ้มค่ากับการใช้ Arch เพราะฉันจะไปด้วยการคอมไพล์ใน Wheezy release
Der Hochstapler

คำตอบ:


9

โปรดทราบว่าคำตอบนี้ใช้กับ Raspberry Pi รุ่น 256 MB เท่านั้น รุ่น 512 MB ควรมีหน่วยความจำว่างเพียงพอในการคอมไพล์ MongoDB โดยไม่มีการปรับปรุงเพิ่มเติม

ในขณะที่อ่านเกี่ยวกับสถานการณ์ความจำต่ำโดยทั่วไปฉันพบคำแนะนำเพื่อเพิ่มพื้นที่สว็อปเพื่อแก้ไขสถานการณ์

ดังนั้นหลังจากอ่านคำตอบของ Bearbinฉันมั่นใจว่านี่อาจเป็นตัวเลือกที่ถูกต้อง แต่ผมเลือกที่จะเพิ่มพื้นที่ swap โดยไม่ต้องใช้zRAM

เพราะฉันไม่สามารถจำกระบวนการทั้งหมดได้เลยฉันจึงทำตามคำแนะนำLinux เพิ่มไฟล์ Swap - Howtoโดย Nixcraft

  1. สร้างไฟล์สลับ / พื้นที่เก็บข้อมูล:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. ตั้งค่าพื้นที่เป็นพื้นที่สลับ:

    sudo mkswap /swapfile1
    
  3. อนุญาตให้รูทอ่าน / เขียนเท่านั้น:

    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

ฉันมีปัญหาเดียวกันกับแบบจำลอง B และวิธีนี้ใช้ได้ผล ขอบคุณ
Mircea Nistor

ขอบคุณมาก ๆ เลยนะโอลิเวอร์ ฉันต้องการจะชี้ให้เห็นว่ารุ่น B ไม่มีหน่วยความจำว่างเพียงพอสำหรับฉันและหลังจากทำตามคำแนะนำนี้แล้วการติดตั้งยังใช้งานได้ คุณจะเปลี่ยนใจบันทึกย่อของคุณในคำตอบนี้เพื่อพิจารณาว่าสองคนที่มีรุ่น B จำเป็นต้องทำตามขั้นตอนของคุณหรือไม่
Matthew Moisen

@ MatewMoisen: ฉันมีปัญหากับ Model B เช่นกัน แต่ฉันเป็นรุ่นแรกที่มี RAM 256 MB เฉพาะรุ่นที่สองที่ได้รับ 512 MB
Der Hochstapler

1

ฉันมีตัวเลือกที่อาจใช้งานได้ อย่างไรก็ตามอาจทำให้กระบวนการรวบรวมของคุณช้าลงอย่างมาก

คุณต้องตั้งค่า ZRAM บน Pi ของคุณ โดยทั่วไปจะบีบอัด RAM ที่ใช้เพื่อให้คุณสามารถใช้งานได้มากขึ้น แต่มีค่าใช้จ่ายในการใช้งาน CPU มากขึ้น

เราจะทำตามคำแนะนำที่นี่แต่ฉันจะใส่ไว้ในโพสต์เพื่อให้ดูง่าย

ดังนั้นก่อนอื่นคุณต้องรูทเนื่องจากคำสั่งเหล่านี้จำนวนมากต้องการรูท:

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

หากคุณต้องการเป็นวิธีที่ง่ายที่จะได้รับมันใน sudo wget http://vps1.berboe.co.uk/zram.sh -O /etc/init.d/zramPi:

จากนั้นเพิ่มสคริปต์ของคุณไปยังรายการเริ่มต้นเมื่อเริ่มต้นด้วยการทำ:

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 ได้รับการติดตั้งแล้วและถ้าคุณพยายามคอมไพล์อย่างที่เคยทำก่อนที่มันจะได้ผล


ขอบคุณสำหรับคำแนะนำนี้! ฉันเพิ่งเพิ่มพื้นที่สว็อปเพิ่มเติมโดยไม่ใช้ zram ในตอนนี้ พยายามรวบรวมต่อไปในขณะนี้
Der Hochstapler
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.