diff --git a/cts/HBDummy.in b/cts/HBDummy.in index 4960dd2572..f1cba94dc0 100755 --- a/cts/HBDummy.in +++ b/cts/HBDummy.in @@ -1,127 +1,114 @@ #!/bin/sh # # # Dummy Heartbeat RA. Does nothing but touch and remove a state file # # Copyright (c) 2015 Lars Ellenberg # # Based on LSBDummy, # Copyright (c) 2010 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: desc="Dummy Heartbeat service" . @OCF_ROOT_DIR@/resource.d/heartbeat/.ocf-directories : ${HA_VARRUN=/tmp} # Backup in case .ocf-directories doesn't exist ####################################################################### success() { echo -ne "[ OK ]\r" } failure() { echo -ne "[FAILED]\r" } -# rpm based distros -if [ -d @sysconfdir@/sysconfig ]; then - [ -f @INITDIR@/functions ] && . @INITDIR@/functions - [ -f @sysconfdir@/sysconfig/pacemaker ] && . @sysconfdir@/sysconfig/pacemaker - [ -z "$LOCK_FILE" ] && LOCK_FILE="@localstatedir@/lock/subsys/pacemaker" -fi - -# deb based distros -if [ -d @sysconfdir@/default ]; then - [ -f @sysconfdir@/default/pacemaker ] && . @sysconfdir@/default/pacemaker - [ -z "$LOCK_FILE" ] && LOCK_FILE="@localstatedir@/lock/pacemaker" -fi - dummy_usage() { cat < # # License: Revised BSD # chkconfig: - 99 01 # description: Pacemaker Cluster Manager # processname: pacemaker_remoted # ### BEGIN INIT INFO # Provides: pacemaker_remoted # Required-Start: $network $remote_fs # Should-Start: $syslog # Required-Stop: $network $remote_fs # Default-Start: # Default-Stop: # Short-Description: Starts and stops the Pacemaker remote agent for non-cluster nodes # Description: Starts and stops the Pacemaker remote agent for non-cluster nodes ### END INIT INFO desc="Pacemaker Remote Agent" prog="pacemaker_remoted" cman=0 # set secure PATH PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@" checkrc() { if [ $? = 0 ]; then success else failure fi } success() { echo -ne "[ OK ]\r" } failure() { echo -ne "[FAILED]\r" } status() { pid=$(pidof $1 2>/dev/null) rtrn=$? if [ $rtrn -ne 0 ]; then echo "$1 is stopped" else echo "$1 (pid $pid) is running..." fi return $rtrn } -# rpm based distros -if [ -d @sysconfdir@/sysconfig ]; then +if [ -d @CONFIGDIR@ ]; then [ -f @INITDIR@/functions ] && . @INITDIR@/functions - set -a - [ -f @sysconfdir@/sysconfig/pacemaker ] && . @sysconfdir@/sysconfig/pacemaker - set +a - [ -z "$LOCK_FILE" ] && LOCK_FILE="@localstatedir@/lock/subsys/pacemaker_remote" +set -a + [ -f @CONFIGDIR@/pacemaker ] && . @CONFIGDIR@/pacemaker +set +a fi -# deb based distros -if [ -d @sysconfdir@/default ]; then - set -a - [ -f @sysconfdir@/default/pacemaker ] && . @sysconfdir@/default/pacemaker - set +a - [ -z "$LOCK_FILE" ] && LOCK_FILE="@localstatedir@/lock/pacemaker_remote" +LOCK_DIR="." +if [ -d "@localstatedir@/lock/subsys" ]; then + LOCK_DIR="@localstatedir@/lock/subsys" +elif [ -d "@localstatedir@/lock" ]; then + LOCK_DIR="@localstatedir@/lock" fi +[ -z "$LOCK_FILE" ] && LOCK_FILE="$LOCK_DIR/pacemaker_remote" start() { echo -n "Starting $desc: " # most recent distributions use tmpfs for $@localstatedir@/run # to avoid to clean it up on every boot. # they also assume that init scripts will create # required subdirectories for proper operations - mkdir -p @localstatedir@/run + mkdir -p "@localstatedir@/run" if status $prog > /dev/null 2>&1; then success else $prog > /dev/null 2>&1 & # Time to connect to corosync and fail sleep 5 if status $prog > /dev/null 2>&1; then - touch $LOCK_FILE - pidof $prog > @localstatedir@/run/$prog.pid + touch "$LOCK_FILE" + pidof $prog > "@localstatedir@/run/$prog.pid" success else failure rtrn=1 fi fi echo } stop() { if status $prog > /dev/null 2>&1; then echo -n "Signaling $desc to terminate: " kill -TERM $(pidof $prog) > /dev/null 2>&1 success echo echo -n "Waiting for $desc to unload:" while status $prog > /dev/null 2>&1; do sleep 1 echo -n "." done fi - rm -f $LOCK_FILE - rm -f @localstatedir@/run/$prog.pid + rm -f "$LOCK_FILE" + rm -f "@localstatedir@/run/$prog.pid" success echo } rtrn=0 case "$1" in start) start ;; restart|reload|force-reload) stop start ;; condrestart|try-restart) if status $prog > /dev/null 2>&1; then stop start rtrn=$? fi ;; status) status $prog rtrn=$? ;; stop) stop rtrn=$? ;; *) echo "usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}" rtrn=2 ;; esac exit $rtrn diff --git a/mcp/pacemaker.combined.upstart.in b/mcp/pacemaker.combined.upstart.in index a4749139ec..6f0e39ae82 100644 --- a/mcp/pacemaker.combined.upstart.in +++ b/mcp/pacemaker.combined.upstart.in @@ -1,73 +1,69 @@ # pacemaker-corosync - High-Availability cluster # # Starts Corosync cluster engine and Pacemaker cluster manager. # if you use automatic start, uncomment the line below. #start on started local and runlevel [2345] stop on runlevel [0123456] kill timeout 3600 respawn env prog=pacemakerd -env rpm_sysconf=@sysconfdir@/sysconfig/pacemaker -env rpm_lockfile=@localstatedir@/lock/subsys/pacemaker -env deb_sysconf=@sysconfdir@/default/pacemaker -env deb_lockfile=@localstatedir@/lock/pacemaker +env sysconf=@CONFIGDIR@/crm_mon +env rpm_lockdir=@localstatedir@/lock/subsys +env deb_lockdir=@localstatedir@/lock script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf + [ -f "$sysconf" ] && . "$sysconf" exec $prog end script pre-start script # setup the software watchdog which corosync uses. # rewrite according to environment. [ -c /dev/watchdog ] || modprobe softdog soft_margin=60 pidof corosync || start corosync # if you use corosync-notifyd, uncomment the line below. #start corosync-notifyd # give it time to fail. sleep 2 pidof corosync || { exit 1; } # if you use crm_mon, uncomment the line below. #start crm_mon end script post-start script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf - [ -z "$LOCK_FILE" -a -d @sysconfdir@/sysconfig ] && LOCK_FILE="$rpm_lockfile" - [ -z "$LOCK_FILE" -a -d @sysconfdir@/default ] && LOCK_FILE="$deb_lockfile" - touch $LOCK_FILE - pidof $prog > @localstatedir@/run/$prog.pid + [ -f "$sysconf" ] && . "$sysconf" + [ -z "$LOCK_FILE" -a -d "$rpm_lockdir" ] && LOCK_FILE="$rpm_lockdir/pacemaker" + [ -z "$LOCK_FILE" -a -d "$deb_lockdir" ] && LOCK_FILE="$deb_lockdir/pacemaker" + touch "$LOCK_FILE" + pidof $prog > "@localstatedir@/run/$prog.pid" end script post-stop script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf - [ -z "$LOCK_FILE" -a -d @sysconfdir@/sysconfig ] && LOCK_FILE="$rpm_lockfile" - [ -z "$LOCK_FILE" -a -d @sysconfdir@/default ] && LOCK_FILE="$deb_lockfile" - rm -f $LOCK_FILE - rm -f @localstatedir@/run/$prog.pid + [ -f "$sysconf" ] && . "$sysconf" + [ -z "$LOCK_FILE" -a -d "$rpm_lockdir" ] && LOCK_FILE="$rpm_lockdir/pacemaker" + [ -z "$LOCK_FILE" -a -d "$deb_lockdir" ] && LOCK_FILE="$deb_lockdir/pacemaker" + rm -f "$LOCK_FILE" + rm -f "@localstatedir@/run/$prog.pid" # if you use watchdog of corosync, uncomment the line below. #pidof corosync || false pidof crmd || stop corosync # if you want to reboot a machine by watchdog of corosync when # pacemakerd disappeared unexpectedly, uncomment the line below # and invalidate above "respawn" stanza. #pidof crmd && killall -q -9 corosync # if you use crm_mon, uncomment the line below. #stop crm_mon # if you use corosync-notifyd, uncomment the line below. #stop corosync-notifyd || true end script diff --git a/mcp/pacemaker.in b/mcp/pacemaker.in index e6d5462b98..c67732213b 100644 --- a/mcp/pacemaker.in +++ b/mcp/pacemaker.in @@ -1,282 +1,280 @@ #!/bin/bash # Authors: # Andrew Beekhof # Fabio M. Di Nitto # # License: Revised BSD # chkconfig: - 99 01 # description: Pacemaker Cluster Manager # processname: pacemakerd # ### BEGIN INIT INFO # Provides: pacemaker # Required-Start: $network $remote_fs corosync # Should-Start: $syslog # Required-Stop: $network $remote_fs corosync # Default-Start: # Default-Stop: # Short-Description: Starts and stops Pacemaker Cluster Manager. # Description: Starts and stops Pacemaker Cluster Manager. ### END INIT INFO desc="Pacemaker Cluster Manager" prog="pacemakerd" # set secure PATH PATH="/sbin:/bin:/usr/sbin:/usr/bin:@sbindir@" checkrc() { if [ $? = 0 ]; then success else failure fi } success() { echo -ne "[ OK ]\r" } failure() { echo -ne "[FAILED]\r" } log() { logger -t pacemaker -p daemon.notice "$*" } notify() { log "$*" echo -n "$*" } status() { pid=$(pidof $1 2>/dev/null) local rtrn=$? if [ $rtrn -ne 0 ]; then echo "$1 is stopped" else echo "$1 (pid $pid) is running..." fi return $rtrn } -# rpm based distros -if [ -d @sysconfdir@/sysconfig ]; then +if [ -d @CONFIGDIR@ ]; then [ -f @INITDIR@/functions ] && . @INITDIR@/functions set -a - [ -f @sysconfdir@/sysconfig/pacemaker ] && . @sysconfdir@/sysconfig/pacemaker + [ -f @CONFIGDIR@/pacemaker ] && . @CONFIGDIR@/pacemaker set +a - [ -z "$LOCK_FILE" ] && LOCK_FILE="@localstatedir@/lock/subsys/pacemaker" fi -# deb based distros -if [ -d @sysconfdir@/default ]; then -set -a - [ -f @sysconfdir@/default/pacemaker ] && . @sysconfdir@/default/pacemaker -set +a - [ -z "$LOCK_FILE" ] && LOCK_FILE="@localstatedir@/lock/pacemaker" +LOCK_DIR="." +if [ -d "@localstatedir@/lock/subsys" ]; then + LOCK_DIR="@localstatedir@/lock/subsys" +elif [ -d "@localstatedir@/lock" ]; then + LOCK_DIR="@localstatedir@/lock" fi +[ -z "$LOCK_FILE" ] && LOCK_FILE="$LOCK_DIR/pacemaker" # Unless specified otherwise, assume cman is in use if cluster.conf exists -if [ x = "x$PCMK_STACK" -a -f @sysconfdir@/cluster/cluster.conf ]; then +if [ x = "x$PCMK_STACK" -a -f "@sysconfdir@/cluster/cluster.conf" ]; then PCMK_STACK=cman fi start() { notify "Starting $desc" # most recent distributions use tmpfs for $@localstatedir@/run # to avoid to clean it up on every boot. # they also assume that init scripts will create # required subdirectories for proper operations - mkdir -p @localstatedir@/run + mkdir -p "@localstatedir@/run" if status $prog > /dev/null 2>&1; then success else $prog > /dev/null 2>&1 & # Time to connect to corosync and fail sleep 5 if status $prog > /dev/null 2>&1; then - touch $LOCK_FILE - pidof $prog > @localstatedir@/run/$prog.pid + touch "$LOCK_FILE" + pidof $prog > "@localstatedir@/run/$prog.pid" success else failure rtrn=1 fi fi echo } cman_pre_start() { # start cman if it's not running service cman status >/dev/null 2>&1 if [ $? -ne 0 ]; then service cman start if [ $? -ne 0 ]; then notify "Aborting startup of $desc" echo exit 1 fi fi # start cman's friends if they're not running but were configured to start automatically for cservice in cmirrord clvmd gfs2; do chkconfig --list $cservice 2>/dev/null | grep -q ":on" if [ $? -eq 0 ]; then service $cservice status >/dev/null 2>&1 if [ $? -ne 0 ]; then log "Attempting to start $cservice" service $cservice start fi fi done } cman_pre_stop() { # if cman is not running there is nothing we need to do here service cman status >/dev/null 2>&1 if [ $? -ne 0 ]; then return fi has_lvm=`crm_resource -c | grep Resource: | grep LVM` # migrate resources to another node or shut them down cname=`crm_node --name` crm_attribute -N $cname -n standby -v true -l reboot notify "Waiting for shutdown of managed resources" while [ 1 = 1 ]; do # 0x0000000000000002 means managed active=`crm_resource -c | grep Resource: | grep 0x...............[2367] | awk '{print $9}' | grep "^${cname}$" | wc -l` if [ $active = 0 ]; then break; fi sleep 2 echo -n "." done success echo if [ -d /sys/kernel/dlm/ ]; then lockspace="$(ls -1 /sys/kernel/dlm/)" if [ -n "$lockspace" ]; then notify "DLM lockspace still in use" echo "" for cservice in gfs2 clvmd cmirrord; do service $cservice status >/dev/null 2>&1 if [ $? -eq 0 ]; then if [ -n "$has_lvm" ] && [ "$cservice" = "clvmd" ]; then # allow HA-LVM to take a lock on vg/lv before clvmd can exit notify "Waiting for LVM services to start somewhere else" sleep 15 success fi log "Attempting to shutdown $cservice" service $cservice stop fi done fi fi notify "Leaving fence domain" fence_tool leave -w 10 checkrc fenced=$(pidof fenced) notify "Stopping fenced $fenced" kill -KILL $fenced > /dev/null 2>&1 checkrc } stop() { shutdown_prog=$prog if ! status $prog > /dev/null 2>&1; then shutdown_prog="crmd" fi if status $shutdown_prog > /dev/null 2>&1; then notify "Signaling $desc to terminate" kill -TERM $(pidof $prog) > /dev/null 2>&1 checkrc echo notify "Waiting for cluster services to unload" while status $prog > /dev/null 2>&1; do sleep 1 echo -n "." done else echo -n "$desc is already stopped" fi - rm -f $LOCK_FILE - rm -f @localstatedir@/run/$prog.pid + rm -f "$LOCK_FILE" + rm -f "@localstatedir@/run/$prog.pid" killall -q -9 'crmd stonithd attrd cib lrmd pacemakerd' success echo } rtrn=0 case "$1" in start) # For consistency with stop [ "$PCMK_STACK" = cman ] && cman_pre_start start ;; restart|reload|force-reload) stop start ;; condrestart|try-restart) if status $prog > /dev/null 2>&1; then stop start fi ;; status) status $prog rtrn=$? ;; stop) # # stonithd needs to be around until fenced is stopped # fenced can't be stopped until any resource using dlm is active # # So: # 1. put the node into standby # 2. wait for all resources to be stopped # 3. stop fenced and anything that needs it (borrowed from the cman script) # 4. stop pacemaker # 5. stop the rest of cman (so it doesn't end up half up/down) # [ "$PCMK_STACK" = cman ] && cman_pre_stop stop [ "$PCMK_STACK" = cman ] && service cman stop ;; *) echo "usage: $0 {start|stop|restart|reload|force-reload|condrestart|try-restart|status}" rtrn=2 ;; esac exit $rtrn diff --git a/mcp/pacemaker.upstart.in b/mcp/pacemaker.upstart.in index 7c977dc6e2..9ac3fd664d 100644 --- a/mcp/pacemaker.upstart.in +++ b/mcp/pacemaker.upstart.in @@ -1,37 +1,33 @@ # pacemaker - High-Availability cluster resource manager # # Starts pacemakerd stop on runlevel [0123456] kill timeout 3600 respawn env prog=pacemakerd -env rpm_sysconf=@sysconfdir@/sysconfig/pacemaker -env rpm_lockfile=@localstatedir@/lock/subsys/pacemaker -env deb_sysconf=@sysconfdir@/default/pacemaker -env deb_lockfile=@localstatedir@/lock/pacemaker +env sysconf=@CONFIGDIR@/crm_mon +env rpm_lockdir=@localstatedir@/lock/subsys +env deb_lockdir=@localstatedir@/lock script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf + [ -f "$sysconf" ] && . "$sysconf" exec $prog end script post-start script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf - [ -z "$LOCK_FILE" -a -d @sysconfdir@/sysconfig ] && LOCK_FILE="$rpm_lockfile" - [ -z "$LOCK_FILE" -a -d @sysconfdir@/default ] && LOCK_FILE="$deb_lockfile" - touch $LOCK_FILE - pidof $prog > @localstatedir@/run/$prog.pid + [ -f "$sysconf" ] && . "$sysconf" + [ -z "$LOCK_FILE" -a -d "$rpm_lockdir" ] && LOCK_FILE="$rpm_lockdir/pacemaker" + [ -z "$LOCK_FILE" -a -d "$deb_lockdir" ] && LOCK_FILE="$deb_lockdir/pacemaker" + touch "$LOCK_FILE" + pidof $prog > "@localstatedir@/run/$prog.pid" end script post-stop script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf - [ -z "$LOCK_FILE" -a -d @sysconfdir@/sysconfig ] && LOCK_FILE="$rpm_lockfile" - [ -z "$LOCK_FILE" -a -d @sysconfdir@/default ] && LOCK_FILE="$deb_lockfile" - rm -f $LOCK_FILE - rm -f @localstatedir@/run/$prog.pid + [ -f "$sysconf" ] && . "$sysconf" + [ -z "$LOCK_FILE" -a -d "$rpm_lockdir" ] && LOCK_FILE="$rpm_lockdir/pacemaker" + [ -z "$LOCK_FILE" -a -d "$deb_lockdir" ] && LOCK_FILE="$deb_lockdir/pacemaker" + rm -f "$LOCK_FILE" + rm -f "@localstatedir@/run/$prog.pid" end script diff --git a/tools/crm_mon.service.in b/tools/crm_mon.service.in index 24021198d9..1199f5fe06 100644 --- a/tools/crm_mon.service.in +++ b/tools/crm_mon.service.in @@ -1,16 +1,16 @@ [Unit] Description=Daemon for pacemaker monitor Documentation=man:crm_mon [Service] Type=forking -EnvironmentFile=-@sysconfdir@/sysconfig/crm_mon +EnvironmentFile=-@CONFIGDIR@/crm_mon ExecStart=@sbindir@/crm_mon $OPTIONS Restart=always # crm_perror() writes directly to stderr, so ignore it here to avoid # double-logging with the wrong format StandardError=null [Install] WantedBy=multi-user.target diff --git a/tools/crm_mon.upstart.in b/tools/crm_mon.upstart.in index ef0fe7a7f2..eb4c956c64 100644 --- a/tools/crm_mon.upstart.in +++ b/tools/crm_mon.upstart.in @@ -1,39 +1,35 @@ # crm_mon - Daemon for pacemaker monitor # # kill timeout 3600 respawn respawn limit 10 3600 expect fork env prog=crm_mon -env rpm_sysconf=@sysconfdir@/sysconfig/crm_mon -env rpm_lockfile=@localstatedir@/lock/subsys/crm_mon -env deb_sysconf=@sysconfdir@/default/crm_mon -env deb_lockfile=@localstatedir@/lock/crm_mon +env sysconf=@CONFIGDIR@/crm_mon +env rpm_lockdir=@localstatedir@/lock/subsys +env deb_lockdir=@localstatedir@/lock script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf + [ -f "$sysconf" ] && . "$sysconf" exec $prog $OPTIONS end script post-start script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf - [ -z "$LOCK_FILE" -a -d @sysconfdir@/sysconfig ] && LOCK_FILE="$rpm_lockfile" - [ -z "$LOCK_FILE" -a -d @sysconfdir@/default ] && LOCK_FILE="$deb_lockfile" - touch $LOCK_FILE + [ -f "$sysconf" ] && . "$sysconf" + [ -z "$LOCK_FILE" -a -d "$rpm_lockdir" ] && LOCK_FILE="$rpm_lockdir/$prog" + [ -z "$LOCK_FILE" -a -d "$deb_lockdir" ] && LOCK_FILE="$deb_lockdir/$prog" + touch "$LOCK_FILE" end script post-stop script - [ -f "$rpm_sysconf" ] && . $rpm_sysconf - [ -f "$deb_sysconf" ] && . $deb_sysconf - [ -z "$LOCK_FILE" -a -d @sysconfdir@/sysconfig ] && LOCK_FILE="$rpm_lockfile" - [ -z "$LOCK_FILE" -a -d @sysconfdir@/default ] && LOCK_FILE="$deb_lockfile" - rm -f $LOCK_FILE + [ -f "$sysconf" ] && . "$sysconf" + [ -z "$LOCK_FILE" -a -d "$rpm_lockdir" ] && LOCK_FILE="$rpm_lockdir/$prog" + [ -z "$LOCK_FILE" -a -d "$deb_lockdir" ] && LOCK_FILE="$deb_lockdir/$prog" + rm -f "$LOCK_FILE" end script