From 4f2d7949f03e1c198bc888f2d05f421d35c57e21 Mon Sep 17 00:00:00 2001 From: V3n3RiX Date: Mon, 9 Oct 2017 18:53:29 +0100 Subject: reinit the tree, so we can have metadata --- .../pacemaker/files/pacemaker-1.1.10-tinfo.patch | 21 ++ .../pacemaker/files/pacemaker-1.1.12-glib.patch | 47 +++ .../pacemaker/files/pacemaker-1.1.12-stonith.patch | 21 ++ sys-cluster/pacemaker/files/pacemaker.initd | 41 +++ sys-cluster/pacemaker/files/pacemaker.service | 5 + sys-cluster/pacemaker/files/ping | 380 +++++++++++++++++++++ 6 files changed, 515 insertions(+) create mode 100644 sys-cluster/pacemaker/files/pacemaker-1.1.10-tinfo.patch create mode 100644 sys-cluster/pacemaker/files/pacemaker-1.1.12-glib.patch create mode 100644 sys-cluster/pacemaker/files/pacemaker-1.1.12-stonith.patch create mode 100644 sys-cluster/pacemaker/files/pacemaker.initd create mode 100644 sys-cluster/pacemaker/files/pacemaker.service create mode 100644 sys-cluster/pacemaker/files/ping (limited to 'sys-cluster/pacemaker/files') diff --git a/sys-cluster/pacemaker/files/pacemaker-1.1.10-tinfo.patch b/sys-cluster/pacemaker/files/pacemaker-1.1.10-tinfo.patch new file mode 100644 index 000000000000..1dba440c9e79 --- /dev/null +++ b/sys-cluster/pacemaker/files/pacemaker-1.1.10-tinfo.patch @@ -0,0 +1,21 @@ +--- a/configure.ac 2014-12-12 14:13:07.262413254 +0100 ++++ b/configure.ac 2014-12-12 14:13:14.922480835 +0100 +@@ -885,14 +885,16 @@ + CURSESLIBS='' + if test "$ac_cv_header_ncurses_h" = "yes"; then + AC_CHECK_LIB(ncurses, printw, +- [CURSESLIBS='-lncurses'; AC_DEFINE(HAVE_LIBNCURSES,1, have ncurses library)] ++ [AC_DEFINE(HAVE_LIBNCURSES,1, have ncurses library)] + ) ++ CURSESLIBS=`$PKGCONFIG --libs ncurses`; + fi + + if test "$ac_cv_header_ncurses_ncurses_h" = "yes"; then + AC_CHECK_LIB(ncurses, printw, +- [CURSESLIBS='-lncurses'; AC_DEFINE(HAVE_LIBNCURSES,1, have ncurses library)] ++ [AC_DEFINE(HAVE_LIBNCURSES,1, have ncurses library)] + ) ++ CURSESLIBS=`$PKGCONFIG --libs ncurses`; + fi + + dnl Only look for non-n-library if there was no n-library. diff --git a/sys-cluster/pacemaker/files/pacemaker-1.1.12-glib.patch b/sys-cluster/pacemaker/files/pacemaker-1.1.12-glib.patch new file mode 100644 index 000000000000..8233f98a17e8 --- /dev/null +++ b/sys-cluster/pacemaker/files/pacemaker-1.1.12-glib.patch @@ -0,0 +1,47 @@ +From 568e41db929a34106c8c2ff7c48716ab5c13ef49 Mon Sep 17 00:00:00 2001 +From: Andrew Beekhof +Date: Mon, 13 Oct 2014 13:30:58 +1100 +Subject: [PATCH] Fix: lrmd: Prevent glib assert triggered by timers being + removed from mainloop more than once + +--- + lib/services/services.c | 3 +++ + lib/services/services_linux.c | 1 + + 2 files changed, 4 insertions(+) + +--- a/lib/services/services.c ++++ b/lib/services/services.c +@@ -313,6 +313,7 @@ services_action_free(svc_action_t * op) + + if (op->opaque->repeat_timer) { + g_source_remove(op->opaque->repeat_timer); ++ op->opaque->repeat_timer = 0; + } + if (op->opaque->stderr_gsource) { + mainloop_del_fd(op->opaque->stderr_gsource); +@@ -425,6 +426,7 @@ services_action_kick(const char *name, c + } else { + if (op->opaque->repeat_timer) { + g_source_remove(op->opaque->repeat_timer); ++ op->opaque->repeat_timer = 0; + } + recurring_action_timer(op); + return TRUE; +@@ -459,6 +461,7 @@ handle_duplicate_recurring(svc_action_t + if (dup->pid != 0) { + if (op->opaque->repeat_timer) { + g_source_remove(op->opaque->repeat_timer); ++ op->opaque->repeat_timer = 0; + } + recurring_action_timer(dup); + } +--- a/lib/services/services_linux.c ++++ b/lib/services/services_linux.c +@@ -226,6 +226,7 @@ recurring_action_timer(gpointer data) + op->stdout_data = NULL; + free(op->stderr_data); + op->stderr_data = NULL; ++ op->opaque->repeat_timer = 0; + + services_action_async(op, NULL); + return FALSE; diff --git a/sys-cluster/pacemaker/files/pacemaker-1.1.12-stonith.patch b/sys-cluster/pacemaker/files/pacemaker-1.1.12-stonith.patch new file mode 100644 index 000000000000..31c729559f35 --- /dev/null +++ b/sys-cluster/pacemaker/files/pacemaker-1.1.12-stonith.patch @@ -0,0 +1,21 @@ +Description: Fix: stonith-ng: Reset mainloop source IDs after removing them + +Origin: upstream, commit: 0326f05c9e26f39a394fa30830e31a76306f49c7 +Author: Andrew Beekhof +Bug-Ubuntu: https://bugs.launchpad.net/bugs/1412962 +Last-Update: 2015-01-20 + +--- a/lib/fencing/st_client.c ++++ b/lib/fencing/st_client.c +@@ -663,9 +663,11 @@ stonith_action_async_done(mainloop_child + + if (action->timer_sigterm > 0) { + g_source_remove(action->timer_sigterm); ++ action->timer_sigterm = 0; + } + if (action->timer_sigkill > 0) { + g_source_remove(action->timer_sigkill); ++ action->timer_sigkill = 0; + } + + if (action->last_timeout_signo) { diff --git a/sys-cluster/pacemaker/files/pacemaker.initd b/sys-cluster/pacemaker/files/pacemaker.initd new file mode 100644 index 000000000000..8dbcea6ce37d --- /dev/null +++ b/sys-cluster/pacemaker/files/pacemaker.initd @@ -0,0 +1,41 @@ +#!/sbin/openrc-run +# Copyright 1999-2013 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +PIDFILE=/var/run/pacemaker.pid + +depend() { + need net corosync + use syslog +} + +start() { + nc=0 + ebegin "Starting Pacemaker Cluster Manager" + + checkpath -d -m 0750 -o hacluster:haclient /var/run/crm + + einfon "Waiting for Corosync startup ." + while true; do + /usr/sbin/corosync-cfgtool -s &>/dev/null && break + nc=$(expr $nc + 1) + if [ $nc -gt 30 ]; then + echo + eend 1 "Failed to detect Corosync startup, is it really running ?" + exit 1 + fi + sleep 1 + echo -n "." + done + echo + start-stop-daemon --start -q --exec /usr/sbin/pacemakerd \ + --pidfile "${PIDFILE}" --make-pidfile --background \ + -- -f + eend $? +} + +stop() { + ebegin "Stopping Pacemaker Cluster Manager" + start-stop-daemon --stop -q --pidfile "${PIDFILE}" + eend $? +} diff --git a/sys-cluster/pacemaker/files/pacemaker.service b/sys-cluster/pacemaker/files/pacemaker.service new file mode 100644 index 000000000000..6383499ba923 --- /dev/null +++ b/sys-cluster/pacemaker/files/pacemaker.service @@ -0,0 +1,5 @@ +service { + # Load the Pacemaker Cluster Resource Manager + name: pacemaker + ver: 1 +} \ No newline at end of file diff --git a/sys-cluster/pacemaker/files/ping b/sys-cluster/pacemaker/files/ping new file mode 100644 index 000000000000..52c4c3d4cad8 --- /dev/null +++ b/sys-cluster/pacemaker/files/ping @@ -0,0 +1,380 @@ +#!/bin/sh +# +# +# Ping OCF RA that utilizes the system ping +# +# Copyright (c) 2009 Andrew Beekhof +# All Rights Reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of version 2 of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# +# Further, this software is distributed without any warranty that it is +# free of the rightful claim of any third person regarding infringement +# or the like. Any license provided herein, whether implied or +# otherwise, applies only to this software file. Patent licenses, if +# any, provided herein do not apply to combinations of this program with +# other software, or any other product whatsoever. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. +# + +####################################################################### +# Initialization: + +: ${OCF_FUNCTIONS=${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs} +. ${OCF_FUNCTIONS} +: ${__OCF_ACTION=$1} + +####################################################################### + +meta_data() { + cat < + + +1.0 + + +Every time the monitor action is run, this resource agent records (in the CIB) the current number of ping nodes the host can connect to. +It is essentially the same as pingd except that it uses the system ping tool to obtain the results. + +node connectivity + + + + +PID file +PID file + + + + + +The time to wait (dampening) further changes occur + +Dampening interval + + + + + +The name of the attributes to set. This is the name to be used in the constraints. + +Attribute name + + + + + +The number by which to multiply the number of connected ping nodes by + +Value multiplier + + + + + +The list of ping nodes to count. + +Host list + + + + + +Number of ping attempts, per host, before declaring it dead + +no. of ping attempts + + + + + +How long, in seconds, to wait before declaring a ping lost + +ping timeout in seconds + + + + + +A catch all for any other options that need to be passed to ping. + +Extra Options + + + + + +Resource is failed if the score is less than failure_score. +Default never fails. + +failure_score + + + + + +Enables to use default attrd_updater verbose logging on every call. + +Verbose logging + + + + + + + + + + + + + + +END +} + +####################################################################### + +ping_conditional_log() { + level=$1; shift + if [ ${OCF_RESKEY_debug} = "true" ]; then + ocf_log $level "$*" + fi +} + +ping_usage() { + cat <$f_out 2>$f_err; rc=$? + active=`grep alive $f_out|wc -l` + + case $rc in + 0) + ;; + 1) + for h in `grep unreachable $f_out | awk '{print $1}'`; do + ping_conditional_log warn "$h is inactive" + done + ;; + *) + ocf_log err "Unexpected result for '$cmd' $rc: `tr '\n' ';' < $f_err`" + ;; + esac + rm -f $f_out $f_err + + return $active +} + +ping_check() { + active=0 + for host in $OCF_RESKEY_host_list; do + p_exe=ping + + case `uname` in + Linux) p_args="-n -q -W $OCF_RESKEY_timeout -c $OCF_RESKEY_attempts";; + Darwin) p_args="-n -q -t $OCF_RESKEY_timeout -c $OCF_RESKEY_attempts -o";; + *) ocf_log err "Unknown host type: `uname`"; exit $OCF_ERR_INSTALLED;; + esac + + case $host in + *:*) p_exe=ping6 + esac + + p_out=`$p_exe $p_args $OCF_RESKEY_options $host 2>&1`; rc=$? + + case $rc in + 0) active=`expr $active + 1`;; + 1) ping_conditional_log warn "$host is inactive: $p_out";; + *) ocf_log err "Unexpected result for '$p_exe $p_args $OCF_RESKEY_options $host' $rc: $p_out";; + esac + done + return $active +} + +ping_update() { + + if have_binary fping; then + fping_check + active=$? + else + ping_check + active=$? + fi + + score=`expr $active \* $OCF_RESKEY_multiplier` + attrd_updater -n $OCF_RESKEY_name -v $score -d $OCF_RESKEY_dampen $attrd_options + rc=$? + case $rc in + 0) ping_conditional_log debug "Updated $OCF_RESKEY_name = $score" ;; + *) ocf_log warn "Could not update $OCF_RESKEY_name = $score: rc=$rc";; + esac + if [ $rc -ne 0 ]; then + return $rc + fi + + if [ -n "$OCF_RESKEY_failure_score" -a "$score" -lt "$OCF_RESKEY_failure_score" ]; then + ocf_log warn "$OCF_RESKEY_name is less than failure_score($OCF_RESKEY_failure_score)" + return 1 + fi + return 0 +} + +: ${OCF_RESKEY_name:="pingd"} +: ${OCF_RESKEY_dampen:="5s"} +: ${OCF_RESKEY_attempts:="3"} +: ${OCF_RESKEY_multiplier:="1"} +: ${OCF_RESKEY_debug:="false"} +: ${OCF_RESKEY_failure_score:="0"} + +: ${OCF_RESKEY_CRM_meta_timeout:="20000"} +: ${OCF_RESKEY_CRM_meta_globally_unique:="true"} + +integer=`echo ${OCF_RESKEY_timeout} | egrep -o '[0-9]*'` +case ${OCF_RESKEY_timeout} in + *[0-9]ms|*[0-9]msec) OCF_RESKEY_timeout=`expr $integer / 1000`;; + *[0-9]m|*[0-9]min) OCF_RESKEY_timeout=`expr $integer \* 60`;; + *[0-9]h|*[0-9]hr) OCF_RESKEY_timeout=`expr $integer \* 60 \* 60`;; + *) OCF_RESKEY_timeout=$integer;; +esac + +if [ -z ${OCF_RESKEY_timeout} ]; then + if [ x"$OCF_RESKEY_host_list" != x ]; then + host_count=`echo $OCF_RESKEY_host_list | awk '{print NF}'` + OCF_RESKEY_timeout=`expr $OCF_RESKEY_CRM_meta_timeout / $host_count / $OCF_RESKEY_attempts` + OCF_RESKEY_timeout=`expr $OCF_RESKEY_timeout / 1100` # Convert to seconds and finish 10% early + else + OCF_RESKEY_timeout=5 + fi +fi + +if [ ${OCF_RESKEY_timeout} -lt 1 ]; then + OCF_RESKEY_timeout=5 +elif [ ${OCF_RESKEY_timeout} -gt 1000 ]; then + # ping actually complains if this value is too high, 5 minutes is plenty + OCF_RESKEY_timeout=300 +fi + +if [ ${OCF_RESKEY_CRM_meta_globally_unique} = "false" ]; then + : ${OCF_RESKEY_pidfile:="$HA_VARRUN/ping-${OCF_RESKEY_name}"} +else + : ${OCF_RESKEY_pidfile:="$HA_VARRUN/ping-${OCF_RESOURCE_INSTANCE}"} +fi + +case $__OCF_ACTION in + meta-data) + meta_data + exit $OCF_SUCCESS + ;; + usage|help) + ping_usage + exit $OCF_SUCCESS + ;; +esac + +attrd_options='-q' +if ocf_is_true ${OCF_RESKEY_debug} ; then + attrd_options='' +fi + +# Check the debug option + case "${OCF_RESKEY_debug}" in + true|True|TRUE|1) OCF_RESKEY_debug=true;; + false|False|FALSE|0) OCF_RESKEY_debug=false;; + *) + ocf_log warn "Value for 'debug' is incorrect. Please specify 'true' or 'false' not: ${OCF_RESKEY_debug}" + OCF_RESKEY_debug=false + ;; + esac + +case $__OCF_ACTION in +start) ping_start;; +stop) ping_stop;; +monitor) ping_monitor;; +reload) ping_start;; +validate-all) ping_validate;; +*) ping_usage + exit $OCF_ERR_UNIMPLEMENTED + ;; +esac +exit $? -- cgit v1.2.3