bump debian package version
[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
22 if [ ! $USERNAME ]
23 then
24   export USERNAME=`whoami`
25 fi
26
27 usage() { echo "Usage: $0 [-v <virtualenv path>] [-n <custom node modules directory>]" 1>&2; exit 1; }
28
29 VIRTUALENV_PATH=".virtualenv"
30 CUSTOM_NODE_MODULES_LOCATION=""
31 while getopts "n:v:" OPT; do
32     case "${OPT}" in
33         v)
34             VIRTUALENV_PATH=${OPTARG}
35             ;;
36         n) # custom node_modules installation
37             CUSTOM_NODE_MODULES_LOCATION=${OPTARG}
38             ;;
39         *)
40             usage
41             ;;
42     esac
43 done
44 shift $((OPTIND-1))
45
46 function check_installed() {
47         set +e
48         which $1
49         if [ $? -ne 0 ]; then
50                 echo "## You must have ${1} installed and in the PATH to run Pixelated-User-Agent"
51                 echo "## Check our wiki for more information on dependencies:"
52                 echo "## https://github.com/pixelated-project/pixelated-user-agent/wiki/Installing-dependencies"
53                 echo "## exiting..."
54                 exit 1
55         fi
56         set -e
57 }
58
59 function install_node_modules_at_custom_location() {
60   local LOCATION="$1"
61   local WEBUI_DIR=$(pwd)
62
63   if [ -e "$WEBUI_DIR/node_modules" ] ; then
64     echo "It seems there is already a node_modules folder" 1>&2
65     return
66   fi
67
68   if [ ! -e "$LOCATION" ] ; then
69     mkdir "$LOCATION"
70     pushd "$LOCATION"
71
72     ln -s "$WEBUI_DIR/package.json" package.json
73     npm install
74
75     popd
76   fi
77
78   if [ ! -h "node_modules" ] ; then
79     rm -Rf "node_modules"
80     ln -s "$LOCATION/node_modules" node_modules
81   fi
82 }
83
84 for dependency in node npm ruby virtualenv git gpg compass; do
85         check_installed $dependency
86 done
87
88 # install web-ui dependencies
89 cd web-ui
90 UIPATH=`pwd`
91
92 if [ -z "$CUSTOM_NODE_MODULES_LOCATION" ] ; then
93   npm install
94 else
95   install_node_modules_at_custom_location "$CUSTOM_NODE_MODULES_LOCATION"
96 fi
97
98 node_modules/bower/bin/bower -V install --config.interactive=false --allow-root
99 LC_ALL=en_US.UTF-8 ./go build
100
101 # install service dependencies
102 cd ../service
103 rm -rf "$VIRTUALENV_PATH"
104 virtualenv "$VIRTUALENV_PATH"
105 source "$VIRTUALENV_PATH/bin/activate"
106 # they can't be on the same command because it breaks pip upgrade
107 pip install --upgrade pip
108 pip install --upgrade setuptools
109 ./go setup --always-unzip
110 pip uninstall -y enum34 && pip install enum34
111 pip uninstall -y pysqlcipher && pip install pysqlcipher # this is needed so pysqlcipher gets recompiled with the right version of glibc
112
113 # print usage
114 cat <<EOF
115
116 ###############
117
118 ## You will need an account in a LEAP provider with mail support. You may find some at http://bitmask.net/
119
120 ## You might also need to add your LEAP provider ssl certificate to pixelated manually for now, with the following steps:
121 ## The easiest way to find this is accessing https://your.provider.org/ca.crt
122 ## Rename the certificate based on your provider domain name like this 'your.leapprovider.org.crt'
123 ## Put it in services/pixelated/certificates/
124
125 ## Once you are done, activate your virtual environment by running:
126 ## source $VIRTUALENV_PATH/bin/activate
127
128 ## The User agent will be available on localhost:3333 after running
129 ## pixelated-user-agent
130
131 EOF