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
openSUSE Build Service is sponsored by