[raspberry pi3] aarch64 mongodb 编译和安装

raspberry pi3官方支持是32bit的系统,使用mongodb的时候有2G数据库大小的限制,32bit的系统上数据大点基本上就可以认为不能用了,所以要装64bit的opensuse。

安装了suse之后,发现没有mongodb的程序,于是安装了Factory_ARM database的rpm源, 但是发现这个源里面mongod是不能用的,原因是里面没有aarch64的配置,导致了没有可以用的store engine,会告诉你找不到wiredtiger或者mmapv1的engine,应为aarch64的默认编译是不配store engine的,我们需要自己配置了编译一个。

糟糕的事情是用虚拟机发现安装了个opensuse之后,装了默认的cross-aarh64-gcc 后,用了下这个toolchain,发现竟然只有gcc ,但是却没有glibc,真的不知道该说啥好了,不知道是我做的不对呢,还是opensuse的社区比较奇葩,好歹suse也是商业版的啊,缺的东西也太多了,就只能搞个第三方的toolchain用用了。

最后选定了linaro的toolchain

下载地址:

https://releases.linaro.org/components/toolchain/binaries/5.3-2016.05/aarch64-linux-gnu/gcc-linaro-5.3.1-2016.05-x86_64_aarch64-linux-gnu.tar.xz

由于opensuse的glibc的版本是 2.22 而linaro的glibc版本没有出现2.22的,于是就选择了这个2.21的版本的。

解压:

tar xvf gcc-linaro-5.3.1-2016.05-x86_64_aarch64-linux-gnu.tar.xz

toolchain好了后就要下载代码了

mongodb的代码下载:

git clone https://github.com/mongodb/mongo.git

由于想要做个rpm 包,so做下src package,这里选用比较新的版本3.4.2

git archive --format tar.gz --prefix mongodb-org-r3.4.2/ --output ~/rpmbuild/SOURCES/mongodb-org-r3.4.2.tar.gz  r3.4.2

默认的mongo下的代码是通过网上下载binary packge做rpm的,但是我们要的是从soure开始,需要修改下rpm下的mongodb-org.spec 文件

主要修改的内容是

1. 添加了build的命令,里面配置了aarch64的编译方法,把wiredtiger和mmapv1的store engine都开了, -j job数根据自己的配置调整

2. 修改了install的路径,并对结果进行了strip(默认的scons的strip没找到,不知道咋搞)

3. 删除了一些没有的tools

patch 如下:

