%global upstream_name redis %global _hardened_build 1 %global with_perftools 0 # redis 2.8 sentinel is the first upstream version to work # however as packaged here it is entirely broken # FIXME: consider removal into a separate package %if 0%{?fedora} >= 21 || 0%{?rhel} >= 7 %global with_sentinel 1 %endif %if 0%{?fedora} >= 15 || 0%{?rhel} >= 7 %global with_systemd 1 %else %global with_systemd 0 %endif # Tests fail in mock, not in local build. %global with_tests %{?_with_tests:1}%{!?_with_tests:0} Name: %{upstream_name}28 Version: 2.8.14 Release: 3%{?dist} Summary: A persistent key-value database License: BSD URL: http://redis.io Source0: http://download.redis.io/releases/%{upstream_name}-%{version}.tar.gz Source1: %{upstream_name}.logrotate Source2: %{upstream_name}-sentinel.service Source3: %{upstream_name}.service Source4: %{upstream_name}.tmpfiles Source5: %{upstream_name}-sentinel.init Source6: %{upstream_name}.init Source7: %{upstream_name}-shutdown # Update configuration for Fedora Patch0: redis-2.8.11-redis-conf.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 %else BuildRequires: jemalloc-devel %endif %if 0%{?with_tests} BuildRequires: procps-ng %endif %if 0%{?with_systemd} BuildRequires: systemd %endif %if 0%{?with_tests} BuildRequires: tcl %endif # Required for redis-shutdown Requires: /bin/awk 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 Obsoletes: %{upstream_name} < 2.4.13 Provides: %{upstream_name} = %{version}-%{release} %description 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 -n %{upstream_name}-%{version} rm -frv 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 make %{?_smp_mflags} \ DEBUG="" \ LDFLAGS="%{?__global_ldflags}" \ CFLAGS+="%{optflags}" \ LUA_LDFLAGS+="%{?__global_ldflags}" \ %if 0%{?with_perftools} MALLOC=tcmalloc \ %else MALLOC=jemalloc \ %endif all %install make install INSTALL="install -p" PREFIX=%{buildroot}%{_prefix} # Filesystem. install -d %{buildroot}%{_sharedstatedir}/%{upstream_name} install -d %{buildroot}%{_localstatedir}/log/%{upstream_name} install -d %{buildroot}%{_localstatedir}/run/%{upstream_name} # Install logrotate file. install -pDm644 %{S:1} %{buildroot}%{_sysconfdir}/logrotate.d/%{upstream_name} # Install configuration files. install -pDm644 %{upstream_name}.conf %{buildroot}%{_sysconfdir}/%{upstream_name}.conf %if 0%{?with_sentinel} install -pDm644 sentinel.conf %{buildroot}%{_sysconfdir}/%{upstream_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}/%{upstream_name}.conf %else %if 0%{?with_sentinel} install -pDm755 %{S:5} %{buildroot}%{_initrddir}/%{upstream_name}-sentinel %endif install -pDm755 %{S:6} %{buildroot}%{_initrddir}/%{upstream_name} %endif # Fix non-standard-executable-perm error. chmod 755 %{buildroot}%{_bindir}/%{upstream_name}-* # create redis-sentinel command as described on # http://redis.io/topics/sentinel ln -s %{upstream_name}-server %{buildroot}%{_bindir}/%{upstream_name}-sentinel # Install redis-shutdown install -pDm755 %{S:7} %{buildroot}%{_bindir}/%{upstream_name}-shutdown %check %if 0%{?with_tests} make test %if 0%{?with_sentinel} make test-sentinel %endif %endif %pre getent group %{upstream_name} &> /dev/null || \ groupadd -r %{upstream_name} &> /dev/null getent passwd %{upstream_name} &> /dev/null || \ useradd -r -g %{upstream_name} -d %{_sharedstatedir}/%{upstream_name} -s /sbin/nologin \ -c 'Redis Database Server' %{upstream_name} &> /dev/null exit 0 %post %if 0%{?with_systemd} %systemd_post %{upstream_name}.service %if 0%{?with_sentinel} %systemd_post %{upstream_name}-sentinel.service %endif %else chkconfig --add %{upstream_name} %if 0%{?with_sentinel} chkconfig --add %{upstream_name}-sentinel %endif %endif %preun %if 0%{?with_systemd} %systemd_preun %{upstream_name}.service %if 0%{?with_sentinel} %systemd_preun %{upstream_name}-sentinel.service %endif %else if [ $1 -eq 0 ] ; then service %{upstream_name} stop &> /dev/null chkconfig --del %{upstream_name} &> /dev/null %if 0%{?with_sentinel} service %{upstream_name}-sentinel stop &> /dev/null chkconfig --del %{upstream_name}-sentinel &> /dev/null %endif %endif %postun %if 0%{?with_systemd} %systemd_postun_with_restart %{upstream_name}.service %if 0%{?with_sentinel} %systemd_postun_with_restart %{upstream_name}-sentinel.service %endif %else if [ "$1" -ge "1" ] ; then service %{upstream_name} condrestart >/dev/null 2>&1 || : %if 0%{?with_sentinel} service %{upstream_name}-sentinel condrestart >/dev/null 2>&1 || : %endif fi %endif %files %{!?_licensedir:%global license %%doc} %license COPYING %doc 00-RELEASENOTES BUGS CONTRIBUTING MANIFESTO README %config(noreplace) %{_sysconfdir}/logrotate.d/%{upstream_name} %attr(0644, redis, root) %config(noreplace) %{_sysconfdir}/%{upstream_name}.conf %if 0%{?with_sentinel} %attr(0644, redis, root) %config(noreplace) %{_sysconfdir}/%{upstream_name}-sentinel.conf %endif %dir %attr(0750, redis, redis) %{_sharedstatedir}/%{upstream_name} %dir %attr(0750, redis, redis) %{_localstatedir}/log/%{upstream_name} %dir %attr(0750, redis, redis) %{_localstatedir}/run/%{upstream_name} %{_bindir}/%{upstream_name}-* %if 0%{?with_systemd} %{_tmpfilesdir}/%{upstream_name}.conf %{_unitdir}/%{upstream_name}.service %if 0%{?with_sentinel} %{_unitdir}/%{upstream_name}-sentinel.service %endif %else %{_initrddir}/%{upstream_name} %if 0%{?with_sentinel} %{_initrddir}/%{upstream_name}-sentinel %endif %endif %changelog * Thu Nov 16 2014 James Laska - 2.8.14-3 - Package 2.8.14 as redis28 for el6 * Thu Sep 11 2014 Haïkel Guémar - 2.8.14-2 - Cleanup spec - Fix shutdown for redis-{server,sentinel} - Backport fixes from Remi Collet repository (ie: sentinel working) * Thu Sep 11 2014 Haïkel Guémar - 2.8.14-1 - Upstream 2.8.14 - Bugfix for lua scripting users (server crash) - Refresh patches * Tue Jul 29 2014 Warren Togami - 2.8.13-3 - Revert rename redis.service to redis-server (4 years as packaged service name). - Revert "daemonize yes" in default redis.conf systemd handles background and process tracking on its own, this broke systemd launch. - Revert redis.init as it too handled daemonizing. - Revert tcp-keepalive default to 0. - Revert ExecStartPre hack, /var/lib/redis is owned by the package. No %ghost directories, just own it. - FIXME: sentinel is broken, mispackaged and quite possibly belongs in an entirely separate package because it is not meant to be used concurrently with the ordinary systemd redis and it requires a highly specialized custom configuration. * Wed Jul 23 2014 Warren Togami - 2.8.13-2 - Fix detection of EL7: systemd unit was missing - Fix detection of EL5 * Wed Jul 16 2014 Christopher Meng - 2.8.13-1 - Update to 2.8.13 * Tue Jun 24 2014 Christopher Meng - 2.8.12-1 - Update to 2.8.12 * 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 * Fri Sep 06 2013 Fabian Deutsch - 2.6.16-1 - Update to 2.6.16 - Fix rhbz#973151 - Fix rhbz#656683 - Fix rhbz#977357 (Jan Vcelak ) * Sun Aug 04 2013 Fedora Release Engineering - 2.6.13-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild * Tue Jul 23 2013 Peter Robinson 2.6.13-4 - ARM has gperftools * Wed Jun 19 2013 Fabian Deutsch - 2.6.13-3 - Modify jemalloc patch for s390 compatibility (Thanks sharkcz) * Fri Jun 07 2013 Fabian Deutsch - 2.6.13-2 - Unbundle jemalloc * Fri Jun 07 2013 Fabian Deutsch - 2.6.13-1 - Add compile PIE flag (rhbz#955459) - Update to redis 2.6.13 (rhbz#820919) * Thu Feb 14 2013 Fedora Release Engineering - 2.6.7-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild * Thu Dec 27 2012 Silas Sewell - 2.6.7-1 - Update to redis 2.6.7 * Sat Jul 21 2012 Fedora Release Engineering - 2.4.15-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild * Sun Jul 08 2012 Silas Sewell - 2.4.15-2 - Remove TODO from docs * Sun Jul 08 2012 Silas Sewell - 2.4.15-1 - Update to redis 2.4.15 * Sat May 19 2012 Silas Sewell - 2.4.13-1 - Update to redis 2.4.13 * Sat Mar 31 2012 Silas Sewell - 2.4.10-1 - Update to redis 2.4.10 * Fri Feb 24 2012 Silas Sewell - 2.4.8-1 - Update to redis 2.4.8 * Sat Feb 04 2012 Silas Sewell - 2.4.7-1 - Update to redis 2.4.7 * Wed Feb 01 2012 Fabian Deutsch - 2.4.6-4 - Fixed a typo in the spec * Tue Jan 31 2012 Fabian Deutsch - 2.4.6-3 - Fix .service file, to match config (Type=simple). * Tue Jan 31 2012 Fabian Deutsch - 2.4.6-2 - Fix .service file, credits go to Timon. * Thu Jan 12 2012 Fabian Deutsch - 2.4.6-1 - Update to 2.4.6 - systemd unit file added - Compiler flags changed to compile 2.4.6 - Remove doc/ and Changelog * Sun Jul 24 2011 Silas Sewell - 2.2.12-1 - Update to redis 2.2.12 * Fri May 06 2011 Dan Horák - 2.2.5-2 - google-perftools exists only on selected architectures * Sat Apr 23 2011 Silas Sewell - 2.2.5-1 - Update to redis 2.2.5 * Sat Mar 26 2011 Silas Sewell - 2.2.2-1 - Update to redis 2.2.2 * Wed Feb 09 2011 Fedora Release Engineering - 2.0.4-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild * Sun Dec 19 2010 Silas Sewell - 2.0.4-1 - Update to redis 2.0.4 * Tue Oct 19 2010 Silas Sewell - 2.0.3-1 - Update to redis 2.0.3 * Fri Oct 08 2010 Silas Sewell - 2.0.2-1 - Update to redis 2.0.2 - Disable checks section for el5 * Sat Sep 11 2010 Silas Sewell - 2.0.1-1 - Update to redis 2.0.1 * Sat Sep 04 2010 Silas Sewell - 2.0.0-1 - Update to redis 2.0.0 * Thu Sep 02 2010 Silas Sewell - 1.2.6-3 - Add Fedora build flags - Send all scriplet output to /dev/null - Remove debugging flags - Add redis.conf check to init script * Mon Aug 16 2010 Silas Sewell - 1.2.6-2 - Don't compress man pages - Use patch to fix redis.conf * Tue Jul 06 2010 Silas Sewell - 1.2.6-1 - Initial package