| #!/usr/bin/env bash |
| |
| BASE_DIR=$(pwd) |
| |
| # Specify where the frontend repo is located |
| FRONTEND_LOCATION=${FRONTEND_LOCATION:-$1} |
| |
| INSTALL_TYPE=${INSTALL_TYPE:-"common"} |
| |
| function install_dependencies { |
| echo "Install needed packages" |
| |
| # Update packages cache |
| sudo apt-get update |
| |
| # Install needed packages |
| sudo apt-get install python-dev python-pip libffi-dev git cmake |
| |
| # Install the required packages |
| VIRTUALENV=$(python -c 'import sys; print hasattr(sys, "real_prefix")' 2>/dev/null) |
| if [[ $VIRTUALENV == "True" ]] |
| then |
| # If in virtualenv use the local provided pip |
| # We assume that activation script is used and pip as command points to virtualenv pip |
| pip install -r "requirements/$INSTALL_TYPE.txt" |
| else |
| # If we are not in virtualenv we just install global |
| sudo pip install -r "requirements/$INSTALL_TYPE.txt" |
| fi |
| } |
| |
| function get_crypto { |
| echo "Get Milagro Crypto Libraries" |
| mkdir -p install |
| cd install || exit |
| git clone https://github.com/miracl/milagro-crypto.git |
| |
| cd milagro-crypto || exit |
| } |
| |
| function build_crypto { |
| echo "Build Milagro crypto library" |
| |
| mkdir Release |
| cd Release || exit |
| cmake .. |
| make |
| make test |
| sudo make install |
| } |
| |
| function get_credentials { |
| cd "$BASE_DIR" || exit |
| python scripts/getCommunityCredentials.py . |
| } |
| |
| function build_frontend { |
| echo "build frontend js" |
| |
| # Go to frontend code location |
| cd "$FRONTEND_LOCATION" || exit |
| # run frontend build script |
| ./build.sh |
| |
| # Create the needed directory and link the frontend |
| cd "$BASE_DIR/servers/demo/public/" || exit |
| |
| ln -sf "$FRONTEND_LOCATION/build/out/browser" mpin |
| } |
| |
| function get_dependencies { |
| install_dependencies |
| |
| get_crypto |
| |
| build_crypto |
| |
| get_credentials |
| |
| } |
| |
| # Configure services |
| |
| function configure_dta { |
| echo "Configure DTA" |
| |
| cd "$BASE_DIR/servers/dta" || exit |
| |
| CONFIGURE=1 |
| if [ -f config.py ] |
| then |
| echo "NOTE: Config file for DTA already exist" |
| read -p "Do you want to override it (y/n)?" choice |
| case "$choice" in |
| y|Y ) echo "yes"; CONFIGURE=1;; |
| n|N ) echo "no"; CONFIGURE=0;; |
| * ) echo "invalid";; |
| esac |
| fi |
| |
| if [ $CONFIGURE == 1 ] |
| then |
| cp config_default.py config.py |
| CONFIG_FILE=$(pwd)/config.py |
| SALT=$(python -c "import os; print os.urandom(8).encode('hex')") |
| PASSPHRASE=$(python -c "import os; print os.urandom(8).encode('hex')") |
| |
| CREDENTIALSFILE="$BASE_DIR/credentials.json" |
| BACKUP_FILE="$BASE_DIR/backup_dta.json" |
| rm -f "$BASE_DIR/backup_dta.json" |
| |
| sed -i "s/\(%SALT%\)/$SALT/" "$CONFIG_FILE" |
| sed -i "s/\(%PASSPHRASE%\)/$PASSPHRASE/" "$CONFIG_FILE" |
| sed -i "s#\(%CREDENTIALSFILE%\)#$CREDENTIALSFILE#" "$CONFIG_FILE" |
| sed -i "s#\(%BACKUP_FILE%\)#$BACKUP_FILE#" "$CONFIG_FILE" |
| fi |
| } |
| |
| function configure_rps { |
| echo "Configure RPS" |
| |
| cd "$BASE_DIR/servers/rps" || exit |
| |
| CONFIGURE=1 |
| if [ -f config.py ] |
| then |
| echo "NOTE: Config file for RPS already exist" |
| read -p "Do you want to override it (y/n)?" choice |
| case "$choice" in |
| y|Y ) echo "yes"; CONFIGURE=1;; |
| n|N ) echo "no"; CONFIGURE=0;; |
| * ) echo "invalid";; |
| esac |
| fi |
| |
| if [ $CONFIGURE == 1 ] |
| then |
| cp config_default.py config.py |
| |
| CONFIG_FILE=$(pwd)/config.py |
| CREDENTIALSFILE="$BASE_DIR/credentials.json" |
| |
| sed -i "s#\(%CREDENTIALSFILE%\)#$CREDENTIALSFILE#" "$CONFIG_FILE" |
| fi |
| } |
| |
| function configure_demo { |
| echo "Configure Demo RPA" |
| |
| cd "$BASE_DIR/servers/demo" || exit |
| |
| CONFIGURE=1 |
| if [ -f config.py ] |
| then |
| echo "NOTE: Config file for DEMO RPA already exist" |
| read -p "Do you want to override it (y/n)?" choice |
| case "$choice" in |
| y|Y ) echo "yes"; CONFIGURE=1;; |
| n|N ) echo "no"; CONFIGURE=0;; |
| * ) echo "invalid";; |
| esac |
| fi |
| |
| if [ $CONFIGURE == 1 ] |
| then |
| cp config_default.py config.py |
| |
| CONFIG_FILE=$(pwd)/config.py |
| # We need to remove new line, sed does not like it |
| COOKIESECRET=$(python -c "import os; print os.urandom(64).encode('base64').replace(\"\n\", '')") |
| |
| sed -i "s#\(%COOKIESECRET%\)#$COOKIESECRET#" "$CONFIG_FILE" |
| |
| if [ "$FRONTEND_LOCATION" ] |
| then |
| build_frontend |
| |
| # mpin.js can be downloaded or copied/linked from localy build milagro-js-client |
| MPINJSURL="/public/mpin/mpin.js" |
| sed -i "s#\(%MPINJSURL%\)#$MPINJSURL#" "$CONFIG_FILE" |
| else |
| echo $'\n' |
| echo "NOTE: No location for the frontend provided you will need to configure %MPINJSURL% yourself" |
| fi; |
| fi |
| } |
| |
| function run_instructions { |
| echo " |
| For development purposes you might run the services from command line. |
| Open 3 terminals and set the following two environment variables as shown below: |
| |
| export PYTHONPATH=<mpin-backend>/lib:/usr/local/lib/python2.7/site-packages |
| export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:/usr/local/lib |
| To run the services, perform the following commands, each in separate terminal: |
| |
| > python servers/dta/dta.py |
| > python servers/rps/rps.py |
| > python servers/demo/mpinDemo.py |
| For more automated execution, you might need to write start/stop scripts in /etc/init.d |
| " |
| } |
| |
| function configure_services { |
| echo "Configure the services" |
| |
| configure_dta |
| |
| configure_rps |
| |
| configure_demo |
| |
| run_instructions |
| } |
| |
| get_dependencies |
| |
| configure_services |