文档章节

OrangePi 折腾日记:在 Armbian OS 上编译安装 Redis 4

傅易
 傅易
发布于 2018/07/30 21:11
字数 1108
阅读 1076
收藏 1

最近折腾了一下自己的 Orange Pi PC,意图使之重新焕发青春活力。

很快,我发现了 Armbian 这一为 ARM 开发板定制的 Debian GNU/Linux 操作系统。官网上有 Orange Pi PC 的主页,并为其提供了 Armbian Stretch (Linux Kernel 4.14) 版本的稳定版镜像(下载)。Armbian 推荐使用全平台的 SD 刷写工具 etcher。并提供了完整的使用手册

开机,root 用户登录,默认密码 1234,根据提示重设用户密码。

本想从软件源中直接安装 redis。不过,先将软件源从 debian 官方切换到 USTC。

deb https://mirrors.ustc.edu.cn/debian stretch main contrib non-free
deb https://mirrors.ustc.edu.cn/debian stretch-updates main contrib non-free
deb https://mirrors.ustc.edu.cn/debian stretch-backports main contrib non-free
#deb https://mirrors.ustc.edu.cn/debian stretch/updates main contrib non-free

注意 armbian 会自动每天更新软件包,因此可能会与手动执行 apt 产生抢锁的冲突。

然后,发现 debian stretch 提供的 redis 是 4.0 版本,但其依赖的 redis-server 仍然是 3.2 版本,这导致 apt install redis 根本装不上,不知道软件源的维护者是怎么想的。

思来想去还是自己编译吧,毕竟不难,也经常在 x86_64 的云服务器上这么做。

从 Redis 官网下载最新版源码,然后解压编译安装,大致有以下几步:

wget http://download.redis.io/redis-stable.tar.gz
tar xf redis-stable.tar.gz
cd redis-stable
make && make test
make install

想象是很美好的,但是 make 失败了。根据提示,是在编译 hiredis 和 lua 时出了问题。

hiredis 遇到的问题是:

cc -std=c99 -pedantic -c -O3 -fPIC  -Wall -W -Wstrict-prototypes -Wwrite-strings -g -ggdb arm net.c
cc: error: arm: No such file or directory

查看 Makefile 文件发现,这里的 arm 说的应该是环境变量 ARCH。根据 gcc(1) 的描述,看起来这里把 arm 改为 -marm 才对。

比较 trick 的做法是把环境变量 ARCH 临时改掉(如下),改掉后果然没问题了。

# in redis-stable/
ARCH="-marm" make && make test

这已在 GitHub 上有了报告 issue #579,我也将上文所述的解决方案贴了上去。

lua 遇到的问题是:

    LINK redis-server
cc: error: ../deps/lua/src/liblua.a: No such file or directory

尝试去 deps/lua 目录下手动 make,发现需要手动指定平台。

where PLATFORM is one of these:
   aix ansi bsd freebsd generic linux macosx mingw posix solaris

第一次,我使用了 make generic 编译通过,但是在 make test 时遇到测试 lua 脚本时全局变量 cjson 不存在,也就是说 cjson 库没有被编译进去。

第二次,我使用 make linux 编译不通过,因为缺少 readline 和 ncurses 的头文件,安装一下就好了。

apt install libreadline-dev libncurses-dev

现在,便能够成功地编译了,然后 make install 安装即可。接下来,创建运行 redis 所需的配置文件、用户、目录及 systemd 服务。

配置文件可以复制 redis 源码包中的 redis.conf。

# in redis-stable/
cp redis.conf /etc/redis.conf

我们需要以名为 redis 的用户身份来运行 redis-server,这样可最大地限制程序的权限,降低出现漏洞带来的风险。

adduser redis --system --no-create-home --group --shell /sbin/nologin

系统级目录本身属于 root:root,而 redis 用户是无权写入的,常见做法是创建属于 redis 用户的子目录。

redis 的目录需要与 redis.conf 中的配置相对应。

# redis.conf
pidfile "/var/run/redis/6379.pid"
logfile "/var/log/redis/6379.log"
dir "/var/lib/redis/"
(cd /var/run && mkdir redis && chown redis:redis redis)
(cd /var/log && mkdir redis && chown redis:redis redis)
(cd /var/lib && mkdir redis && chown redis:redis redis)

接下来配置 systemd 服务,此类服务一般位于 /lib/systemd/system/。依样画葫芦即可。

vim /lib/systemd/system/redis.service
[Unit]
Description=Redis
After=network.target

