Tôi có thể xây dựng MongoDB như thế nào?


10

Đối với tôi có vẻ như hiện tại có hai cách để giải quyết vấn đề này:

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

Tôi giải quyết cho mongo-nonx86ngã ba. Tôi đã cài đặt các phụ thuộc như được mô tả trong Cài đặt Mongodb trong Raspberry Pi và cố gắng xây dựng MongoDB bằng cách sử dụng scons. Nhưng tôi nhận được lỗi sau:

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.

Quá trình biên dịch mongopisẽ dừng ở cùng một tệp với cùng một thông báo lỗi.

Trong khi đó, tôi nhận ra rằng hệ thống của tôi đã lỗi thời. Nhưng ngay cả việc nâng cấp lên các phiên bản mới nhất cũng không giải quyết được vấn đề. Tại thời điểm này, tôi cho rằng đó thực sự là một vấn đề với bộ nhớ trống. Cho rằng tôi chỉ có một mô hình 256 MB sớm.


có thể là một vấn đề bộ nhớ - bạn đã cấu hình phân chia bộ nhớ? Bạn có bao nhiêu bộ nhớ trống trước khi chạy gcc?
abolotnov

@abolotnov: Tôi sẽ trả lời những câu hỏi đó ngay khi quá trình biên soạn của tôi mongopihoàn tất; D Khi tôi đang khám phá con đường đó ngay bây giờ
Der Hochstapler 7/2/13

@abolotnov: Chia bộ nhớ là 224/32. free -mhiển thị 177 miễn phí.
Der Hochstapler

1
Mongodb binary nằm trong communitykho lưu trữ trên bản phân phối Arch ARM.
Jivings

@Jivings: Có thể đáng để sử dụng Arch, bởi vì tôi sẽ không đi đến đâu khi biên dịch nó trên bản phát hành Wheezy.
Der Hochstapler

Câu trả lời:


9

Xin lưu ý rằng câu trả lời này chỉ áp dụng cho phiên bản 256 MB của Raspberry Pi. Phiên bản 512 MB cần có đủ bộ nhớ trống để biên dịch MongoDB mà không cần điều chỉnh bổ sung

Trong khi đọc về tình huống bộ nhớ thấp nói chung, tôi thấy các đề xuất chỉ đơn giản là tăng không gian hoán đổi để khắc phục tình trạng này.

Vì vậy, sau khi đọc câu trả lời của bearbin , tôi đã bị thuyết phục rằng đây có thể là một lựa chọn hợp lệ. Tuy nhiên, tôi đã chọn thêm không gian hoán đổi mà không sử dụng zRAM .

Bởi vì tôi không bao giờ có thể nhớ toàn bộ quá trình cho bất cứ điều gì , tôi đã làm theo hướng dẫn Linux Thêm tệp hoán đổi - Làm thế nào bằng Nixcraft.

  1. Tạo tập tin trao đổi / không gian lưu trữ:

    sudo dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
    
  2. Đặt không gian lên làm vùng trao đổi:

    sudo mkswap /swapfile1
    
  3. Chỉ cho phép root đọc / ghi:

    sudo chmod 0600 /swapfile1
    
  4. Kích hoạt vùng trao đổi:

    sudo swapon /swapfile1
    

Sau đó, sconshoàn thành thành công và tôi đã có thể cài đặt MongoDB. Tôi đã sử dụng mongopingã ba cuối cùng.

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

Tôi đã có cùng một vấn đề trên một mô hình B và giải pháp này đã làm việc. Thx
Mircea Nistor

CẢM ƠN BẠN RẤT NHIỀU TUỔI. Tôi muốn chỉ ra rằng Model B không có đủ bộ nhớ trống cho tôi và sau khi làm theo lời khuyên này, quá trình cài đặt đã hoạt động. Bạn có muốn thay đổi ghi chú của bạn trong câu trả lời này để xem xét rằng hai người với Mô hình B cần phải làm theo các bước của bạn?
Matthew Moisen

@MatthewMoisen: Tôi cũng gặp vấn đề này với Model B. Nhưng của tôi là phiên bản đầu tiên với RAM 256 MB. Chỉ có bản sửa đổi thứ hai có 512 MB.
Der Hochstapler

1

Tôi có một lựa chọn có thể làm việc. Tuy nhiên, nó có thể sẽ làm chậm đáng kể quá trình biên dịch của bạn.

Bạn cần thiết lập ZRAM trên Pi của mình. Về cơ bản, nó nén RAM đã sử dụng để cho phép bạn sử dụng nhiều hơn, nhưng với chi phí sử dụng CPU nhiều hơn.

Chúng tôi sẽ làm theo hướng dẫn ở đây nhưng tôi sẽ đưa chúng vào bài để dễ xem.

Vì vậy, trước tiên, bạn cần phải root vì rất nhiều lệnh này yêu cầu root:

sudo su

Sau đó, tạo một tệp được gọi /etc/init.d/zramvới nội dung sau:

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

Nếu bạn muốn một cách dễ dàng để có được nó trên Pi : sudo wget http://vps1.berboe.co.uk/zram.sh -O /etc/init.d/zram.

Sau đó, thêm tập lệnh của bạn vào danh sách start-at-boot bằng cách thực hiện:

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

Sau đó khởi động lại và tất cả sẽ hoạt động.

Sau khi khởi động lại, chạy lệnh này : swapon -s. Đầu ra phải giống như thế này:

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

Bây giờ, ZRAM đã được cài đặt và nếu bạn cố gắng biên dịch như bạn đã làm trước khi nó có thể hoạt động.


Cảm ơn đề nghị này! Bây giờ tôi chỉ cần thêm không gian hoán đổi bổ sung mà không sử dụng zram. Cố gắng tiếp tục biên dịch ngay bây giờ.
Der Hochstapler
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.