diff options
Diffstat (limited to 'redis.spec')
-rw-r--r-- | redis.spec | 330 |
1 files changed, 215 insertions, 115 deletions
@@ -8,6 +8,7 @@ # Please preserve changelog entries # %global _hardened_build 1 +%global with_perftools 0 %if 0%{?fedora} >= 19 || 0%{?rhel} >= 7 %global with_redistrib 1 @@ -15,7 +16,12 @@ %global with_redistrib 0 %endif -# systemd >= 204 with additional service config +%if 0%{?fedora} >= 15 || 0%{?rhel} >= 6 +%global with_pandoc 1 +%else +%global with_pandoc 0 +%endif + %if 0%{?fedora} >= 19 || 0%{?rhel} >= 7 %global with_systemd 1 %else @@ -23,7 +29,7 @@ %endif # Tests fail in mock, not in local build. -%global with_tests 0%{?_with_tests:1} +%global with_tests %{?_with_tests:1}%{!?_with_tests:0} # Pre-version are only available in github #global prever RC3 @@ -32,86 +38,128 @@ %global gh_owner antirez %global gh_project redis -Name: redis -Version: 4.0.2 -Release: 2%{?dist} -Summary: A persistent key-value database +# Commit IDs for the (unversioned) redis-doc repository +# https://fedoraproject.org/wiki/Packaging:SourceURL "Commit Revision" +%global doc_commit 69a5512ae6a4ec77d7b1d0af6aac2224e8e83f95 +%global short_doc_commit %(c=%{doc_commit}; echo ${c:0:7}) -Group: Applications/Databases -License: BSD -URL: http://redis.io +%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d) + +Name: redis +Version: 4.0.2 +Release: 3%{?dist} +Summary: A persistent key-value database +Group: Applications/Databases +License: BSD +URL: http://redis.io %if 0%{?prever:1} -Source0: https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit}/%{name}-%{version}%{prever}-%{gh_short}.tar.gz +Source0: https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit}/%{name}-%{version}%{prever}-%{gh_short}.tar.gz %else -Source0: http://download.redis.io/releases/%{name}-%{version}.tar.gz +Source0: http://download.redis.io/releases/%{name}-%{version}.tar.gz %endif -Source1: %{name}.logrotate -Source2: %{name}.init -Source3: %{name}.service -Source5: %{name}-sentinel.init -Source6: %{name}-sentinel.service -Source7: %{name}-shutdown -Source8: %{name}-limit-systemd -Source9: %{name}-limit-init - +Source1: %{name}.logrotate +Source2: %{name}-sentinel.service +Source3: %{name}.service +Source4: %{name}-sentinel.init +Source5: %{name}.init +Source6: %{name}-shutdown +Source7: %{name}-limit-systemd +Source8: %{name}-limit-init +Source9: macros.%{name} +Source10: https://github.com/antirez/%{name}-doc/archive/%{doc_commit}/%{name}-doc-%{short_doc_commit}.tar.gz + +# To refresh patches: +# tar xf redis-xxx.tar.gz && cd redis-xxx && git init && git add . && git commit -m "%%{version} baseline" +# git am %%{patches} +# Then refresh your patches +# git format-patch HEAD~<number of expected patches> # Update configuration for Fedora -Patch0: 0001-redis-3.2-redis-conf.patch - # https://github.com/antirez/redis/pull/3491 - man pages -Patch3: %{name}-pr3491.patch +Patch0001: 0001-1st-man-pageis-for-redis-cli-redis-benchmark-redis-c.patch # https://github.com/antirez/redis/pull/3494 - symlink -Patch4: %{name}-pr3494.patch - -BuildRequires: tcl >= 8.5 -BuildRequires: jemalloc-devel - +Patch0002: 0002-install-redis-check-rdb-as-a-symlink-instead-of-dupl.patch +%if 0%{?with_perftools} +BuildRequires: gperftools-devel +%else +BuildRequires: jemalloc-devel +%endif +%if 0%{?with_tests} +BuildRequires: procps-ng +BuildRequires: tcl +%endif +%if 0%{?with_pandoc} +BuildRequires: pandoc +%endif +%if 0%{?with_systemd} +BuildRequires: systemd +%endif # Required for redis-shutdown -Requires: /bin/awk -Requires: logrotate -Requires(pre): shadow-utils -%if %{with_systemd} -BuildRequires: systemd-units -Requires(post): systemd-units -Requires(preun): systemd-units -Requires(postun): systemd-units +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 +Requires(post): chkconfig +Requires(preun): chkconfig +Requires(preun): initscripts +Requires(postun): initscripts %endif Provides: bundled(hiredis) Provides: bundled(lua-libs) Provides: bundled(linenoise) +%global redis_modules_abi 1 +%global redis_modules_dir %{_libdir}/%{name}/modules +Provides: redis(modules_abi)%{?_isa} = %{redis_modules_abi} %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 +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 +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 +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 +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 +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. -Documentation: http://redis.io/documentation +%package devel +Summary: Development header for Redis module development +# Header-Only Library (https://fedoraproject.org/wiki/Packaging:Guidelines) +Provides: %{name}-static = %{version}-%{release} + +%description devel +Header file required for building loadable Redis modules. Detailed +API documentation is available in the redis-doc package. + +%package doc +Summary: Documentation for Redis including man pages +License: CC-BY-SA +BuildArch: noarch + +# http://fedoraproject.org/wiki/Packaging:Conflicts "Splitting Packages" +Conflicts: redis < 4.0 +%description doc +Manual pages and detailed documentation for many aspects of Redis use, +administration and development. %if 0%{?with_redistrib} %package trib @@ -125,67 +173,92 @@ Redis cluster management utility providing cluster creation, node addition and removal, status checks, resharding, rebalancing, and other operations. %endif - %prep +%setup -q -b 10 %if 0%{?prever:1} %setup -q -n %{gh_project}-%{gh_commit} %else -%setup -q -n %{name}-%{version} +%setup -q %endif +mv ../%{name}-doc-%{doc_commit} doc rm -frv deps/jemalloc - -%patch0 -p1 -b .rpmconf -%patch3 -p1 -%patch4 -p1 -b .old +%patch0001 -p1 +%patch0002 -p1 # Use system jemalloc library sed -i -e '/cd jemalloc && /d' deps/Makefile sed -i -e 's|../deps/jemalloc/lib/libjemalloc.a|-ljemalloc -ldl|g' src/Makefile sed -i -e 's|-I../deps/jemalloc.*|-DJEMALLOC_NO_DEMANGLE -I/usr/include/jemalloc|g' src/Makefile +# Configuration file changes and additions +sed -i -e 's|^logfile .*$|logfile /var/log/redis/redis.log|g' redis.conf +sed -i -e '$ alogfile /var/log/redis/sentinel.log' sentinel.conf +sed -i -e 's|^dir .*$|dir /var/lib/redis|g' redis.conf + +# Module API version safety check +api=`sed -n -e 's/#define REDISMODULE_APIVER_[0-9][0-9]* //p' src/redismodule.h` +if test "$api" != "%{redis_modules_abi}"; then + : Error: Upstream API version is now ${api}, expecting %%{redis_modules_abi}. + : Update the redis_modules_abi macro, the rpmmacros file, and rebuild. + exit 1 +fi -%global malloc_flags MALLOC=jemalloc -%global make_flags DEBUG="" V="echo" LDFLAGS="%{?__global_ldflags}" CFLAGS+="%{optflags} -fPIC" %{malloc_flags} INSTALL="install -p" PREFIX=%{buildroot}%{_prefix} +%if 0%{?with_pandoc} +docs=`find doc -name \*.md | sed -e 's|.md$||g'` +for doc in $docs; do + pandoc --standalone --from markdown --to html --output $doc.html $doc.md +done +%endif +%if 0%{?with_perftools} +%global malloc_flags MALLOC=tcmalloc +%else +%global malloc_flags MALLOC=jemalloc +%endif +%global make_flags DEBUG="" V="echo" LDFLAGS="%{?__global_ldflags}" CFLAGS+="%{optflags} -fPIC" %{malloc_flags} INSTALL="install -p" PREFIX=%{buildroot}%{_prefix} %build make %{?_smp_mflags} %{make_flags} all - %install make %{make_flags} install # Filesystem. -install -d -m 750 %{buildroot}%{_localstatedir}/lib/%{name} -install -d -m 750 %{buildroot}%{_localstatedir}/log/%{name} -install -d -m 750 %{buildroot}%{_localstatedir}/run/%{name} +install -d %{buildroot}%{_sharedstatedir}/%{name} +install -d %{buildroot}%{_localstatedir}/log/%{name} +install -d %{buildroot}%{_localstatedir}/run/%{name} +install -d %{buildroot}%{redis_modules_dir} # Install logrotate file. -install -p -D -m 644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name} +install -pDm644 %{S:1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name} # Install configuration files. -install -p -D -m 640 %{name}.conf %{buildroot}%{_sysconfdir}/%{name}.conf -install -p -D -m 640 sentinel.conf %{buildroot}%{_sysconfdir}/%{name}-sentinel.conf +install -pDm640 %{name}.conf %{buildroot}%{_sysconfdir}/%{name}.conf +install -pDm640 sentinel.conf %{buildroot}%{_sysconfdir}/%{name}-sentinel.conf # Install systemd unit files. -%if %{with_systemd} -install -p -D -m 644 %{SOURCE3} %{buildroot}%{_unitdir}/%{name}.service -install -p -D -m 644 %{SOURCE6} %{buildroot}%{_unitdir}/%{name}-sentinel.service +%if 0%{?with_systemd} +mkdir -p %{buildroot}%{_unitdir} +install -pm644 %{S:3} %{buildroot}%{_unitdir} +install -pm644 %{S:2} %{buildroot}%{_unitdir} # Install systemd limit files (requires systemd >= 204) -install -p -D -m 644 %{SOURCE8} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/limit.conf -install -p -D -m 644 %{SOURCE8} %{buildroot}%{_sysconfdir}/systemd/system/%{name}-sentinel.service.d/limit.conf +install -p -D -m 644 %{S:7} %{buildroot}%{_sysconfdir}/systemd/system/%{name}.service.d/limit.conf +install -p -D -m 644 %{S:7} %{buildroot}%{_sysconfdir}/systemd/system/%{name}-sentinel.service.d/limit.conf %else # install SysV service files -install -p -D -m 755 %{SOURCE2} %{buildroot}%{_initrddir}/%{name} -install -p -D -m 755 %{SOURCE5} %{buildroot}%{_initrddir}/%{name}-sentinel -install -p -D -m 644 %{SOURCE9} %{buildroot}%{_sysconfdir}/security/limits.d/95-%{name}.conf +install -pDm755 %{S:4} %{buildroot}%{_initrddir}/%{name}-sentinel +install -pDm755 %{S:5} %{buildroot}%{_initrddir}/%{name} +install -p -D -m 644 %{S:8} %{buildroot}%{_sysconfdir}/security/limits.d/95-%{name}.conf %endif -# Fix non-standard-executable-perm error +# Fix non-standard-executable-perm error. chmod 755 %{buildroot}%{_bindir}/%{name}-* # Install redis-shutdown -install -pDm755 %{SOURCE7} %{buildroot}%{_libexecdir}/%{name}-shutdown +install -pDm755 %{S:6} %{buildroot}%{_libexecdir}/%{name}-shutdown + +# Install redis module header +install -pDm644 src/%{name}module.h %{buildroot}%{_includedir}/%{name}module.h %if 0%{?with_redistrib} # Install redis-trib @@ -200,66 +273,74 @@ done ln -s redis-server.1 %{buildroot}%{_mandir}/man1/redis-sentinel.1 ln -s redis.conf.5 %{buildroot}%{_mandir}/man5/redis-sentinel.conf.5 +# Install markdown and html pages +doc=$(echo %{buildroot}/%{_docdir}/%{name}) +for page in $(find doc -name \*.md | sed -e 's|.md$||g'); do + base=$(echo $page | sed -e 's|doc/||g') + install -Dpm644 $page.md $doc/$base.md +%if 0%{?with_pandoc} + install -Dpm644 $page.html $doc/$base.html +%endif +done + +# Install rpm macros for redis modules +mkdir -p %{buildroot}%{macrosdir} +install -pDm644 %{S:9} %{buildroot}%{macrosdir}/macros.%{name} %check -%if %{with_tests} +%if 0%{?with_tests} # ERR Active defragmentation cannot be enabled: it requires a Redis server compiled # with a modified Jemalloc like the one shipped by default with the Redis source distribution sed -e '/memefficiency/d' -i tests/test_helper.tcl # https://github.com/antirez/redis/issues/1417 (for "taskset -c 1") -taskset -c 1 make test ||: -make test-sentinel +taskset -c 1 make %{make_flags} test +make %{make_flags} test-sentinel %else : Test disabled, missing '--with tests' option. %endif +%pre +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%{?systemd_post:1} -%systemd_post redis.service -%systemd_post redis-sentinel.service +%if 0%{?with_systemd} +%systemd_post %{name}.service +%systemd_post %{name}-sentinel.service %else -# Initial installation (always, for new service) -/sbin/chkconfig --add redis -/sbin/chkconfig --add redis-sentinel +chkconfig --add %{name} +chkconfig --add %{name}-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 -exit 0 - %preun -%if 0%{?systemd_preun:1} -%systemd_preun redis.service -%systemd_preun redis-sentinel.service +%if 0%{?with_systemd} +%systemd_preun %{name}.service +%systemd_preun %{name}-sentinel.service %else -if [ $1 = 0 ]; then - # Package removal, not upgrade - /sbin/service redis-sentinel stop &> /dev/null - /sbin/chkconfig --del redis-sentinel &> /dev/null - - /sbin/service redis stop &> /dev/null - /sbin/chkconfig --del redis &> /dev/null +if [ $1 -eq 0 ] ; then + service %{name} stop &> /dev/null + chkconfig --del %{name} &> /dev/null + service %{name}-sentinel stop &> /dev/null + chkconfig --del %{name}-sentinel &> /dev/null fi %endif %postun -%if 0%{?systemd_postun_with_restart:1} -%systemd_postun_with_restart redis.service -%systemd_postun_with_restart redis-sentinel.service +%if 0%{?with_systemd} +%systemd_postun_with_restart %{name}.service +%systemd_postun_with_restart %{name}-sentinel.service %else -if [ $1 -ge 1 ]; then - /sbin/service redis condrestart >/dev/null 2>&1 || : - /sbin/service redis-sentinel condrestart >/dev/null 2>&1 || : +if [ "$1" -ge "1" ] ; then + service %{name} condrestart >/dev/null 2>&1 || : + service %{name}-sentinel condrestart >/dev/null 2>&1 || : fi %endif - %files %{!?_licensedir:%global license %%doc} %license COPYING @@ -267,22 +348,28 @@ fi %config(noreplace) %{_sysconfdir}/logrotate.d/%{name} %attr(0640, redis, root) %config(noreplace) %{_sysconfdir}/%{name}.conf %attr(0640, redis, root) %config(noreplace) %{_sysconfdir}/%{name}-sentinel.conf -%dir %attr(0750, redis, redis) %{_localstatedir}/lib/%{name} +%dir %attr(0750, redis, redis) %{_libdir}/%{name} +%dir %attr(0750, redis, redis) %{redis_modules_dir} +%dir %attr(0750, redis, redis) %{_sharedstatedir}/%{name} %dir %attr(0750, redis, redis) %{_localstatedir}/log/%{name} %if 0%{?with_redistrib} %exclude %{_bindir}/%{name}-trib %endif +%exclude %{macrosdir} +%exclude %{_includedir} +%exclude %{_docdir}/%{name}/* %{_bindir}/%{name}-* %{_libexecdir}/%{name}-* -%{_mandir}/man1/redis* -%{_mandir}/man5/redis* -%if %{with_systemd} +%{_mandir}/man1/%{name}* +%{_mandir}/man5/%{name}* +%if 0%{?with_systemd} %{_unitdir}/%{name}.service %{_unitdir}/%{name}-sentinel.service %dir %{_sysconfdir}/systemd/system/%{name}.service.d %config(noreplace) %{_sysconfdir}/systemd/system/%{name}.service.d/limit.conf %dir %{_sysconfdir}/systemd/system/%{name}-sentinel.service.d %config(noreplace) %{_sysconfdir}/systemd/system/%{name}-sentinel.service.d/limit.conf +%dir %attr(0750, redis, redis) %ghost %{_localstatedir}/run/%{name} %else %{_initrddir}/%{name} %{_initrddir}/%{name}-sentinel @@ -290,6 +377,14 @@ fi %dir %attr(0755, redis, redis) %{_localstatedir}/run/%{name} %endif +%files devel +%license COPYING +%{_includedir}/%{name}module.h +%{macrosdir}/* + +%files doc +%docdir %{_docdir}/%{name} +%{_docdir}/%{name}/* %if 0%{?with_redistrib} %files trib @@ -299,6 +394,11 @@ fi %changelog +* Tue Nov 21 2017 Remi Collet <remi@remirepo.net> - 4.0.2-3 +- add doc and devel subpackages, synced from Fedora +- keep man pages in main package +- minor fix for EL-6 and tests + * Tue Sep 26 2017 Remi Collet <remi@remirepo.net> - 4.0.2-2 - simplify build, synced from Fedora |