diff --git a/.gitignore b/.gitignore index c763b4b..eba18a6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,52 +1,54 @@ Makefile.in Makefile compile autom4te.cache aclocal.m4 config.guess config.status config.sub configure depcomp install-sh missing test-driver *.trs *.log *.rpm *.o .deps .version .dirstamp booth-*.tar* conf/booth*.service docs/*.8 script/service-runnable script/unit-test.py src/b_config.h.in src/b_config.h src/booth_config.h src/boothd src/stamp-h1 src/stamp-h2 test/boothtestenv.py test/runtests.py +booth.spec + # cscope files cscope.* ncscope.* # ctags files tags # vim temp files .*.sw? *~ # test suite random files *.pyc __pycache__ cov* diff --git a/GNUmakefile b/GNUmakefile deleted file mode 100644 index b486e56..0000000 --- a/GNUmakefile +++ /dev/null @@ -1,47 +0,0 @@ -# -# Copyright (C) 2008 Andrew Beekhof -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# - --include Makefile - -PACKAGE ?= booth -TARFILE = $(PACKAGE).tar.bz2 - -RPM_ROOT = $(shell pwd) -RPM_OPTS = --define "_sourcedir $(RPM_ROOT)" \ - --define "_specdir $(RPM_ROOT)" \ - --define "_srcrpmdir $(RPM_ROOT)" - - -TAG ?= HEAD - -gitarchive: - rm -f $(TARFILE) - git archive --format=tar --prefix $(PACKAGE)/ $(TAG) | tar xf - - git describe --tags --always > $(PACKAGE)/.git_info - tar -cjf $(TARFILE) $(PACKAGE) - rm -r $(PACKAGE) - echo `date`: Rebuilt $(TARFILE) - -srpm: gitarchive - rm -f *.src.rpm - @echo To create custom builds, edit the flags and options in $(PACKAGE).spec first - rpmbuild -bs $(RPM_OPTS) $(PACKAGE).spec - -rpm: srpm - rpmbuild $(RPM_OPTS) --rebuild $(RPM_ROOT)/*.src.rpm - diff --git a/Makefile.am b/Makefile.am index ce98e56..5cd7d52 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,211 +1,211 @@ # Copyright (c) 2009 Red Hat, Inc. # # Authors: Andrew Beekhof # Steven Dake (sdake@redhat.com) # # This software licensed under BSD license, the text of which follows: # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # - Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # - Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # - Neither the name of the MontaVista Software, Inc. nor the names of its # contributors may be used to endorse or promote products derived from this # software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF # THE POSSIBILITY OF SUCH DAMAGE. SPEC = $(PACKAGE_NAME).spec TARFILE = $(PACKAGE_NAME)-$(VERSION).tar.gz EXTRA_DIST = autogen.sh conf/booth.conf.example \ script/booth-keygen script/lsb script/ocf script/service-runnable.in \ script/unit-test.py.in script/wireshark-dissector.lua \ test/arbtests.py test/assertions.py test/booth_path test/boothrunner.py \ test/boothtestenv.py.in test/clientenv.py test/clienttests.py test/live_test.sh \ test/runtests.py.in test/serverenv.py test/servertests.py test/sitetests.py \ test/utils.py \ unit-tests \ contrib \ - $(SPEC) booth-rpmlintrc \ + $(SPEC).in booth-rpmlintrc \ .version build-aux/git-version-gen AUTOMAKE_OPTIONS = foreign MAINTAINERCLEANFILES = Makefile.in aclocal.m4 configure depcomp \ config.guess config.sub missing install-sh \ autoheader automake autoconf test_lense.sh \ compile dist_doc_DATA = AUTHORS README COPYING README.upgrade-from-v0.1 README-testing boothconfdir = ${BOOTHSYSCONFDIR} boothconf_DATA = conf/booth.conf.example boothsitedir = $(ocfdir)/resource.d/pacemaker boothsite_SCRIPTS = script/ocf/booth-site boothocfdir = $(ocfdir)/resource.d/booth boothocf_SCRIPTS = script/ocf/sharedrsc script/ocf/geostore boothocflibdir = $(ocfdir)/lib/booth boothocflib_DATA = script/ocf/geo_attr.sh bootharbitratordir = ${INITDDIR} bootharbitrator_SCRIPTS = script/lsb/booth-arbitrator boothnoarchdir = $(datadir)/$(PACKAGE_NAME) nodist_boothnoarch_SCRIPTS = script/service-runnable sbin_SCRIPTS = script/booth-keygen TESTS = test/runtests.py SUBDIRS = src docs conf coverity: cov-build --dir=cov make cov-analyze --dir cov --concurrency --wait-for-license cov-format-errors --dir cov install-exec-local: $(INSTALL) -d $(DESTDIR)/${boothconfdir} $(INSTALL) -d $(DESTDIR)/${bootharbitratordir} $(INSTALL) -d $(DESTDIR)/${boothsitedir} $(INSTALL) -d $(DESTDIR)/${boothocfdir} $(INSTALL) -d $(DESTDIR)/${BOOTH_LIB_DIR} -m 750 -chown $(CRM_DAEMON_USER):$(CRM_DAEMON_GROUP) $(DESTDIR)/${BOOTH_LIB_DIR} $(INSTALL) -d $(DESTDIR)/${BOOTH_CORE_DIR} -m 750 -chown $(CRM_DAEMON_USER):$(CRM_DAEMON_GROUP) $(DESTDIR)/${BOOTH_CORE_DIR} install-exec-hook: ln -sf ${sbindir}/boothd $(DESTDIR)/${sbindir}/booth ln -sf ${sbindir}/boothd $(DESTDIR)/${sbindir}/geostore uninstall-local: rmdir $(DESTDIR)/${boothconfdir} || :; rmdir $(DESTDIR)/${bootharbitratordir} || :; rmdir $(DESTDIR)/${boothsitedir} || :; rmdir $(DESTDIR)/${BOOTH_CORE_DIR} || :; rmdir $(DESTDIR)/${BOOTH_LIB_DIR} || :; test: check lint: for dir in src; do make -C $$dir lint; done clean-local: - rm -rf test/*.pyc test/__pycache__ test/runtests.py test/boothtestenv.py cov* + rm -rf test/*.pyc test/__pycache__ test/runtests.py test/boothtestenv.py cov* $(SPEC) dist-clean-local: rm -f autoconf automake autoheader # release/versioning BUILT_SOURCES = .version .version: echo $(VERSION) > $@-t && mv $@-t $@ dist-hook: echo $(VERSION) > $(distdir)/.tarball-version test/runtests.py: test/runtests.py.in test/boothtestenv.py rm -f $@-t $@ mkdir -p ${abs_top_builddir}/test sed \ -e 's#PYTHON_SHEBANG#${PYTHON_SHEBANG}#g' \ -e 's#TEST_SRC_DIR#${abs_top_srcdir}/test#g' \ -e 's#TEST_BUILD_DIR#${abs_top_builddir}/test#g' \ $< > $@-t; chmod a-w $@-t chmod u+x $@-t mv $@-t $@ test/boothtestenv.py: test/boothtestenv.py.in rm -f $@-t $@ mkdir -p ${abs_top_builddir}/test sed \ -e 's#TEST_SRC_DIR#${abs_top_srcdir}/test#g' \ -e 's#TEST_BUILD_DIR#${abs_top_builddir}/test#g' \ $< > $@-t; chmod a-w $@-t mv $@-t $@ ## make rpm/srpm section. +$(abs_builddir)/booth-rpmlintrc: + cat $(abs_srcdir)/booth-rpmlintrc > booth-rpmlintrc -$(SPEC): +$(SPEC): $(SPEC).in .version config.status $(abs_builddir)/booth-rpmlintrc rm -f $@-t $@ date="$(shell LC_ALL=C date "+%a %b %d %Y")" && \ - if [ -f .tarball-version ]; then \ - gitver="$(shell cat .tarball-version)" && \ - rpmver=$$gitver && \ + gvgver="`cd $(abs_srcdir); build-aux/git-version-gen --fallback $(VERSION) .tarball-version .gitarchivever`" && \ + if [ "$$gvgver" == "`echo $$gvgver | sed 's/-/./'`" ];then \ + rpmver="$$gvgver" && \ alphatag="" && \ dirty="" && \ numcomm="0"; \ else \ - gitver="$(shell git describe --tags --abbrev=4 --match='v*' HEAD 2>/dev/null)" && \ - rpmver=`echo $$gitver | sed -e "s/^v//" -e "s/-.*//g"` && \ - alphatag=`echo $$gitver | sed -e "s/.*-//" -e "s/^g//"` && \ - vtag=`echo $$gitver | sed -e "s/-.*//g"` && \ - numcomm=`git rev-list $$vtag..HEAD | wc -l` && \ - git update-index --refresh > /dev/null 2>&1 || true && \ - dirty=`git diff-index --name-only HEAD 2>/dev/null`; \ + gitver="`echo $$gvgver | sed 's/\(.*\)\./\1-/'`" && \ + rpmver=`echo $$gitver | sed 's/-.*//g'` && \ + alphatag=`echo $$gvgver | sed 's/[^-]*-\([^-]*\).*/\1/'` && \ + numcomm=`echo $$gitver | sed 's/[^-]*-\([^-]*\).*/\1/'` && \ + dirty="" && \ + if [ "`echo $$gitver | sed 's/^.*-dirty$$//g'`" == "" ];then \ + dirty="dirty"; \ + fi \ fi && \ - if [ -n "$$dirty" ]; then dirty="dirty"; else dirty=""; fi && \ - if [ "$$numcomm" = "0" ]; then \ - sed \ - -e "s#@version@#$$rpmver#g" \ - -e "s#%glo.*alpha.*##g" \ - -e "s#%glo.*numcomm.*##g" \ - -e "s#@dirty@#$$dirty#g" \ - -e "s#@date@#$$date#g" \ - $< > $@-t; \ - else \ - sed \ - -e "s#@version@#$$rpmver#g" \ - -e "s#@alphatag@#$$alphatag#g" \ - -e "s#@numcomm@#$$numcomm#g" \ - -e "s#@dirty@#$$dirty#g" \ - -e "s#@date@#$$date#g" \ - $< > $@-t; \ - fi; \ - if [ -z "$$dirty" ]; then sed -i -e "s#%glo.*dirty.*##g" $@-t; fi + if [ "$$numcomm" = "0" ]; then numcomm=""; fi && \ + if [ -n "$$numcomm" ]; then numcomm="%global numcomm $$numcomm"; fi && \ + if [ "$$alphatag" = "$$gitver" ]; then alphatag=""; fi && \ + if [ -n "$$alphatag" ]; then alphatag="%global alphatag $$alphatag"; fi && \ + if [ -n "$$dirty" ]; then dirty="%global dirty dirty"; fi && \ + sed \ + -e "s#@version@#$$rpmver#g" \ + -e "s#@ALPHATAG@#$$alphatag#g" \ + -e "s#@NUMCOMM@#$$numcomm#g" \ + -e "s#@DIRTY@#$$dirty#g" \ + -e "s#@date@#$$date#g" \ + $(abs_srcdir)/$@.in > $@-t; +if BUILD_ASCIIDOC_HTML_MAN + sed -i -e "s#@bcond_html_man@#bcond_without#g" $@-t +else + sed -i -e "s#@bcond_html_man@#bcond_with#g" $@-t +endif chmod a-w $@-t mv $@-t $@ + rm -f $@-t* $(TARFILE): $(MAKE) dist RPMBUILDOPTS = --define "_sourcedir $(abs_builddir)" \ --define "_specdir $(abs_builddir)" \ --define "_builddir $(abs_builddir)" \ --define "_srcrpmdir $(abs_builddir)" \ --define "_rpmdir $(abs_builddir)" srpm: clean - autoreconf -if $(MAKE) $(SPEC) $(TARFILE) - rpmbuild $(WITH_LIST) $(RPMBUILDOPTS) --nodeps -bs $(SPEC) + rpmbuild $(RPMBUILDOPTS) --nodeps -bs $(SPEC) rpm: clean - autoreconf -if $(MAKE) $(SPEC) $(TARFILE) - rpmbuild $(WITH_LIST) $(RPMBUILDOPTS) -ba $(SPEC) + rpmbuild $(RPMBUILDOPTS) -ba $(SPEC) diff --git a/booth.spec b/booth.spec.in similarity index 90% rename from booth.spec rename to booth.spec.in index bd783ad..5d2faac 100644 --- a/booth.spec +++ b/booth.spec.in @@ -1,238 +1,245 @@ -%bcond_with html_man +# keep around ready for later user +@ALPHATAG@ +@NUMCOMM@ +@DIRTY@ + +%global gitver %{?numcomm:.%{numcomm}}%{?alphatag:-%{alphatag}}%{?dirty:-%{dirty}} +%global gittarver %{?numcomm:-%{numcomm}}%{?alphatag:-g%{alphatag}}%{?dirty:-%{dirty}} + +%@bcond_html_man@ html_man %if 0%{?fedora} > 18 || 0%{?centos} > 6 || 0%{?rhel} > 6 %bcond_with glue %if 0%{?fedora} > 26 || 0%{?centos} > 7 || 0%{?rhel} > 7 %bcond_without python3 %else %bcond_with python3 %endif %else %bcond_without glue %bcond_with python3 %endif %if 0%{?suse_version} %global booth_docdir %{_defaultdocdir}/%{name} %else # newer fedora distros have _pkgdocdir, rely on that when # available %{!?_pkgdocdir: %global _pkgdocdir %%{_docdir}/%{name}-%{version}} # Directory where we install documentation %global booth_docdir %{_pkgdocdir} %endif %global test_path %{_datadir}/booth/tests %if 0%{?suse_version} %define _libexecdir %{_libdir} %define _fwdefdir %{_libexecdir}/firewalld/services %endif %define with_extra_warnings 0 %define with_debugging 0 %define without_fatal_warnings 1 %if 0%{?fedora} || 0%{?centos} || 0%{?rhel} %define pkg_group System Environment/Daemons %else %define pkg_group Productivity/Clustering/HA %endif Name: booth Url: https://github.com/ClusterLabs/booth Summary: Ticket Manager for Multi-site Clusters %if 0%{?suse_version} License: GPL-2.0+ %else License: GPLv2+ %endif Group: %{pkg_group} -Version: 1.0 -Release: 0 -Source: booth.tar.bz2 +Version: @version@ +Release: 1%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} +Source: https://github.com/ClusterLabs/booth/archive/v%{version}%{?gittarver}/%{name}-%{version}%{?gitver}.tar.gz Source1: %name-rpmlintrc -BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: asciidoctor BuildRequires: autoconf BuildRequires: automake BuildRequires: pkgconfig %if 0%{?suse_version} BuildRequires: glib2-devel # SuSEFirewall2 replaced by Firewalld (fate#323460) BuildRequires: firewall-macros %else BuildRequires: pkgconfig(glib-2.0) %endif BuildRequires: libgcrypt-devel %if 0%{?fedora} || 0%{?centos} || 0%{?rhel} BuildRequires: pacemaker-libs-devel %else BuildRequires: libpacemaker-devel %endif %if 0%{?with_glue} %if 0%{?fedora} || 0%{?centos} || 0%{?rhel} BuildRequires: cluster-glue-libs-devel %else BuildRequires: libglue-devel %endif %else # logging provider BuildRequires: pkgconfig(libqb) # random2range provider BuildRequires: pkgconfig(glib-2.0) # nametag provider BuildRequires: pkgconfig(libsystemd) %endif BuildRequires: libxml2-devel BuildRequires: zlib-devel %if 0%{?fedora} || 0%{?centos} || 0%{?rhel} Requires: pacemaker >= 1.1.8 %if 0%{?with_glue} Requires: cluster-glue-libs >= 1.0.6 %endif %else Requires: pacemaker-ticket-support >= 2.0 %endif # for check scriptlet %if 0%{?with_python3} BuildRequires: python3-devel %else BuildRequires: python %endif %description Booth manages tickets which authorize cluster sites located in geographically dispersed locations to run resources. It facilitates support of geographically distributed clustering in Pacemaker. %prep -%setup -q -n %{name} +%setup -q -n %{name}-%{version}%{?gitver} %build ./autogen.sh %configure \ --with-initddir=%{_initrddir} \ --docdir=%{booth_docdir} \ - %{!?with_html_man:--without-html_man} \ + %{?with_html_man:--with-html_man} \ %{!?with_glue:--without-glue} make %install make DESTDIR=$RPM_BUILD_ROOT install docdir=%{booth_docdir} mkdir -p %{buildroot}/%{_mandir}/man8/ gzip < docs/boothd.8 > %{buildroot}/%{_mandir}/man8/booth.8.gz -ln %{buildroot}/%{_mandir}/man8/booth.8.gz %{buildroot}/%{_mandir}/man8/boothd.8.gz +ln %{buildroot}/%{_mandir}/man8/booth.8.gz %{buildroot}/%{_mandir}/man8/boothd.8.gz %if %{defined _unitdir} # systemd mkdir -p %{buildroot}/%{_unitdir} cp -a conf/booth@.service %{buildroot}/%{_unitdir}/booth@.service cp -a conf/booth-arbitrator.service %{buildroot}/%{_unitdir}/booth-arbitrator.service ln -s /usr/sbin/service %{buildroot}%{_sbindir}/rcbooth-arbitrator %else # sysV init ln -s ../../%{_initddir}/booth-arbitrator %{buildroot}%{_sbindir}/rcbooth-arbitrator %endif #install test-parts mkdir -p %{buildroot}/%{test_path}/conf cp -a unit-tests/ script/unit-test.py test %{buildroot}/%{test_path}/ cp -a conf/booth.conf.example %{buildroot}/%{test_path}/conf/ chmod +x %{buildroot}/%{test_path}/test/booth_path chmod +x %{buildroot}/%{test_path}/test/live_test.sh mkdir -p %{buildroot}/%{test_path}/src/ ln -s %{_sbindir}/boothd %{buildroot}/%{test_path}/src/ rm -f %{buildroot}/%{test_path}/test/*.pyc %if 0%{?suse_version} #Firewalld rule mkdir -p $RPM_BUILD_ROOT/%{_fwdefdir} install -m 644 contrib/geo-cluster.firewalld.xml $RPM_BUILD_ROOT/%{_fwdefdir}/booth.xml #install -m 644 %{S:2} $RPM_BUILD_ROOT/%{_fwdefdir}/booth %post %firewalld_reload %endif %check %if 0%{?run_build_tests} echo "%%run_build_tests set to %run_build_tests; including tests" make check %else echo "%%run_build_tests set to %run_build_tests; skipping tests" %endif %files %{_sbindir}/booth %{_sbindir}/boothd %{_sbindir}/booth-keygen %{_sbindir}/geostore %{_mandir}/man8/booth.8.gz %{_mandir}/man8/boothd.8.gz %{_mandir}/man8/booth-keygen.8.gz %{_mandir}/man8/geostore.8.gz %dir /usr/lib/ocf %dir /usr/lib/ocf/resource.d %dir /usr/lib/ocf/resource.d/pacemaker %dir /usr/lib/ocf/resource.d/booth %dir /usr/lib/ocf/lib %dir /usr/lib/ocf/lib/booth %dir %{_sysconfdir}/booth %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/booth/ %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/booth/cores %{_sbindir}/rcbooth-arbitrator /usr/lib/ocf/resource.d/pacemaker/booth-site /usr/lib/ocf/lib/booth/geo_attr.sh /usr/lib/ocf/resource.d/booth/geostore %config %{_sysconfdir}/booth/booth.conf.example %if 0%{?suse_version} %dir %{_libexecdir}/firewalld %dir %{_fwdefdir} %{_fwdefdir}/booth.xml %endif %if %{defined _unitdir} %{_unitdir}/booth@.service %{_unitdir}/booth-arbitrator.service %exclude %{_initddir}/booth-arbitrator %else %{_initddir}/booth-arbitrator %endif %dir %{_datadir}/booth %{_datadir}/booth/service-runnable %doc AUTHORS README COPYING %doc README.upgrade-from-v0.1 %package test Summary: Test scripts for Booth Group: %{pkg_group} Requires: booth Requires: gdb %if 0%{?with_python3} Requires: python3 Requires: python3-pexpect %else Requires: python Requires: python-pexpect %endif %description test This package contains automated tests for Booth, the Cluster Ticket Manager for Pacemaker. %files test -%doc README-testing +%doc %{booth_docdir}/README-testing %{test_path} %dir /usr/lib/ocf %dir /usr/lib/ocf/resource.d %dir /usr/lib/ocf/resource.d/booth /usr/lib/ocf/resource.d/booth/sharedrsc %changelog