在 Raspberry Pi 3B 上编译 Redis
主机硬件:Raspberry Pi 3B
系统:Ubuntu MATE 16.04
编译器版本: gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0
Overview
下载源码
官网:
下载 v5.0.3 源码包:
解压
进入源码所在位置:
解压:
~ $ cd Downloads/Software
~/Downloads/Softeware $ ls redis
redis-5.0.3.tar.gz
~/Downloads/Software $ cd redis
~/Downloads/Software/redis $
~/Downloads/Software/redis $ tar -xvzf redis-5.0.3.tar.gz
....
准备环境
### 检查系统位数
$ getconf LONG_BIT
32
### 检查编译器版本
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/5/lto-wrapper
Target: arm-linux-gnueabihf
...
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0-6ubuntu1~16.04.11)
### 安装编译所需的库
$ sudo apt update
$ sudo apt install g++-5-multilib gcc-5-multilib
编译
fix compiler issue
~/Downloads/Software/redis/redis-5.0.3 $ ls
00-RELEASENOTES INSTALL runtest tests
BUGS Makefile runtest-cluster utils
CONTRIBUTING MANIFESTO runtest-sentinel
COPYING README.md sentinel.conf
deps redis.conf src
~/Downloads/Software/redis/redis-5.0.3 $ ### 安装的是 32 位系统需要修改:
~/Downloads/Software/redis/redis-5.0.3 $ vim src/Makefile
#### 按下 "/" 再输入 "m32",vim 底部出现:
/m32
#### 然后按下回车,vim 为搜索”m32“ 匹配的行并且跳转过去,看到:
32bit:
@echo ""
@echo "WARNING: if it fails under Linux you probably need to install libc6-dev-i386"
@echo ""
$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"
gcov:
#### 光标会定位在上面的 >>>$(MAKE) CFLAGS="-m32" LDFLAGS="-m32"<<< 这一行。
#### 键盘按下 "I",激活 vim 的”插入“操作(即编辑文档)
#### 将该行修改为:
#### >>>$(MAKE) CFLAGS="" LDFLAGS=""<<< 即删除 "-m32" 的 compiler flag
#### 该段修改后显示效果如下:
32bit:
@echo ""
@echo "WARNING: if it fails under Linux you probably need to install libc6-dev-i386"
@echo ""
$(MAKE) CFLAGS="" LDFLAGS=""
gcov:
#### 现在修改完成
#### 按下键盘 "ESC" 退出编辑模式
#### 再分别按顺序按下
#### 键盘 ":" (这个输入通过 "Shift"+";" 组合键输入) > 键盘 "W" > 键盘 "Q" >
#### 最后按下键盘 "Enter" 回车实现保存并退出。
#### (注意,上面的 "W", "Q" 并非指输入大写 WQ, 而是指键盘上的 [W] [Q] 印刷字样)
开始编译
~/Downloads/Software/redis/redis-5.0.3 $ make CFLAGS="-march=native"
测试编译出来的软件
~/Downloads/Software/redis/redis-5.0.3 $ make test
...这会执行一定长度的时间,在 RPi 3B 上大约半小时左右...
#### 可能会出现如下测试 fail 警告
!!! WARNING The following tests failed:
*** [err]: Server is able to generate a stack trace on selected systems in tests/integration/logging.tcl
expected stack trace not found into log file
Cleanup: may take some time... OK
make[1]: *** [test] Error 1
make[1]: Leaving directory `/home/joseph/Downloads/Software/redis/redis-5.0.3/src'
make: *** [test] Error 2
#### 没有关系,redis 还是可以正常使用的。
#### 这对这个测试项 fail 的 fix solution 个人还未找到。
运行
~/Downloads/Software/redis/redis-5.0.3 $ cd src
~/Downloads/Software/redis/redis-5.0.3/src $ ./redis-server --port 31752
2748:C 31 Dec 2018 19:57:25.304 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
2748:C 31 Dec 2018 19:57:25.306 # Redis version=5.0.3, bits=32, commit=00000000, modified=0, pid=2748, just started
...
...
现在你可以在另外一个终端使用 redis-cli
来链接使用 redis 数据库服务了。
使用 APT 直接安装
$ sudo apt-get install redis-server
...
$ redis-server -v
Redis server v=3.0.6 sha=00000000:0 malloc=jemalloc-3.6.0 bits=32 build=28...8e