summaryrefslogtreecommitdiffstats
path: root/base/all/root/scripts/setup_tsm_client.sh
blob: 792edbe91af8677d2f8d035a96e3f560ebf4bc44 (plain)
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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#!/bin/bash

# catch errors
set -e
set -E
trap 'es=$?; 
      echo ERROR: failed in function \"${FUNCNAME}\" at line ${LINENO} of ${BASH_SOURCE[0]} with code $es; 
      exit $es' ERR

# Setup things up so that TSM_SERVER is the first tsm_server node and
# any nas nodes are listed in the TSM server configuration as clients.
NODES="@@NODES@@"
TSM_SERVER=""
TSM_CLIENTS=""

for n in $NODES ; do
    case "$n" in
	nas:*)
	    t="${n%:*}"
	    # comma separated
	    TSM_CLIENTS="${TSM_CLIENTS}${TSM_CLIENTS:+,}${t##*:}"
	    ;;
	tsm_server:*)
	    [ -n "$TSM_SERVER" ] && continue
	    t="${n%:*}"
	    TSM_SERVER="${t##*:}"
    esac
done

if [ -z "$TSM_SERVER" ] ; then
    echo "ERROR: No tsm_server nodes in this cluster!"
    exit 1
fi

################################

mmgetstate | grep active > /dev/null || {
    echo "GPFS must be running to setup TSM client"
    exit 1
}

################################
# wait for GPFS to become active
gpfs_wait_active() {
    echo "Waiting for gpfs to become active"
    while ! mmgetstate | grep active > /dev/null; do 
	echo -n "."; 
	sleep 1; 
    done
    echo
}

########################
# wait for GPFS to mount
gpfs_wait_mount() {
    gpfs_wait_active
    echo "Waiting for gpfs to mount (can take a while)"
    while ! mount | grep /dev/gpfs0 > /dev/null; do 
	sleep 2; 
	mmmount gpfs0 -a 2> /dev/null || true
    done
}


######################################
# run the given command on all of the $TSM_CLIENTS 
run_on_client_nodes() {
    onnode -n -qp "$TSM_CLIENTS" "$@"
}

# install the SoFS toolset first so that gpfsready is put into place
# and the HSM packages will not touch it any more
run_on_client_nodes yum -y install sofs-toolset
run_on_client_nodes yum -y install TIVsm-BA TIVsm-HSM TIVsm-API expect

echo "Setting up dsm.sys"
cat <<EOF > /opt/tivoli/tsm/client/ba/bin/dsm.sys
SErvername  $TSM_SERVER
    COMMMethod         TCPip
    TCPPort            1500
    TCPServeraddress   $TSM_SERVER
    PASSWORDACCESS     generate
    EXCLUDE.DIR        /.../.snapshots
    EXCLUDE            /.../.snapshots/*
    EXCLUDE.DIR        /.../.SpaceMan
    EXCLUDE            /.../.SpaceMan/*
    EXCLUDE.DIR        /.../.ctdb
    EXCLUDE            /.../.ctdb/*
    ERRORLOGName       /var/log/dsmerror.log
    ASNODENAME         @@TSMNAME@@
EOF
run_on_client_nodes rsync $HOSTNAME:/opt/tivoli/tsm/client/ba/bin/dsm.sys /opt/tivoli/tsm/client/ba/bin

echo "Setting up dsm.opt"
cat <<EOF > /opt/tivoli/tsm/client/ba/bin/dsm.opt
servername $TSM_SERVER
dateformat 2
EOF
run_on_client_nodes rsync $HOSTNAME:/opt/tivoli/tsm/client/ba/bin/dsm.opt /opt/tivoli/tsm/client/ba/bin

run_on_client_nodes "preprpnode `hostname -s`"
mkrpdomain -F /etc/ctdb/nodes SoFS

echo "Setting TSM password"
cat <<EOF > /tmp/tsmpwd
spawn dsmsetpw
expect "enter password"
send "admin
"
sleep 2
EOF
run_on_client_nodes "rsync $HOSTNAME:/tmp/tsmpwd /tmp/; expect /tmp/tsmpwd"
run_on_client_nodes rm -f /tmp/tsmpwd

# we have to use a rather torturous procedure ...
echo "Killing ctdb"
run_on_client_nodes killall ctdbd || true

echo "temporarily disabling automount of gpfs0"
mmchfs gpfs0 -A no

echo "Shutting down gpfs"
mmshutdown -a

echo "Starting up gpfs again"
mmstartup -a

gpfs_wait_active

echo "Enabling DMAPI in gpfs"
mmchfs gpfs0 -z yes

echo "Enabling LOWSPACE events in GPFS"
mmchconfig enableLowspaceEvents=yes

echo "enabling automount of gpfs0"
mmchfs gpfs0 -A yes

echo "Restarting GPFS"
mmshutdown -a
mmstartup -a

gpfs_wait_mount

echo "Adding space management to /gpfs"
dsmmigfs add /gpfs -LT=100 -HT=100

echo "Enabling failover"
run_on_client_nodes dsmmigfs ENABLEFailover

echo "Restarting gpfs"
mmshutdown -a
mmstartup -a

gpfs_wait_mount

cat <<EOF
TSM client setup complete on $TSM_CLIENTS
You should reboot the nodes before using HSM
EOF