This is an automated email from the ASF dual-hosted git repository. kmccusker pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-milagro-mfa-server.git
commit 22661f988979e96050308dd6c300766748519825 Author: Pavlin Angelov <[email protected]> AuthorDate: Mon May 9 12:49:42 2016 +0300 Create install script for the Milagro MFA project A install.sh that can be run on compatable machine (Ubuntu 14.04+ at the moment) Update the README.md to describe what the script do and how to be used --- .gitignore | 2 + README.md | 40 ++++++++++- install.sh | 219 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 259 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 68d56e7..812f591 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,7 @@ backup_dta.json config.py coverage.xml credentials.json +install M_Pin_Backend.egg-info/ mpin_*_storage.json +servers/demo/public/mpin diff --git a/README.md b/README.md index e18610a..02104c1 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,42 @@ Using standard Git client, clone the code from this repository to a local one. The rest of this document assumes that the repository is cloned into `<mpin-backend>`. Wherever `<mpin-backend>` appears, it should be replaced with the real location on your machine. +### Install with provided script + +`install.sh` bash script is provided to ease the install process. +You can run it from `<mpin-backend>` base directory like this +``` + > ./install.sh +``` +you can provide optional argument to the script <mpin-front-end-location> where this is an absolute path of +the location `https://github.com/miracl/milagro-mfa-js-client` is downloaded. +``` + > ./install.sh <mpin-front-end-location> +``` +If location provided the install script can initiate the frontend build and link the Pin Pad in the Demo, so the demo is fully operational. + +If no location is provided you should change the `mpinJSURL` yourself in demo/config.py. Which may include building the frontend and serve it from some web server. + +The script is tested and should work without any issue on Ubuntu 14.04, +other versions of Ubuntu or Debian based distributions may work but is not guaranteed. + +The script install some dependencies from apt-get as packages: + * python-dev + * python-pip + * libffi-dev + * git ( We use it to get Milagro crypto library) + * cmake ( We use it to build Milagro crypto library) + +Several pip packages would be installed too. They can be reviewed in \`<mpin-backend>/requirements/common.txt` and `<mpin-backend>/requirements/dev.txt` +`INSTALL_TYPE` environment variable is used is control which file is used. You can use “common” or “dev” as values. “common” is used by default +The script try its best to detect virtualenv and install python packages inside one if it is founded. + +The script build the needed Milagro Crypto ( Version 1.0.0 ) + +NOTE: While running the script if config file is already found in dta, rps or demo the user would have the option to override it or keep it as it is + +Review the script for more details. + ### Installing Prerequisites **1** Update your package manager tool @@ -162,11 +198,11 @@ Using the following commands, you can test whether the services are running fine <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> - . . . + . . . </head> <body> </body> - . . . + . . . </html> ``` Finally, open a browser on any machine that has network access to the machine on which the Milagro MFA Services are running. Browse to `http://<mpin-server-ip>:8005`. diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..5f1bc7d --- /dev/null +++ b/install.sh @@ -0,0 +1,219 @@ +#!/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 ]] + 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 + git checkout tags/1.0.0 +} + +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 ] + 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 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 ] + 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 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 ] + 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
