Add missing requires to chromedriver module
[pixelated-user-agent.git] / install-pixelated.sh
1 #!/bin/bash
2 #
3 # Copyright (c) 2014 ThoughtWorks, Inc.
4 #
5 # Pixelated is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
9 #
10 # Pixelated is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU Affero General Public License for more details.
14 #
15 # You should have received a copy of the GNU Affero General Public License
16 # along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
17
18 # test dependencies
19
20 set -e
21 export NODE_PATH='/home/vagrant/boxed_node_modules/node_modules/'
22
23 if [ ! $USERNAME ]
24 then
25   export USERNAME=`whoami`
26 fi
27
28 usage() { echo "Usage: $0 [-v <virtualenv path>] [-n <custom node modules directory>]" 1>&2; exit 1; }
29
30 VIRTUALENV_PATH=".virtualenv"
31 CUSTOM_NODE_MODULES_LOCATION=""
32 while getopts "n:v:" OPT; do
33     case "${OPT}" in
34         v)
35             VIRTUALENV_PATH=${OPTARG}
36             ;;
37         n) # custom node_modules installation
38             CUSTOM_NODE_MODULES_LOCATION=${OPTARG}
39             ;;
40         *)
41             usage
42             ;;
43     esac
44 done
45 shift $((OPTIND-1))
46
47 function check_installed() {
48         set +e
49         which $1
50         if [ $? -ne 0 ]; then
51                 echo "## You must have ${1} installed and in the PATH to run Pixelated-User-Agent"
52                 echo "## Check our wiki for more information on dependencies:"
53                 echo "## https://github.com/pixelated-project/pixelated-user-agent/wiki/Installing-dependencies"
54                 echo "## exiting..."
55                 exit 1
56         fi
57         set -e
58 }
59
60
61 # The below is necessary to allow node to use enough memory
62 # so that installing phantomjs won't fail
63 mkdir -p /home/vagrant/bin
64 cat > /home/vagrant/bin/node <<EOF
65 #!/usr/bin/env bash
66
67 /usr/bin/node --max_old_space_size=2000 "\$@"
68 EOF
69 chmod +x /home/vagrant/bin/node
70 export PATH=/home/vagrant/bin:$PATH
71
72
73 function install_node_modules_at_custom_location() {
74   local LOCATION="$1"
75   local WEBUI_DIR=$(pwd)
76
77   if [ -e "$WEBUI_DIR/node_modules" ] ; then
78     echo "It seems there is already a node_modules folder" 1>&2
79     return
80   fi
81
82   if [ ! -e "$LOCATION" ] ; then
83     mkdir "$LOCATION"
84     pushd "$LOCATION"
85
86     ln -s "$WEBUI_DIR/package.json" package.json
87     npm install
88
89     popd
90   fi
91
92   if [ ! -h "node_modules" ] ; then
93     rm -Rf "node_modules"
94     ln -s "$LOCATION/node_modules" node_modules
95   fi
96 }
97
98 for dependency in node npm ruby virtualenv git gpg compass; do
99         check_installed $dependency
100 done
101
102 # install web-ui dependencies
103 cd web-ui
104 UIPATH=`pwd`
105
106 if [ -z "$CUSTOM_NODE_MODULES_LOCATION" ] ; then
107   npm install
108 else
109   install_node_modules_at_custom_location "$CUSTOM_NODE_MODULES_LOCATION"
110 fi
111
112 node_modules/bower/bin/bower -V install --config.interactive=false --allow-root
113 LC_ALL=en_US.UTF-8 ./go build
114
115 # install service dependencies
116 cd ..
117 rm -rf "$VIRTUALENV_PATH"
118 virtualenv "$VIRTUALENV_PATH"
119 source "$VIRTUALENV_PATH/bin/activate"
120 # they can't be on the same command because it breaks pip upgrade
121 pip install --upgrade pip
122 pip install --upgrade setuptools
123 make setup
124 pip uninstall -y enum34 && pip install enum34
125 pip uninstall -y pysqlcipher && pip install pysqlcipher # this is needed so pysqlcipher gets recompiled with the right version of glibc
126
127 # print usage
128 cat <<EOF
129
130 ###############
131
132 ## You will need an account in a LEAP provider with mail support.
133 ## Once you are done, activate your virtual environment by running:
134 ## source $VIRTUALENV_PATH/bin/activate
135
136 ## The User agent will be available on http://localhost:3333 after running:
137 ##     pixelated-user-agent
138
139 EOF