From 85a3631dc36c7e971aff77142d8a4d965f9bfc0a Mon Sep 17 00:00:00 2001 From: Matthias Saou Date: Tue, 11 Oct 2016 15:23:36 +0200 Subject: [PATCH 1/3] Simplify, fix and clean up the spec file and related files Try to conform some more to generic Fedora/EPEL packaging guidelines. --- Makefile | 4 +- README.md | 14 ++--- zookeeper.logrotate | 16 +++--- zookeeper.service | 4 +- zookeeper.spec | 126 +++++++++++++++++++++----------------------- 5 files changed, 77 insertions(+), 87 deletions(-) diff --git a/Makefile b/Makefile index 39918eb..c92f43d 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: rpm clean VERSION ?= 3.4.9 -BUILD_NUMBER ?= 1 +RELEASE ?= 1 SOURCE = zookeeper-$(VERSION).tar.gz TOPDIR = /tmp/zookeeper-rpm PWD = $(shell pwd) @@ -13,7 +13,7 @@ rpm: $(SOURCE) --define "_rpmdir $(PWD)" \ --define "_topdir $(TOPDIR)" \ --define "version $(VERSION)" \ - --define "build_number $(BUILD_NUMBER)" \ + --define "release $(RELEASE)" \ zookeeper.spec source: $(SOURCE) diff --git a/README.md b/README.md index 630388f..a1e792d 100644 --- a/README.md +++ b/README.md @@ -11,19 +11,19 @@ Building -------- make rpm -Resulting RPM will be avaliable at $(shell pwd)/x86_64 +Resulting RPM will be avaliable at $(shell pwd)/noarch/ Installing and operating ------------------------ sudo yum install zookeeper*.rpm - sudo systemctl start zookeeper sudo systemctl enable zookeeper + sudo systemctl start zookeeper -Zookeeper shell is available via /usr/local/bin/zkcli or just zkcli since /usr/local/bin is usually in the $PATH. +Zookeeper shell is available via zkcli. Default locations ----------------- -binaries: /opt/zookeeper -data: /var/lib/zookeeper -logs: /var/log/zookeeper -configs: /etc/zookeeper, /etc/sysconfig/zookeeper +archives: /usr/share/java/zookeeper +data: /var/lib/zookeeper +logs: /var/log/zookeeper +configs: /etc/zookeeper, /etc/sysconfig/zookeeper diff --git a/zookeeper.logrotate b/zookeeper.logrotate index a7d541e..3c3ea70 100644 --- a/zookeeper.logrotate +++ b/zookeeper.logrotate @@ -1,11 +1,9 @@ /var/log/zookeeper/*.log { - weekly - rotate 4 - maxsize 100M - minsize 10M - copytruncate - delaycompress - compress - notifempty - missingok + weekly + rotate 4 + maxsize 100M + minsize 10M + copytruncate + compress + missingok } diff --git a/zookeeper.service b/zookeeper.service index 8798566..490a582 100644 --- a/zookeeper.service +++ b/zookeeper.service @@ -4,9 +4,9 @@ After=network.target [Service] User=zookeeper -Group=zookeeper EnvironmentFile=/etc/sysconfig/zookeeper +Environment=CLASSPATH=@CLASSPATH@ ExecStart=/bin/java -cp $CLASSPATH $LOG4J $JVMFLAGS $ZOOMAIN $ZOOCFG [Install] -WantedBy=multi-user.target \ No newline at end of file +WantedBy=multi-user.target diff --git a/zookeeper.spec b/zookeeper.spec index 6a3b0bd..fdd1e00 100644 --- a/zookeeper.spec +++ b/zookeeper.spec @@ -1,76 +1,73 @@ %define __jar_repack 0 -%define debug_package %{nil} -%define name zookeeper -%define _prefix /opt -%define _conf_dir %{_sysconfdir}/zookeeper -%define _log_dir %{_var}/log/zookeeper -%define _data_dir %{_sharedstatedir}/zookeeper +#define debug_package %{nil} +%define zk_prefix %{_javadir}/zookeeper +%define zk_confdir %{_sysconfdir}/zookeeper +%define zk_logdir %{_var}/log/zookeeper +%define zk_datadir %{_sharedstatedir}/zookeeper -Summary: ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. +Summary: High-performance coordination service for distributed applications Name: zookeeper -Version: %{version} -Release: %{build_number} -License: Apache License, Version 2.0 +#Version: %{version} +#Release: %{release}%{?dist} +Version: 3.4.9 +Release: 1%{?dist} +License: ASL 2.0 and BSD Group: Applications/Databases -URL: http://zookeper.apache.org/ -Source0: zookeeper-%{version}.tar.gz +URL: https://zookeeper.apache.org/ +Source0: https://www.apache.org/dyn/closer.cgi/zookeeper/zookeeper-%{version}/zookeeper-%{version}.tar.gz Source1: zookeeper.service -Source2: zookeeper.logrotate -Source3: zoo.cfg -Source4: log4j.properties -Source5: log4j-cli.properties -Source6: zookeeper.sysconfig -Source7: zkcli -BuildRoot: %{_tmppath}/%{name}-%{version}-root -Prefix: %{_prefix} -Vendor: Apache Software Foundation -Packager: Ivan Dyachkov -Provides: zookeeper +Source2: zkcli +Source3: zookeeper.logrotate +Source4: zookeeper.sysconfig +Source5: zoo.cfg +Source6: log4j.properties +Source7: log4j-cli.properties +%{?systemd_requires} BuildRequires: systemd -Requires(post): systemd -Requires(preun): systemd -Requires(postun): systemd +BuildArch: noarch %description -ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services. All of these kinds of services are used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable. Because of the difficulty of implementing these kinds of services, applications initially usually skimp on them ,which make them brittle in the presence of change and difficult to manage. Even when done correctly, different implementations of these services lead to management complexity when the applications are deployed. +ZooKeeper is a high-performance coordination service for distributed +applications. It exposes common services - such as naming, configuration +management, synchronization, and group services - in a simple interface so +you don't have to write them from scratch. You can use it off-the-shelf to +implement consensus, group management, leader election, and presence +protocols. And you can build on it for your own, specific needs. %prep -%setup +%setup -q %build %install -mkdir -p $RPM_BUILD_ROOT%{_prefix}/zookeeper -mkdir -p $RPM_BUILD_ROOT%{_log_dir} -mkdir -p $RPM_BUILD_ROOT%{_data_dir} -mkdir -p $RPM_BUILD_ROOT%{_unitdir}/zookeeper.service.d -mkdir -p $RPM_BUILD_ROOT%{_conf_dir}/ -install -p -D -m 644 zookeeper-%{version}.jar $RPM_BUILD_ROOT%{_prefix}/zookeeper/ -install -p -D -m 644 lib/*.jar $RPM_BUILD_ROOT%{_prefix}/zookeeper/ -install -p -D -m 755 %{S:1} $RPM_BUILD_ROOT%{_unitdir}/ -install -p -D -m 644 %{S:2} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/zookeeper -install -p -D -m 644 %{S:3} $RPM_BUILD_ROOT%{_conf_dir}/ -install -p -D -m 644 %{S:4} $RPM_BUILD_ROOT%{_conf_dir}/ -install -p -D -m 644 %{S:5} $RPM_BUILD_ROOT%{_conf_dir}/ -install -p -D -m 644 %{S:6} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/zookeeper -install -p -D -m 755 %{S:7} $RPM_BUILD_ROOT/usr/local/bin/zkcli -install -p -D -m 644 conf/configuration.xsl $RPM_BUILD_ROOT%{_conf_dir}/ -# stupid systemd fails to expand file paths in runtime +# JARs +mkdir -p $RPM_BUILD_ROOT%{zk_prefix} +install -p -m 0644 zookeeper-%{version}.jar lib/*.jar \ + $RPM_BUILD_ROOT%{zk_prefix}/ +# Service, systemd fails to expand file paths in runtime +mkdir -p $RPM_BUILD_ROOT%{_unitdir} CLASSPATH= -for i in $RPM_BUILD_ROOT%{_prefix}/zookeeper/*.jar -do - CLASSPATH="%{_prefix}/zookeeper/$(basename ${i}):${CLASSPATH}" +for i in $RPM_BUILD_ROOT%{zk_prefix}/*.jar; do + CLASSPATH="%{zk_prefix}/$(basename ${i}):${CLASSPATH}" done -echo "[Service]" > $RPM_BUILD_ROOT%{_unitdir}/zookeeper.service.d/classpath.conf -echo "Environment=CLASSPATH=${CLASSPATH}" >> $RPM_BUILD_ROOT%{_unitdir}/zookeeper.service.d/classpath.conf - -%clean -rm -rf $RPM_BUILD_ROOT +sed -e "s|@CLASSPATH@|${CLASSPATH}|" %{S:1} > \ + $RPM_BUILD_ROOT%{_unitdir}/zookeeper.service +# CLI +install -p -D -m 0755 %{S:2} $RPM_BUILD_ROOT%{_bindir}/zkcli +# Configuration +install -p -D -m 0644 %{S:3} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/zookeeper +install -p -D -m 0644 %{S:4} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/zookeeper +mkdir -p $RPM_BUILD_ROOT%{zk_confdir}/ +install -p -m 0644 %{S:5} %{S:6} %{S:7} conf/configuration.xsl \ + $RPM_BUILD_ROOT%{zk_confdir}/ +# Empty directories +mkdir -p $RPM_BUILD_ROOT%{zk_logdir} +mkdir -p $RPM_BUILD_ROOT%{zk_datadir} %pre /usr/bin/getent group zookeeper >/dev/null || /usr/sbin/groupadd -r zookeeper -if ! /usr/bin/getent passwd zookeeper >/dev/null ; then - /usr/sbin/useradd -r -g zookeeper -m -d %{_prefix}/zookeeper -s /bin/bash -c "Zookeeper" zookeeper +if ! /usr/bin/getent passwd zookeeper >/dev/null; then + /usr/sbin/useradd -r -g zookeeper -M -N -d %{zk_prefix} -s /bin/bash -c "Zookeeper" zookeeper fi %post @@ -80,22 +77,17 @@ fi %systemd_preun zookeeper.service %postun -# When the last version of a package is erased, $1 is 0 -# Otherwise it's an upgrade and we need to restart the service -if [ $1 -ge 1 ]; then - /usr/bin/systemctl restart zookeeper.service -fi -/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || : +%systemd_postun_with_restart zookeeper.service %files -%defattr(-,root,root) +%license LICENSE.txt +%{zk_prefix}/ %{_unitdir}/zookeeper.service -%{_unitdir}/zookeeper.service.d/classpath.conf -/usr/local/bin/zkcli +%{_bindir}/zkcli %config(noreplace) %{_sysconfdir}/logrotate.d/zookeeper %config(noreplace) %{_sysconfdir}/sysconfig/zookeeper -%config(noreplace) %{_conf_dir}/* -%attr(-,zookeeper,zookeeper) %{_prefix}/zookeeper -%attr(0755,zookeeper,zookeeper) %dir %{_log_dir} -%attr(0700,zookeeper,zookeeper) %dir %{_data_dir} +%dir %{zk_confdir}/ +%config(noreplace) %{zk_confdir}/* +%attr(0755,zookeeper,zookeeper) %dir %{zk_logdir}/ +%attr(0700,zookeeper,zookeeper) %dir %{zk_datadir}/ From 4dedce69f3ec9233207fd78a6a33a6c7ef99220e Mon Sep 17 00:00:00 2001 From: Matthias Saou Date: Wed, 26 Oct 2016 13:04:13 +0200 Subject: [PATCH 2/3] Add java-headless requirement and re-enable Makefile build --- Makefile | 6 +++--- zookeeper.spec | 28 ++++++++++++++++++---------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index c92f43d..38ce865 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: rpm clean VERSION ?= 3.4.9 -RELEASE ?= 1 +RELEASE ?= 2 SOURCE = zookeeper-$(VERSION).tar.gz TOPDIR = /tmp/zookeeper-rpm PWD = $(shell pwd) @@ -12,8 +12,8 @@ rpm: $(SOURCE) --define "_sourcedir $(PWD)" \ --define "_rpmdir $(PWD)" \ --define "_topdir $(TOPDIR)" \ - --define "version $(VERSION)" \ - --define "release $(RELEASE)" \ + --define "zk_version $(VERSION)" \ + --define "zk_release $(RELEASE)" \ zookeeper.spec source: $(SOURCE) diff --git a/zookeeper.spec b/zookeeper.spec index fdd1e00..62ece8d 100644 --- a/zookeeper.spec +++ b/zookeeper.spec @@ -1,16 +1,16 @@ -%define __jar_repack 0 -#define debug_package %{nil} -%define zk_prefix %{_javadir}/zookeeper -%define zk_confdir %{_sysconfdir}/zookeeper -%define zk_logdir %{_var}/log/zookeeper -%define zk_datadir %{_sharedstatedir}/zookeeper +%global __jar_repack 0 +%global zk_prefix %{_javadir}/zookeeper +%global zk_confdir %{_sysconfdir}/zookeeper +%global zk_logdir %{_var}/log/zookeeper +%global zk_datadir %{_sharedstatedir}/zookeeper + +%{!?zk_version:%global zk_version 3.4.9} +%{!?zk_release:%global zk_release 2} Summary: High-performance coordination service for distributed applications Name: zookeeper -#Version: %{version} -#Release: %{release}%{?dist} -Version: 3.4.9 -Release: 1%{?dist} +Version: %{zk_version} +Release: %{zk_release}%{?dist} License: ASL 2.0 and BSD Group: Applications/Databases URL: https://zookeeper.apache.org/ @@ -25,6 +25,7 @@ Source7: log4j-cli.properties %{?systemd_requires} BuildRequires: systemd BuildArch: noarch +Requires: java-headless %description ZooKeeper is a high-performance coordination service for distributed @@ -91,3 +92,10 @@ fi %attr(0755,zookeeper,zookeeper) %dir %{zk_logdir}/ %attr(0700,zookeeper,zookeeper) %dir %{zk_datadir}/ +%changelog +* Wed Oct 26 2016 Matthias Saou 3.4.9-2 +- Add java-headless requirement. + +* Tue Oct 11 2016 Matthias Saou 3.4.9-1 +- Simplify, fix and clean up the spec file and related files. + From 41e81ce5d8b71b64743b4f9bd365b1ddfdde9dfd Mon Sep 17 00:00:00 2001 From: Michal Lisowski Date: Tue, 22 Nov 2016 15:30:36 +0000 Subject: [PATCH 3/3] Add nagios-plugins-zookeeper subpackage --- zookeeper.spec | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/zookeeper.spec b/zookeeper.spec index 62ece8d..9d70687 100644 --- a/zookeeper.spec +++ b/zookeeper.spec @@ -5,7 +5,7 @@ %global zk_datadir %{_sharedstatedir}/zookeeper %{!?zk_version:%global zk_version 3.4.9} -%{!?zk_release:%global zk_release 2} +%{!?zk_release:%global zk_release 3} Summary: High-performance coordination service for distributed applications Name: zookeeper @@ -35,6 +35,17 @@ you don't have to write them from scratch. You can use it off-the-shelf to implement consensus, group management, leader election, and presence protocols. And you can build on it for your own, specific needs. + +%package -n nagios-plugins-zookeeper +Group: Applications/System +Summary: Provides check_zookeeper support for Nagios +BuildArch: noarch +Requires: nagios-plugins + +%description -n nagios-plugins-zookeeper +Provides check_zookeeper support for Nagios. + + %prep %setup -q @@ -64,6 +75,9 @@ install -p -m 0644 %{S:5} %{S:6} %{S:7} conf/configuration.xsl \ # Empty directories mkdir -p $RPM_BUILD_ROOT%{zk_logdir} mkdir -p $RPM_BUILD_ROOT%{zk_datadir} +# Nagios plugin +install -D -p -m 0755 src/contrib/monitoring/check_zookeeper.py \ + $RPM_BUILD_ROOT%{_libdir}/nagios/plugins/check_zookeeper %pre /usr/bin/getent group zookeeper >/dev/null || /usr/sbin/groupadd -r zookeeper @@ -92,7 +106,13 @@ fi %attr(0755,zookeeper,zookeeper) %dir %{zk_logdir}/ %attr(0700,zookeeper,zookeeper) %dir %{zk_datadir}/ +%files -n nagios-plugins-zookeeper +%{_libdir}/nagios/plugins/check_zookeeper + %changelog +* Tue Nov 22 2016 MichaƂ Lisowski - 3.4.9-3 +- Add nagios-plugins-zookeeper subpackage + * Wed Oct 26 2016 Matthias Saou 3.4.9-2 - Add java-headless requirement.