centos7和Ubuntu18.04安装redis超详细过程,包括问题和解决方法

目录

  • linux安装redis
    • 1、下载redis
    • 2、安装redis
    • 3、问题解答
      • 3.1、Linux踩坑
        • apt-get 报错
      • 3.2、Ubuntu18.04踩坑
        • gcc命令找不到
        • jemalloc/jemalloc.h问题
        • tcl问题
      • 3.3、centos7踩坑
        • tcl问题
        • unrecognized relocation (0x2a) in section `.text`

linux安装redis

redis有Linux版本和windowns版本,其中windowns版本的故事大家可以自行百度,下载安装也简单,不在此赘述。本篇文章主要记录我在Linux上安装redis踩过的一些坑,做个笔记。

1、下载redis

直接去redis官网下载 redis中文官方网站,我下载的是redis-5.0.5,以下都是以此版本做演示。

2、安装redis

安装步骤是:解压–>编译–>安装,中间可能由于linux版本原因出现一些问题,会在后面将问题和解决方法详细列出。

##解压到当前目录下的redis-5.0.5文件夹
tar xzf redis-5.0.5.tar.gz redis-5.0.5

##解压后进入redis中的src目录
cd redis-5.0.5/src

##编译
make

##测试
make test

##安装,如果已经是root账户,可以不加sudo
sudo make install

##安装完成后启动redis,以下命令是以默认配置启动
redis-server

如果出现下图所示,则说明安装成功,我截的图不是第一次启动redis的截图,可能有些不同,多了读取持久化文件等日志,不过有最后一行“ready to accept connections”则说明启动成功了。
centos7和Ubuntu18.04安装redis超详细过程,包括问题和解决方法_第1张图片

3、问题解答

3.1、Linux踩坑

apt-get 报错

在执行apt-get update && sudo apt-get upgrade
或执行sudo apt-get install/update/或其他命令时,由于各种说不清的原因有时会出现如下提示:

无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?

这是可能之前执行apt-get出错了,没有正常关闭,被占用了,通过以下方法解决:

##查找apt进程
ps -ef | grep apt

apt进程

##执行kill命令关闭进程
sudo kill -9 1360 1375

3.2、Ubuntu18.04踩坑

由于ubuntu系统有很多软件不会自带,需要使用者自己安装,所以坑比较多,下面就将我在安装redis中遇到的坑都记录下来。

gcc命令找不到

在编译make过程中可能会出现“Command ‘gcc’ not found”的错误,这是因为系统没有安装gcc或者版本过低,通过以下方式进行处理。

##先后执行下面命令
apt-get update
apt-get install gcc

安装完成后回到redis的src目录下,再次执行make命令。

jemalloc/jemalloc.h问题

在安装gcc后,再次执行make命令还是报错,显示jemalloc/jemalloc.h:没有该文件或目录,具体如下:

zmalloc.h:50:31: error: jemalloc/jemalloc.h: No such file or directory
zmalloc.h:55:2: error: #error "Newer version of jemalloc required"
make[1]: *** [adlist.o] Error 1
make[1]: Leaving directory `/data0/src/redis-5.0.5/src'
make: *** [all] Error 2

解决方法:

## 指定分配器
make MALLOC=libc

说关于分配器allocator,如果有MALLOC这个环境变量,会有用这个环境变量的去建立Redis。而且libc并不是默认的分配器,默认的是jemalloc, 因为 jemalloc 被证明比libc有更少的 fragmentation problems 。但是如果你又没有jemalloc 而只有 libc 当然 make 出错。 所以加这么一个参数。

tcl问题

在执行测试命令make test过程中,遇到“You need tcl 8.5 or newer in order to run the Redis test”的问题

make[1]: 进入目录“/usr/local/redis/src”
You need tcl 8.5 or newer in order to run the Redis test
Makefile:225: recipe for target 'test' failed
make[1]: *** [test] Error 1
make[1]: 离开目录“/usr/local/redis/src”
Makefile:6: recipe for target 'test' failed
make: *** [test] Error 2

原因是当前系统的tcl版本太低了,需要升级,解决步骤如下:

## 下载tcl安装包
wget http://downloads.sourceforge.net/tcl/tcl8.6.1-src.tar.gz  

## 解压,需要注意,一定要加-C参数,否则有问题
sudo tar xzvf tcl8.6.1-src.tar.gz  -C /home/jimmy/Downloads

## 解压完成后,tcl8.6.1文件夹就是tcl解压后的文件
## 依次执行以下命令即可
cd  tcl8.6.1/unix/  
sudo ./configure  
sudo make  
sudo make install   

注意:解压tcl安装包一定要加 -C [绝对路径]参数

3.3、centos7踩坑

tcl问题

该问题和在Ubuntu18.04一样,在执行测试命令make test过程中报错,

[jimmy@localhost src]$ make test
    CC Makefile.dep
You need tcl 8.5 or newer in order to run the Redis test
make: *** [test] 错误 1

解决方法和上面一样,不再赘述。

unrecognized relocation (0x2a) in section .text

安装完tcl之后再次执行make test又报错了,真是坑不少呀,报错显示:

/usr/bin/ld: libsdk.a(Imagexxx.cpp.o): unrecognized relocation (0x2a) in section .text
/usr/bin/ld: final link failed: Bad value
collect2: error: ld returned 1 exit status

这是因为ld版本过低导致,需要升级,解决方法如下:

## 查看ld版本
ld --version
##显示如下:
GNU ld version 2.25.1-22.base.el7 
Copyright (C) 2014 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or (at your option) a later version.
This program has absolutely no warranty.

## 安装高版本,如果提示权限不够,命令最前面加sudo
yum install binutils-2.27 

## 添加到系统路径
export PATH="/usr/lib/binutils-2.27/bin:$PATH"

安装过程中真是踩坑不少,折腾了很久,为了以后方便,写篇笔记吧。

你可能感兴趣的:(redis)