[Service]
Type=forking
User=redis
Group=redis
PIDFile=/var/run/redis/6379.pid
ExecStart=/usr/local/bin/redis-server /etc/redis.conf --daemonize yes --supervised systemd
ExecStop=/usr/local/bin/redis-cli shutdown
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
# 重新加载配置
systemctl daemon-reload
# 启动
systemctl start redis
# 开机启动
systemctl enable redis

这会在 /etc/systemd/system/multi-user.target.wants 下建立符号链接,效果等同于

ln -s /lib/systemd/system/redis.service /etc/systemd/system/multi-user.target.wants/redis.service

比如在启动服务的过程中如果遇到什么问题,可根据提示查看 journalctl -xe 排错。

未尽事宜,已与谷歌深度合作,请。


原文链接 https://blog.xupu.name/p/install-redis-on-armbian/

© 著作权归作者所有

共有 人打赏支持
傅易
粉丝 28
博文 111
码字总数 69307
作品 0
海淀
后端工程师
私信 提问
OrangePi PC “联手” OpenELEC 打造“小影音”

关于“OrangePi OpenELEC”问题的讨论: https://forum.armbian.com/index.php?/topic/1161-armbian-orangepi-pc-and-kodi/ http://www.orangepi.org/orangepibbsen/forum.php?mod=viewthre......

周海棠啦
2017/08/11
0
0
分享OpenWrt for OrangePi Zero

我手头只有256M的Zero(H2+),参考了一些别人的想法,然后试图自己构建OP,基于Armbian的内核和驱动,所以WiFi模块可以正常工作,方法如下: 1.使用Win32DiskImager将Armbian5.24.161216Ora...

周海棠啦
2017/04/23
0
0
OrangePi Zero 利用 Pi-hole阻止家中所有设备上的广告

本文是一篇转载,最终权益归@PI BOARDS 翻译由linux.cn 提供https://linux.cn/article-8205-1.html?utmsource=index&utm_medium=more Pi-hole 原本是运行在树莓派上的,但我想知道它能否在我...

周海棠啦
2017/02/25
0
0
Geeiot/智能语音控制中心

智能语音控制中心 C语言编写的基于百度语音识别、语音合成和图灵机器人的智能语音控制中心。程序自动适配环境音量,取适当阀值当说话后才开始录音。加入偶发性声音检测机制,不会对突然性的声...

Geeiot
2017/10/09
0
0
在OpenShift应用平台上编译和部署Redis

在OpenShift应用平台上编译和部署Redis 树叶的BLOG2017-12-034 阅读 Redis OpenShift官方的Application没有支持Redis,但是由于OpenShift开放了SSH权限,并且所有类型的Application都有编译环...

树叶的BLOG
2017/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何开发一款以太坊(安卓)钱包系列2 - 导入账号及账号管理

这是如何开发一款以太坊(安卓)钱包系列第2篇,如何导入账号。有时用户可能已经有一个账号,这篇文章接来介绍下,如何实现导入用户已经存在的账号。 导入账号预备知识 从用户需求上来讲,导...

Tiny熊
今天
2
0
intellJ IDEA搭建java+selenium自动化环境(maven,selenium,testng)

1.安装jdk1.8; 2.安装intellJ; 3.安装maven; 3.1 如果是单前用户,配置用户环境变量即可,如果是多用户,则需配置系统环境变量,变量名为MAVEN_HOME,赋值D:\Application\maven,往path中...

不最醉不龟归
今天
3
0
聊聊ShenandoahGC的Brooks Pointers

序 本文主要研究一下ShenandoahGC的Brooks Pointers Shenandoah Shenandoah面向low-pause-time的垃圾收集器,它的GC cycle主要有 Snapshot-at-the-beginning concurrent mark包括Init Mark(P......

go4it
昨天
2
0
Makefile通用编写规则

#简单实用的Makefile模板: objs := a.o b.o test:$(objs) gcc -o test $^ # .a.o.d .b.o.d dep_files := $(foreach f,$(objs),.$(f).d) dep_files := $(wildcard $(dep_files)) ifneq ($(d......

shzwork
昨天
2
0
《万历十五年》的读后感作文4000字

《万历十五年》的读后感作文4000字: 万历十五年,即1587年,距今已过去432年。在明朝276的历史中,这一年很平淡,并没有什么特别之处。黄仁宇的《万历十五年》一书,有别于其他的历史叙述方...

原创小博客
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部