-
Notifications
You must be signed in to change notification settings - Fork 0
/
install_server_deps.py
87 lines (63 loc) · 3.33 KB
/
install_server_deps.py
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
"""
Author: Gerard Schroder
Study: Computer Science at the University of Amsterdam
Date: 08-06-2016
Install the server dependencies to get e.g. docker running.
FILE: install_server_deps.py
USAGE:
python install_server_deps.py <host> -port port -user user -password password
where port, user and password are optional.
"""
import argparse
from src import server_conn
def install_docker(ssh, db_type):
print "=== START Installing prerequisites packages for docker ==="
print "Installing transport certificates"
ssh.execute_cmd("apt-get -y --force-yes install apt-transport-https ca-certificates", sudo=True)
print "Installing curl.."
ssh.execute_cmd("apt-get -y --force-yes install curl", sudo=True)
print "=== END installing prerequisites for docker ==="
# Check if docker is already installed..
res = ssh.execute_cmd("docker", sudo=True)
if 'sudo: docker: command not found' in res[0]: # Check stderr to see if the command exists.
print "Installing docker.. (this may take a while)"
ssh.execute_cmd("curl -fsSL https://get.docker.com/ | sh", sudo=True)
if db_type == "cassandra":
ssh.execute_cmd("docker pull cassandra", sudo=True)
def install_python_deps(ssh, db_type):
print "=== START Installing python dependencies ==="
ssh.execute_cmd("apt-get -y --force-yes install python-pip", sudo=True)
if db_type == "cassandra":
ssh.execute_cmd("apt-get -y --force-yes install build-essential python-dev", sudo=True)
ssh.execute_cmd("apt-get -y --force-yes install libffi6 libffi-dev", sudo=True)
# The cassandra package is slow with installing, and does not check if it is
# already installed. So use a small file which checks a import error.
ssh.transfer_file("check_cassandra.py")
(res1, res2) = ssh.execute_cmd("python check_cassandra.py")
if res1.strip() != 'OK':
print "Installing cassandra-driver (This may take a while...)"
ssh.execute_cmd("pip install cassandra-driver")
ssh.execute_cmd("rm check_cassandra.py")
print "=== END Installing python dependencies ==="
def install_dependencies(ssh, db_type=None):
print "=== Installing dependencies ==="
install_docker(ssh, db_type)
install_python_deps(ssh, db_type)
print "=== Finished installing dependencies ==="
if __name__ == '__main__':
description = "Install the server dependencies to run the framework. " +\
"A ssh connection is setup given the command line arguments. " +\
"The installation procedure will follow automatically."
parser = argparse.ArgumentParser(description=description)
parser.add_argument("host", type=str, help="given host address for ssh connection.")
parser.add_argument("-port", type=int, help="given port to connect with")
parser.add_argument("-user", type=str, help="user name to connect with ")
parser.add_argument("-password", type=str, help="password to connect with")
args = parser.parse_args()
# Set values for optional args.
port = 22 if 'port' not in args else args.port
user = None if 'user' not in args else args.user
password = None if 'password' not in args else args.password
# Communication
server_ssh = server_conn.SSHConnection(args.host, port=port, user=user, password=password)
install_dependencies(server_ssh)