[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./ --output ~/rpmbuild/SOURCES/mongodb-org-r3.4..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/man1
cp 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包就可以直接用来安装了
[raspberry pi3] aarch64 mongodb 编译和安装的更多相关文章
- [raspberry pi3] hadoop 编译搭建和配置
Causion: 只有一个raspberry pi3的就随便玩玩吧,瓶颈不在在cpu, 1 G的内存实在是太少了,跑个hadoop就很辛苦了 下面是瞎折腾的过程: oracle的arm jdk的安装过 ...
- 20190418 CentOS7实用技能综合:系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/RocketMQ/RabbitMQ编译安装 + ...各类常用生产环境软件的编译安装
系统安装 + WinScp客户端连接 + 防火墙端口号iptables + Nginx编译安装 + MySQL编译安装 + Redis编译安装 + MongoDB编译安装 + ActiveMQ/Roc ...
- 从源码(编译)安装golang 二
h1 { margin-top: 0.6cm; margin-bottom: 0.58cm; direction: ltr; color: #000000; line-height: 200%; te ...
- Raspberry Pi3驱动Oled ssh1106屏
Raspberry Pi3可以直接使用GPIO接口驱动OLED屏 一.接线 根据网上随便找的图可以看到树莓派3的GPIO接口引脚顺序 PS:26pin的GPIO为前26针 根据OLED屏的引脚说明,如 ...
- MongoDB Windows环境安装及配置
MongoDB一般安装 1.首先到官网(http://www.mongodb.org/downloads )下载合适的安装包,目前的最新版本为2.6 安装包有zip和msi格式的,这里推荐下载zip格 ...
- 【MongoDB】 Windows 安装
Windows下安装MongoDB,虽然网上有很多攻略,但是还是有很多坑,为了以后少犯错误,特此记录. 1.下载安装包 https://fastdl.mongodb.org/win32/mongodb ...
- linux下包不重新编译php安装openssl 扩展
今天在刚装好的centos上安装composer,老是报错,提示不安全的,后来发现是由于https的缘故,需要openssl,可能是开始装php的时候没有安装此扩展,网上有好多方案,一开始我认为只有重 ...
- MongoDB 入门之安装篇
前言:MongoDB 在各 OS 上的安装比较简单,此文章只用来记录,不考虑技术深度. 一.Ubuntu 导入 MongoDB 公钥,添该软件源文件,更新源列表 sudo apt-key adv -- ...
- 在Linux CentOS上编译并安装Clang 3.5.0
编译CoreCLR需要Clang 3.5,而CentOS上安装的是Clang 3.4.2(yum repos中最新版也是这个),只能自己手工编译LLVM的源代码进行安装. (注:CentOS的版本是6 ...
随机推荐
- python数据类型,int,str,bool
一,python中的int() int在python中主要用来运算,对字符串的转化,用int(str)表示,并且需要str.isdigit为真. 在int()中二进制的转换如下: #bit_lengt ...
- 快速沃尔什变换(FWT)学习笔记
概述 FWT的大体思路就是把要求的 C(x)=A(x)×B(x) 即 \( c[i]=\sum\limits_{j?k=i} (a[j]*b[k]) \) 变换成这样的:\( c^{'}[i]=a^ ...
- Road to OI
我学OI已经三年有余了.回首向来萧瑟处,在镜花水月一般的OI生涯面前,我不敢,也没资格称“也无风雨也无晴”.这三年我过得浑浑噩噩,玩了很多游戏,看了很多番,追过一个女孩,OI却搞得一塌糊涂.留给我的时 ...
- Zabbix通过SNMPv2监控DELL服务器的硬件信息
(一)zabbix监控DELL服务器 (1)简述:监控DELL服务器硬件一般有两种途径:1.操作系统上安装OMSA,编写脚本调用omreport命令进行监控(需要在操作系统上安装比较麻烦):2.使用i ...
- MySQL 预处理语句prepare、execute、deallocate的使用
所以对于中文乱码,需要去check的地方有如下3个:1.mysql窗口的字符编码(xshell连接的远程工具的字符集设置):2.数据库的字符编码(show variables like '%char% ...
- ORA-12514: TNS: no listener 解决方案
服务端:oracle 11g 客户端: pl/sql 问题描述: 用客户端 pl/sql 连接登录的时候,提示 "ORA-12514: TNS: no listener". 在服务 ...
- openTSDB+HBase+ZK遇到的坑汇总
1.zookeeper返回的hbase地址是hostname,外网如何访问? 如果需要直接访问zk获取hbase地址进而访问,目前需要本机配置host ip hostname 如果是要长期解决方法, ...
- VisualGDB系列8:使用VS创建CMake Linux项目
根据VisualGDB官网(https://visualgdb.com)的帮助文档大致翻译而成.主要是作为个人学习记录.有错误的地方,Robin欢迎大家指正. 本文介绍如何使用VS来创建.构建.调试一 ...
- mybatis 学习四(下) SQL语句映射文件增删改查、参数、缓存
2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id="getStudent" paramet ...
- wpf数据验证实例及常用方法小结
虽然标题是wpf数据验证,但并不是对IDataErrorInfo.ValidationRule.属性中throw Exception这几种验证方式的介绍: 之前做项目时(例如员工工资管理),根据员工编 ...