main/redis: rewrite init script

Let OpenRC do its job!
This commit is contained in:
Jakub Jirutka 2018-05-15 23:27:15 +02:00
parent 47c81f3321
commit 208b00c06d
4 changed files with 88 additions and 57 deletions

View File

@ -2,7 +2,7 @@
# Maintainer: TBK <alpine@jjtc.eu>
pkgname=redis
pkgver=4.0.9
pkgrel=0
pkgrel=1
pkgdesc="Advanced key-value store"
url="https://redis.io/"
arch="all"
@ -15,6 +15,7 @@ checkdepends="tcl procps"
install="redis.pre-install"
subpackages="$pkgname-openrc"
source="http://download.redis.io/releases/$pkgname-$pkgver.tar.gz
redis.conf.patch
redis.initd
redis.logrotate
redis.confd
@ -23,19 +24,11 @@ builddir="$srcdir/$pkgname-$pkgver"
prepare() {
default_prepare
cd "$builddir"
sed -i -e 's|^daemonize .*|daemonize yes|' \
-e 's|^dir .*|dir /var/lib/redis/|' \
-e 's|^logfile .*|logfile /var/log/redis/redis\.log|' \
-e 's|^pidfile .*|pidfile /var/run/redis/redis\.pid|' \
-e 's|^loglevel .*|loglevel notice|' \
redis.conf
# disable broken tests
# see: https://github.com/antirez/redis/issues/2814
# https://github.com/antirez/redis/issues/3810
sed -i -e '/integration\/aof/d' \
-e '/integration\/logging/d' \
tests/test_helper.tcl
@ -60,7 +53,6 @@ package() {
install -d -o redis -g redis \
"$pkgdir"/var/lib/redis \
"$pkgdir"/var/log/redis \
"$pkgdir"/var/run/redis
install -D -m755 "$builddir/COPYING" \
"$pkgdir/usr/share/licenses/redis/COPYING"
@ -77,6 +69,7 @@ package() {
}
sha512sums="a6cf63cb361f0a87da3955ba628190dc04cad342f7a664d18e44416ee67dd86ed6e3a46b9701e994f1417e56b819b3c6fc595f363c10bb4b83d5033919d29598 redis-4.0.9.tar.gz
91b663f802aea9a473195940d3bf2ce3ca2af4e5b6e61a2d28ebbfe502ef2c764b574b7e87c49e60345d1a5d6b73d12920924c93b26be110c2ce824023347b6f redis.initd
b97383f854f0fa7110f7d1f0fa5dd9d576c58e405f4fcc7e41c3c18fd0558599c5f5f5d215c797bc8d98aeb906ec96a1928ad8665d284b05c2d105adf8cecb7d redis.conf.patch
a56fdf8ac3f649ae1fa74005158be7d758a670ea02224519bc0000e7ce78e0c0f65a6166ced028f558461d03eba377fa37437d5e610b5ec3ed005d9e62eae25b redis.initd
6d17d169b40a7e23a0a2894eff0f3e2fe8e4461b36f2a9d45468f0abd84ea1035d679b4c0a34029bce093147f9c7bb697e843c113c17769d38c934d4a78a5848 redis.logrotate
d87aad6185300c99cc9b6a478c83bf62c450fb2c225592d74cc43a3adb93e19d8d2a42cc279907b385aa73a7b9c77b66828dbfb001009edc16a604abb2087e99 redis.confd"
6752e99df632b14d62a3266929e80c3d667be5c270e4f34e0dcf2b7f9b1754fe0ce9d4569fa413dbbe207e406ff2848a64e0c47629997536ae1d14ca84ebd56b redis.confd"

View File

@ -0,0 +1,53 @@
We force "daemonize no" in init script, so daemonize and pidfile does not
have any effect in redis.conf. It's init/rc system's job to daemonize
programs and handle pidfiles, if it needs it!
--- a/redis.conf
+++ b/redis.conf
@@ -131,10 +131,6 @@
################################# GENERAL #####################################
-# By default Redis does not run as a daemon. Use 'yes' if you need it.
-# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
-daemonize no
-
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
@@ -146,17 +142,6 @@
# They do not enable continuous liveness pings back to your supervisor.
supervised no
-# If a pid file is specified, Redis writes it where specified at startup
-# and removes it at exit.
-#
-# When the server runs non daemonized, no pid file is created if none is
-# specified in the configuration. When the server is daemonized, the pid file
-# is used even if not specified, defaulting to "/var/run/redis.pid".
-#
-# Creating a pid file is best effort: if Redis is not able to create it
-# nothing bad happens, the server will start and run normally.
-pidfile /var/run/redis_6379.pid
-
# Specify the server verbosity level.
# This can be one of:
# debug (a lot of information, useful for development/testing)
@@ -168,7 +153,7 @@
# Specify the log file name. Also the empty string can be used to force
# Redis to log on the standard output. Note that if you use standard
# output for logging but daemonize, logs will be sent to /dev/null
-logfile ""
+logfile /var/log/redis/redis.log
# To enable logging to the system logger, just set 'syslog-enabled' to yes,
# and optionally update the other syslog parameters to suit your needs.
@@ -260,7 +245,7 @@
# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
-dir ./
+dir /var/lib/redis
################################# REPLICATION #################################

View File

@ -1,9 +1,7 @@
# Redis user.
REDIS_USER="redis"
# Configuration for /etc/init.d/redis
# Redis group.
REDIS_GROUP="redis"
# User (and group) to run redis as.
#command_user="redis:redis"
# Redis configuration file.
REDIS_CONF="/etc/redis.conf"
#cfgfile="/etc/redis.conf"

65
main/redis/redis.initd Executable file → Normal file
View File

@ -1,52 +1,39 @@
#!/sbin/openrc-run
REDIS_CONF=${REDIS_CONF:-/etc/redis.conf}
REDIS_USER=${REDIS_USER:-redis}
REDIS_GROUP=${REDIS_GROUP:-redis}
name="Redis server"
command=/usr/bin/redis-server
command_args=${REDIS_CONF}
: ${cfgfile:=${REDIS_CONF:-"/etc/redis.conf"}}
: ${command_user:="${REDIS_USER:-redis}:${REDIS_GROUP:-redis}"}
: ${retry:=30}
command="/usr/bin/redis-server"
command_args="$cfgfile --daemonize no $command_args"
command_background="yes"
pidfile="/run/$RC_SVCNAME.pid"
required_files="$cfgfile"
depend() {
use net localmount logger
after keepalived firewall
}
# get global pidfile, logfile, and dir from config file
get_config() {
if [ ! -f "${REDIS_CONF}" ] ; then
eerror "You need a ${REDIS_CONF} file to run redis"
return 1;
fi
pidfile=$(awk '$1 == "pidfile" { print $2 }' "$REDIS_CONF")
logfile=$(awk '$1 == "logfile" { print $2 }' "$REDIS_CONF")
dir=$(awk '$1 == "dir" { print $2 }' "$REDIS_CONF")
: ${pidfile:=/var/run/redis/redis.pid}
: ${logfile:=/var/log/redis/redis.log}
: ${dir:=/var/lib/redis}
start_pre() {
# Sets start-start-daemon's --chdir.
directory=$(config_get 'dir' '/var/lib/redis')
checkpath -d -o "$command_user" "$directory"
local logfile=$(config_get 'logfile')
[ "$logfile" ] && checkpath -d -o "$command_user" "${logfile%/*}"
local unixsocket=$(config_get 'unixsocket')
[ "$unixsocket" ] && checkpath -d -o "$command_user" "${unixsocket%/*}"
}
start() {
get_config || return 1
checkpath -d -o ${REDIS_USER}:${REDIS_GROUP} ${pidfile%/*} \
${logfile%/*} ${dir}
config_get() {
local key="$1"
local default="${2:-}"
ebegin "Starting $name"
start-stop-daemon --start \
--chdir "${dir}" \
--user ${REDIS_USER}:${REDIS_GROUP} \
--pidfile "${pidfile}" \
--exec "${command}" \
-- ${command_args}
eend $?
local value=$(awk "\$1 == \"$key\" { print \$2 }" "$cfgfile")
printf '%s\n' "${value:-$default}"
}
stop() {
get_config
ebegin "Stopping $name"
start-stop-daemon --stop --retry 30 --pidfile "${pidfile}"
eend $?
}