From dde8ff44acd447b4ca31291c2691dd627e8c63fe Mon Sep 17 00:00:00 2001 From: Christopher Meng Date: Jun 19 2014 06:21:29 +0000 Subject: 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; --- diff --git a/.gitignore b/.gitignore index 1bd2bb0..c2d015f 100644 --- a/.gitignore +++ b/.gitignore @@ -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 diff --git a/redis-2.6.13-redis.conf.patch b/redis-2.6.13-redis.conf.patch deleted file mode 100644 index 7c5ab93..0000000 --- a/redis-2.6.13-redis.conf.patch +++ /dev/null @@ -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 ################################# - diff --git a/redis-deps-PIC.patch b/redis-deps-PIC.patch deleted file mode 100644 index 944fa35..0000000 --- a/redis-deps-PIC.patch +++ /dev/null @@ -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 - - diff --git a/redis-deps-unbundle-jemalloc.patch b/redis-deps-unbundle-jemalloc.patch deleted file mode 100644 index c68c1f6..0000000 --- a/redis-deps-unbundle-jemalloc.patch +++ /dev/null @@ -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) diff --git a/redis.init b/redis.init deleted file mode 100644 index 14fad01..0000000 --- a/redis.init +++ /dev/null @@ -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 $? diff --git a/redis.service b/redis.service deleted file mode 100644 index 3aaadb8..0000000 --- a/redis.service +++ /dev/null @@ -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 - diff --git a/redis.spec b/redis.spec index f0ac7d9..418fb2a 100644 --- a/redis.spec +++ b/redis.spec @@ -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 -%build -rm -rvf deps/jemalloc +# 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 -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} +%build +make %{?_smp_mflags} \ + DEBUG="" \ + LDFLAGS="%{?__global_ldflags}" \ + CFLAGS+="%{optflags}" \ + LUA_LDFLAGS+="%{?__global_ldflags}" \ %if 0%{?with_perftools} - USE_TCMALLOC=yes \ + MALLOC=tcmalloc \ +%else + MALLOC=jemalloc \ %endif + all + +%install +make install INSTALL="install -p" PREFIX=%{buildroot}%{_prefix} + +# Filesystem. +install -d %{buildroot}%{_sharedstatedir}/%{name} +install -d %{buildroot}%{_localstatedir}/log/%{name} +install -d %{buildroot}%{_localstatedir}/run/%{name} + +# Install logrotate file. +install -pDm644 %{S:1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name} + +# 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 - all -%check -%if !0%{?el5} -# make test +# 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 -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} - -# Install systemd unit -install -p -D -m 644 %{SOURCE3} %{buildroot}/%{_unitdir}/%{name}.service - -# Install systemd tmpfiles config -install -p -D -m 644 %{SOURCE4} %{buildroot}%{_tmpfilesdir}/%{name}.conf - -# Fix non-standard-executable-perm error -chmod 755 %{buildroot}%{_bindir}/%{name}-* +# 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 -# Ensure redis-server location doesn't change -mkdir -p %{buildroot}%{_sbindir} -mv %{buildroot}%{_bindir}/%{name}-server %{buildroot}%{_sbindir}/%{name}-server +# Fix non-standard-executable-perm error. +chmod 755 %{buildroot}%{_bindir}/%{name}-* -%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 - 2.8.11-1 +- Update to 2.8.11 + * Sun Jun 08 2014 Fedora Release Engineering - 2.6.16-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild diff --git a/redis.tmpfiles b/redis.tmpfiles index 657d8a5..d8d26ed 100644 --- a/redis.tmpfiles +++ b/redis.tmpfiles @@ -1,2 +1,2 @@ # redis runtime directory -d /var/run/redis 0755 redis root - +d /run/redis 0755 redis redis - diff --git a/sources b/sources index c0c8fd0..73f7ea1 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -ca1b81bd56fe0c5e2c8ec443a95c908d redis-2.6.16.tar.gz +196e0cf387d8885439add8a3e1cab469 redis-2.8.11.tar.gz