在 Raspberry Pi 3B 上编译 Redis

主机硬件:Raspberry Pi 3B
系统:Ubuntu MATE 16.04
编译器版本: gcc version 5.4.0 20160609 (Ubuntu/Linaro 5.4.0

Overview

下载源码

官网:
【Redis】在树莓派(Raspberry Pi)上编译 redis-LMLPHP

下载 v5.0.3 源码包:
【Redis】在树莓派(Raspberry Pi)上编译 redis-LMLPHP

解压

进入源码所在位置:
【Redis】在树莓派(Raspberry Pi)上编译 redis-LMLPHP

解压:

~ $ 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
....

【Redis】在树莓派(Raspberry Pi)上编译 redis-LMLPHP

准备环境

### 检查系统位数
$ 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
01-17 10:17