diff options
author | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 13:49:04 -0700 |
---|---|---|
committer | Robin H. Johnson <robbat2@gentoo.org> | 2015-08-08 17:38:18 -0700 |
commit | 56bd759df1d0c750a065b8c845e93d5dfa6b549d (patch) | |
tree | 3f91093cdb475e565ae857f1c5a7fd339e2d781e /sys-cluster/heartbeat | |
download | gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.gz gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.tar.bz2 gentoo-56bd759df1d0c750a065b8c845e93d5dfa6b549d.zip |
proj/gentoo: Initial commit
This commit represents a new era for Gentoo:
Storing the gentoo-x86 tree in Git, as converted from CVS.
This commit is the start of the NEW history.
Any historical data is intended to be grafted onto this point.
Creation process:
1. Take final CVS checkout snapshot
2. Remove ALL ChangeLog* files
3. Transform all Manifests to thin
4. Remove empty Manifests
5. Convert all stale $Header$/$Id$ CVS keywords to non-expanded Git $Id$
5.1. Do not touch files with -kb/-ko keyword flags.
Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-Thanks: Alec Warner <antarus@gentoo.org> - did the GSoC 2006 migration tests
X-Thanks: Robin H. Johnson <robbat2@gentoo.org> - infra guy, herding this project
X-Thanks: Nguyen Thai Ngoc Duy <pclouds@gentoo.org> - Former Gentoo developer, wrote Git features for the migration
X-Thanks: Brian Harring <ferringb@gentoo.org> - wrote much python to improve cvs2svn
X-Thanks: Rich Freeman <rich0@gentoo.org> - validation scripts
X-Thanks: Patrick Lauer <patrick@gentoo.org> - Gentoo dev, running new 2014 work in migration
X-Thanks: Michał Górny <mgorny@gentoo.org> - scripts, QA, nagging
X-Thanks: All of other Gentoo developers - many ideas and lots of paint on the bikeshed
Diffstat (limited to 'sys-cluster/heartbeat')
-rw-r--r-- | sys-cluster/heartbeat/Manifest | 1 | ||||
-rw-r--r-- | sys-cluster/heartbeat/files/3.0.4-docs.patch | 57 | ||||
-rw-r--r-- | sys-cluster/heartbeat/files/3.0.4-fix_configure.patch | 110 | ||||
-rw-r--r-- | sys-cluster/heartbeat/files/3.0.4-python_tests.patch | 29 | ||||
-rw-r--r-- | sys-cluster/heartbeat/files/3.0.5-fix_ucast.patch | 145 | ||||
-rw-r--r-- | sys-cluster/heartbeat/files/heartbeat-init | 93 | ||||
-rw-r--r-- | sys-cluster/heartbeat/heartbeat-3.0.5-r2.ebuild | 87 | ||||
-rw-r--r-- | sys-cluster/heartbeat/metadata.xml | 9 |
8 files changed, 531 insertions, 0 deletions
diff --git a/sys-cluster/heartbeat/Manifest b/sys-cluster/heartbeat/Manifest new file mode 100644 index 000000000000..143d1e5ed195 --- /dev/null +++ b/sys-cluster/heartbeat/Manifest @@ -0,0 +1 @@ +DIST STABLE-3.0.5.tar.bz2 538986 SHA256 fc7b11f9e1f16bc853434208a1ce86803acf1d0fb6f43715209a84c1c34661c3 SHA512 e38083b87c56a72eb8925ac42adeabb92618608e92218a63960ec0d0bca264f92a8e9c3ebfb0589cc4538da1a82b268b5cc9ee5a51ed33057c969e694e16b27d WHIRLPOOL 699c2679c38f17aacbf230dd68203a8967748c086713ad8bf55688b1e8933caf117ec2a8d2be2ec19b0fa077eacaa1cceec0fea14d181510abb24644a486f6c4 diff --git a/sys-cluster/heartbeat/files/3.0.4-docs.patch b/sys-cluster/heartbeat/files/3.0.4-docs.patch new file mode 100644 index 000000000000..9297c31cb037 --- /dev/null +++ b/sys-cluster/heartbeat/files/3.0.4-docs.patch @@ -0,0 +1,57 @@ +--- configure.in ++++ configure.in +@@ -505,8 +505,15 @@ + AC_PATH_PROGS(TEST, test) + AC_PATH_PROGS(PKGCONFIG, pkg-config) + +-dnl xsltproc is required for building the man pages +-AC_PATH_PROGS(XSLTPROC, xsltproc) ++AC_ARG_ENABLE([doc], ++ AS_HELP_STRING([--enable-doc],[Build documentation] ++)) ++AS_IF([test "x$enable_doc" = "xyes"], [ ++ AC_PATH_PROGS(XSLTPROC, xsltproc) ++]) ++AM_CONDITIONAL([BUILD_DOC], [test "x$enable_doc" = "xyes"] ) ++AC_SUBST(XSLTPROC) ++ + + dnl ************************************************************************ + dnl Check whether non-root user can chown. +--- doc/Makefile.am ++++ doc/Makefile.am +@@ -33,11 +33,12 @@ + + doc_DATA = $(OTHER_DOCS) + ++if BUILD_DOC + man_MANS = heartbeat.8 apphbd.8 cl_status.1 \ + hb_standby.1 hb_takeover.1 hb_addnode.1 hb_delnode.1 \ + ha.cf.5 authkeys.5 + +-STYLESHEET_PREFIX ?= http://docbook.sourceforge.net/release/xsl/current ++STYLESHEET_PREFIX ?= /usr/share/sgml/docbook/xsl-stylesheets + MANPAGES_STYLESHEET ?= $(STYLESHEET_PREFIX)/manpages/docbook.xsl + HTML_STYLESHEET ?= $(STYLESHEET_PREFIX)/xhtml/docbook.xsl + FO_STYLESHEET ?= $(STYLESHEET_PREFIX)/fo/docbook.xsl +@@ -47,6 +48,12 @@ + XSLTPROC_HTML_OPTIONS ?= $(XSLTPROC_OPTIONS) + XSLTPROC_FO_OPTIONS ?= $(XSLTPROC_OPTIONS) + ++%.5 %.8 %.1: %.xml ++ $(XSLTPROC) \ ++ $(XSLTPROC_MANPAGES_OPTIONS) \ ++ $(MANPAGES_STYLESHEET) $< ++endif ++ + EXTRA_DIST = $(txtfiles) $(htmlfiles) $(man_MANS) $(OTHER_DOCS) + + ChangeLog: $(SPECSRC) +@@ -56,7 +63,3 @@ + .html.txt: + if [ "X$(HTML2TXT)" = "X" ]; then echo "Lynx or w3m or user-defined HTML2TXT required to convert $< to $@" >$@ ; else $(HTML2TXT) -dump $< >$@ ; fi + +-%.5 %.8 %.1: %.xml +- $(XSLTPROC) \ +- $(XSLTPROC_MANPAGES_OPTIONS) \ +- $(MANPAGES_STYLESHEET) $< diff --git a/sys-cluster/heartbeat/files/3.0.4-fix_configure.patch b/sys-cluster/heartbeat/files/3.0.4-fix_configure.patch new file mode 100644 index 000000000000..c747592b7baa --- /dev/null +++ b/sys-cluster/heartbeat/files/3.0.4-fix_configure.patch @@ -0,0 +1,110 @@ +--- work/Heartbeat-3-0-STABLE-3.0.4/configure.in 2010-12-09 21:09:47.000000000 +0100 ++++ work2/Heartbeat-3-0-STABLE-3.0.4/configure.in 2010-12-28 17:37:45.080773140 +0100 +@@ -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/${PACKAGE_NAME}"` +-libdir=`var "$libdir" "$exec_prefix/lib"` +-libexecdir=`var "$libexecdir" "$exec_prefix/libexec"` ++dnl docdir=`var "$docdir" "${datadir}/doc/${PACKAGE_NAME}"` ++dnl libdir=`var "$libdir" "$exec_prefix/lib"` ++dnl libexecdir=`var "$libexecdir" "$exec_prefix/libexec"` + noarchlibdir=`var "$noarchlibdir" "$prefix/lib"` + + +@@ -284,59 +284,11 @@ + 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 +-case $libexecdir in +- */$LibDirSuffix) : Cool ;; +- *) : Uh Oh... +- libexecdir=`dirname $libexecdir`/$LibDirSuffix +- AC_MSG_WARN([Overriding libexecdir to: $libexecdir]);; +-esac + + for j in exec_prefix bindir sbindir datadir sysconfdir localstatedir \ + includedir oldincludedir mandir docdir stdocdir libdir noarchlibdir +@@ -386,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 +@@ -453,15 +404,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" +--- work/Heartbeat-3-0-STABLE-3.0.5/configure.in 2011-12-28 11:51:05.601673071 +0100 ++++ work2/Heartbeat-3-0-STABLE-3.0.5/configure.in 2011-12-28 11:54:34.223094385 +0100 +@@ -2002,7 +2002,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.4-python_tests.patch b/sys-cluster/heartbeat/files/3.0.4-python_tests.patch new file mode 100644 index 000000000000..a91c7ec3fe2a --- /dev/null +++ b/sys-cluster/heartbeat/files/3.0.4-python_tests.patch @@ -0,0 +1,29 @@ +--- cts/Makefile.am ++++ cts/Makefile.am +@@ -21,7 +21,7 @@ + + ctsdir = @HA_NOARCHDATAHBDIR@/cts + +-cts_PYTHON = \ ++cts_SCRIPTS = \ + CM_fs.py \ + CM_hb.py \ + CM_LinuxHAv2.py \ +@@ -32,14 +32,12 @@ + extracttests.py \ + getpeinputs.sh \ + OCFIPraTest.py \ +- CIB.py ++ CIB.py \ ++ CTSproxy.py \ ++ LSBDummy + + cts_DATA = README + +-cts_SCRIPTS = \ +- CTSproxy.py \ +- getpeinputs.sh \ +- LSBDummy + + all-local: $(cts_PYTHON) + diff --git a/sys-cluster/heartbeat/files/3.0.5-fix_ucast.patch b/sys-cluster/heartbeat/files/3.0.5-fix_ucast.patch new file mode 100644 index 000000000000..3bec9c89dd86 --- /dev/null +++ b/sys-cluster/heartbeat/files/3.0.5-fix_ucast.patch @@ -0,0 +1,145 @@ + +# HG changeset patch +# User Lars Ellenberg <lars@linbit.com> +# Date 1392200751 -3600 +# Node ID 37f57a36a2dd1abf8461a9b758e62f6fe7a22f77 +# Parent 6d4324633600dc7ae7aa08c56d86c2fcc767977f +Medium: fix usage of SO_REUSEPORT in ucast sockets + +Linux learned SO_REUSEPORT only with kernel 3.9, +but some linux headers already define SO_REUSEPORT. +Which, on older kernels, will result in ENOPROTOOPT, +"Protocol not available". + +Failure to set SO_REUSEPORT is NOT critical in general. +It *may* be a problem on certain BSDs, +with more than two nodes, all using ucast. + +Refusing to start because of failure to set SO_REUSEPORT is +not helpful for the vast majority of the clusters out there. + +While at it, downgrade "critical" log messages to warnings +in non-fatal situations. + +--- a/lib/plugins/HBcomm/ucast.c ++++ b/lib/plugins/HBcomm/ucast.c +@@ -461,12 +461,6 @@ static int HB_make_send_sock(struct hb_m + int sockfd; + struct ip_private *ei; + int tos; +-#if defined(SO_BINDTODEVICE) +- struct ifreq i; +-#endif +-#if defined(SO_REUSEPORT) +- int i = 1; +-#endif + + UCASTASSERT(mp); + ei = (struct ip_private*)mp->pd; +@@ -494,6 +488,7 @@ static int HB_make_send_sock(struct hb_m + + #if defined(SO_BINDTODEVICE) + { ++ struct ifreq i; + /* + * We want to send out this particular interface + * +@@ -515,12 +510,13 @@ static int HB_make_send_sock(struct hb_m + #endif + #if defined(SO_REUSEPORT) + { ++ int one = 1; + /* this is for OpenBSD to allow multiple * + * ucast connections, e.g. a more than * + * two node cluster */ + + if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, +- &i, sizeof(i)) == -1) { ++ &one, sizeof(one)) == -1) { + PILCallLog(LOG, PIL_CRIT, + "ucast: error setting option SO_REUSEPORT(w): %s", strerror(errno)); + close(sockfd); +@@ -548,7 +544,7 @@ static int HB_make_receive_sock(struct h + int sockfd; + int bindtries; + int boundyet = 0; +- int j; ++ int one = 1; + + UCASTASSERT(mp); + ei = (struct ip_private*)mp->pd; +@@ -563,22 +559,19 @@ static int HB_make_receive_sock(struct h + strerror(errno)); + return -1; + } +- /* +- * Set SO_REUSEADDR on the server socket s. Variable j is used +- * as a scratch varable. +- * +- * 16th February 2000 +- * Added by Horms <horms@vergenet.net> +- * with thanks to Clinton Work <work@scripty.com> +- */ +- j = 1; ++ /* ++ * Set SO_REUSEADDR on the server socket s. ++ * Below, also try to set SO_REUSEPORT, ++ * if known and supported. ++ */ + if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, +- (void *)&j, sizeof j) < 0) { ++ &one, sizeof(one)) < 0) { + /* Ignore it. It will almost always be OK anyway. */ +- PILCallLog(LOG, PIL_CRIT, ++ PILCallLog(LOG, PIL_WARN, + "ucast: error setting socket option SO_REUSEADDR: %s", + strerror(errno)); +- } ++ } else ++ PILCallLog(LOG, PIL_INFO, "ucast: set SO_REUSEADDR"); + #if defined(SO_BINDTODEVICE) + { + /* +@@ -600,20 +593,32 @@ static int HB_make_receive_sock(struct h + } + #endif + #if defined(SO_REUSEPORT) +- { ++ /* ++ * Needed for OpenBSD for more than two nodes in a ucast cluster ++ */ ++ if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, ++ &one, sizeof(one)) == -1) { + /* +- * Needed for OpenBSD for more than two nodes in a ucast cluster ++ * Linux learned SO_REUSEPORT only with kernel 3.9, ++ * but some linux headers already define SO_REUSEPORT. ++ * Which will result in ENOPROTOOPT, "Protocol not available" ++ * on older kernels. ++ * Failure to set SO_REUSEPORT is NOT critical in general. ++ * It *may* be a problem on certain BSDs with more than ++ * two nodes all using ucast. ++ * Refusing to start because of failure to set SO_REUSEPORT is ++ * not helpful for the vast majority of the clusters out there. + */ +- int i = 1; +- if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEPORT, +- &i, sizeof(i)) == -1) { ++ if (errno == ENOPROTOOPT) { ++ PILCallLog(LOG, PIL_WARN, ++ "ucast: error setting option SO_REUSEPORT: %s", strerror(errno)); ++ } else { + PILCallLog(LOG, PIL_CRIT, +- "ucast: error setting option SO_REUSEPORT(r) %s", strerror(errno)); +- close(sockfd); ++ "ucast: error setting option SO_REUSEPORT: %s", strerror(errno)); + return -1; + } +- PILCallLog(LOG, PIL_INFO, "ucast: set SO_REUSEPORT(w)"); +- } ++ } else ++ PILCallLog(LOG, PIL_INFO, "ucast: set SO_REUSEPORT"); + #endif + + /* Try binding a few times before giving up */ + diff --git a/sys-cluster/heartbeat/files/heartbeat-init b/sys-cluster/heartbeat/files/heartbeat-init new file mode 100644 index 000000000000..56b3765a47eb --- /dev/null +++ b/sys-cluster/heartbeat/files/heartbeat-init @@ -0,0 +1,93 @@ +#!/sbin/runscript +# Copyright 1999-2012 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +HA_DIR=/etc/ha.d +. $HA_DIR/shellfuncs + +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`" && \ + ( /usr/lib/heartbeat/ha_logd -s &>/dev/null || \ + /usr/lib/heartbeat/ha_logd -d -c /etc/ha.d/ha_logd.cf) + + RunStartStop pre-start + + CheckBool "`ha_parameter crm`" || \ + /usr/lib/heartbeat/ResourceManager verifyallidle + + /usr/lib/heartbeat/heartbeat &>/dev/null + ret=$? + + RunStartStop post-start + + eend ${ret} +} + +stop() { + ebegin "Stopping heartbeat" + + RunStartStop pre-stop + + /usr/lib/heartbeat/heartbeat -k &>/dev/null + ret=$? + + RunStartStop post-stop ${ret} + + # stop log subsystem + CheckBool "`ha_parameter use_logd`" && \ + ( /usr/lib/heartbeat/ha_logd -s &>/dev/null && \ + /usr/lib/heartbeat/ha_logd -k &>/dev/null ) + + eend ${ret} +} + +status() { + /usr/lib/heartbeat/heartbeat -s +} + +reload() { + ebegin "Reloading heartbeat" + /usr/lib/heartbeat/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.5-r2.ebuild b/sys-cluster/heartbeat/heartbeat-3.0.5-r2.ebuild new file mode 100644 index 000000000000..87b8f7d84680 --- /dev/null +++ b/sys-cluster/heartbeat/heartbeat-3.0.5-r2.ebuild @@ -0,0 +1,87 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Id$ + +EAPI="2" + +PYTHON_DEPEND="2" +inherit python autotools multilib eutils base + +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" + +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 ) +" +DEPEND="${RDEPEND} + virtual/pkgconfig + dev-lang/swig + doc? ( dev-libs/libxslt app-text/docbook-xsl-stylesheets )" + +PDEPEND="sys-cluster/resource-agents" + +S=${WORKDIR}/Heartbeat-3-0-STABLE-${PV} + +PATCHES=( + "${FILESDIR}/3.0.4-fix_configure.patch" + "${FILESDIR}/3.0.4-docs.patch" + "${FILESDIR}/3.0.4-python_tests.patch" + "${FILESDIR}/3.0.5-fix_ucast.patch" +) + +pkg_setup() { + python_set_active_version 2 + python_pkg_setup + + ewarn "If you're upgrading from heartbeat-2.x please follow:" + ewarn "http://www.gentoo.org/proj/en/cluster/ha-cluster/heartbeat-upgrade.xml" +} + +src_prepare() { + base_src_prepare + eautoreconf + + cp "${FILESDIR}"/heartbeat-init "${T}" || die + sed -i \ + -e "/ResourceManager/ s/lib/share/" \ + -e "s:lib:$(get_libdir):g" \ + "${T}"/heartbeat-init || die +} + +src_configure() { + econf \ + --disable-dependency-tracking \ + --disable-fatal-warnings \ + $(use_enable static-libs static) \ + $(use_enable doc) \ + --disable-tipc \ + --enable-dopd \ + --libdir=/usr/$(get_libdir) \ + --localstatedir=/var \ + --docdir=/usr/share/doc/${PF} \ + $(use_enable snmp) +} + +src_install() { + base_src_install + + newinitd "${T}/heartbeat-init" heartbeat || die + + # fix collisions + rm -rf "${D}"/usr/include/heartbeat/{compress,ha_msg}.h + + use static-libs || find "${D}"/usr/$(get_libdir) -name "*.la" -delete + + if use doc ; then + dodoc README doc/*.txt doc/AUTHORS || die + fi +} diff --git a/sys-cluster/heartbeat/metadata.xml b/sys-cluster/heartbeat/metadata.xml new file mode 100644 index 000000000000..25095c392e31 --- /dev/null +++ b/sys-cluster/heartbeat/metadata.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> +<pkgmetadata> + <herd>cluster</herd> + + <longdescription> + Heartbeat is a cluster manager to handle failover of 2 nodes. + </longdescription> +</pkgmetadata> |