From dbfb16fd732b6d617dc46f8f8158d7aac4f31b2beaa7bd7c175886c8f1ae3d6a Mon Sep 17 00:00:00 2001 From: Adam Majer Date: Thu, 6 Sep 2018 19:15:00 +0000 Subject: [PATCH] Accepting request 633784 from home:darix:apps - make check && true -> make check || true This was probably meant to catch an error in the test suite, but with && it would only return true if it would return true already. - added systemd unit file file redis-sentinel - the unit file uses the same multiple instance mechanism as the normal redis unit file systemctl start redis-sentinel@default will look for /etc/redis/sentinel-default.conf and expects a pid file /var/run/redis/sentinel-default.pid Please make sure your sentinel config sets the pid file. - adapted the default sentinel.conf.example to set the pid file and the log file similar to the normal redis.conf: /var/log/redis/sentinel-.log /var/run/redis/sentinel-.pid The unit file checks for the pid file so please adapt your local sentinel configs. Changed: redis-conf.patch - adapt and restructure README.SUSE - move the LimitNoFile to the service file itself so the user do not have to manually do that step for every instance - move the apache integration into its own section - add section for redis-sentinel - install sentinel example config with group write permissions to indicate that the actually config needs to be writable. OBS-URL: https://build.opensuse.org/request/show/633784 OBS-URL: https://build.opensuse.org/package/show/server:database/redis?expand=0&rev=120 --- README.SUSE | 91 ++++++++++++++++++++++++++++++----------- redis-conf.patch | 18 ++++++++ redis-sentinel.target | 3 ++ redis-sentinel@.service | 17 ++++++++ redis.changes | 42 +++++++++++++++++++ redis.spec | 13 ++++-- redis@.service | 1 + 7 files changed, 158 insertions(+), 27 deletions(-) create mode 100644 redis-sentinel.target create mode 100644 redis-sentinel@.service diff --git a/README.SUSE b/README.SUSE index 27ac5fb..770b452 100644 --- a/README.SUSE +++ b/README.SUSE @@ -1,19 +1,79 @@ README.SUSE ------------- -1. copy /etc/redis/default.conf.example to /etc/redis/default.conf (or - /etc/redis/otherapp.conf and so on) For the example we will use - otherapp.conf + Redis Server +============== + +1. cp -a /etc/redis/default.conf.example /etc/redis/instancename.conf + +We use the "cp -a" here, so that our permissions are preserved. +In case you copied the file with out the "-a" + +chown root:redis /etc/redis/instancename.conf +chmod u=rw,g=r,o= /etc/redis/instancename.conf 2. change at least pidfile, logfile and dir setting # the pid file *has* to match your config filename without the ".conf" -pidfile /var/run/redis/otherapp.pid -logfile /var/log/redis/otherapp.log -dir /var/lib/redis/otherapp/ + +pidfile /var/run/redis/instancename.pid +logfile /var/log/redis/instancename.log +dir /var/lib/redis/instancename/ If you want to run more than one instance you also have to change the socket path and/or the ip:port combination. - e.g. /var/run/redis/otherapp.sock + e.g. /var/run/redis/instancename.sock + +Also make sure if you copy configurations from somewhere, that "daemonize" +should be set to "no". + +3. create the database dir: +$ install -d -o redis -g redis -m 0750 /var/lib/redis/instancename/ + +4. systemctl start redis@instancename +5. systemctl enable redis@instancename + +6. To stop/restart all instances at the same time use: + +systemctl restart redis.target +systemctl stop redis.target + + Redis Sentinel +================ + +1. cp -a /etc/redis/sentinel.conf.example /etc/redis/sentinel-instancename.conf + +We use the "cp -a" here, so that our permissions are preserved. +In case you copied the file with out the "-a" + +chown root:redis /etc/redis/sentinel-instancename.conf +chmod u=rw,g=rw,o= /etc/redis/sentinel-instancename.conf + +Please note that the sentinel config needs write permissions for the group. +The chmod line differs from the line for the normal redis server. + +2. change at least pidfile, logfile setting +# the pid file *has* to match your config filename without the ".conf" + +pidfile /var/run/redis/instancename.pid +logfile /var/log/redis/instancename.log + +If you want to run more than one instance you also have to change the +socket path and/or the ip:port combination. + e.g. /var/run/redis/instancename.sock + +Also make sure if you copy configurations from somewhere, that "daemonize" +should be set to "no". + +4. systemctl start redis-sentinel@instancename +5. systemctl enable redis-sentinel@instancename + +6. To stop/restart all instances at the same time use: + +systemctl restart redis-sentinel.target +systemctl stop redis-sentinel.target + + Integration with apache when using unix domain sockets +========================================================= If you plan to use redis in combination with apache, then you should add 'redis' to apache group and set 'unixsocketperm 770': @@ -21,21 +81,4 @@ $ usermod -a -G redis wwwrun $ systemctl restart apache2 then apache is able to connect to redis socket -Also make sure if you copy configurations from somewhere, that "daemonize" -should be set to "no". -3a. create the database dir: -$ install -d -o redis -g redis -m 0750 /var/lib/redis/otherapp/ - -3b. add limits (ulimit) to each service -$ install -d -m 0755 /etc/systemd/system/redis@otherapp.service.d -$ echo "[Service] -LimitNOFILE=10240" > /etc/systemd/system/redis@otherapp.service.d/limits.conf - -4. systemctl start redis@otherapp -5. systemctl enable redis@otherapp - -6. to interact with all instances at the same time use: - -systemctl restart redis.target -systemctl stop redis.target diff --git a/redis-conf.patch b/redis-conf.patch index 76921b5..ef060ea 100644 --- a/redis-conf.patch +++ b/redis-conf.patch @@ -48,3 +48,21 @@ Index: redis.conf ################################# REPLICATION ################################# +Index: sentinel.conf +=================================================================== +--- sentinel.conf.orig ++++ sentinel.conf +@@ -1,4 +1,8 @@ + # Example sentinel.conf ++# ++pidfile /var/run/redis/sentinel-default.pid ++loglevel notice ++logfile /var/log/redis/sentinel-default.log + + # *** IMPORTANT *** + # +@@ -202,4 +206,3 @@ sentinel failover-timeout mymaster 18000 + # to get the program executed. + + sentinel deny-scripts-reconfig yes +- diff --git a/redis-sentinel.target b/redis-sentinel.target new file mode 100644 index 0000000..d1cc0f8 --- /dev/null +++ b/redis-sentinel.target @@ -0,0 +1,3 @@ +[Unit] +Description=Redis Sentinel target allowing to start/stop all redis-sentinel@.service instances at once + diff --git a/redis-sentinel@.service b/redis-sentinel@.service new file mode 100644 index 0000000..515c4ee --- /dev/null +++ b/redis-sentinel@.service @@ -0,0 +1,17 @@ +[Unit] +Description=Redis +After=network.target +PartOf=redis-sentinel.target + +[Service] +Type=simple +User=redis +Group=redis +PrivateTmp=true +PIDFile=/var/run/redis/sentinel-%i.pid +ExecStart=/usr/sbin/redis-sentinel /etc/redis/sentinel-%i.conf +LimitNOFILE=10240 +Restart=on-failure + +[Install] +WantedBy=multi-user.target redis.target diff --git a/redis.changes b/redis.changes index 4df0f37..780af64 100644 --- a/redis.changes +++ b/redis.changes @@ -1,3 +1,45 @@ +------------------------------------------------------------------- +Thu Sep 6 19:03:06 UTC 2018 - Marcus Rueckert + +- make check && true -> make check || true + This was probably meant to catch an error in the test suite, but + with && it would only return true if it would return true + already. + +------------------------------------------------------------------- +Thu Sep 6 17:01:14 UTC 2018 - Marcus Rueckert + +- added systemd unit file file redis-sentinel + - the unit file uses the same multiple instance mechanism as the + normal redis unit file + + systemctl start redis-sentinel@default will look for + + /etc/redis/sentinel-default.conf + + and expects a pid file + + /var/run/redis/sentinel-default.pid + + Please make sure your sentinel config sets the pid file. + + - adapted the default sentinel.conf.example to set the pid file + and the log file similar to the normal redis.conf: + /var/log/redis/sentinel-.log + /var/run/redis/sentinel-.pid + + The unit file checks for the pid file so please adapt your + local sentinel configs. + + Changed: redis-conf.patch + - adapt and restructure README.SUSE + - move the LimitNoFile to the service file itself so the user + do not have to manually do that step for every instance + - move the apache integration into its own section + - add section for redis-sentinel + - install sentinel example config with group write permissions + to indicate that the actually config needs to be writable. + ------------------------------------------------------------------- Thu Sep 6 15:08:28 UTC 2018 - Marcus Rueckert diff --git a/redis.spec b/redis.spec index f31655a..d5d929a 100644 --- a/redis.spec +++ b/redis.spec @@ -12,7 +12,7 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via https://bugs.opensuse.org +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # @@ -34,6 +34,8 @@ Source3: %{name}@.service Source4: %{name}.tmpfiles.d Source5: README.SUSE Source6: %{name}.sysctl +Source7: %{name}-sentinel@.service +Source8: %{name}-sentinel.target # PATCH-FIX-OPENSUSE -- openSUSE-style init script Patch0: %{name}-initscript.patch # PATCH-MISSING-TAG -- See https://wiki.opensuse.org/openSUSE:Packaging_Patches_guidelines @@ -95,7 +97,7 @@ ln -sfv ../sbin/redis-server %{buildroot}%{_sbindir}/%{name}-sentine perl -p -i -e 's|daemonize yes|daemonize no|g' %{name}.conf install -Dm 0640 redis.conf %{buildroot}%{_conf_dir}/default.conf.example -install -Dm 0640 sentinel.conf %{buildroot}%{_conf_dir}/sentinel.conf.example +install -Dm 0660 sentinel.conf %{buildroot}%{_conf_dir}/sentinel.conf.example # some sysctl stuff install -Dm 0644 %{SOURCE6} %{buildroot}%{_sysconfdir}/sysctl.d/00-%{name}.conf @@ -103,6 +105,9 @@ install -Dm 0644 %{SOURCE1} %{buildroot}%{_sysconfdir}/logrotate.d/%{name} install -Dm 0644 %{SOURCE2} %{buildroot}%{_unitdir}/%{name}.target install -Dm 0644 %{SOURCE3} %{buildroot}%{_unitdir}/%{name}@.service install -Dm 0644 %{SOURCE4} %{buildroot}%{_libexecdir}/tmpfiles.d/%{name}.conf +install -Dm 0644 %{SOURCE7} %{buildroot}%{_unitdir}/%{name}-sentinel@.service +install -Dm 0644 %{SOURCE8} %{buildroot}%{_unitdir}/%{name}-sentinel.target + ln -sf %{_sbindir}/service %{buildroot}%{_sbindir}/rc%{name} cp %{SOURCE5} README.SUSE @@ -114,7 +119,7 @@ The test suite often fails to start a server, with 'child process exited abnormally' -- sometimes it works. --------------------------------------------------- EOF -make %{?_smp_mflags} test && true +make %{?_smp_mflags} test || true %endif %pre @@ -146,6 +151,8 @@ echo "See %{_docdir}/%{name}/README.SUSE to continue" %{_libexecdir}/tmpfiles.d/%{name}.conf %{_unitdir}/%{name}@.service %{_unitdir}/%{name}.target +%{_unitdir}/%{name}-sentinel@.service +%{_unitdir}/%{name}-sentinel.target %doc README.SUSE %config(noreplace) %attr(-,root,%{name}) %{_conf_dir}/ %dir %attr(0750,%{name},%{name}) %{_data_dir} diff --git a/redis@.service b/redis@.service index 7afc035..bc68a14 100644 --- a/redis@.service +++ b/redis@.service @@ -10,6 +10,7 @@ Group=redis PrivateTmp=true PIDFile=/var/run/redis/%i.pid ExecStart=/usr/sbin/redis-server /etc/redis/%i.conf +LimitNOFILE=10240 Restart=on-failure [Install]