RedHat 6.9安装Redis3.2.3遇到的问题及解决办法

问题概述:
手上有一台RedHat 6.9的虚拟机需要安装Redis数据库,版本为3.2.3,但是遇到一些困难,特此记录。

服务器版本:Red Hat Enterprise Linux Server release 6.9 (Santiago)
Redis版本:3.2.3
GCC版本:4.8.5

1 一开始make Redis时就提示

缺少编译库libgmp.so.10: cannot open shared object file: No such file

我这边的解决办法是将libgmp.so.3.5.0给软连接到了libgmp.so.10

ln -s libgmp.so.3.5.0 libgmp.so.10

这个得根据自己电脑的具体情况来

2 然后接着make提示

jemalloc/jemalloc.h: No such file or directory

这里需要科普一个知识点,就是Redis默认使用jemalloc为内存分配器,有另外一种解决办法就是make MALLOC=libc,这种办法就是libc内存碎片处理效果不及jemalloc,我这边的解决办法是给服务器安装jemalloc-5.0.1,但是在安装时输入./autoconf.sh,提示找不到autoconf commond,需要安装autoconf。

3 安装autoconf成功之后,接着make,提示

expecting string instruction after rep'

谷歌之后发现这个问题是因为gcc 4.8适配AMD芯片的BUG,原文如下

The problem is that gcc 4.8 is generating "rep; ret" instructions to avoid a performance 
penalty for AMD chips. Older assemblers detect this as an error.

Details are here:

https://gcc.gnu.org/ml/gcc-help/2011-03/msg00286.html

The fix is to update your binutils so that you get a newer version of an assembler which 
accepts this instruction.

解决办法是升级binutils包的版本,联网电脑还好,直接执行

yum update binutils

离线电脑是下载binutils 2.27以上的rpm包上传到服务器

rpm -ivh 包名 --nodeps --force

不要下载源文件,编译时还是会提示req的那个问题,陷入死循环
升级完binutils之后再编译安装jemalloc包,安装成功之后再去编译Redis

make distclean && make

4 然后make test时候遇到

you need tcl 8.5 or newer in order to run the redis test

接着安装tcl以上的版本,安装完成之后make test又提示

Test replication partial resync: ok psync (diskless: yes, reconnect: 1) in tests/integration/replication-psync.tcl

我的解决办法是taskset -c 1 sudo make test,只用单核运行
通过之后运行make install即可,之后文件夹下会产生redis-server