aboutsummaryrefslogtreecommitdiff
path: root/sysutils/heartbeat2/files/pkg-install.in
blob: a125513bfc8e4540e91854b4338a9ae099c0ff38 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#! /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