# # spec file for package pacemaker # # Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via http://bugs.opensuse.org/ # %global gname haclient %global uname hacluster %global pcmk_docdir %{_docdir}/%{name} %global specversion 1 %global upstream_version HEAD %global upstream_prefix ClusterLabs-pacemaker # Turn off the auto compilation of python files not in the site-packages directory # Needed so that the -devel package is multilib compliant %global __os_install_post %(echo '%{__os_install_post}' | sed -e 's!/usr/lib[^[:space:]]*/brp-python-bytecompile[[:space:]].*$!!g') #%%global rawhide %%(test ! -e /etc/yum.repos.d/fedora-rawhide.repo; echo $?) %global rawhide 0 #%%global cs_version %%(pkg-config corosync --modversion | awk -F . '{print $1}') %global cs_version 2 %global py_site %(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))") # Conditionals # Invoke "rpmbuild --without " or "rpmbuild --with " # to disable or enable specific features # Legacy stonithd fencing agents %bcond_with stonithd %define with_stonithd 1 # Build with/without support for profiling tools %bcond_with profiling # Include Build with/without support for performing coverage analysis %bcond_with coverage # We generate docs using Publican, Asciidoc and Inkscape, but they're not available everywhere %bcond_without doc %define with_doc 0 # Use a different versioning scheme %bcond_with pre_release # Ship an Upstart job file %bcond_with upstart_job # Turn off cman support on platforms that normally ship with it %bcond_without cman %if %{with profiling} # This disables -debuginfo package creation and also the stripping binaries/libraries # Useful if you want sane profiling data %global debug_package %{nil} %endif %if %{with pre_release} %global pcmk_release 0.%{specversion}.%{upstream_version}.git %else %global pcmk_release %{specversion} %endif #%if 0%{?suse_version} #%define _libexecdir %{_libdir} #%endif %define with_corosync_support 1 %define with_heartbeat_support 0 %define with_nagios 1 %define with_snmp 1 %define with_esmtp 1 %define with_acl 1 %define with_cibsecrets 1 %define enable_lib_cluster_pkg 0 %define enable_fatal_warnings 1 %define with_regression_tests 0 Name: pacemaker Summary: Scalable High-Availability cluster resource manager License: GPL-2.0+ and LGPL-2.1+ Group: Productivity/Clustering/HA Version: 1.1.10+git20131127.ce5d77c Release: 0 #Release: %{pcmk_release}%{?dist} Url: http://www.clusterlabs.org # export VER={upstream_version} # wget --no-check-certificate -O ClusterLabs-pacemaker-${VER}.tar.gz https://github.com/ClusterLabs/pacemaker/tarball/${VER} Source0: %{name}-%{version}.tar.bz2 Source100: pacemaker.rpmlintrc Patch1: bug-806256_pacemaker-log-level-notice.patch Patch2: bug-728579_pacemaker-stonith-dev-id.patch Patch3: bug-792124_pacemaker-stonith-monitor-log.patch Patch4: pacemaker-NodeUtilization-RA.patch Patch5: pacemaker-colocated-utilization.patch Patch6: pacemaker-cibsecret-tool-temp-disabled.patch Patch7: pacemaker-nagios-plugin-dir.patch Patch8: bug-812269_pacemaker-fencing-update-cib.patch Patch9: bug-812269_pacemaker-fencing-device-register-messages.patch Patch10: pacemaker-Wno-cast-align.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build Provides: pacemaker-ticket-support = 2.0 Conflicts: heartbeat < 3.0 Conflicts: libheartbeat2 < 3.0.0 Requires: %{name}-cli = %{version}-%{release} Requires: libpacemaker3 = %{version}-%{release} %if %{enable_lib_cluster_pkg} Requires: libpacemaker3-cluster = %{version}-%{release} %endif Requires: psmisc Requires: python Requires: resource-agents Recommends: crmsh Recommends: libdlm Recommends: fence-agents Recommends: sbd Suggests: graphviz %if %{defined systemd_requires} %systemd_requires %endif %if 0%{?rhel} > 0 ExclusiveArch: i686 x86_64 %endif # Required for core functionality BuildRequires: autoconf BuildRequires: automake BuildRequires: gcc-c++ BuildRequires: glib2-devel %if 0%{?suse_version} BuildRequires: libbz2-devel %else BuildRequires: bzip2-devel %endif BuildRequires: libtool BuildRequires: libtool-ltdl-devel BuildRequires: libuuid-devel BuildRequires: libxml2-devel BuildRequires: libxslt-devel BuildRequires: pam-devel BuildRequires: pkgconfig BuildRequires: python BuildRequires: python-devel # Required for agent_config.h which specifies the correct scratch directory BuildRequires: resource-agents # We need reasonably recent versions of libqb BuildRequires: libqb-devel > 0.11.0 Requires: libqb > 0.11.0 # Enables optional functionality BuildRequires: bison BuildRequires: byacc %if 0%{?suse_version} > 1100 BuildRequires: docbook-xsl-stylesheets %else BuildRequires: docbook-style-xsl %endif BuildRequires: flex %if 0%{?suse_version} > 1210 BuildRequires: libgnutls-devel %else BuildRequires: gnutls-devel %endif BuildRequires: help2man BuildRequires: libselinux-devel BuildRequires: ncurses-devel BuildRequires: openssl-devel %if %{defined _unitdir} BuildRequires: systemd-devel %endif BuildRequires: systemd-devel %if %{with cman} %if 0%{?fedora} > 0 %if 0%{?fedora} < 17 BuildRequires: clusterlib-devel %endif %endif %if 0%{?rhel} > 0 %if 0%{?rhel} < 7 BuildRequires: clusterlib-devel %endif %endif %endif %if %with_corosync_support Requires: corosync #BuildRequires: corosynclib-devel BuildRequires: libcorosync-devel %endif %if %with_heartbeat_support BuildRequires: heartbeat-devel Requires: heartbeat %endif #%if %{with stonithd} %if %{with_stonithd} #BuildRequires: cluster-glue-libs-devel BuildRequires: libglue-devel %endif %if !0%{?rawhide} # More often than not, inkscape is busted on rawhide, don't even bother #%if %{with doc} %if %{with_doc} %ifarch %{ix86} x86_64 BuildRequires: asciidoc BuildRequires: inkscape BuildRequires: publican %endif %endif %if %with_snmp BuildRequires: net-snmp-devel %endif %if %with_esmtp BuildRequires: libesmtp-devel %endif %if %with_regression_tests BuildRequires: procps BuildRequires: python-curses BuildRequires: python-xml BuildRequires: vim-base %endif %endif %description Pacemaker is an advanced, scalable High-Availability cluster resource manager for Corosync, CMAN and/or Linux-HA. 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) : cman stonithd doc coverage profiling pre_release upstart_job %package cli Summary: Command line tools for controlling Pacemaker clusters Group: Productivity/Clustering/HA Requires: libpacemaker3 = %{version}-%{release} Requires: perl-TimeDate %description cli Pacemaker is an advanced, scalable High-Availability cluster resource manager for Corosync, CMAN and/or Linux-HA. 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 libpacemaker3 Summary: Core Pacemaker libraries Group: Productivity/Clustering/HA %description -n libpacemaker3 Pacemaker is an advanced, scalable High-Availability cluster resource manager for Corosync, CMAN and/or Linux-HA. The libpacemaker3 package contains shared libraries needed for cluster nodes and those just running the CLI tools. %if %{enable_lib_cluster_pkg} %package -n libpacemaker3-cluster Summary: Cluster Libraries used by Pacemaker Group: Productivity/Clustering/HA Requires: libpacemaker3 = %{version}-%{release} %description -n libpacemaker3-cluster Pacemaker is an advanced, scalable High-Availability cluster resource manager for Corosync, CMAN and/or Linux-HA. The libpacemaker3-cluster package contains cluster-aware shared libraries needed for nodes that will form part of the cluster nodes. %endif %package remote Summary: Pacemaker remote daemon for non-cluster nodes Group: Productivity/Clustering/HA Requires: %{name}-cli = %{version}-%{release} Requires: libpacemaker3 = %{version}-%{release} Requires: resource-agents %if %{defined systemd_requires} %systemd_requires %endif %description remote Pacemaker is an advanced, scalable High-Availability cluster resource manager for Corosync, CMAN and/or Linux-HA. 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 libpacemaker-devel Summary: Pacemaker development package Group: Development/Libraries/C and C++ Requires: %{name}-cts = %{version}-%{release} Requires: glib2-devel %if 0%{?suse_version} Requires: libbz2-devel %else Requires: bzip2-devel %endif Requires: libcorosync-devel Requires: libpacemaker3 = %{version}-%{release} %if %{enable_lib_cluster_pkg} Requires: libpacemaker3-cluster = %{version}-%{release} %endif Requires: libqb-devel Requires: libtool-ltdl-devel Requires: libuuid-devel Requires: libxml2-devel Requires: libxslt-devel %if %with_regression_tests # For the regression tests, we can run them only if all pacemaker # packages are installed, so we pull that in here for the regression # builds; this is supposed to be disabled for shipping code. Requires: pacemaker %endif %description -n libpacemaker-devel Pacemaker is an advanced, scalable High-Availability cluster resource manager for Corosync, CMAN and/or Linux-HA. The libpacemaker-devel package contains headers and shared libraries for developing tools for Pacemaker. %package cts Summary: Test framework for cluster-related technologies like Pacemaker Group: Productivity/Clustering/HA Requires: libpacemaker3 = %{version}-%{release} Requires: python %description cts Test framework for cluster-related technologies like Pacemaker %if %{with_doc} %package doc Summary: Documentation for Pacemaker Group: Productivity/Clustering/HA %description doc Documentation for Pacemaker. Pacemaker is an advanced, scalable High-Availability cluster resource manager for Corosync, CMAN and/or Linux-HA. %endif %prep #%setup -q -n %{name}%{upstream_prefix}-%{upstream_version} %setup -q -n %{name}-%{version} %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 %patch5 -p1 %patch6 -p1 %patch7 -p1 %patch8 -p1 %patch9 -p1 %patch10 -p1 # Force the local time # # 'git' sets the file date to the date of the last commit. # This can result in files having been created in the future # when building on machines in timezones 'behind' the one the # commit occurred in - which seriously confuses 'make' find . -exec touch \{\} \; %build ./autogen.sh # RHEL <= 5 does not support --docdir docdir=%{pcmk_docdir} %{configure} \ %{?with_profiling: --with-profiling} \ %{?with_coverage: --with-coverage} \ %{!?with_cman: --without-cman} \ %if !%with_heartbeat_support --without-heartbeat \ %endif %if %with_nagios --with-nagios=true \ %endif %if %with_snmp --with-snmp=true \ %endif %if %with_esmtp --with-esmtp=true \ %endif %if %with_acl --with-acl=true \ %endif %if %with_cibsecrets --with-cibsecrets=true \ %endif %if !%enable_fatal_warnings --enable-fatal-warnings=no \ %endif --with-initdir=%{_initrddir} \ --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 docdir=%{pcmk_docdir} all %install rm -rf %{buildroot} make DESTDIR=%{buildroot} docdir=%{pcmk_docdir} V=1 install #mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig install -d -m755 $RPM_BUILD_ROOT/var/adm/fillup-templates mkdir -p ${RPM_BUILD_ROOT}%{_var}/lib/pacemaker/cores #install -m 644 mcp/pacemaker.sysconfig ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/pacemaker install -m 644 mcp/pacemaker.sysconfig $RPM_BUILD_ROOT/var/adm/fillup-templates/sysconfig.pacemaker %if %{with upstart_job} mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/init install -m 644 mcp/pacemaker.upstart ${RPM_BUILD_ROOT}%{_sysconfdir}/init/pacemaker.conf install -m 644 mcp/pacemaker.combined.upstart ${RPM_BUILD_ROOT}%{_sysconfdir}/init/pacemaker.combined.conf %endif # Scripts that should be executable chmod a+x %{buildroot}/%{_datadir}/pacemaker/tests/cts/CTSlab.py # These are not actually scripts find %{buildroot} -name '*.xml' -type f -print0 | xargs -0 chmod a-x find %{buildroot} -name '*.xsl' -type f -print0 | xargs -0 chmod a-x find %{buildroot} -name '*.rng' -type f -print0 | xargs -0 chmod a-x find %{buildroot} -name '*.dtd' -type f -print0 | xargs -0 chmod a-x # Dont package static libs find %{buildroot} -name '*.a' -type f -print0 | xargs -0 rm -f find %{buildroot} -name '*.la' -type f -print0 | xargs -0 rm -f # Do not package these either rm -f %{buildroot}/%{_libdir}/service_crm.so # Don't ship init scripts for systemd based platforms %if %{defined _unitdir} rm -f %{buildroot}/%{_initrddir}/pacemaker rm -f %{buildroot}/%{_initrddir}/pacemaker_remote %endif # Only useful on rhel6 rm -f %{buildroot}/%{_bindir}/ccs2cib rm -f %{buildroot}/%{_bindir}/ccs_flatten rm -f %{buildroot}/%{_bindir}/disable_rgmanager %if %{with coverage} GCOV_BASE=%{buildroot}/%{_var}/lib/pacemaker/gcov mkdir -p $GCOV_BASE find . -name '*.gcno' -type f | while read F ; do D=`dirname $F` mkdir -p ${GCOV_BASE}/$D cp $F ${GCOV_BASE}/$D done %endif %if %{defined _unitdir} %post #%systemd_post pacemaker.service %service_add_post pacemaker.service if [ ! -e %{_sysconfdir}/sysconfig/pacemaker ]; then %fillup_only pacemaker fi %preun #%systemd_preun pacemaker.service %service_del_preun pacemaker.service %postun #%systemd_postun_with_restart pacemaker.service %service_del_postun pacemaker.service %post remote #%systemd_post pacemaker_remote.service %service_add_post pacemaker_remote.service if [ ! -e %{_sysconfdir}/sysconfig/pacemaker ]; then %fillup_only pacemaker fi %preun remote #%systemd_preun pacemaker_remote.service %service_del_preun pacemaker_remote.service %postun remote #%systemd_postun_with_restart pacemaker_remote.service %service_del_postun pacemaker_remote.service %else %post /sbin/chkconfig --add pacemaker || : %preun /sbin/service pacemaker stop || : if [ $1 -eq 0 ]; then # Package removal, not upgrade /sbin/chkconfig --del pacemaker || : fi %post remote /sbin/chkconfig --add pacemaker_remote || : %preun remote /sbin/service pacemaker_remote stop &>/dev/null || : if [ $1 -eq 0 ]; then # Package removal, not upgrade /sbin/chkconfig --del pacemaker_remote || : fi %endif %pre -n libpacemaker3 getent group %{gname} >/dev/null || groupadd -r %{gname} -g 189 getent passwd %{uname} >/dev/null || useradd -r -g %{gname} -u 189 -s /sbin/nologin -c "cluster user" %{uname} exit 0 %post -n libpacemaker3 -p /sbin/ldconfig %postun -n libpacemaker3 -p /sbin/ldconfig %if %{enable_lib_cluster_pkg} %post -n libpacemaker3-cluster -p /sbin/ldconfig %postun -n libpacemaker3-cluster -p /sbin/ldconfig %endif %if %with_regression_tests %post -n libpacemaker-devel if [ ! -e /tmp/.pcmk_regression_tests_ran ]; then touch /tmp/.pcmk_regression_tests_ran # Needed so that the shell doesn't get stuck on escape # sequences export TERM=dumb /usr/share/pacemaker/tests/cli/regression.sh || true /usr/share/pacemaker/tests/pengine/regression.sh -V || true echo Now running shell regression tests ; date if ! /usr/share/pacemaker/tests/shell/regression.sh ; then echo "Shell tests failed." cat crmtestout/regression.out fi fi %endif %files ########################################################### %defattr(-,root,root) %exclude %{_datadir}/pacemaker/tests #%config(noreplace) %{_sysconfdir}/sysconfig/pacemaker %{_sbindir}/pacemakerd %if %{defined _unitdir} %{_unitdir}/pacemaker.service %else %{_initrddir}/pacemaker %endif %{_datadir}/pacemaker %{_datadir}/snmp/mibs/PCMK-MIB.txt %exclude %{_libexecdir}/pacemaker/lrmd_test %exclude %{_sbindir}/pacemaker_remoted %dir %{_libexecdir}/pacemaker %{_libexecdir}/pacemaker/* %{_sbindir}/crm_attribute %{_sbindir}/crm_master %{_sbindir}/crm_node %{_sbindir}/attrd_updater %{_sbindir}/fence_legacy %{_sbindir}/fence_pcmk %{_sbindir}/stonith_admin %doc %{_mandir}/man7/* %doc %{_mandir}/man8/attrd_updater.* %doc %{_mandir}/man8/crm_attribute.* %doc %{_mandir}/man8/crm_node.* %doc %{_mandir}/man8/crm_master.* %doc %{_mandir}/man8/fence_pcmk.* %doc %{_mandir}/man8/fence_legacy.* %doc %{_mandir}/man8/pacemakerd.* %doc %{_mandir}/man8/stonith_admin.* %doc COPYING %doc AUTHORS %doc ChangeLog %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/cib %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/cores %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/pengine %dir %attr (750, %{uname}, %{gname}) %{_var}/lib/pacemaker/blackbox %ghost %dir %attr (750, %{uname}, %{gname}) %{_var}/run/crm %dir /usr/lib/ocf %dir /usr/lib/ocf/resource.d /usr/lib/ocf/resource.d/pacemaker %if 0%{?cs_version} < 2 %{_libexecdir}/lcrso/pacemaker.lcrso %endif %if %{with upstart_job} %config(noreplace) %{_sysconfdir}/init/pacemaker.conf %config(noreplace) %{_sysconfdir}/init/pacemaker.combined.conf %endif %files cli %defattr(-,root,root) %{_sbindir}/cibadmin %{_sbindir}/crm_diff %{_sbindir}/crm_error %{_sbindir}/crm_failcount %{_sbindir}/crm_mon %{_sbindir}/crm_resource %{_sbindir}/crm_standby %{_sbindir}/crm_verify %{_sbindir}/crmadmin %{_sbindir}/iso8601 %{_sbindir}/crm_shadow %{_sbindir}/crm_simulate %{_sbindir}/crm_report %{_sbindir}/crm_ticket %doc %{_mandir}/man8/* %exclude %{_mandir}/man8/attrd_updater.* %exclude %{_mandir}/man8/crm_attribute.* %exclude %{_mandir}/man8/crm_node.* %exclude %{_mandir}/man8/crm_master.* %exclude %{_mandir}/man8/fence_pcmk.* %exclude %{_mandir}/man8/fence_legacy.* %exclude %{_mandir}/man8/pacemakerd.* %exclude %{_mandir}/man8/pacemaker_remoted.* %exclude %{_mandir}/man8/stonith_admin.* %doc COPYING %doc AUTHORS %doc ChangeLog %files -n libpacemaker3 %defattr(-,root,root) %{_libdir}/libcib.so.* %{_libdir}/liblrmd.so.* %{_libdir}/libcrmservice.so.* %{_libdir}/libcrmcommon.so.* %{_libdir}/libpe_status.so.* %{_libdir}/libpe_rules.so.* %{_libdir}/libpengine.so.* %{_libdir}/libstonithd.so.* %{_libdir}/libtransitioner.so.* %config(noreplace) /var/adm/fillup-templates/sysconfig.pacemaker %doc COPYING.LIB %doc AUTHORS %{_libdir}/libcrmcluster.so.* %if %{enable_lib_cluster_pkg} %files -n libpacemaker3-cluster %defattr(-,root,root) #%{_libdir}/libcrmcluster.so.* %doc COPYING.LIB %doc AUTHORS %endif %files remote %defattr(-,root,root) #%config(noreplace) %{_sysconfdir}/sysconfig/pacemaker %if %{defined _unitdir} %{_unitdir}/pacemaker_remote.service %else %{_initrddir}/pacemaker_remote %endif %{_sbindir}/pacemaker_remoted %{_mandir}/man8/pacemaker_remoted.* %doc COPYING.LIB %doc AUTHORS %if %{with_doc} %files doc %defattr(-,root,root) %doc %{pcmk_docdir} %endif %files cts %defattr(-,root,root) #%{py_site}/cts %{py_sitedir}/cts %{_datadir}/pacemaker/tests/cts %{_libexecdir}/pacemaker/lrmd_test %doc COPYING.LIB %doc AUTHORS %files -n libpacemaker-devel %defattr(-,root,root) %exclude %{_datadir}/pacemaker/tests/cts %{_datadir}/pacemaker/tests %{_includedir}/pacemaker %{_libdir}/*.so %if %{with coverage} %{_var}/lib/pacemaker %endif %{_libdir}/pkgconfig/*.pc %doc COPYING.LIB %doc AUTHORS %changelog