diff --git a/rpm/mongodb-org.spec b/rpm/mongodb-org.spec
index 66ff4ca..c548e79 100644
--- a/rpm/mongodb-org.spec
+++ b/rpm/mongodb-org.spec
@@ -164,10 +164,18 @@ This package provides the MongoDB static library and header files needed to deve%setup%build
+TOOLCHAIN=toolchain路径
+scons --release --dbg=off MONGO_VERSION=3.4.2 CC=$TOOLCHAIN/aarch64-linux-gnu-gcc  CXX=$TOOLCHAIN/aarch64-linux-gnu-g++ TARGET_ARCH=aarch64 --mmapv1=on --wiredtiger=on --disable-warnings-as-errors -j6 CF
LAGS="-march=armv8-a+crc -mtune=generic" core tools VERBOSE=on%install
-mkdir -p $RPM_BUILD_ROOT/usr
-cp -rv bin $RPM_BUILD_ROOT/usr
+TOOLCHAIN=toolchain路径
+scons --release --dbg=off MONGO_VERSION=3.4.2 CC=$TOOLCHAIN/aarch64-linux-gnu-gcc  CXX=$TOOLCHAIN/aarch64-linux-gnu-g++ TARGET_ARCH=aarch64 --mmapv1=on --wiredtiger=on --disable-warnings-as-errors -j6 CFLAGS="-march=armv8-a+crc -mtune=generic" install
+$TOOLCHAIN/aarch64-linux-gnu-strip build/install/bin/mongod
+$TOOLCHAIN/aarch64-linux-gnu-strip build/install/bin/mongo
+$TOOLCHAIN/aarch64-linux-gnu-strip build/install/bin/mongos
+$TOOLCHAIN/aarch64-linux-gnu-strip build/install/bin/mongoperf
+mkdir -p $RPM_BUILD_ROOT/usr/bin
+cp -rv build/install/bin $RPM_BUILD_ROOT/usr/mkdir -p $RPM_BUILD_ROOT/usr/share/man/man1cp debian/*.1 $RPM_BUILD_ROOT/usr/share/man/man1/# FIXME: remove this rm when mongosniff is back in the package
@@ -222,10 +230,8 @@ fi%attr(0755,mongod,mongod) %dir /var/log/mongodb%attr(0755,mongod,mongod) %dir /var/run/mongodb%attr(0640,mongod,mongod) %config(noreplace) %verify(not md5 size mtime) /var/log/mongodb/mongod.log
-%doc GNU-AGPL-3.0
+%doc GNU-AGPL-3.0.txt%doc README
-%doc THIRD-PARTY-NOTICES
-%doc MPL-2@@ -243,16 +249,7 @@ fi%defattr(-,root,root,-)#%doc README GNU-AGPL-3.0.txt-%{_bindir}/bsondump
-%{_bindir}/mongodump
-%{_bindir}/mongoexport
-%{_bindir}/mongofiles
-%{_bindir}/mongoimport
-%{_bindir}/mongooplog%{_bindir}/mongoperf
-%{_bindir}/mongorestore
-%{_bindir}/mongotop
-%{_bindir}/mongostat%{_mandir}/man1/bsondump.1*%{_mandir}/man1/mongodump.1*

接下来编译代码就行了

rpmbuild  -ba --target=aarch64  -D"dynamic_version r3.4.2" -D "dynamic_release r3.4.2"  -D "_arch aarch64" rpm/mongodb-org.spec

PS.

因为mongodb用了不少的模版,编译的时候需要相当多的内存,要有心理准备:P

编译完成后,rpm包就可以直接用来安装了

posted on 2017-02-12 19:44 secularbird 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/zelos/p/6391620.html

[raspberry pi3] aarch64 mongodb 编译和安装相关推荐

  1. MongoDB学习笔记(一) MongoDB介绍及安装

    系列目录 MongoDB学习笔记(一) MongoDB介绍及安装     MongoDB学习笔记(二) 通过samus驱动实现基本数据操作     MongoDB学习笔记(三) 在MVC模式下通过Jq ...

  2. FreeBSD下MongoDB数据库的安装

    MongoDB是C++开发的一款开源.无模式的文档型数据库,具有高性能.易部署.易使用.数据存储方便等特点:MongoDB采用Bson(binary json)的形式存储数据,无锁,无事务,有索引,支 ...

  3. Raspberry Pi3驱动Oled ssh1106屏

    Raspberry Pi3可以直接使用GPIO接口驱动OLED屏 一.接线 根据网上随便找的图可以看到树莓派3的GPIO接口引脚顺序 PS:26pin的GPIO为前26针 根据OLED屏的引脚说明,如 ...

  4. CentOS7 aarch64 arm平台sysbench安装及CPU、内存、IO测试

    系统信息 # cat /etc/redhat-release CentOS Linux release 7.6.1810 (AltArch) # uname -a Linux 4.14.0-115.e ...

  5. SELinux零知识学习四、Audit应用层源码下载、编译和安装

    接前一篇文章:SELinux零知识学习三.SELinux应用层源码下载.编译和安装 在前篇文章中编译SELinux源码时,出现了如下错误: seusers_local.c:11:10: 致命错误:li ...

  6. AArch64下编译GNU10编译器套件

    AArch64下编译最新版本GNU编译器套件 一.准备好依赖和GNU源码 二.编译过程 一.准备好依赖和GNU源码 以下是相关依赖,具体的版本号,可自行选择. bison-3.0.4.tar.xz f ...

  7. 【Live555】liveMedia下载、配置、编译、安装、基本概念

    [Live555]live555源码详解系列笔记 一.下载.编译.安装 1.下载 官网地址:http://www.live555.com/ 下载地址:http://www.live555.com/li ...

  8. Linux下boost库的编译、安装详解

    1.下载源文件 去官网下载:http://www.boost.org/ 这里下载最新版本 wget https://dl.bintray.com/boostorg/release/1.64.0/sou ...

  9. golang go get命令 一键获取代码、编译并安装

    go get 命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装.整个过程就像安装一个 App 一样简单. 这个命令可以动态获取远程代码包,目前支持的有 BitBucke ...

最新文章

  1. 正确修改MySQL最大连接数的三种好用方案
  2. Five ways to maximize Java NIO and NIO.2--转
  3. 成功解决利用matplotlib.pyplot进行绘图的时候整个画布中的绘制曲线只显示一部分
  4. 恢复Win10照片查看器
  5. 二项式反演[bzoj3622]已经没有什么好害怕的了
  6. [费用流]数字配对,新生舞会
  7. python中seaborn画swarm图_Python可视化 | Seaborn5分钟入门(四)——stripplot和swarmplot
  8. JavaFX 2.0 beta示例应用程序和思考
  9. arduino使用oled代码_如何做一个Arduino无线气象站
  10. mysql proxy 多主_mysql多主多从架构与mysql-proxy读写分离
  11. 转:理解TCP序列号(Sequence Number)和确认号(Acknowledgment Number)
  12. 造成物联卡那么火爆的原因是什么
  13. For ourselves
  14. Keil软件的汇编使用
  15. 2012年8月27日|第二章:编程语言概述|总结
  16. 函数的概念三要素参数返回值好处递归
  17. [附源码]计算机毕业设计JAVA社区生鲜电商平台
  18. 搭建IIS文件服务器
  19. 做人要厚道,做技术更要如此
  20. A. Frog Jumping

热门文章

  1. git fatal: index file smaller than expected
  2. [SAP ABAP开发技术总结]ABAP调优——Open SQL优化
  3. javascript:void(0)的作用示例
  4. PHP Everywhere 插件中存在严重RCE,影响数千个 WordPress 站点
  5. Jenkins 内部服务器遭访问且被部署密币挖机
  6. Windows PrintNightmare 漏洞和补丁分析
  7. 惠普:某些 SSD 驱动的寿命只有32,768 小时(3年多),立即更新!
  8. PHP如何获取txt中的文字
  9. 利用VisualVm和JMX远程监控K8S里的Java进程
  10. 助力移动AR应用发展,阿里巴巴推出AR开放平台