summaryrefslogtreecommitdiffstats
path: root/cts/support/cts-support.in
diff options
context:
space:
mode:
Diffstat (limited to 'cts/support/cts-support.in')
-rw-r--r--cts/support/cts-support.in170
1 files changed, 170 insertions, 0 deletions
diff --git a/cts/support/cts-support.in b/cts/support/cts-support.in
new file mode 100644
index 0000000..de5b7d8
--- /dev/null
+++ b/cts/support/cts-support.in
@@ -0,0 +1,170 @@
+#!/bin/sh
+#
+# Installer for support files needed by Pacemaker's Cluster Test Suite
+#
+# Copyright 2018-2022 the Pacemaker project contributors
+#
+# The version control history for this file may have further details.
+#
+# This source code is licensed under the GNU General Public License version 2
+# or later (GPLv2+) WITHOUT ANY WARRANTY.
+#
+
+USAGE_TEXT="Usage: $0 <install|uninstall|--help>"
+
+HELP_TEXT="$USAGE_TEXT
+Commands (must be run as root):
+ install Install support files needed by Pacemaker CTS
+ uninstall Remove support files needed by Pacemaker CTS"
+
+# These constants must track crm_exit_t values
+CRM_EX_OK=0
+CRM_EX_ERROR=1
+CRM_EX_USAGE=64
+
+UNIT_DIR="@systemdsystemunitdir@"
+RUNTIME_UNIT_DIR="@runstatedir@/systemd/system"
+LIBEXEC_DIR="@libexecdir@/pacemaker"
+INIT_DIR="@INITDIR@"
+PCMK__FENCE_BINDIR="@PCMK__FENCE_BINDIR@"
+DATA_DIR="@datadir@/pacemaker/tests/cts"
+UPSTART_DIR="/etc/init"
+
+DUMMY_DAEMON="pacemaker-cts-dummyd"
+DUMMY_DAEMON_UNIT="pacemaker-cts-dummyd@.service"
+COROSYNC_RUNTIME_UNIT="corosync.service.d"
+COROSYNC_RUNTIME_CONF="cts.conf"
+
+LSB_DUMMY="LSBDummy"
+UPSTART_DUMMY="pacemaker-cts-dummyd.conf"
+FENCE_DUMMY="fence_dummy"
+FENCE_DUMMY_ALIASES="auto_unfence no_reboot no_on"
+
+# If the install directory doesn't exist, assume we're in a build directory.
+if [ ! -d "$DATA_DIR" ]; then
+ # If readlink supports -e (i.e. GNU), use it.
+ readlink -e / >/dev/null 2>/dev/null
+ if [ $? -eq 0 ]; then
+ DATA_DIR="$(dirname "$(readlink -e "$0")")"
+ else
+ DATA_DIR="$(dirname "$0")"
+ fi
+fi
+
+usage() {
+ echo "Error:" "$@"
+ echo "$USAGE_TEXT"
+ exit $CRM_EX_USAGE
+}
+
+must_be_root() {
+ if ! [ "$(id -u)" = "0" ]; then
+ usage "this command must be run as root"
+ return $CRM_EX_ERROR
+ fi
+ return $CRM_EX_OK
+}
+
+support_uninstall() {
+ must_be_root || return $CRM_EX_ERROR
+
+ if [ -e "$UNIT_DIR/$DUMMY_DAEMON_UNIT" ]; then
+ echo "Removing $UNIT_DIR/$DUMMY_DAEMON_UNIT ..."
+ rm -f "$UNIT_DIR/$DUMMY_DAEMON_UNIT"
+ systemctl daemon-reload # Ignore failure
+ fi
+
+ if [ -e "$RUNTIME_UNIT_DIR/$COROSYNC_RUNTIME_UNIT" ]; then
+ echo "Removing $RUNTIME_UNIT_DIR/$COROSYNC_RUNTIME_UNIT ..."
+ rm -rf "$RUNTIME_UNIT_DIR/$COROSYNC_RUNTIME_UNIT"
+ systemctl daemon-reload # Ignore failure
+ fi
+
+ for FILE in \
+ "$LIBEXEC_DIR/$DUMMY_DAEMON" \
+ "$UPSTART_DIR/$UPSTART_DUMMY" \
+ "$PCMK__FENCE_BINDIR/$FENCE_DUMMY" \
+ "$INIT_DIR/$LSB_DUMMY"
+ do
+ if [ -e "$FILE" ]; then
+ echo "Removing $FILE ..."
+ rm -f "$FILE"
+ fi
+ done
+ for ALIAS in $FENCE_DUMMY_ALIASES; do \
+ FILE="$PCMK__FENCE_BINDIR/fence_dummy_$ALIAS"
+ if [ -L "$FILE" ] || [ -e "$FILE" ]; then
+ echo "Removing $FILE ..."
+ rm -f "$FILE"
+ fi
+ done
+
+ return $CRM_EX_OK
+}
+
+support_install() {
+ support_uninstall || return $CRM_EX_ERROR
+ cd "$DATA_DIR" || return $CRM_EX_ERROR
+ if [ -d "$UNIT_DIR" ]; then
+
+ echo "Installing $DUMMY_DAEMON ..."
+ mkdir -p "$LIBEXEC_DIR"
+ install -m 0755 "$DUMMY_DAEMON" "$LIBEXEC_DIR" || return $CRM_EX_ERROR
+
+ echo "Installing $DUMMY_DAEMON_UNIT ..."
+ install -m 0644 "$DUMMY_DAEMON_UNIT" "$UNIT_DIR" || return $CRM_EX_ERROR
+ systemctl daemon-reload # Ignore failure
+ fi
+
+ if [ -d "$RUNTIME_UNIT_DIR" ]; then
+
+ echo "Installing $COROSYNC_RUNTIME_CONF to $RUNTIME_UNIT_DIR/$COROSYNC_RUNTIME_UNIT ..."
+ mkdir -p "$RUNTIME_UNIT_DIR/$COROSYNC_RUNTIME_UNIT"
+ install -m 0644 "$COROSYNC_RUNTIME_CONF" "$RUNTIME_UNIT_DIR/$COROSYNC_RUNTIME_UNIT" || return $CRM_EX_ERROR
+
+ systemctl daemon-reload # Ignore failure
+ fi
+
+ echo "Installing $FENCE_DUMMY to $PCMK__FENCE_BINDIR ..."
+ mkdir -p "$PCMK__FENCE_BINDIR"
+ install -m 0755 "$FENCE_DUMMY" "$PCMK__FENCE_BINDIR" || return $CRM_EX_ERROR
+ for alias in $FENCE_DUMMY_ALIASES; do \
+ echo "Installing fence_dummy_$alias to $PCMK__FENCE_BINDIR ..."
+ ln -s "$FENCE_DUMMY" "$PCMK__FENCE_BINDIR/fence_dummy_$alias"
+ if [ $? -ne 0 ]; then
+ return $CRM_EX_ERROR
+ fi
+ done
+
+ echo "Installing $LSB_DUMMY to $INIT_DIR ..."
+ mkdir -p "$INIT_DIR"
+ install -m 0755 "$LSB_DUMMY" "$INIT_DIR" || return $CRM_EX_ERROR
+
+ if [ -d "$UPSTART_DIR" ] && [ -f "$UPSTART_DUMMY" ]; then
+ echo "Installing $UPSTART_DUMMY to $UPSTART_DIR ..."
+ install -m 0644 "$UPSTART_DUMMY" "$UPSTART_DIR" || return $CRM_EX_ERROR
+ fi
+ return $CRM_EX_OK
+}
+
+COMMAND=""
+while [ $# -gt 0 ] ; do
+ case "$1" in
+ --help)
+ echo "$HELP_TEXT"
+ exit $CRM_EX_OK
+ ;;
+ install|uninstall)
+ COMMAND="$1"
+ shift
+ ;;
+ *)
+ usage "unknown option '$1'"
+ ;;
+ esac
+done
+case "$COMMAND" in
+ install) support_install ;;
+ uninstall) support_uninstall ;;
+ *) usage "must specify command" ;;
+esac