-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathbluedata_install.sh
More file actions
executable file
·434 lines (332 loc) · 16.4 KB
/
Copy pathbluedata_install.sh
File metadata and controls
executable file
·434 lines (332 loc) · 16.4 KB
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
#!/usr/bin/env bash
set -e # abort on error
set -u # abort on undefined variable
set -o pipefail
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source "$SCRIPT_DIR/variables.sh"
source "$SCRIPT_DIR/functions.sh"
if [[ "${EPIC_DL_URL_NEEDS_PRESIGN}" == "True" ]]
then
#echo "Presigning EPIC_DL_URL"
EPIC_DL_URL="$(aws s3 presign ${EPIC_DL_URL_PRESIGN_OPTIONS} ${EPIC_DL_URL})"
#echo ${EPIC_DL_URL}
fi
echo PROJECT_DIR="${PROJECT_DIR}"
echo LOCAL_SSH_PUB_KEY_PATH=${LOCAL_SSH_PUB_KEY_PATH}
echo LOCAL_SSH_PRV_KEY_PATH=${LOCAL_SSH_PRV_KEY_PATH}
echo CREATE_EIP_CONTROLLER=${CREATE_EIP_CONTROLLER}
echo CREATE_EIP_GATEWAY=${CREATE_EIP_GATEWAY}
echo EPIC_DL_URL=$EPIC_DL_URL
echo EPIC_FILENAME=$EPIC_FILENAME
echo EPIC_DL_URL_NEEDS_PRESIGN=$EPIC_DL_URL_NEEDS_PRESIGN
echo SELINUX_DISABLED=$SELINUX_DISABLED
echo CTRL_PRV_IP=$CTRL_PRV_IP
echo CTRL_PUB_IP=$CTRL_PUB_IP
echo CTRL_PRV_DNS=$CTRL_PRV_DNS
echo CTRL_PUB_DNS=$CTRL_PUB_DNS
echo CTRL_PUB_HOST=$CTRL_PUB_HOST
echo CTRL_PRV_HOST=$CTRL_PRV_HOST
echo GATW_PRV_IP=$GATW_PRV_IP
echo GATW_PUB_IP=$GATW_PUB_IP
echo GATW_PRV_DNS=$GATW_PRV_DNS
echo GATW_PUB_DNS=$GATW_PUB_DNS
echo GATW_PUB_HOST=$GATW_PUB_HOST
echo GATW_PRV_HOST=$GATW_PRV_HOST
set +u
echo WRKR_PRV_IPS=${WRKR_PRV_IPS[@]}
echo WRKR_PUB_IPS=${WRKR_PUB_IPS[@]}
set -u
echo INSTALL_WITH_SSL=${INSTALL_WITH_SSL}
###############################################################################
# Test SSH connectivity to EC2 instances from local machine
###############################################################################
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} 'echo CONTROLLER: $(hostname)'
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${GATW_PUB_IP} 'echo GATEWAY: $(hostname)'
for WRKR in ${WRKR_PUB_IPS[@]}; do
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} 'echo WORKER: $(hostname)'
done
###############################################################################
# Setup SSH keys for passwordless SSH
###############################################################################
cat generated/controller.prv_key | \
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "cat > ~/.ssh/id_rsa"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "chmod 600 ~/.ssh/id_rsa"
cat generated/controller.pub_key | \
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "cat > ~/.ssh/id_rsa.pub"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "chmod 600 ~/.ssh/id_rsa.pub"
# if ssh key doesn't exist on controller EC instance then create one
# ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} << ENDSSH
# if [ -f ~/.ssh/id_rsa ]
# then
# echo CONTROLLER: Found existing ~/.ssh/id.rsa so moving on...
# else
# ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
# echo CONTROLLER: Created ~/.ssh/id_rsa
# fi
# # BlueData controller installer requires this - TODO only add if it doesn't already exist
# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# ENDSSH
#
# Controller -> Gateway
#
# We have password SSH access from our local machines to EC2, so we can utiise this to copy the Controller SSH key to the Gateway
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "cat /home/centos/.ssh/id_rsa.pub" | \
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${GATW_PUB_IP} "cat >> /home/centos/.ssh/authorized_keys"
# test passwordless SSH connection from Controller to Gateway
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} << ENDSSH
echo CONTROLLER: Connecting to GATEWAY ${GATW_PRV_IP}...
ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa -T centos@${GATW_PRV_IP} "echo Connected!"
ENDSSH
#
# Controller -> Workers
#
# We have password SSH access from our local machines to EC2, so we can utiise this to copy the Controller SSH key to each Worker
set +u
for WRKR in ${WRKR_PUB_IPS[@]}; do
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "cat /home/centos/.ssh/id_rsa.pub" | \
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "cat >> /home/centos/.ssh/authorized_keys"
done
# test passwordless SSH connection from Controller to Workers
for WRKR in ${WRKR_PRV_IPS[@]}; do
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} << ENDSSH
echo CONTROLLER: Connecting to WORKER ${WRKR}...
ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa -T centos@${WRKR} "echo Connected!"
ENDSSH
done
set -u
###############################################################################
# Install RPMS
###############################################################################
#
# Gateway
#
{
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${GATW_PUB_IP} "sudo yum update -y -q"
# if the reboot causes ssh to terminate with an error, ignore it
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${GATW_PUB_IP} "nohup sudo reboot </dev/null &" || true
} &
#
# Controller
#
{
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "sudo yum update -y -q"
# FIXME: Hack to allow HPE CP httpd service to use minica key and cert
echo 'Disabling SELINUX on the Controller host'
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "sudo sed -i --follow-symlinks 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux"
# if the reboot causes ssh to terminate with an error, ignore it
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "nohup sudo reboot </dev/null &" || true
} &
#
# Workers
#
set +u
for WRKR in ${WRKR_PUB_IPS[@]}; do
{
if [[ "$SELINUX_DISABLED" == "True" ]];
then
echo "Disabling SELINUX on the worker host $WRKR"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo sed -i --follow-symlinks 's/^SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux"
fi
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} <<EOF
sudo su -
cat << ENDCAT > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
ENDCAT
EOF
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo yum update -y -q"
# install falco
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo yum-config-manager --enable repository cr"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo rpm --import https://falco.org/repo/falcosecurity-3672BA8F.asc"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo curl -s -o /etc/yum.repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo yum -y install --enablerepo=extras epel-release"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo yum -y install --enablerepo=epel dkms"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo yum update -y -q"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo yum -y install kernel*"
# if the reboot causes ssh to terminate with an error, ignore it
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "nohup sudo reboot </dev/null &" || true
} &
done
set -u
#
# Wait for Gateway, Controller and Workers to come online after reboot
#
wait # for processing above installations to finish
echo 'Waiting for Gateway ssh session '
while ! nc -w5 -z ${GATW_PUB_IP} 22; do printf "." -n ; done;
echo 'Gateway has rebooted'
echo 'Waiting for Controller ssh session '
while ! nc -w5 -z ${CTRL_PUB_IP} 22; do printf "." -n ; done;
echo 'Controller has rebooted'
set +u
for WRKR in ${WRKR_PUB_IPS[@]}; do
echo "Waiting for Worker ${WRKR} ssh session"
while ! nc -w5 -z ${WRKR} 22; do printf "." -n ; done;
echo 'Worker has rebooted'
done
set -u
set +u
for WRKR in ${WRKR_PUB_IPS[@]}; do
{
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo yum -y install falco"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo systemctl enable falco"
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${WRKR} "sudo systemctl start falco"
} &
done
wait # for processing above installations to finish
###############################################################################
# Install Controller
###############################################################################
if [[ "${CREATE_EIP_GATEWAY}" == "True" ]];
then
CONFIG_GATEWAY_DNS=$GATW_PUB_DNS
else
CONFIG_GATEWAY_DNS=$GATW_PRV_DNS
fi
# if [[ "${CREATE_EIP_CONTROLLER}" == "True" ]];
# then
# CONFIG_CONTROLLER_IP=$CTRL_PUB_IP
# else
CONFIG_CONTROLLER_IP=$CTRL_PRV_IP
# fi
cat generated/ca-cert.pem | ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "cat > ~/minica.pem"
cat generated/ca-key.pem | ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "cat > ~/minica-key.pem"
echo "SSHing into Controller ${CTRL_PUB_IP}"
retry ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} << ENDSSH
set -eu
sudo yum install -y -q wget
# manually install epel due to https://stackoverflow.com/questions/62359639/unable-to-install-packages-via-yum-in-aws-errno-1-repomd-xml-does-not-match
wget -c https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install -y -q epel-release-latest-7.noarch.rpm || echo "Ignoring error installing epel"
if [[ -e /home/centos/bd_installed ]]
then
echo BlueData already installed - quitting
exit 0
fi
set -e # abort on error
sudo yum -y -q install git wget
wget -c --progress=bar -e dotbytes=1M https://dl.google.com/go/go1.13.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.13.linux-amd64.tar.gz
if [[ ! -d minica ]];
then
git clone https://github.com/jsha/minica.git
cd minica/
/usr/local/go/bin/go build
sudo mv minica /usr/local/bin
fi
# FIXME: Currently this requires SELINUX to be disabled so apache httpd can read the certs
rm -rf /home/centos/${CTRL_PUB_DNS}
cd /home/centos
minica -domains "$CTRL_PUB_DNS,$CTRL_PRV_DNS,$GATW_PUB_DNS,$GATW_PRV_DNS,$CTRL_PUB_HOST,$CTRL_PRV_HOST,$GATW_PUB_HOST,$GATW_PRV_HOST,localhost" \
-ip-addresses "$CTRL_PUB_IP,$CTRL_PRV_IP,$GATW_PUB_IP,$GATW_PRV_IP,127.0.0.1"
# output the ssl details for debugging purposes
openssl x509 -in /home/centos/${CTRL_PUB_DNS}/cert.pem -text
echo "Downloading ${EPIC_DL_URL} to ${EPIC_FILENAME}"
wget -c --progress=bar -e dotbytes=10M -O ${EPIC_FILENAME} "${EPIC_DL_URL}"
chmod +x ${EPIC_FILENAME}
echo "Running EPIC install"
# install EPIC (Note: minica puts the cert and key in a folder named after the first DNS domain)
if [[ "${INSTALL_WITH_SSL}" == "True" ]]; then
./${EPIC_FILENAME} ${EPIC_OPTIONS} --ssl-cert /home/centos/${CTRL_PUB_DNS}/cert.pem --ssl-priv-key /home/centos/${CTRL_PUB_DNS}/key.pem
else
./${EPIC_FILENAME} ${EPIC_OPTIONS}
fi
ENDSSH
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} << ENDSSH
set -e
sudo bash -c "cat >/etc/profile.d/local_python.sh" <<'EOF'
#!/bin/bash
PYTHONPATH=\$PYTHONPATH:/opt/bluedata/ezpylib/
export PYTHONPATH
EOF
ENDSSH
retry ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} << ENDSSH
set -e
set -u
# do initial configuration
KERB_OPTION="-k no"
if [[ "$EMBEDDED_DF" == "True" ]]; then
LOCAL_TENANT_STORAGE=""
else
LOCAL_TENANT_STORAGE="--no-local-tenant-storage"
fi
LOCAL_FS_TYPE=""
WORKER_LIST=""
CLUSTER_IP=""
HA_OPTION=""
PROXY_LIST=""
FLOATING_IP="--routable no"
DOMAIN_NAME="demo.bdlocal"
CONTROLLER_IP="-c ${CONFIG_CONTROLLER_IP}"
CUSTOM_INSTALL_NAME="--cin demo-hpecp"
echo "*************************************************************************************"
echo "The next step can take 10 mins or more to run without any output - please be patient."
echo "*************************************************************************************"
#
# WARNING: This script is an internal API and is not supported being used directly by users
#
/opt/bluedata/common-install/scripts/start_install.py \$CONTROLLER_IP \
\$WORKER_LIST \$PROXY_LIST \$KERB_OPTION \$HA_OPTION \
\$FLOATING_IP -t 60 -s docker -d \$DOMAIN_NAME \$CUSTOM_INSTALL_NAME \$LOCAL_TENANT_STORAGE
ENDSSH
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} << ENDSSH
set -eu
# install application workbench
sudo yum install -y -q epel-release
sudo yum install -y -q python-pip
# sudo pip install --upgrade pip
# sudo pip install --upgrade setuptools
# sudo pip install --upgrade bdworkbench
touch /home/centos/bd_installed
ENDSSH
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "cat ~/${CTRL_PUB_DNS}/cert.pem" > generated/cert.pem
ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T centos@${CTRL_PUB_IP} "cat ~/${CTRL_PUB_DNS}/key.pem" > generated/key.pem
###############################################################################
# Manually configure Controller with Workers and Gateway
###############################################################################
# retrive controller ssh private key and save it locally
#ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" centos@${CTRL_PUB_IP} 'cat ~/.ssh/id_rsa' > generated/controller.prv_key
#ssh -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" centos@${CTRL_PUB_IP} 'cat ~/.ssh/id_rsa.pub' > generated/controller.pub_key
set +u
cat <<EOF>"$LOG_FILE"
*********************************************************
* BlueData installation completed successfully *
*********************************************************
SSH Private key has been downloaded to:
"${PROJECT_DIR}/generated/controller.prv_key" (or "Desktop/controller.prv_key" on RDP environments)
** PLEASE KEEP IT SECURE **
*********************************************************
INSTRUCTIONS for completing the BlueData installation ...
If you have configured an RDP server in etc/bluedata_infra.tfvars, you will
0. In your browser, navigate to the Controller URL: https://${CONFIG_CONTROLLER_IP}"
1. At the setup screen, click 'Submit'
2. At the login screen, use 'admin/admin123'
3. Naviate to Settings -> License:
1. Request a license from your BlueData sales engineer contact
2. Upload the license
4. Navigate to Installation tab:
1. Add workers private ips "$(echo ${WRKR_PRV_IPS[@]} | sed -e 's/ /,/g')"
2. Add gateway private ip "${GATW_PRV_IP}" and public dns "${CONFIG_GATEWAY_DNS}"
3. Upload "${PROJECT_DIR}/generated/controller.prv_key" (or "Desktop/controller.prv_key" on RDP environments)
4. Click Add hosts (enter site lock down when prompted)
# After a few minutes, you should see Gateway 'Installed' and Workers 'Bundle completed'
5. Select each Worker
6. Click 'Install'
7. Wait a few minutes
** These instructions have been saved to "${LOG_FILE}" **
EOF
if [[ "$RDP_SERVER_ENABLED" == True && "$RDP_SERVER_OPERATING_SYSTEM" == "LINUX" ]]; then
echo "*****************************************************************"
echo "BlueData installation completed successfully with an RDP server"
echo "Please run ./bin/rdp_credentials.sh for connection details."
echo "*****************************************************************"
cat "$LOG_FILE" | \
ssh -q -o StrictHostKeyChecking=no -i "${LOCAL_SSH_PRV_KEY_PATH}" -T ubuntu@${RDP_PUB_IP} "cat > ~/Desktop/HCP_INSTALL_INFO.txt"
else
cat "$LOG_FILE"
fi