commit:     ba9cc71a1a5b0f48768f01f190c73fd14f47baf4
Author:     Thomas Oettli <spacefreak <AT> noop <DOT> ch>
AuthorDate: Wed Feb  7 10:07:26 2018 +0000
Commit:     Matt Thode <prometheanfire <AT> gentoo <DOT> org>
CommitDate: Sat Apr 21 02:22:44 2018 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=ba9cc71a

sys-cluster/heartbeat: Critical bugfixes #648336

Heartbeat restarts itself after returning from partition (split-brain).
Due to a bug in 3.0.6-configure.patch, the daemon died instead.
The init-script was totally broken, some rework was needed.

Closes: https://bugs.gentoo.org/648336
Package-Manager: Portage-2.3.19, Repoman-2.3.6
Signed-off-by: Matthew Thode <prometheanfire <AT> gentoo.org>

 sys-cluster/heartbeat/Manifest                     |   1 +
 .../heartbeat/files/3.0.6-r1-configure.patch       | 102 +++++++++++++++++++++
 .../heartbeat/files/3.0.6-r1-heartbeat-init        |  95 +++++++++++++++++++
 sys-cluster/heartbeat/heartbeat-3.0.6-r1.ebuild    |  84 +++++++++++++++++
 4 files changed, 282 insertions(+)

diff --git a/sys-cluster/heartbeat/Manifest b/sys-cluster/heartbeat/Manifest
index ee4f88cb8a7..9f22b36af30 100644
--- a/sys-cluster/heartbeat/Manifest
+++ b/sys-cluster/heartbeat/Manifest
@@ -1,2 +1,3 @@
 DIST STABLE-3.0.5.tar.bz2 538986 BLAKE2B 
3087c87acea7d6800e60960e67271263400eaffa929bd9c5cf438cb4c88ec1d03186e197669afa26839b6e42780bb71a7f30cd566696fb6bcb16b5ec876a41e6
 SHA512 
e38083b87c56a72eb8925ac42adeabb92618608e92218a63960ec0d0bca264f92a8e9c3ebfb0589cc4538da1a82b268b5cc9ee5a51ed33057c969e694e16b27d
 DIST STABLE-3.0.6.tar.bz2 532796 BLAKE2B 
7c882312a4e528919fd94474233ffa0ac15121ef43a1c461a7e9ae26db91c0bb92b3d90859373e0285cc56ed7981e23592ad5d8b657d2dc5a43c92fc22259741
 SHA512 
c11fc2e333040b494e63cc0b55d7e5f7555850ba79d8ec6fea17960ec22ee210a81a63a6e486383b6d44d2532c0dc0d69dcffddf9354b7830771a7a532c33f33
+DIST heartbeat-3.0.6.tar.bz2 532796 BLAKE2B 
7c882312a4e528919fd94474233ffa0ac15121ef43a1c461a7e9ae26db91c0bb92b3d90859373e0285cc56ed7981e23592ad5d8b657d2dc5a43c92fc22259741
 SHA512 
c11fc2e333040b494e63cc0b55d7e5f7555850ba79d8ec6fea17960ec22ee210a81a63a6e486383b6d44d2532c0dc0d69dcffddf9354b7830771a7a532c33f33

