#! /bin/sh ask() { local question default answer question=$1 default=$2 # pkg_add fails anyhow, if we do not create the user/group if [ "x${BATCH}" = xno ]; then read -p "${question} [${default}]? " answer fi if [ "x${answer}" = x ]; then answer=${default} fi echo ${answer} } yesno() { local dflt question answer question=$1 dflt=$2 while :; do answer=$(ask "${question}" "${dflt}") case "${answer}" in [Yy]*) return 0;; [Nn]*) return 1;; esac echo "Please answer yes or no." done } make_account() { local u g uid gid u=$1 g=$2 uid=$3 gid=$4 if pw group show "${g}" >/dev/null 2>&1; then echo "You already have a group \"${g}\", so I will use it." else echo "You need a group \"${g}\"." if yesno "Would you like me to create it" y; then pw groupadd ${g} -g ${gid} || exit echo "Done." else echo "Please create it manually, and try again." exit 1 fi fi if pw user show "${u}" >/dev/null 2>&1; then echo "You already have a user \"${u}\", so I will use it." else echo "You need a user \"${u}\"." if yesno "Would you like me to create it" y; then pw useradd ${u} -u ${uid} -g ${g} -h - -d /nonexistant \ -s /sbin/nologin -c "Heartbeat cluster user" || exit echo "Done." else echo "Please create it, and try again." exit 1 fi fi } delete_account() { local u g u=$1 g=$2 if yesno "Do you want me to remove group \"${g}\"" y; then echo "Removing group \"${g}\"" pw groupdel -n ${g} echo "Done." fi if yesno "Do you want me to remove user \"${u}\"" y; then echo "Removing user \"${u}\"" pw userdel -n ${u} echo "Done." fi } case $2 in PRE-INSTALL) echo "" user=hacluster group=haclient uid=275 gid=275 make_account ${user} ${group} $uid $gid echo "Adding empty dirs and pid file." test -d /var/lib/heartbeat/ckpt || \ install -d -m 755 /var/lib/heartbeat/ckpt test -d /var/lib/heartbeat/ccm || \ install -d -m 750 -o ${user} -g ${group} /var/lib/heartbeat/ccm test -d /var/lib/heartbeat/cores/root || \ install -d -m 700 /var/lib/heartbeat/cores/root test -d /var/lib/heartbeat/cores/nobody || \ install -d -m 700 -o nobody /var/lib/heartbeat/cores/nobody test -d /var/lib/heartbeat/cores/hacluster || \ install -d -m 700 -o ${user} /var/lib/heartbeat/cores/hacluster test -d /var/lock/subsys || \ install -d -m 755 /var/lock/subsys test -f /var/run/heartbeat.pid || \ install -m 644 -o ${user} -g ${group} /dev/null \ /var/run/heartbeat.pid ;; DEINSTALL) if ps -axc | grep -q heartbeat; then if yesno "There are some heartbeat processes running. Shall I kill them" y then killall heartbeat sleep 2 else echo "OK ... I hope you know what you are doing." fi fi delete_account hacluster haclient echo "Removing runtime files" if [ -d /var/lib/heartbeat ]; then rm -r /var/lib/heartbeat fi if [ -f /var/lock/subsys/heartbeat ]; then rm /var/lock/subsys/heartbeat fi if [ -f /var/run/heartbeat.pid ]; then rm /var/run/heartbeat.pid fi ;; esac