File redis.spec of Package redis-8.0.2
Name: redis
Version: 8.0.3
Release: 1.iflybak%{?dist}
Summary: A persistent key-value database
License: BSD
Group: Applications/Databases
URL: https://redis.io/
Source0: redis-8.0.3.tar.gz
BuildRequires: gcc
BuildRequires: make
BuildRequires: tcl
# redis server config variables
%define serverPort 6379
%define pidfileServer /var/run/redis_%{serverPort}.pid
%define logfileServer %{redisHome}/redis-master/logs/log%{serverPort}.log
%define dirServer %{redisHome}/redis-master/run
%define replicaof 127.0.0.1
# redis sentinel config variables
%define sentinelPort 26379
%define sentinelPidfile /var/run/redis_%{sentinelPort}.pid
%define sentinelLogfile %{redisHome}/redis-sentinel/logs/log%{sentinelPort}.log
%define sentinelDir %{redisHome}/redis-sentinel/run
%define mastername mymaster
%define masterip 127.0.0.1
# public variables
%define redisHome /home/redis
%define protectedmode yes
%define daemonize yes
%define Bind 0.0.0.0
%define password javaredis
%define masterport 6379
%description
Redis is a key-value database in a similar vein to memcached, but with a rich set of datatype
s for storing more complex data types than a simple string value. Redis also provides dur
ability and atomicity guarantees by persisting changes to disk.
%prep
%setup -q -n redis-%{version}
%build
make %{?_smp_mflags}
make test
%pre
# create user
id redis
result=$?
if [ "$result" -ne 0 ];then
/usr/sbin/useradd -c "Redis user" -m -d %{redisHome} redis
fi
# create redis server and redis sentinel directory
mkdir %{redisHome}/redis-master/{logs,run} -p
mkdir %{redisHome}/redis-sentinel/{logs,run} -p
%install
make install PREFIX=%{buildroot}/usr/local/redis
mkdir -p %{buildroot}/etc/redis/
install -m 0645 redis.conf %{buildroot}/etc/redis/
install -m 0645 sentinel.conf %{buildroot}/etc/redis
%files
%defattr(-,root,root,-)
/usr/local/redis
/etc/redis/redis.conf
/etc/redis/sentinel.conf
%post
# Edit redis server configuration file
sed -i "s/bind 127.0.0.1/bind %{Bind}/g" /etc/redis/redis.conf
sed -i "s/port 6379/port %{serverPort}/g" /etc/redis/redis.conf
sed -i "s/daemonize no/daemonize %{daemonize}/g" /etc/redis/redis.conf
sed -i "s@pidfile /var/run/redis_6379.pid@pidfile %{pidfileServer}@g" /etc/redis/redis.conf
sed -i "s@logfile ""@logfile %{logfileServer}@g" /etc/redis/redis.conf
sed -i "s@dir ./@dir %{dirServer}@g" /etc/redis/redis.conf
sed -i "/# replicaof <masterip> <masterport>/a replicaof %{replicaof} %{masterport}" /etc/redis/redis.conf
sed -i "/# masterauth <master-password>/a masterauth %{password}" /etc/redis/redis.conf
sed -i '/# requirepass foobared/a requirepass %{password}' /etc/redis/redis.conf
# Edit redis sentinel configuration file
sed -i "/# bind 127.0.0.1 192.168.1.1/a bind %{Bind}" /etc/redis/sentinel.conf
sed -i "/# protected-mode no/a protected-mode %{protectedmode}" /etc/redis/sentinel.conf
sed -i "s/port 263379/port %{sentinelPort}/g" /etc/redis/sentinel.conf
sed -i "s/daemonize no/daemonize %{daemonize}/g" /etc/redis/sentinel.conf
sed -i "s@pidfile /var/run/redis-sentinel.pid@pidfile %{sentinelPidfile}@g" /etc/redis/sentinel.conf
sed -i 's@logfile ""@logfile %{sentinelLogfile}@g' /etc/redis/sentinel.conf
sed -i "s@dir /tmp@dir %{sentinelDir}@g" /etc/redis/sentinel.conf
sed -i '/# sentinel monitor <master-name> <ip> <redis-port> <quorum>/a sentinel monitor %{mastername} %{masterip} %{masterport} 2' /etc/redis/sentinel.conf
sed -i "/# sentinel auth-pass <master-name> <password>/a sentinel auth-pass %{mastername} %{password}" /etc/redis/sentinel.conf