Update to 2.8.11;

Major SPEC rewrite;
Compiler flags conformed to the guideline;
Patches refreshed;
Remove obsoleted syslog.target in systemd units;
Add ExecStartPre to units to ensure tmpdirs are available before start;
Add new systemd+sysv files for redis-sentinel;
Use jemalloc instead of tcmalloc as memory allocator;
Tests enabled(not verified in Koji yet);
More stricted directory permissions;
Move back %_sbindir binaries;
Use redis-prefix for some files;
This commit is contained in:
Christopher Meng 2014-06-19 14:21:29 +08:00
parent 58ec2a40db
commit dde8ff44ac
9 changed files with 200 additions and 269 deletions

1
.gitignore vendored
View File

@ -12,3 +12,4 @@
/redis-2.6.7.tar.gz
/redis-2.6.13.tar.gz
/redis-2.6.16.tar.gz
/redis-2.8.11.tar.gz

View File

@ -1,38 +0,0 @@
--- a/redis.conf 2013-04-30 15:15:56.000000000 +0200
+++ b/redis.conf 2013-06-07 08:32:04.571127785 +0200
@@ -18,7 +18,7 @@ daemonize no
# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
# default. You can specify a custom pid file location here.
-pidfile /var/run/redis.pid
+pidfile /var/run/redis/redis.pid
# Accept connections on the specified port, default is 6379.
# If port 0 is specified Redis will not listen on a TCP socket.
@@ -27,7 +27,7 @@ port 6379
# If you want you can bind a single interface, if the bind option is not
# specified all the interfaces will listen for incoming connections.
#
-# bind 127.0.0.1
+bind 127.0.0.1
# Specify the path for the unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
@@ -66,7 +66,7 @@ loglevel notice
# Specify the log file name. Also 'stdout' 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 stdout
+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.
@@ -150,7 +150,7 @@ dbfilename dump.rdb
# 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,23 +0,0 @@
--- a/deps/Makefile
+++ a/deps/Makefile
@@ -58,7 +58,7 @@ ifeq ($(uname_S),SunOS)
LUA_CFLAGS= -D__C99FEATURES__=1
endif
-LUA_CFLAGS+= -O2 -Wall -DLUA_ANSI $(CFLAGS)
+LUA_CFLAGS+= -O2 -Wall -fPIC -DLUA_ANSI $(CFLAGS)
LUA_LDFLAGS+= $(LDFLAGS)
lua: .make-prerequisites
--- a/deps/linenoise/Makefile
+++ a/deps/linenoise/Makefile
@@ -2,7 +2,7 @@ STD=
WARN= -Wall
OPT= -Os
-R_CFLAGS= $(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS)
+R_CFLAGS= $(STD) $(WARN) $(OPT) $(DEBUG) $(CFLAGS) -fPIC
R_LDFLAGS= $(LDFLAGS)
DEBUG= -g

View File

@ -1,14 +0,0 @@
--- a/src/Makefile 2013-04-30 15:15:56.000000000 +0200
+++ b/src/Makefile 2013-06-19 12:58:12.345612310 +0200
@@ -71,9 +71,8 @@ ifeq ($(MALLOC),tcmalloc_minimal)
endif
ifeq ($(MALLOC),jemalloc)
- DEPENDENCY_TARGETS+= jemalloc
- FINAL_CFLAGS+= -DUSE_JEMALLOC -I../deps/jemalloc/include
- FINAL_LIBS+= ../deps/jemalloc/lib/libjemalloc.a -ldl
+ FINAL_CFLAGS+= -DUSE_JEMALLOC -DJEMALLOC_NO_DEMANGLE -I/usr/include/jemalloc
+ FINAL_LIBS+= -ljemalloc -ldl
endif
REDIS_CC=$(QUIET_CC)$(CC) $(FINAL_CFLAGS)

View File

@ -1,88 +0,0 @@
#!/bin/sh
#
# redis init file for starting up the redis daemon
#
# chkconfig: - 20 80
# description: Starts and stops the redis daemon.
# Source function library.
. /etc/rc.d/init.d/functions
name="redis-server"
exec="/usr/sbin/$name"
pidfile="/var/run/redis/redis.pid"
REDIS_CONFIG="/etc/redis.conf"
[ -e /etc/sysconfig/redis ] && . /etc/sysconfig/redis
lockfile=/var/lock/subsys/redis
start() {
[ -f $REDIS_CONFIG ] || exit 6
[ -x $exec ] || exit 5
echo -n $"Starting $name: "
daemon --user ${REDIS_USER-redis} "$exec $REDIS_CONFIG"
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $name: "
killproc -p $pidfile $name
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
false
}
rh_status() {
status -p $pidfile $name
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart}"
exit 2
esac
exit $?

