记录正式环境&测试环境【RedHat7 编译升级redis7.0.9】--有关报错及解决
- 🔻 一、报错详情
- 1.1 ⛳ 写在前面
- 1.2 ⛳ 报错1
- 1.3 ⛳ 报错2
- 1.4 ⛳ 安装redis
- 1.5 ⛳ 版本检查
- 🔻 二、⛳ 总结
🔻 一、报错详情
1.1 ⛳ 写在前面
🍁
升级前务必做好旧版数据目录、配置文件、启动文件备份,方便出错后进行恢复。
🍁
🍁1、在上一篇文章中【Redis升级—修复代码注入漏洞、缓冲区错误漏洞】,给大家写到,redis7.09编译需要更高版本的gcc和Python环境,本次是在客户内网环境下做redis升级,做redis漏洞整改,特记录有关问题及解决办法。
🍁2、因为编译升级gcc需要时间较长,所以就没有升级gcc,python和gcc都采用系统自带的版本,记录的步骤可供大家参考和学习。
正式环境编译竟没有报错:😅😅😅,升级很顺利😂😂😂。
[root@zwgxxt-sj redis-7.0.9]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
只是操作系统版本不一致而已,其他gcc,python版本都一样。
正式环境编译情况:
正式环境升级结果:
1、启动redis服务
[root@zwgxxt-sj run]#service redisd start
Starting Redis server…
2、redis服务进程查看,
[root@zwgxxt-sj run]#ps -ef | grep redis
root 33524 81182 0 18:29 pts/1 00:00:00 vim /etc/init.d/redisd
root 33746 81182 0 18:29 pts/1 00:00:00 vi redisd-bak
root 34622 1 0 18:31 ? 00:00:00 /usr/local/bin/redis-server *:8811
root 34656 81182 0 18:31 pts/1 00:00:00 grep --color=auto redis
3、redis版本检查
[root@zwgxxt-sj run]#redis-cli -v
redis-cli 7.0.9
[root@zwgxxt-sj run]#
4、应用系统检查---正常
下面是虚拟机搭建的测试环境----含有关报错解决😲😲😲
🍁1、操作系统版本:
Red Hat Enterprise Linux Server release 7.9 (Maipo)
[root@db-oracle src]# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
[root@db-oracle src]#
🍁2、redis版本:redis 4.0.8
[root@db-oracle src]# redis-cli -v
redis-cli 4.0.8
🍁3、gcc版本:gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
[root@db-oracle src]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright © 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
🍁4、python版本:Python 2.7.5
[root@db-oracle src]# python --version
Python 2.7.5
1.2 ⛳ 报错1
前置操作:
[root@db-oracle redis-7.0.9]# make MALLOC=libc
报错:
MAKE hdr_histogram
cd hdr_histogram && make
make[3]: Entering directory/usr/local/redis-7.0.9/deps/hdr_histogram' cc -std=c99 -Wall -Os -g -DHDR_MALLOC_INCLUDE=\"hdr_redis_malloc.h\" -c hdr_histogram.c ar rcs libhdrhistogram.a hdr_histogram.o make[3]: Leaving directory
/usr/local/redis-7.0.9/deps/hdr_histogram’
make[2]: Leaving directory/usr/local/redis-7.0.9/deps' make[1]: *** No rule to make target
…/deps/jemalloc/include/jemalloc/jemalloc.h’, needed byadlist.o'. Stop. make[1]: Leaving directory
/usr/local/redis-7.0.9/src’
make: *** [all] Error 2
[root@db-oracle redis-7.0.9]
解决办法:
1、🍁进入redis-7.0.9/deps目录
[root@db-oracle redis-7.0.9]# cd deps/
[root@db-oracle deps]# pwd
/usr/local/redis-7.0.9/deps
[root@db-oracle deps]#
2、🍁执行命令:make hiredis jemalloc linenoise lua
3、🍁再次执行命令: make MALLOC=libc
1.3 ⛳ 报错2
前置操作:
🍁 执行make test报错
[root@db-oracle redis-7.0.9]# make test
报错:
🍁 错误内容:
!!! WARNING
The following tests failed:*** [
err
]: client freed during loading in tests/integration/rdb.tcl
Expected ‘0’ to be equal to ‘1’ (context: type eval line 10 cmd {assert_equal [s loading] 1} proc ::start_server)
*** [err
]: config during loading in tests/unit/introspection.tcl
Expected ‘0’ to be equal to ‘1’ (context: type eval line 10 cmd {assert_equal [s loading] 1} proc ::start_server)
*** [err
]: Active defrag edge case in tests/unit/memefficiency.tcl
defrag didn’t stop.
Cleanup: may take some time… OK
make[1]: *** [test] Error 1
make[1]: Leaving directory `/usr/local/redis-7.0.9/src’
make: *** [test] Error 2
[root@db-oracle redis-7.0.9]#
解决办法:
🍁
1、编辑rdb.tcl文件:vim tests/integration/rdb.tcl
🍁
2、编辑introspection.tcl文件:vim tests/unit/introspection.tcl
🍁
3、编辑memefficiency.tcl文件:vim tests/unit/memefficiency.tcl
-------------这些参数百度了一下应该是编译等待的毫秒数,所以把时间改大,并用单线程执行make test
。
🍁
4、用单线程执行行 make test:
[root@db-oracle redis-7.0.9]# taskset -c 1 sudo make test
-------------接下来即可执行make install 安装redis
1.4 ⛳ 安装redis
[root@db-oracle redis-7.0.9]#
cd src && make install
which: no python3 in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
Hint: It’s a good idea to run ‘make test’ ; )INSTALL redis-server
INSTALL redis-benchmark
INSTALL redis-cli
[root@db-oracle src]#
🍁将redis-7.0.9启动脚本复制一份放到/etc/init.d目录下
[root@db-oracle init.d]# cp /usr/local/redis-7.0.9/utils/redis_init_script /etc/init.d/redisd
🍁执行开机自启命令
[root@zyl-docker init.d]# chkconfig redisd on
1.5 ⛳ 版本检查
[root@db-oracle init.d]#
service redisd start
[root@db-oracle src]#redis-cli -v
redis-cli 7.0.9
[root@db-oracle src]#
🔻 二、⛳ 总结
🍁 1、编译有关过程报错,可能是gcc版本原因导致,因为gcc编译升级时间较长,所以直接用的gcc4.8.5编译升级的redis。但是正式环境没报错,只是操作系统版本不一致,所以也有可能是操作系统版本原因。
🍁 2、实验证明低版本的gcc、python也是可以编译高版本的redis的👻👻👻。