summaryrefslogtreecommitdiffstats
path: root/rpm/pacemaker.spec.in
diff options
context:
space:
mode:
Diffstat (limited to 'rpm/pacemaker.spec.in')
-rw-r--r--rpm/pacemaker.spec.in977
1 files changed, 977 insertions, 0 deletions
diff --git a/rpm/pacemaker.spec.in b/rpm/pacemaker.spec.in
new file mode 100644
index 0000000..7fb27e4
--- /dev/null
+++ b/rpm/pacemaker.spec.in
@@ -0,0 +1,977 @@
+#
+# Copyright 2008-2023 the Pacemaker project contributors
+#
+# The version control history for this file may have further details.
+#
+# This source code is licensed under the GNU General Public License version 2
+# or later (GPLv2+) WITHOUT ANY WARRANTY.
+#
+
+# User-configurable globals and defines to control package behavior
+# (these should not test {with X} values, which are declared later)
+
+## User and group to use for nonprivileged services
+%global uname hacluster
+%global gname haclient
+
+## Where to install Pacemaker documentation
+%if 0%{?suse_version} > 0
+%global pcmk_docdir %{_docdir}/%{name}-%{version}
+%else
+%if 0%{?rhel} > 7
+%global pcmk_docdir %{_docdir}/%{name}-doc
+%else
+%global pcmk_docdir %{_docdir}/%{name}
+%endif
+%endif
+
+## GitHub entity that distributes source (for ease of using a fork)
+%global github_owner ClusterLabs
+
+## Where bug reports should be submitted
+## Leave bug_url undefined to use ClusterLabs default, others define it here
+
+## What to use as the OCF resource agent root directory
+%global ocf_root %{_prefix}/lib/ocf
+
+## Upstream pacemaker version, and its package version (specversion
+## can be incremented to build packages reliably considered "newer"
+## than previously built packages with the same pcmkversion)
+%global pcmkversion X.Y.Z
+%global specversion 1
+
+## Upstream commit (full commit ID, abbreviated commit ID, or tag) to build
+%global commit HEAD
+
+## Since git v2.11, the extent of abbreviation is autoscaled by default
+## (used to be constant of 7), so we need to convey it for non-tags, too.
+%if (0%{?fedora} >= 26) || (0%{?rhel} >= 9)
+%global commit_abbrev 9
+%else
+%global commit_abbrev 7
+%endif
+
+
+# Define conditionals so that "rpmbuild --with <feature>" and
+# "rpmbuild --without <feature>" can enable and disable specific features
+
+## Add option to enable support for stonith/external fencing agents
+%if 0%{?suse_version} > 0
+%bcond_without stonithd
+%else
+%bcond_with stonithd
+%endif
+
+## Add option for whether to support storing sensitive information outside CIB
+%if (0%{?fedora} && 0%{?fedora} <= 33) || (0%{?rhel} && 0%{?rhel} <= 8)
+%bcond_with cibsecrets
+%else
+%bcond_without cibsecrets
+%endif
+
+## Add option to enable Native Language Support (experimental)
+%bcond_with nls
+
+## Add option to create binaries suitable for use with profiling tools
+%bcond_with profiling
+
+## Allow deprecated option to skip (or enable, on RHEL) documentation
+%if 0%{?rhel}
+%bcond_with doc
+%else
+%bcond_without doc
+%endif
+
+## Add option to default to start-up synchronization with SBD.
+##
+## If enabled, SBD *MUST* be built to default similarly, otherwise data
+## corruption could occur. Building both Pacemaker and SBD to default
+## to synchronization improves safety, without requiring higher-level tools
+## to be aware of the setting or requiring users to modify configurations
+## after upgrading to versions that support synchronization.
+%if 0%{?rhel} && 0%{?rhel} > 8
+%bcond_without sbd_sync
+%else
+%bcond_with sbd_sync
+%endif
+
+## Add option to prefix package version with "0."
+## (so later "official" packages will be considered updates)
+%bcond_with pre_release
+
+## Add option to ship Upstart job files
+%bcond_with upstart_job
+
+## Add option to turn off hardening of libraries and daemon executables
+%bcond_without hardening
+
+## Add option to enable (or disable, on RHEL 8) links for legacy daemon names
+%if 0%{?rhel} && 0%{?rhel} <= 8
+%bcond_without legacy_links
+%else
+%bcond_with legacy_links
+%endif
+
+# Define globals for convenient use later
+
+## Workaround to use parentheses in other globals
+%global lparen (
+%global rparen )
+
+## Whether this is a tagged release (final or release candidate)
+%define tag_release %(c=%{commit}; case ${c} in Pacemaker-*%{rparen} echo 1 ;;
+ *%{rparen} echo 0 ;; esac)
+
+## Portion of export/dist tarball name after "pacemaker-", and release version
+%if 0%{tag_release}
+%define archive_version %(c=%{commit}; echo ${c:10})
+%define archive_github_url %{commit}#/%{name}-%{archive_version}.tar.gz
+%define pcmk_release %(c=%{commit}; case $c in *-rc[[:digit:]]*%{rparen}
+ echo 0.%{specversion}.${c: -3} ;;
+ *%{rparen} echo %{specversion} ;; esac)
+%else
+%if "%{commit}" == "DIST"
+%define archive_version %{pcmkversion}
+%define archive_github_url %{archive_version}#/%{name}-%{pcmkversion}.tar.gz
+%if %{with pre_release}
+%define pcmk_release 0.%{specversion}
+%else
+%define pcmk_release %{specversion}
+%endif
+%else
+%define archive_version %(c=%{commit}; echo ${c:0:%{commit_abbrev}})
+%define archive_github_url %{archive_version}#/%{name}-%{archive_version}.tar.gz
+%if %{with pre_release}
+%define pcmk_release 0.%{specversion}.%{archive_version}.git
+%else
+%define pcmk_release %{specversion}.%{archive_version}.git
+%endif
+%endif
+%endif
+
+## Whether this platform defaults to using systemd as an init system
+## (needs to be evaluated prior to BuildRequires being enumerated and
+## installed as it's intended to conditionally select some of these, and
+## for that there are only few indicators with varying reliability:
+## - presence of systemd-defined macros (when building in a full-fledged
+## environment, which is not the case with ordinary mock-based builds)
+## - systemd-aware rpm as manifested with the presence of particular
+## macro (rpm itself will trivially always be present when building)
+## - existence of /usr/lib/os-release file, which is something heavily
+## propagated by systemd project
+## - when not good enough, there's always a possibility to check
+## particular distro-specific macros (incl. version comparison)
+%define systemd_native (%{?_unitdir:1}%{!?_unitdir:0}%{nil \
+ } || %{?__transaction_systemd_inhibit:1}%{!?__transaction_systemd_inhibit:0}%{nil \
+ } || %(test -f /usr/lib/os-release; test $? -ne 0; echo $?))
+
+%if 0%{?fedora} > 20 || 0%{?rhel} > 7
+## Base GnuTLS cipher priorities (presumably only the initial, required keyword)
+## overridable with "rpmbuild --define 'pcmk_gnutls_priorities PRIORITY-SPEC'"
+%define gnutls_priorities %{?pcmk_gnutls_priorities}%{!?pcmk_gnutls_priorities:@SYSTEM}
+%endif
+
+%if 0%{?fedora} > 22 || 0%{?rhel} > 7
+%global supports_recommends 1
+%endif
+
+## Different distros name certain packages differently
+## (note: corosync libraries also differ, but all provide corosync-devel)
+%if 0%{?suse_version} > 0
+%global pkgname_bzip2_devel libbz2-devel
+%global pkgname_docbook_xsl docbook-xsl-stylesheets
+%global pkgname_gettext gettext-tools
+%global pkgname_gnutls_devel libgnutls-devel
+%global pkgname_shadow_utils shadow
+%global pkgname_procps procps
+%global pkgname_glue_libs libglue
+%global pkgname_pcmk_libs lib%{name}3
+%global hacluster_id 90
+%else
+%global pkgname_libtool_devel libtool-ltdl-devel
+%global pkgname_libtool_devel_arch libtool-ltdl-devel%{?_isa}
+%global pkgname_bzip2_devel bzip2-devel
+%global pkgname_docbook_xsl docbook-style-xsl
+%global pkgname_gettext gettext-devel
+%global pkgname_gnutls_devel gnutls-devel
+%global pkgname_shadow_utils shadow-utils
+%global pkgname_procps procps-ng
+%global pkgname_glue_libs cluster-glue-libs
+%global pkgname_pcmk_libs %{name}-libs
+%global hacluster_id 189
+%endif
+
+## Distro-specific configuration choices
+
+### Use 2.0-style output when other distro packages don't support current output
+%if 0%{?fedora} || ( 0%{?rhel} && 0%{?rhel} <= 8 )
+%global compat20 --enable-compat-2.0
+%endif
+
+### Default concurrent-fencing to true when distro prefers that
+%if 0%{?rhel} >= 7
+%global concurrent_fencing --with-concurrent-fencing-default=true
+%endif
+
+### Default resource-stickiness to 1 when distro prefers that
+%if 0%{?fedora} >= 35 || 0%{?rhel} >= 9
+%global resource_stickiness --with-resource-stickiness-default=1
+%endif
+
+
+# Python-related definitions
+
+## Turn off auto-compilation of Python files outside Python specific paths,
+## so there's no risk that unexpected "__python" macro gets picked to do the
+## RPM-native byte-compiling there (only "{_datadir}/pacemaker/tests" affected)
+## -- distro-dependent tricks or automake's fallback to be applied there
+%if %{defined _python_bytecompile_extra}
+%global _python_bytecompile_extra 0
+%else
+### the statement effectively means no RPM-native byte-compiling will occur at
+### all, so distro-dependent tricks for Python-specific packages to be applied
+%global __os_install_post %(echo '%{__os_install_post}' | {
+ sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g'; })
+%endif
+
+## Prefer Python 3 definitions explicitly, in case 2 is also available
+%if %{defined __python3}
+%global python_name python3
+%global python_path %{__python3}
+%define python_site %{?python3_sitelib}%{!?python3_sitelib:%(
+ %{python_path} -c 'from distutils.sysconfig import get_python_lib as gpl; print(gpl(1))' 2>/dev/null)}
+%else
+%if %{defined python_version}
+%global python_name python%(echo %{python_version} | cut -d'.' -f1)
+%define python_path %{?__python}%{!?__python:/usr/bin/%{python_name}}
+%else
+%global python_name python
+%global python_path %{?__python}%{!?__python:/usr/bin/python%{?python_pkgversion}}
+%endif
+%define python_site %{?python_sitelib}%{!?python_sitelib:%(
+ %{python_name} -c 'from distutils.sysconfig import get_python_lib as gpl; print(gpl(1))' 2>/dev/null)}
+%endif
+
+
+# Keep sane profiling data if requested
+%if %{with profiling}
+
+## Disable -debuginfo package and stripping binaries/libraries
+%define debug_package %{nil}
+
+%endif
+
+
+Name: pacemaker
+Summary: Scalable High-Availability cluster resource manager
+Version: %{pcmkversion}
+Release: %{pcmk_release}%{?dist}
+%if %{defined _unitdir}
+License: GPL-2.0-or-later AND LGPL-2.1-or-later
+%else
+# initscript is Revised BSD
+License: GPL-2.0-or-later AND LGPL-2.1-or-later AND BSD-3-Clause
+%endif
+Url: https://www.clusterlabs.org/
+
+# Example: https://codeload.github.com/ClusterLabs/pacemaker/tar.gz/e91769e
+# will download pacemaker-e91769e.tar.gz
+#
+# The ending part starting with '#' is ignored by github but necessary for
+# rpmbuild to know what the tar archive name is. (The downloaded file will be
+# named correctly only for commit IDs, not tagged releases.)
+#
+# You can use "spectool -s 0 pacemaker.spec" (rpmdevtools) to show final URL.
+Source0: https://codeload.github.com/%{github_owner}/%{name}/tar.gz/%{archive_github_url}
+Requires: resource-agents
+Requires: %{pkgname_pcmk_libs}%{?_isa} = %{version}-%{release}
+Requires: %{name}-cluster-libs%{?_isa} = %{version}-%{release}
+Requires: %{name}-cli = %{version}-%{release}
+%if %{with stonithd}
+Requires: %{python_name}-%{name} = %{version}-%{release}
+%endif
+%if !%{defined _unitdir}
+Requires: %{pkgname_procps}
+Requires: psmisc
+%endif
+%{?systemd_requires}
+
+Requires: %{python_path}
+BuildRequires: %{python_name}-devel
+BuildRequires: %{python_name}-setuptools
+
+# Pacemaker requires a minimum libqb functionality
+Requires: libqb >= 0.17.0
+BuildRequires: libqb-devel >= 0.17.0
+
+# Required basic build tools
+BuildRequires: autoconf
+BuildRequires: automake
+BuildRequires: coreutils
+BuildRequires: findutils
+BuildRequires: gcc
+BuildRequires: grep
+BuildRequires: libtool
+%if %{defined pkgname_libtool_devel}
+BuildRequires: %{?pkgname_libtool_devel}
+%endif
+BuildRequires: make
+BuildRequires: pkgconfig
+BuildRequires: sed
+
+# Required for core functionality
+BuildRequires: pkgconfig(glib-2.0) >= 2.42
+BuildRequires: libxml2-devel
+BuildRequires: libxslt-devel
+BuildRequires: libuuid-devel
+BuildRequires: %{pkgname_bzip2_devel}
+
+# Enables optional functionality
+BuildRequires: pkgconfig(dbus-1)
+BuildRequires: %{pkgname_docbook_xsl}
+BuildRequires: %{pkgname_gnutls_devel}
+BuildRequires: help2man
+BuildRequires: ncurses-devel
+BuildRequires: pam-devel
+BuildRequires: %{pkgname_gettext} >= 0.18
+
+# Required for "make check"
+BuildRequires: libcmocka-devel
+
+%if %{systemd_native}
+BuildRequires: pkgconfig(systemd)
+%endif
+
+Requires: corosync >= 2.0.0
+BuildRequires: corosync-devel >= 2.0.0
+
+%if %{with stonithd}
+BuildRequires: %{pkgname_glue_libs}-devel
+%endif
+
+%if %{with doc}
+BuildRequires: asciidoc
+BuildRequires: inkscape
+BuildRequires: %{python_name}-sphinx
+%endif
+
+# Booth requires this
+Provides: pacemaker-ticket-support = 2.0
+
+Provides: pcmk-cluster-manager = %{version}-%{release}
+Provides: pcmk-cluster-manager%{?_isa} = %{version}-%{release}
+
+# Bundled bits
+## Pacemaker uses the crypto/md5-buffer module from gnulib
+%if 0%{?fedora} || 0%{?rhel}
+Provides: bundled(gnulib) = 20200404
+%endif
+
+%description
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+It supports more than 16 node clusters with significant capabilities
+for managing resources and dependencies.
+
+It will run scripts at initialization, when machines go up or down,
+when related resources fail and can be configured to periodically check
+resource health.
+
+Available rpmbuild rebuild options:
+ --with(out) : cibsecrets hardening nls pre_release profiling
+ stonithd upstart_job
+
+%package cli
+License: GPL-2.0-or-later AND LGPL-2.1-or-later
+Summary: Command line tools for controlling Pacemaker clusters
+Requires: %{pkgname_pcmk_libs}%{?_isa} = %{version}-%{release}
+%if 0%{?supports_recommends}
+Recommends: pcmk-cluster-manager = %{version}-%{release}
+# For crm_report
+Recommends: tar
+Recommends: bzip2
+%endif
+Requires: perl-TimeDate
+Requires: %{pkgname_procps}
+Requires: psmisc
+Requires(post):coreutils
+
+%description cli
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+The %{name}-cli package contains command line tools that can be used
+to query and control the cluster from machines that may, or may not,
+be part of the cluster.
+
+%package -n %{pkgname_pcmk_libs}
+License: GPL-2.0-or-later AND LGPL-2.1-or-later
+Summary: Core Pacemaker libraries
+Requires(pre): %{pkgname_shadow_utils}
+Requires: %{name}-schemas = %{version}-%{release}
+# sbd 1.4.0+ supports the libpe_status API for pe_working_set_t
+Conflicts: sbd < 1.4.0
+
+%description -n %{pkgname_pcmk_libs}
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+The %{pkgname_pcmk_libs} package contains shared libraries needed for cluster
+nodes and those just running the CLI tools.
+
+%package cluster-libs
+License: GPL-2.0-or-later AND LGPL-2.1-or-later
+Summary: Cluster Libraries used by Pacemaker
+Requires: %{pkgname_pcmk_libs}%{?_isa} = %{version}-%{release}
+
+%description cluster-libs
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+The %{name}-cluster-libs package contains cluster-aware shared
+libraries needed for nodes that will form part of the cluster nodes.
+
+%package -n %{python_name}-%{name}
+License: LGPL-2.1-or-later
+Summary: Python libraries for Pacemaker
+Requires: %{python_path}
+Requires: %{pkgname_pcmk_libs} = %{version}-%{release}
+BuildArch: noarch
+
+%description -n %{python_name}-%{name}
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+The %{python_name}-%{name} package contains a Python library that can be used
+to interface with Pacemaker.
+
+%package remote
+%if %{defined _unitdir}
+License: GPL-2.0-or-later AND LGPL-2.1-or-later
+%else
+# initscript is Revised BSD
+License: GPL-2.0-or-later AND LGPL-2.1-or-later AND BSD-3-Clause
+%endif
+Summary: Pacemaker remote executor daemon for non-cluster nodes
+Requires: %{pkgname_pcmk_libs}%{?_isa} = %{version}-%{release}
+Requires: %{name}-cli = %{version}-%{release}
+Requires: resource-agents
+%if !%{defined _unitdir}
+Requires: %{pkgname_procps}
+%endif
+# -remote can be fully independent of systemd
+%{?systemd_ordering}%{!?systemd_ordering:%{?systemd_requires}}
+Provides: pcmk-cluster-manager = %{version}-%{release}
+Provides: pcmk-cluster-manager%{?_isa} = %{version}-%{release}
+
+%description remote
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+The %{name}-remote package contains the Pacemaker Remote daemon
+which is capable of extending pacemaker functionality to remote
+nodes not running the full corosync/cluster stack.
+
+%package -n %{pkgname_pcmk_libs}-devel
+License: GPL-2.0-or-later AND LGPL-2.1-or-later
+Summary: Pacemaker development package
+Requires: %{pkgname_pcmk_libs}%{?_isa} = %{version}-%{release}
+Requires: %{name}-cluster-libs%{?_isa} = %{version}-%{release}
+Requires: %{pkgname_bzip2_devel}%{?_isa}
+Requires: corosync-devel >= 2.0.0
+Requires: glib2-devel%{?_isa}
+Requires: libqb-devel%{?_isa}
+%if %{defined pkgname_libtool_devel_arch}
+Requires: %{?pkgname_libtool_devel_arch}
+%endif
+Requires: libuuid-devel%{?_isa}
+Requires: libxml2-devel%{?_isa}
+Requires: libxslt-devel%{?_isa}
+
+%description -n %{pkgname_pcmk_libs}-devel
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+The %{pkgname_pcmk_libs}-devel package contains headers and shared libraries
+for developing tools for Pacemaker.
+
+%package cts
+License: GPL-2.0-or-later AND LGPL-2.1-or-later
+Summary: Test framework for cluster-related technologies like Pacemaker
+Requires: %{python_path}
+Requires: %{pkgname_pcmk_libs} = %{version}-%{release}
+Requires: %{name}-cli = %{version}-%{release}
+Requires: %{python_name}-%{name} = %{version}-%{release}
+Requires: %{pkgname_procps}
+Requires: psmisc
+Requires: %{python_name}-psutil
+BuildArch: noarch
+
+# systemd Python bindings are a separate package in some distros
+%if %{defined systemd_requires}
+%if 0%{?fedora} > 22 || 0%{?rhel} > 7
+Requires: %{python_name}-systemd
+%endif
+%endif
+
+%description cts
+Test framework for cluster-related technologies like Pacemaker
+
+%package doc
+License: CC-BY-SA-4.0
+Summary: Documentation for Pacemaker
+BuildArch: noarch
+
+%description doc
+Documentation for Pacemaker.
+
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+%package schemas
+License: GPL-2.0-or-later
+Summary: Schemas and upgrade stylesheets for Pacemaker
+BuildArch: noarch
+
+%description schemas
+Schemas and upgrade stylesheets for Pacemaker
+
+Pacemaker is an advanced, scalable High-Availability cluster resource
+manager.
+
+%prep
+%setup -q -n %{name}-%{archive_version}
+
+%build
+
+export systemdsystemunitdir=%{?_unitdir}%{!?_unitdir:no}
+
+%if %{with hardening}
+# prefer distro-provided hardening flags in case they are defined
+# through _hardening_{c,ld}flags macros, configure script will
+# use its own defaults otherwise; if such hardenings are completely
+# undesired, rpmbuild using "--without hardening"
+# (or "--define '_without_hardening 1'")
+export CFLAGS_HARDENED_EXE="%{?_hardening_cflags}"
+export CFLAGS_HARDENED_LIB="%{?_hardening_cflags}"
+export LDFLAGS_HARDENED_EXE="%{?_hardening_ldflags}"
+export LDFLAGS_HARDENED_LIB="%{?_hardening_ldflags}"
+%endif
+
+./autogen.sh
+
+%{configure} \
+ PYTHON=%{python_path} \
+ %{!?with_hardening: --disable-hardening} \
+ %{?with_legacy_links: --enable-legacy-links} \
+ %{?with_profiling: --with-profiling} \
+ %{?with_cibsecrets: --with-cibsecrets} \
+ %{?with_nls: --enable-nls} \
+ %{?with_sbd_sync: --with-sbd-sync-default="true"} \
+ %{?gnutls_priorities: --with-gnutls-priorities="%{gnutls_priorities}"} \
+ %{?bug_url: --with-bug-url=%{bug_url}} \
+ %{?ocf_root: --with-ocfdir=%{ocf_root}} \
+ %{?concurrent_fencing} \
+ %{?resource_stickiness} \
+ %{?compat20} \
+ --disable-static \
+ --with-initdir=%{_initrddir} \
+ --with-runstatedir=%{_rundir} \
+ --localstatedir=%{_var} \
+ --with-version=%{version}-%{release}
+
+%if 0%{?suse_version} >= 1200
+# Fedora handles rpath removal automagically
+sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+%endif
+
+make %{_smp_mflags} V=1
+
+pushd python
+%py3_build
+popd
+
+%check
+make %{_smp_mflags} check
+{ cts/cts-scheduler --run load-stopped-loop \
+ && cts/cts-cli \
+ && touch .CHECKED
+} 2>&1 | sed 's/[fF]ail/faiil/g' # prevent false positives in rpmlint
+[ -f .CHECKED ] && rm -f -- .CHECKED
+exit $? # TODO remove when rpm<4.14 compatibility irrelevant
+
+%install
+# skip automake-native Python byte-compilation, since RPM-native one (possibly
+# distro-confined to Python-specific directories, which is currently the only
+# relevant place, anyway) assures proper intrinsic alignment with wider system
+# (such as with py_byte_compile macro, which is concurrent Fedora/EL specific)
+make install \
+ DESTDIR=%{buildroot} V=1 docdir=%{pcmk_docdir} \
+ %{?_python_bytecompile_extra:%{?py_byte_compile:am__py_compile=true}}
+
+pushd python
+%py3_install
+popd
+
+%if %{with upstart_job}
+mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/init
+install -m 644 pacemakerd/pacemaker.upstart ${RPM_BUILD_ROOT}%{_sysconfdir}/init/pacemaker.conf
+install -m 644 pacemakerd/pacemaker.combined.upstart ${RPM_BUILD_ROOT}%{_sysconfdir}/init/pacemaker.combined.conf
+install -m 644 tools/crm_mon.upstart ${RPM_BUILD_ROOT}%{_sysconfdir}/init/crm_mon.conf
+%endif
+
+%if %{defined _unitdir}
+mkdir -p ${RPM_BUILD_ROOT}%{_localstatedir}/lib/rpm-state/%{name}
+%endif
+
+%if %{with nls}
+%find_lang %{name}
+%endif
+
+# Don't package libtool archives
+find %{buildroot} -name '*.la' -type f -print0 | xargs -0 rm -f
+
+# Byte-compile Python sources where suitable and the distro procedures known
+%if %{defined py_byte_compile}
+%{py_byte_compile %{python_path} %{buildroot}%{_datadir}/pacemaker/tests}
+%if !%{defined _python_bytecompile_extra}
+%{py_byte_compile %{python_path} %{buildroot}%{python_site}/cts}
+%endif
+%endif
+
+%post
+%if %{defined _unitdir}
+%systemd_post pacemaker.service
+%else
+/sbin/chkconfig --add pacemaker || :
+%endif
+
+%preun
+%if %{defined _unitdir}
+%systemd_preun pacemaker.service
+%else
+/sbin/service pacemaker stop >/dev/null 2>&1 || :
+if [ "$1" -eq 0 ]; then
+ # Package removal, not upgrade
+ /sbin/chkconfig --del pacemaker || :
+fi
+%endif
+
+%postun
+%if %{defined _unitdir}
+%systemd_postun_with_restart pacemaker.service
+%endif
+
+%pre remote
+%if %{defined _unitdir}
+# Stop the service before anything is touched, and remember to restart
+# it as one of the last actions (compared to using systemd_postun_with_restart,
+# this avoids suicide when sbd is in use)
+systemctl --quiet is-active pacemaker_remote
+if [ $? -eq 0 ] ; then
+ mkdir -p %{_localstatedir}/lib/rpm-state/%{name}
+ touch %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote
+ systemctl stop pacemaker_remote >/dev/null 2>&1
+else
+ rm -f %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote
+fi
+%endif
+
+%post remote
+%if %{defined _unitdir}
+%systemd_post pacemaker_remote.service
+%else
+/sbin/chkconfig --add pacemaker_remote || :
+%endif
+
+%preun remote
+%if %{defined _unitdir}
+%systemd_preun pacemaker_remote.service
+%else
+/sbin/service pacemaker_remote stop >/dev/null 2>&1 || :
+if [ "$1" -eq 0 ]; then
+ # Package removal, not upgrade
+ /sbin/chkconfig --del pacemaker_remote || :
+fi
+%endif
+
+%postun remote
+%if %{defined _unitdir}
+# This next line is a no-op, because we stopped the service earlier, but
+# we leave it here because it allows us to revert to the standard behavior
+# in the future if desired
+%systemd_postun_with_restart pacemaker_remote.service
+# Explicitly take care of removing the flag-file(s) upon final removal
+if [ "$1" -eq 0 ] ; then
+ rm -f %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote
+fi
+%endif
+
+%posttrans remote
+%if %{defined _unitdir}
+if [ -e %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote ] ; then
+ systemctl start pacemaker_remote >/dev/null 2>&1
+ rm -f %{_localstatedir}/lib/rpm-state/%{name}/restart_pacemaker_remote
+fi
+%endif
+
+%post cli
+%if %{defined _unitdir}
+%systemd_post crm_mon.service
+%endif
+if [ "$1" -eq 2 ]; then
+ # Package upgrade, not initial install:
+ # Move any pre-2.0 logs to new location to ensure they get rotated
+ { mv -fbS.rpmsave %{_var}/log/pacemaker.log* %{_var}/log/pacemaker \
+ || mv -f %{_var}/log/pacemaker.log* %{_var}/log/pacemaker
+ } >/dev/null 2>/dev/null || :
+fi
+
+%preun cli
+%if %{defined _unitdir}
+%systemd_preun crm_mon.service
+%endif
+
+%postun cli
+%if %{defined _unitdir}
+%systemd_postun_with_restart crm_mon.service
+%endif
+
+%pre -n %{pkgname_pcmk_libs}
+getent group %{gname} >/dev/null || groupadd -r %{gname} -g %{hacluster_id}
+getent passwd %{uname} >/dev/null || useradd -r -g %{gname} -u %{hacluster_id} -s /sbin/nologin -c "cluster user" %{uname}
+exit 0
+
+%if %{defined ldconfig_scriptlets}
+%ldconfig_scriptlets -n %{pkgname_pcmk_libs}
+%ldconfig_scriptlets cluster-libs
+%else
+%post -n %{pkgname_pcmk_libs} -p /sbin/ldconfig
+%postun -n %{pkgname_pcmk_libs} -p /sbin/ldconfig
+
+%post cluster-libs -p /sbin/ldconfig
+%postun cluster-libs -p /sbin/ldconfig
+%endif
+
+%files
+###########################################################
+%config(noreplace) %{_sysconfdir}/sysconfig/pacemaker
+%{_sbindir}/pacemakerd
+
+%if %{defined _unitdir}
+%{_unitdir}/pacemaker.service
+%else
+%{_initrddir}/pacemaker
+%endif
+
+%exclude %{_libexecdir}/pacemaker/cts-log-watcher
+%exclude %{_libexecdir}/pacemaker/cts-support
+%exclude %{_sbindir}/pacemaker-remoted
+%exclude %{_sbindir}/pacemaker_remoted
+%{_libexecdir}/pacemaker/*
+
+%{_sbindir}/crm_master
+%if %{with stonithd}
+%{_sbindir}/fence_legacy
+%endif
+%{_sbindir}/fence_watchdog
+
+%doc %{_mandir}/man7/pacemaker-controld.*
+%doc %{_mandir}/man7/pacemaker-schedulerd.*
+%doc %{_mandir}/man7/pacemaker-fenced.*
+%doc %{_mandir}/man7/ocf_pacemaker_controld.*
+%doc %{_mandir}/man7/ocf_pacemaker_o2cb.*
+%doc %{_mandir}/man7/ocf_pacemaker_remote.*
+%doc %{_mandir}/man8/crm_master.*
+%if %{with stonithd}
+%doc %{_mandir}/man8/fence_legacy.*
+%endif
+%doc %{_mandir}/man8/fence_watchdog.*
+%doc %{_mandir}/man8/pacemakerd.*
+
+%doc %{_datadir}/pacemaker/alerts
+
+%license licenses/GPLv2
+%doc COPYING
+%doc ChangeLog
+
+%dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/cib
+%dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/pengine
+%{ocf_root}/resource.d/pacemaker/controld
+%{ocf_root}/resource.d/pacemaker/o2cb
+%{ocf_root}/resource.d/pacemaker/remote
+
+%if %{with upstart_job}
+%config(noreplace) %{_sysconfdir}/init/pacemaker.conf
+%config(noreplace) %{_sysconfdir}/init/pacemaker.combined.conf
+%endif
+
+%files cli
+%dir %attr (750, root, %{gname}) %{_sysconfdir}/pacemaker
+%config(noreplace) %{_sysconfdir}/logrotate.d/pacemaker
+%config(noreplace) %{_sysconfdir}/sysconfig/crm_mon
+
+%if %{defined _unitdir}
+%{_unitdir}/crm_mon.service
+%endif
+
+%if %{with upstart_job}
+%config(noreplace) %{_sysconfdir}/init/crm_mon.conf
+%endif
+
+%{_sbindir}/attrd_updater
+%{_sbindir}/cibadmin
+%if %{with cibsecrets}
+%{_sbindir}/cibsecret
+%endif
+%{_sbindir}/crm_attribute
+%{_sbindir}/crm_diff
+%{_sbindir}/crm_error
+%{_sbindir}/crm_failcount
+%{_sbindir}/crm_mon
+%{_sbindir}/crm_node
+%{_sbindir}/crm_resource
+%{_sbindir}/crm_rule
+%{_sbindir}/crm_standby
+%{_sbindir}/crm_verify
+%{_sbindir}/crmadmin
+%{_sbindir}/iso8601
+%{_sbindir}/crm_shadow
+%{_sbindir}/crm_simulate
+%{_sbindir}/crm_report
+%{_sbindir}/crm_ticket
+%{_sbindir}/stonith_admin
+# "dirname" is owned by -schemas, which is a prerequisite
+%{_datadir}/pacemaker/report.collector
+%{_datadir}/pacemaker/report.common
+# XXX "dirname" is not owned by any prerequisite
+%{_datadir}/snmp/mibs/PCMK-MIB.txt
+
+%exclude %{ocf_root}/resource.d/pacemaker/controld
+%exclude %{ocf_root}/resource.d/pacemaker/o2cb
+%exclude %{ocf_root}/resource.d/pacemaker/remote
+
+%dir %{ocf_root}
+%dir %{ocf_root}/resource.d
+%{ocf_root}/resource.d/pacemaker
+
+%doc %{_mandir}/man7/*pacemaker*
+%exclude %{_mandir}/man7/pacemaker-controld.*
+%exclude %{_mandir}/man7/pacemaker-schedulerd.*
+%exclude %{_mandir}/man7/pacemaker-fenced.*
+%exclude %{_mandir}/man7/ocf_pacemaker_controld.*
+%exclude %{_mandir}/man7/ocf_pacemaker_o2cb.*
+%exclude %{_mandir}/man7/ocf_pacemaker_remote.*
+%doc %{_mandir}/man8/crm*.8.gz
+%exclude %{_mandir}/man8/crm_master.*
+%doc %{_mandir}/man8/attrd_updater.*
+%doc %{_mandir}/man8/cibadmin.*
+%if %{with cibsecrets}
+ %doc %{_mandir}/man8/cibsecret.*
+%endif
+%doc %{_mandir}/man8/iso8601.*
+%doc %{_mandir}/man8/stonith_admin.*
+
+%license licenses/GPLv2
+%doc COPYING
+%doc ChangeLog
+
+%dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker
+%dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/blackbox
+%dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/cores
+%dir %attr (770, %{uname}, %{gname}) %{_var}/log/pacemaker
+%dir %attr (770, %{uname}, %{gname}) %{_var}/log/pacemaker/bundles
+
+%files -n %{pkgname_pcmk_libs} %{?with_nls:-f %{name}.lang}
+%{_libdir}/libcib.so.*
+%{_libdir}/liblrmd.so.*
+%{_libdir}/libcrmservice.so.*
+%{_libdir}/libcrmcommon.so.*
+%{_libdir}/libpe_status.so.*
+%{_libdir}/libpe_rules.so.*
+%{_libdir}/libpacemaker.so.*
+%{_libdir}/libstonithd.so.*
+%license licenses/LGPLv2.1
+%doc COPYING
+%doc ChangeLog
+
+%files cluster-libs
+%{_libdir}/libcrmcluster.so.*
+%license licenses/LGPLv2.1
+%doc COPYING
+%doc ChangeLog
+
+%files -n %{python_name}-%{name}
+%{python3_sitelib}/pacemaker/
+%{python3_sitelib}/pacemaker-*.egg-info
+%exclude %{python3_sitelib}/pacemaker/_cts/
+%license licenses/LGPLv2.1
+%doc COPYING
+%doc ChangeLog
+
+%files remote
+%config(noreplace) %{_sysconfdir}/sysconfig/pacemaker
+%if %{defined _unitdir}
+# state directory is shared between the subpackets
+# let rpm take care of removing it once it isn't
+# referenced anymore and empty
+%ghost %dir %{_localstatedir}/lib/rpm-state/%{name}
+%{_unitdir}/pacemaker_remote.service
+%else
+%{_initrddir}/pacemaker_remote
+%endif
+
+%{_sbindir}/pacemaker-remoted
+%{_sbindir}/pacemaker_remoted
+%{_mandir}/man8/pacemaker-remoted.*
+%license licenses/GPLv2
+%doc COPYING
+%doc ChangeLog
+
+%files doc
+%doc %{pcmk_docdir}
+%license licenses/CC-BY-SA-4.0
+
+%files cts
+%{python_site}/cts
+%{python3_sitelib}/pacemaker/_cts/
+%{_datadir}/pacemaker/tests
+
+%{_libexecdir}/pacemaker/cts-log-watcher
+%{_libexecdir}/pacemaker/cts-support
+
+%license licenses/GPLv2
+%doc COPYING
+%doc ChangeLog
+
+%files -n %{pkgname_pcmk_libs}-devel
+%{_includedir}/pacemaker
+%{_libdir}/libcib.so
+%{_libdir}/liblrmd.so
+%{_libdir}/libcrmservice.so
+%{_libdir}/libcrmcommon.so
+%{_libdir}/libpe_status.so
+%{_libdir}/libpe_rules.so
+%{_libdir}/libpacemaker.so
+%{_libdir}/libstonithd.so
+%{_libdir}/libcrmcluster.so
+%{_libdir}/pkgconfig/*pacemaker*.pc
+%license licenses/LGPLv2.1
+%doc COPYING
+%doc ChangeLog
+
+%files schemas
+%license licenses/GPLv2
+%dir %{_datadir}/pacemaker
+%{_datadir}/pacemaker/*.rng
+%{_datadir}/pacemaker/*.xsl
+%{_datadir}/pacemaker/api
+%{_datadir}/pacemaker/base
+%{_datadir}/pkgconfig/pacemaker-schemas.pc
+
+%changelog
+
+* PACKAGE_DATE ClusterLabs <admin@clusterlabs.org> PACKAGE_VERSION
+ - See included ChangeLog file for details