diff --git a/sys-cluster/heartbeat/files/3.0.6-r1-configure.patch 
b/sys-cluster/heartbeat/files/3.0.6-r1-configure.patch
new file mode 100644
index 00000000000..ab24282e420
--- /dev/null
+++ b/sys-cluster/heartbeat/files/3.0.6-r1-configure.patch
@@ -0,0 +1,102 @@
+diff -ru a/configure.ac b/configure.ac
+--- a/configure.ac     2015-02-04 15:57:04.000000000 +0100
++++ b/configure.ac     2017-04-25 13:33:58.668521006 +0200
+@@ -243,9 +243,9 @@
+ mandir=`var "$mandir" "$exec_prefix/man"`
+ dnl docdir is available in autoconf 2.60+, for older versions preseed
+ dnl with the same value that 2.60+ uses
+-docdir=`var "$docdir" "${datadir}/doc/${HB_PKG}"`
+-libdir=`var "$libdir" "$exec_prefix/lib"`
++dnl docdir=`var "$docdir" "${datadir}/doc/${PACKAGE_NAME}"`
++dnl libdir=`var "$libdir" "$exec_prefix/lib"`
+ libexecdir=`var "$libexecdir" "$exec_prefix/libexec"`
+ noarchlibdir=`var "$noarchlibdir" "$prefix/lib"`
+ 
+ 
+@@ -284,53 +284,12 @@
+   LIBC=`${LDD} ${tmpOutfile} | grep libc | sed -e 's%.*=> *%%' -e 's% .*$%%'`
+   LibCdir=`dirname $LIBC`
+   dirlist=`echo $LibCdir | tr '/' ' '`
+-  LibDirSuffix=unknown
+-  for dir in $dirlist
+-  do
+-    case $dir in
+-      *lib*)  LibDirSuffix=$dir; break;;
+-      *);;
+-    esac
+-  done
+-  case $LibDirSuffix in
+-    unknown)  LibDirSuffix=`basename $LibCdir`;;
+-  esac
+   OutFileType=`file $tmpOutfile`
+   rm -f $tmpCfile $tmpOutfile
+ else
+   AC_MSG_ERROR([Cannot Compile trivial C program])
+ fi
+-#
+-#     The code above doesn't work right everywhere
+-#             (like Fedora and OpenBSD) 
+-#
+-case ${LibDirSuffix} in
+-      *lib*)  : Cool;;
+-      *)      : Sigh...
+-              case $OutFileType in
+-                *64-bit*)     
+-                      case $host_os in
+-                        openbsd*)     LibDirSuffix=lib;;
+-                        *)            LibDirSuffix=lib64;;
+-                      esac;;
+-                *32-bit*)     LibDirSuffix=lib;;
+-                *)            LibDirSuffix=lib;;
+-              esac;;
+-esac
+-#
+-#     This may not yet be quite right for PPC where the default
+-#     is to produce 32-bit binaries, even though the OS is 64-bit
+-#     or for that matter for system Z, But, it's a lot better than
+-#     it used to be.
+-#
+-AC_MSG_RESULT($LibDirSuffix)
+ 
+-case $libdir in
+-  */*${LibDirSuffix}) : Cool ;;
+-  *)                  : Uh Oh... 
+-      libdir=`dirname $libdir`/$LibDirSuffix
+-      AC_MSG_WARN([Overriding libdir to: $libdir]);;
+-esac
+ for j in exec_prefix bindir sbindir datadir sysconfdir localstatedir \
+       includedir oldincludedir mandir docdir stdocdir libdir noarchlibdir
+ do 
+@@ -379,7 +338,6 @@
+ fi
+ 
+ AC_CHECK_HEADERS(heartbeat/glue_config.h)
+-GLUE_HEADER=none
+ if test "$ac_cv_header_heartbeat_glue_config_h" = "yes";  then
+    GLUE_HEADER=heartbeat/glue_config.h
+ else
+@@ -463,15 +421,6 @@
+ 
+ dnl   We use this in the RPM specfile...
+ AC_SUBST(ac_configure_args)
+-cleaned_configure_args=""
+-for j in ${ac_configure_args}
+-do
+-  case $j in
+-    *--libdir=*|*--libexecdir=*)      ;;
+-    *)                cleaned_configure_args="$cleaned_configure_args $j";;
+-  esac
+-done
+-AC_SUBST(cleaned_configure_args)
+ 
+ dnl *************************************************************************
+ PATH="$PATH:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin"
+@@ -2087,7 +2036,7 @@
+ fi
+ 
+ if test "$GCC" = yes; then
+-  CFLAGS="$CFLAGS -ggdb3"
++  CFLAGS="$CFLAGS"
+   if
+     cc_supports_flag -funsigned-char
+   then

diff --git a/sys-cluster/heartbeat/files/3.0.6-r1-heartbeat-init 
b/sys-cluster/heartbeat/files/3.0.6-r1-heartbeat-init
new file mode 100644
index 00000000000..5e15b322f50
--- /dev/null
+++ b/sys-cluster/heartbeat/files/3.0.6-r1-heartbeat-init
@@ -0,0 +1,95 @@
+#!/sbin/openrc-run
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+HA_DIR=/etc/ha.d
+. $HA_DIR/shellfuncs
+HA_DAEMON_DIR=/usr/libexec/heartbeat
+HA_LIB_DIR=/usr/lib/heartbeat
+HA_SHARE_DIR=/usr/share/heartbeat
+
+depend() {
+       use logger
+       need net
+}
+
+opts="start stop status reload restart"
+
+CheckBool() {
+       case `echo "$1" | tr A-Z a-z` in
+               y|yes|enable|on|true|1)     true;;
+               *)                          false;;
+       esac
+}
+
+# Run pre-startup script if it exists
+RunStartStop() {
+       [ -f $HA_DIR/resource.d/startstop ] && $HA_DIR/resource.d/startstop  
"$@"
+}
+
+start() {
+       checkpath -q -d -m 0755 -o root:root /var/run/heartbeat
+
+       ebegin "Starting heartbeat"
+
+       . $HA_DIR/shellfuncs
+
+       # start the log subsystem
+       CheckBool "`ha_parameter use_logd`" && \
+        ( ${HA_LIB_DIR}/ha_logd -s &>/dev/null || \
+           ${HA_LIB_DIR}/ha_logd -d -c /etc/ha.d/ha_logd.cf)
+
+       RunStartStop pre-start
+
+       CheckBool "`ha_parameter crm`" || \
+               ${HA_SHARE_DIR}/ResourceManager verifyallidle
+
+       ${HA_DAEMON_DIR}/heartbeat &>/dev/null
+       ret=$?
+
+       RunStartStop post-start
+
+       eend ${ret}
+}
+
+stop() {
+       ebegin "Stopping heartbeat"
+
+       RunStartStop pre-stop
+
+       ${HA_DAEMON_DIR}/heartbeat -k &>/dev/null
+       ret=$?
+
+       RunStartStop post-stop ${ret}
+
+       # stop log subsystem
+       CheckBool "`ha_parameter use_logd`" && \
+       ( ${HA_LIB_DIR}/ha_logd -s &>/dev/null && \
+          ${HA_LIB_DIR}/ha_logd -k &>/dev/null )
+
+       eend ${ret}
+}
+
+status() {
+       ${HA_DAEMON_DIR}/heartbeat -s
+}
+
+reload() {
+       ebegin "Reloading heartbeat"
+       ${HA_DAEMON_DIR}/heartbeat -r &>/dev/null
+       eend $?
+}
+
+restart() {
+       . $HA_DIR/shellfuncs
+
+       sleeptime=$(( `ha_parameter deadtime` + 10 ))
+
+       svc_stop
+
+       ebegin "  waiting ${sleeptime}s to allow resource takeover to complete"
+       sleep ${sleeptime}
+       eend 0
+
+       svc_start
+}

diff --git a/sys-cluster/heartbeat/heartbeat-3.0.6-r1.ebuild 
b/sys-cluster/heartbeat/heartbeat-3.0.6-r1.ebuild
new file mode 100644
index 00000000000..f4ea34d9baf
--- /dev/null
+++ b/sys-cluster/heartbeat/heartbeat-3.0.6-r1.ebuild
@@ -0,0 +1,84 @@
+# Copyright 1999-2018 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+PYTHON_COMPAT=( python2_7 )
+
+inherit autotools python-single-r1
+
+DESCRIPTION="Heartbeat high availability cluster manager"
+HOMEPAGE="http://www.linux-ha.org/wiki/Heartbeat";
+SRC_URI="http://hg.linux-ha.org/${PN}-STABLE_3_0/archive/STABLE-${PV}.tar.bz2 
-> ${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~amd64 ~hppa ~x86"
+IUSE="doc snmp static-libs"
+
+RDEPEND="sys-cluster/cluster-glue
+       dev-libs/glib:2
+       virtual/ssh
+       net-libs/gnutls
+       snmp? ( net-analyzer/net-snmp )
+       ${PYTHON_DEPS}
+"
+DEPEND="${RDEPEND}
+       virtual/pkgconfig
+       dev-lang/swig
+       doc? ( dev-libs/libxslt app-text/docbook-xsl-stylesheets )"
+
+PDEPEND="sys-cluster/resource-agents"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+S=${WORKDIR}/Heartbeat-3-0-STABLE-${PV}
+
+PATCHES=(
+       "${FILESDIR}/3.0.6-r1-configure.patch"
+       "${FILESDIR}/3.0.6-docs.patch"
+       "${FILESDIR}/3.0.4-python_tests.patch"
+)
+
+pkg_setup() {
+       python-single-r1_pkg_setup
+
+       ewarn "If you're upgrading from heartbeat-2.x please follow:"
+       ewarn 
"https://www.gentoo.org/proj/en/cluster/ha-cluster/heartbeat-upgrade.xml";
+}
+
+src_prepare() {
+       default
+       eautoreconf
+
+       cp "${FILESDIR}"/3.0.6-r1-heartbeat-init "${WORKDIR}"/heartbeat-init || 
die
+       sed -i \
+               -e "s:HA_LIB_DIR=/usr/lib/:HA_LIB_DIR=/usr/$(get_libdir)/:g" \
+               "${WORKDIR}"/heartbeat-init || die
+}
+
+src_configure() {
+       econf \
+               --disable-fatal-warnings \
+               $(use_enable static-libs static) \
+               $(use_enable doc) \
+               --disable-tipc \
+               --enable-dopd \
+               $(use_enable snmp)
+}
+
+src_install() {
+       default
+
+       newinitd "${WORKDIR}/heartbeat-init" heartbeat
+
+       # fix collisions
+       rm -rf "${D}"/usr/include/heartbeat/{compress,ha_msg}.h || die
+
+       if ! use static-libs; then
+               find "${D}" -name "*.la" -delete || die
+       fi
+
+       if use doc ; then
+               dodoc README doc/*.txt doc/AUTHORS || die
+       fi
+}

Reply via email to