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.7.tar.gz
/redis-2.6.13.tar.gz /redis-2.6.13.tar.gz
/redis-2.6.16.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 %global _hardened_build 1
%ifarch %{ix86} x86_64 ppc %{arm} %global with_perftools 0
# available only on selected architectures
%global with_perftools 1 # 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 %endif
Name: redis %if 0%{?el} && 0%{?el} <= 5
Version: 2.6.16 %global with_tests 0
Release: 2%{?dist} %else
Summary: A persistent key-value database %global with_tests 1
%endif
Group: Applications/Databases Name: redis
License: BSD Version: 2.8.11
URL: http://redis.io Release: 1%{?dist}
Source0: http://download.redis.io/releases/%{name}-%{version}.tar.gz Summary: A persistent caching system, key-value and data structures database
Source1: %{name}.logrotate License: BSD
Source2: %{name}.init URL: http://redis.io
Source3: %{name}.service Source0: http://download.redis.io/releases/%{name}-%{version}.tar.gz
Source4: %{name}.tmpfiles 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 # Update configuration for Fedora
Patch0: %{name}-2.6.13-redis.conf.patch Patch0: redis-2.8.11-redis-conf-location-variables.patch
Patch1: %{name}-deps-PIC.patch Patch1: redis-2.8.11-deps-library-fPIC-performance-tuning.patch
Patch2: %{name}-deps-unbundle-jemalloc.patch Patch2: redis-2.8.11-use-system-jemalloc.patch
# tests/integration/replication-psync.tcl failed on slow machines(GITHUB #1417)
BuildRequires: systemd-units Patch3: redis-2.8.11-disable-test-failed-on-slow-machine.patch
%if !0%{?el5}
BuildRequires: tcl >= 8.5
%if 0%{?with_perftools} %if 0%{?with_perftools}
BuildRequires: gperftools-devel BuildRequires: gperftools-devel
%endif %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 %endif
BuildRequires: jemalloc-devel
Requires: logrotate
Requires(post): chkconfig
Requires(postun): initscripts
Requires(pre): shadow-utils
Requires(preun): chkconfig
Requires(preun): initscripts
%description %description
Redis is an advanced key-value store. It is similar to memcached but the data Redis is an advanced key-value store. It is often referred to as a data
set is not volatile, and values can be strings, exactly like in memcached, but structure server since keys can contain strings, hashes, lists, sets and
also lists, sets, and ordered sets. All this data types can be manipulated with sorted sets.
atomic operations to push/pop elements, add/remove elements, perform server side
union, intersection, difference between sets, and so forth. Redis supports You can run atomic operations on these types, like appending to a string;
different kind of sorting abilities. 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 %prep
%setup -q %setup -q
rm -rvf deps/jemalloc
%patch0 -p1 %patch0 -p1
%patch1 -p1 %patch1 -p1
%patch2 -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 %build
rm -rvf deps/jemalloc make %{?_smp_mflags} \
DEBUG="" \
export CFLAGS="$RPM_OPT_FLAGS" LDFLAGS="%{?__global_ldflags}" \
make %{?_smp_mflags} V=1 \ CFLAGS+="%{optflags}" \
DEBUG="" \ LUA_LDFLAGS+="%{?__global_ldflags}" \
LDFLAGS="%{?__global_ldflags}" \
CFLAGS="$RPM_OPT_FLAGS -fPIC" \
LUA_CFLAGS="-fPIC" \
%if !0%{?el5}
%if 0%{?with_perftools} %if 0%{?with_perftools}
USE_TCMALLOC=yes \ MALLOC=tcmalloc \
%endif %else
%endif MALLOC=jemalloc \
all
%check
%if !0%{?el5}
# make test
%endif %endif
all
%install %install
make install PREFIX=%{buildroot}%{_prefix} make install INSTALL="install -p" 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}
# Install systemd unit # Filesystem.
install -p -D -m 644 %{SOURCE3} %{buildroot}/%{_unitdir}/%{name}.service install -d %{buildroot}%{_sharedstatedir}/%{name}
install -d %{buildroot}%{_localstatedir}/log/%{name}
install -d %{buildroot}%{_localstatedir}/run/%{name}
# Install systemd tmpfiles config # Install logrotate file.
install -p -D -m 644 %{SOURCE4} %{buildroot}%{_tmpfilesdir}/%{name}.conf 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}-* chmod 755 %{buildroot}%{_bindir}/%{name}-*
# Ensure redis-server location doesn't change %check
mkdir -p %{buildroot}%{_sbindir} make test
mv %{buildroot}%{_bindir}/%{name}-server %{buildroot}%{_sbindir}/%{name}-server %if 0%{?with_sentinel}
make test-sentinel
%post %endif
/sbin/chkconfig --add redis
%pre %pre
getent group redis &> /dev/null || groupadd -r redis &> /dev/null getent group %{name} &> /dev/null || groupadd -r %{name} &> /dev/null
getent passwd redis &> /dev/null || \ getent passwd %{name} &> /dev/null || \
useradd -r -g redis -d %{_sharedstatedir}/redis -s /sbin/nologin \ useradd -r -g %{name} -d %{_sharedstatedir}/%{name} -s /sbin/nologin \
-c 'Redis Server' redis &> /dev/null -c 'Redis Database Server' %{name} &> /dev/null
exit 0 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 %preun
if [ $1 = 0 ]; then %if 0%{?with_systemd}
/sbin/service redis stop &> /dev/null %if 0%{?with_sentinel}
/sbin/chkconfig --del redis &> /dev/null %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 fi
%endif
%files %files
%defattr(-,root,root,-) %doc 00-RELEASENOTES BUGS CONTRIBUTING COPYING MANIFESTO README
%doc 00-RELEASENOTES BUGS CONTRIBUTING COPYING README
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name} %config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%config(noreplace) %{_sysconfdir}/%{name}.conf %config(noreplace) %{_sysconfdir}/%{name}.conf
%{_tmpfilesdir}/%{name}.conf %if 0%{?with_sentinel}
%dir %attr(0755, redis, root) %{_localstatedir}/lib/%{name} %config(noreplace) %{_sysconfdir}/%{name}-sentinel.conf
%dir %attr(0755, redis, root) %{_localstatedir}/log/%{name} %endif
%ghost %dir %attr(0755, redis, root) %{_localstatedir}/run/%{name} %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}-* %{_bindir}/%{name}-*
%{_sbindir}/%{name}-* %if 0%{?with_systemd}
%{_initrddir}/%{name} %{_tmpfilesdir}/%{name}.conf
%{_unitdir}/%{name}.service %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 %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 * 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 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild

View File

@ -1,2 +1,2 @@
# redis runtime directory # 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