4c6142a27d2c430ddfd3adb74329a3a15d1f0214
[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 function install_node_modules_at_custom_location() {
61   local LOCATION="$1"
62   local WEBUI_DIR=$(pwd)
63
64   if [ -e "$WEBUI_DIR/node_modules" ] ; then
65     echo "It seems there is already a node_modules folder" 1>&2
66     return
67   fi
68
69   if [ ! -e "$LOCATION" ] ; then
70     mkdir "$LOCATION"
71     pushd "$LOCATION"
72
73     ln -s "$WEBUI_DIR/package.json" package.json
74     npm install
75
76     popd
77   fi
78
79   if [ ! -h "node_modules" ] ; then
80     rm -Rf "node_modules"
81     ln -s "$LOCATION/node_modules" node_modules
82   fi
83 }
84
85 for dependency in node npm ruby virtualenv git gpg compass; do
86         check_installed $dependency
87 done
88
89 # install web-ui dependencies
90 cd web-ui
91 UIPATH=`pwd`
92
93 if [ -z "$CUSTOM_NODE_MODULES_LOCATION" ] ; then
94   npm install
95 else
96   install_node_modules_at_custom_location "$CUSTOM_NODE_MODULES_LOCATION"
97 fi
98
99 node_modules/bower/bin/bower -V install --config.interactive=false --allow-root
100 LC_ALL=en_US.UTF-8 ./go build
101
102 # install service dependencies
103 cd ../service
104 rm -rf "$VIRTUALENV_PATH"
105 virtualenv "$VIRTUALENV_PATH"
106 source "$VIRTUALENV_PATH/bin/activate"
107 # they can't be on the same command because it breaks pip upgrade
108 pip install --upgrade pip
109 pip install --upgrade setuptools
110 ./go setup --always-unzip
111 pip uninstall -y enum34 && pip install enum34
112 pip uninstall -y pysqlcipher && pip install pysqlcipher # this is needed so pysqlcipher gets recompiled with the right version of glibc
113
114 # print usage
115 cat <<EOF
116
117 ###############
118
119 ## You will need an account in a LEAP provider with mail support. You can request an invite code for
120 ## https://dev.pixelated-project.org, please refer to point 4) in the [Getting started guide](https://github.com/pixelated/pixelated-user-agent#getting-started).
121
122 ## Once you are done, activate your virtual environment by running:
123 ## source $VIRTUALENV_PATH/bin/activate
124
125 ## The User agent will be available on http://localhost:3333 after running:
126 ##     pixelated-user-agent
127
128 EOF