View File

@ -1,12 +0,0 @@
[Unit]
Description=A persistent key-value database
After=syslog.target network.target
[Service]
ExecStart=/usr/sbin/redis-server /etc/redis.conf
User=redis
Group=redis
[Install]
WantedBy=multi-user.target

View File

@ -1,136 +1,241 @@
# Check for status of man pages
# http://code.google.com/p/redis/issues/detail?id=202
%global _hardened_build 1
%ifarch %{ix86} x86_64 ppc %{arm}
# available only on selected architectures
%global with_perftools 1
%global with_perftools 0
# Prior to redis 2.8 sentinel didn't work correctly.
%global with_sentinel 1
%if 0%{?fedora} >= 15 || 0%{?el} >= 7
%global with_systemd 1
%else
%global with_systemd 0
%endif
Name: redis
Version: 2.6.16
Release: 2%{?dist}
Summary: A persistent key-value database
%if 0%{?el} && 0%{?el} <= 5
%global with_tests 0
%else
%global with_tests 1
%endif
Group: Applications/Databases
License: BSD
URL: http://redis.io
Source0: http://download.redis.io/releases/%{name}-%{version}.tar.gz
Source1: %{name}.logrotate
Source2: %{name}.init
Source3: %{name}.service
Source4: %{name}.tmpfiles
Name: redis
Version: 2.8.11
Release: 1%{?dist}
Summary: A persistent caching system, key-value and data structures database
License: BSD
URL: http://redis.io
Source0: http://download.redis.io/releases/%{name}-%{version}.tar.gz
Source1: %{name}.logrotate
Source2: %{name}-sentinel.service
Source3: %{name}-server.service
Source4: %{name}.tmpfiles
Source5: %{name}-sentinel.init
Source6: %{name}-server.init
# Update configuration for Fedora
Patch0: %{name}-2.6.13-redis.conf.patch
Patch1: %{name}-deps-PIC.patch
Patch2: %{name}-deps-unbundle-jemalloc.patch
BuildRequires: systemd-units
%if !0%{?el5}
BuildRequires: tcl >= 8.5
Patch0: redis-2.8.11-redis-conf-location-variables.patch
Patch1: redis-2.8.11-deps-library-fPIC-performance-tuning.patch
Patch2: redis-2.8.11-use-system-jemalloc.patch
# tests/integration/replication-psync.tcl failed on slow machines(GITHUB #1417)
Patch3: redis-2.8.11-disable-test-failed-on-slow-machine.patch
%if 0%{?with_perftools}
BuildRequires: gperftools-devel
BuildRequires: gperftools-devel
%endif
BuildRequires: jemalloc-devel
%if 0%{?with_systemd}
BuildRequires: systemd
%endif
%if 0%{?with_tests}
BuildRequires: tcl >= 8.5
%endif
Requires: logrotate
Requires(pre): shadow-utils
%if 0%{?with_systemd}
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
%else
Requires(post): chkconfig
Requires(preun): chkconfig
Requires(preun): initscripts
Requires(postun): initscripts
%endif
BuildRequires: jemalloc-devel
Requires: logrotate
Requires(post): chkconfig
Requires(postun): initscripts
Requires(pre): shadow-utils
Requires(preun): chkconfig
Requires(preun): initscripts
%description
Redis is an advanced key-value store. It is similar to memcached but the data
set is not volatile, and values can be strings, exactly like in memcached, but
also lists, sets, and ordered sets. All this data types can be manipulated with
atomic operations to push/pop elements, add/remove elements, perform server side
union, intersection, difference between sets, and so forth. Redis supports
different kind of sorting abilities.
Redis is an advanced key-value store. It is often referred to as a data
structure server since keys can contain strings, hashes, lists, sets and
sorted sets.
You can run atomic operations on these types, like appending to a string;
incrementing the value in a hash; pushing to a list; computing set
intersection, union and difference; or getting the member with highest
ranking in a sorted set.
In order to achieve its outstanding performance, Redis works with an
in-memory dataset. Depending on your use case, you can persist it either
by dumping the dataset to disk every once in a while, or by appending
each command to a log.
Redis also supports trivial-to-setup master-slave replication, with very
fast non-blocking first synchronization, auto-reconnection on net split
and so forth.
Other features include Transactions, Pub/Sub, Lua scripting, Keys with a
limited time-to-live, and configuration settings to make Redis behave like
a cache.
You can use Redis from most programming languages also.
%prep
%setup -q
rm -rvf deps/jemalloc
%patch0 -p1
%patch1 -p1
%patch2 -p1
%if 0%{?with_tests}
%patch3 -p1
%endif
# No hidden build.
sed -i -e 's|\t@|\t|g' deps/lua/src/Makefile
sed -i -e 's|$(QUIET_CC)||g' src/Makefile
sed -i -e 's|$(QUIET_LINK)||g' src/Makefile
sed -i -e 's|$(QUIET_INSTALL)||g' src/Makefile
# Ensure deps are built with proper flags
sed -i -e 's|$(CFLAGS)|%{optflags}|g' deps/Makefile
sed -i -e 's|OPTIMIZATION?=-O3|OPTIMIZATION=%{optflags}|g' deps/hiredis/Makefile
sed -i -e 's|$(LDFLAGS)|%{?__global_ldflags}|g' deps/hiredis/Makefile
sed -i -e 's|$(CFLAGS)|%{optflags}|g' deps/linenoise/Makefile
sed -i -e 's|$(LDFLAGS)|%{?__global_ldflags}|g' deps/linenoise/Makefile
%build
rm -rvf deps/jemalloc
export CFLAGS="$RPM_OPT_FLAGS"
make %{?_smp_mflags} V=1 \
DEBUG="" \
LDFLAGS="%{?__global_ldflags}" \
CFLAGS="$RPM_OPT_FLAGS -fPIC" \
LUA_CFLAGS="-fPIC" \
%if !0%{?el5}
make %{?_smp_mflags} \
DEBUG="" \
LDFLAGS="%{?__global_ldflags}" \
CFLAGS+="%{optflags}" \
LUA_LDFLAGS+="%{?__global_ldflags}" \
%if 0%{?with_perftools}
USE_TCMALLOC=yes \
%endif
%endif
all
%check
%if !0%{?el5}
# make test
MALLOC=tcmalloc \
%else
MALLOC=jemalloc \
%endif
all
%install
make install PREFIX=%{buildroot}%{_prefix}
# Install misc other
install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
install -p -D -m 755 %{SOURCE2} %{buildroot}%{_initrddir}/%{name}
install -p -D -m 644 %{name}.conf %{buildroot}%{_sysconfdir}/%{name}.conf
install -d -m 755 %{buildroot}%{_localstatedir}/lib/%{name}
install -d -m 755 %{buildroot}%{_localstatedir}/log/%{name}
install -d -m 755 %{buildroot}%{_localstatedir}/run/%{name}
make install INSTALL="install -p" PREFIX=%{buildroot}%{_prefix}
# Install systemd unit
install -p -D -m 644 %{SOURCE3} %{buildroot}/%{_unitdir}/%{name}.service
# Filesystem.
install -d %{buildroot}%{_sharedstatedir}/%{name}
install -d %{buildroot}%{_localstatedir}/log/%{name}
install -d %{buildroot}%{_localstatedir}/run/%{name}
# Install systemd tmpfiles config
install -p -D -m 644 %{SOURCE4} %{buildroot}%{_tmpfilesdir}/%{name}.conf
# Install logrotate file.
install -pDm644 %{S:1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name}
# Fix non-standard-executable-perm error
# Install configuration files.
install -pDm644 %{name}.conf %{buildroot}%{_sysconfdir}/%{name}.conf
%if 0%{?with_sentinel}
install -pDm644 sentinel.conf %{buildroot}%{_sysconfdir}/%{name}-sentinel.conf
%endif
# Install Systemd/SysV files.
%if 0%{?with_systemd}
mkdir -p %{buildroot}%{_unitdir}
install -pm644 %{S:3} %{buildroot}%{_unitdir}
%if 0%{?with_sentinel}
install -pm644 %{S:2} %{buildroot}%{_unitdir}
%endif
# Install systemd tmpfiles config.
install -pDm644 %{S:4} %{buildroot}%{_tmpfilesdir}/%{name}.conf
%else
%if 0%{?with_sentinel}
install -pDm755 %{S:5} %{buildroot}%{_initrddir}/%{name}-sentinel
%endif
install -pDm755 %{S:6} %{buildroot}%{_initrddir}/%{name}-server
%endif
# Fix non-standard-executable-perm error.
chmod 755 %{buildroot}%{_bindir}/%{name}-*
# Ensure redis-server location doesn't change
mkdir -p %{buildroot}%{_sbindir}
mv %{buildroot}%{_bindir}/%{name}-server %{buildroot}%{_sbindir}/%{name}-server
%post
/sbin/chkconfig --add redis
%check
make test
%if 0%{?with_sentinel}
make test-sentinel
%endif
%pre
getent group redis &> /dev/null || groupadd -r redis &> /dev/null
getent passwd redis &> /dev/null || \
useradd -r -g redis -d %{_sharedstatedir}/redis -s /sbin/nologin \
-c 'Redis Server' redis &> /dev/null
getent group %{name} &> /dev/null || groupadd -r %{name} &> /dev/null
getent passwd %{name} &> /dev/null || \
useradd -r -g %{name} -d %{_sharedstatedir}/%{name} -s /sbin/nologin \
-c 'Redis Database Server' %{name} &> /dev/null
exit 0
%post
%if 0%{?with_systemd}
%if 0%{?with_sentinel}
%systemd_post %{name}-sentinel.service
%endif
%systemd_post %{name}-server.service
%else
chkconfig --add %{name}-sentinel
chkconfig --add %{name}-server
%endif
%preun
if [ $1 = 0 ]; then
/sbin/service redis stop &> /dev/null
/sbin/chkconfig --del redis &> /dev/null
%if 0%{?with_systemd}
%if 0%{?with_sentinel}
%systemd_preun %{name}-sentinel.service
%endif
%systemd_preun %{name}-server.service
%else
if [ $1 -eq 0 ] ; then
service %{name}-sentinel stop &> /dev/null
chkconfig --del %{name}-sentinel &> /dev/null
service %{name}-server stop &> /dev/null
chkconfig --del %{name}-server &> /dev/null
%endif
%postun
%if 0%{?with_systemd}
%if 0%{?with_sentinel}
%systemd_postun_with_restart %{name}-sentinel.service
%endif
%systemd_postun_with_restart %{name}-server.service
%else
if [ "$1" -ge "1" ] ; then
service %{name}-sentinel condrestart >/dev/null 2>&1 || :
service %{name}-server condrestart >/dev/null 2>&1 || :
fi
%endif
%files
%defattr(-,root,root,-)
%doc 00-RELEASENOTES BUGS CONTRIBUTING COPYING README
%doc 00-RELEASENOTES BUGS CONTRIBUTING COPYING MANIFESTO README
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%config(noreplace) %{_sysconfdir}/%{name}.conf
%{_tmpfilesdir}/%{name}.conf
%dir %attr(0755, redis, root) %{_localstatedir}/lib/%{name}
%dir %attr(0755, redis, root) %{_localstatedir}/log/%{name}
%ghost %dir %attr(0755, redis, root) %{_localstatedir}/run/%{name}
%if 0%{?with_sentinel}
%config(noreplace) %{_sysconfdir}/%{name}-sentinel.conf
%endif
%dir %attr(0750, redis, redis) %{_sharedstatedir}/%{name}
%dir %attr(0750, redis, redis) %{_localstatedir}/log/%{name}
%ghost %dir %attr(0750, redis, redis) %{_localstatedir}/run/%{name}
%{_bindir}/%{name}-*
%{_sbindir}/%{name}-*
%{_initrddir}/%{name}
%{_unitdir}/%{name}.service
%if 0%{?with_systemd}
%{_tmpfilesdir}/%{name}.conf
%if 0%{?with_sentinel}
%{_unitdir}/%{name}-sentinel.service
%endif
%{_unitdir}/%{name}-server.service
%else
%if 0%{?with_sentinel}
%{_initrddir}/%{name}-sentinel
%endif
%{_initrddir}/%{name}-server
%endif
%changelog
* Wed Jun 18 2014 Christopher Meng <rpm@cicku.me> - 2.8.11-1
- Update to 2.8.11
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.6.16-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild

View File

@ -1,2 +1,2 @@
# redis runtime directory
d /var/run/redis 0755 redis root -
d /run/redis 0755 redis redis -

View File

@ -1 +1 @@
ca1b81bd56fe0c5e2c8ec443a95c908d redis-2.6.16.tar.gz
196e0cf387d8885439add8a3e1cab469 redis-2.8.11.tar.gz