Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
bootstrap.sh 36.74 KiB
#! /bin/bash
###########################
# This bootstrap script installs some build tools and the packages
#   neo4j, neo4j-spatial, httpd, postgresql, postgis, pgRouting, osmosis, osm2pgrouting
# into a centos6/fedora19 environment.
# It can be used in the context of a Vagrantfile to configure a vagrant box.
#
# Some data (from the road network of innsbruck) is also downloaded and
# imported into the databases (neo4j and postgresql)
#
# After various installations, the databases, the httpd server, tomcat
# (and therefor also geoserver, which is installed as war file) are started
###########################
# Environment configuration
###########################

if [ -f "/var/vagrant_provision" ]; then
  exit 0
fi

IMPORT_OSMDATA=true
IMPORT_OSMDATA_CACHED=true
IMPORT_SCHEDULES=true
INSTALL_HTTPD=true
INSTALL_GEOSERVER=false
INSTALL_NEO4J=false
INSTALL_NEO4J_SPATIAL=false
INSTALL_PGROUTING=true
INSTALL_POSTGIS=true
INSTALL_POSTGRES=true
INSTALL_POSTGRES_ADMIN=true

# IS_LOCAL_TEST_DEPLOY will prevent install of projects (can be set using command-line argument)
# PsiProbe will always be installed if INSTALL_PROJECT_PSIPROBE is true (even when this is set to true)
IS_LOCAL_TEST_DEPLOY=false
# will install caniget2 sample project
INSTALL_PROJECT_CANIGET2=false
# will install isochrone from vagrant start directory (eclipse project)
INSTALL_ISOCHRONE_LOCAL=false
# will install latest isochrone release from nexus repository
INSTALL_ISOCHRONE_RELEASE=true
# will install latest isochrone snapshot from nexus repository
INSTALL_ISOCHRONE_SNAPSHOT=true
INSTALL_PROJECT_PSIPROBE=true

PG_DB_NAME="isochrone"
PG_DB_USER="@db_username@"
PG_DB_PASSWORD="@db_password@"

if [ ${PG_DB_USER:0:1} == "@" ]; then
	PG_DB_USER=$1
fi
if [ ${PG_DB_PASSWORD:0:1} == "@" ]; then
	PG_DB_PASSWORD=$2
fi

if [ -n "$3" ]; then
	if [ "$3" = "true" ]; then
		IS_LOCAL_TEST_DEPLOY=true
	fi
fi

###########################
# General configuration
###########################

CACHE_DIR_LOCAL=/tmp/vagrant-cache
CACHE_DIR_REMOTE=http://www.krismer.de/files/PhD
DEPLOY_DIR=/opt
DOWNLOAD_DIR=$CACHE_DIR_LOCAL/wget
SHARED_CONF_DIR=/setup/conf
SHARED_IMG_DIR=/setup/img

CMAKE_VERSION=2.8.12.1
CMAKE_VERSION_MAIN=v2.8
CMAKE_FILE=cmake-$CMAKE_VERSION.tar.gz
GEOSERVER_VERSION=2.5.2
GEOSERVER_FILE=geoserver-$GEOSERVER_VERSION-war.zip
GEOSERVER_SHELL_VERSION=0.2-SNAPSHOT
GEOSERVER_SHELL_FILE=gs-shell-$GEOSERVER_SHELL_VERSION-app.zip
JAVA_VERSION=8u5
JAVA_FILE_32=jdk-$JAVA_VERSION-linux-i586.rpm
JAVA_FILE_64=jdk-$JAVA_VERSION-linux-x64.rpm
JAVA_CRYPTO_FILE=jce_policy-8.zip
MAVEN_VERSION=3.2.1
MAVEN_FILE=apache-maven-$MAVEN_VERSION-bin.zip
NEO4J_DB_USER=neo4j
NEO4J_VERSION=2.1.2
NEO4J_FILE=neo4j-community-$NEO4J_VERSION-unix.tar.gz
NEO4J_SERVICE_NAME=neo4j-service
NEO4J_SPATIAL_VERSION=0.13-neo4j-2.0.1
NEXUS_ARTIFACT_NAME=isochrone-web
NEXUS_BASE_URL_DBIS=http://138.232.66.78/nexus
NEXUS_BASE_URL_KRISMER=https://server.krismer.de/nexus
NEXUS_BASE_URL=$NEXUS_BASE_URL_DBIS
NEXUS_PUBLIC_REPO=isochrone
#NEXUS_BASE_URL=$NEXUS_BASE_URL_KRISMER
#NEXUS_PUBLIC_REPO=public
NEXUS_RELEASE_ISOCHRONE=$NEXUS_BASE_URL/service/local/artifact/maven/content?r=$NEXUS_PUBLIC_REPO&g=at.uibk.dbis&a=$NEXUS_ARTIFACT_NAME&v=RELEASE&p=war
#NEXUS_RELEASE_ISOCHRONE=$NEXUS_BASE_URL/service/local/artifact/maven/content?r=$NEXUS_PUBLIC_REPO&g=at.uibk.dbis&a=$NEXUS_ARTIFACT_NAME&v=0.2.2&p=war
NEXUS_RELEASE_CANIGET2=https://server.krismer.de/nexus/service/local/artifact/maven/content?r=public&g=de.krismer&a=CanIGet2&v=0.1&p=war
NEXUS_SNAPSHOT_ISOCHRONE=$NEXUS_BASE_URL/service/local/artifact/maven/content?r=$NEXUS_PUBLIC_REPO&g=at.uibk.dbis&a=$NEXUS_ARTIFACT_NAME&v=LATEST&p=war
NEXUS_YUM_REPO=http://www.krismer.de/files/krismer.repo
#OSM_BBOX_BZ="top=46.5200 left=11.3000 bottom=46.4500 right=11.3873"
#OSM_BBOX_IBK="top=47.3592 left=11.3020 bottom=47.2108 right=11.4554"
OSM_BBOX_BZ="${SHARED_CONF_DIR}/poly_bz.poly"
OSM_BBOX_IBK="${SHARED_CONF_DIR}/poly_ibk.poly"
OSM_BBOX_IT="${SHARED_CONF_DIR}/poly_it.poly"
OSM_BBOX_SF="${SHARED_CONF_DIR}/poly_sf.poly"
OSM_BBOX_ST="${SHARED_CONF_DIR}/poly_st.poly" #also referred to as poly_taa.poly
OSM_FILE_AUSTRIA=europe/austria-140301.osm.pbf
OSM_FILE_ITALY=europe/italy-140301.osm.pbf
OSM_FILE_CALIFORNIA=north-america/us/california-140301.osm.pbf
OSM_FILE_BZ_FILTERED=bozen-140301-filtered.osm
OSM_FILE_IBK_FILTERED=innsbruck-140301-filtered.osm
OSM_FILE_IT_FILTERED=italy-140301-filtered.osm
OSM_FILE_SF_FILTERED=sanfrancisco-140301-filtered.osm
OSM_FILE_ST_FILTERED=southtyrol-140301-filtered.osm
OSM_KEYS="aerialway,highway,public_transport,railway,route"
OSM2PGROUTING_VERSION=v2.0.0
OSM2PGROUTING_MAPPING_CONF=$DEPLOY_DIR/osm2pgrouting/mapconfig.xml
OSMOSIS_VERSION=0.43.1
OSMOSIS_FILE=osmosis-$OSMOSIS_VERSION.zip
POSTGIS_VERSION=2.1.3
POSTGRESQL_DATA_DIR=/var/lib/pgsql/9.3/data
POSTGRESQL_HBA_CONF=$POSTGRESQL_DATA_DIR/pg_hba.conf
POSTGRESQL_PKG_NAME=postgresql93
POSTGRESQL_REPO_RPM_32=http://yum.postgresql.org/9.3/fedora/fedora-20-i386/pgdg-fedora93-9.3-1.noarch.rpm
POSTGRESQL_REPO_RPM_64=http://yum.postgresql.org/9.3/fedora/fedora-20-x86_64/pgdg-fedora93-9.3-1.noarch.rpm
POSTGRESQL_SERVICE_NAME=postgresql-9.3
PGROUTING_VERSION=2.0.0
REPO_BASE_CONFIG=/etc/yum.repos.d/fedora-updates.repo
REPO_RPMFORGE_CONFIG=/etc/yum.repos.d/rpmforge.repo
REPO_RPMFORGE_URL_32=http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
REPO_RPMFORGE_URL_64=http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
TABLE_PREFIX_BZ=bz_
TABLE_PREFIX_IBK=ibk_
TABLE_PREFIX_IT=it_
TABLE_PREFIX_SF=sf_
TABLE_PREFIX_ST=st_
TEMPLATE_VERSION_PSIPROBE=2.3.3
TEMPLATE_FILE_PSIPROBE=probe-$TEMPLATE_VERSION_PSIPROBE.zip
TEMPLATE_DIR_ISOCHRONE=/vagrant
TOMCAT_VERSION=8.0.9
TOMCAT_FILE=apache-tomcat-$TOMCAT_VERSION.tar.gz
TOMCAT_MEMORY_OPTS="-Xmx2048m -Xms512m -XX:MaxPermSize=512m"
TOMCAT_NAME=tomcat
TOMCAT_USER=tomcat
TOPOLOGY_TOLERANCE=0.0005

## Calculated variables
#######################

INSTALL_JAVA=false
INSTALL_MAVEN=false
INSTALL_TOMCAT=false

if $IS_LOCAL_TEST_DEPLOY; then
	INSTALL_PROJECT_CANIGET2=false
	INSTALL_ISOCHRONE_LOCAL=false
	INSTALL_ISOCHRONE_RELEASE=false
	INSTALL_ISOCHRONE_SNAPSHOT=false
fi
if $INSTALL_GEOSERVER || $INSTALL_PROJECT_CANIGET2 || $INSTALL_ISOCHRONE_LOCAL || $INSTALL_ISOCHRONE_RELEASE || $INSTALL_ISOCHRONE_SNAPSHOT || $INSTALL_PROJECT_PSIPROBE; then
	INSTALL_TOMCAT=true
fi
if $INSTALL_NEO4J_SPATIAL; then
	INSTALL_MAVEN=$IMPORT_OSMDATA || $IMPORT_OSMDATA_CACHED
fi
if $INSTALL_TOMCAT || $INSTALL_GEOSERVER || $INSTALL_NEO4J || $INSTALL_NEO4J_SPATIAL || $IMPORT_OSMDATA || $IMPORT_OSMDATA_CACHED; then
	INSTALL_JAVA=true
fi
if $INSTALL_PGROUTING; then
	INSTALL_POSTGIS=true
fi
if $INSTALL_POSTGRES_ADMIN || $INSALL_POSTGIS; then
	INSTALL_POSTGRES=true
fi

DISTRI=$(cat /etc/issue | head -n 1 | cut -d " " -f 1)
if [ $DISTRI == "CentOS" ]; then
	POSTGRESQL_REPO_RPM_32=http://yum.postgresql.org/9.3/redhat/rhel-6-i386/pgdg-centos93-9.3-1.noarch.rpm
	POSTGRESQL_REPO_RPM_64=http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm
	REPO_BASE_CONFIG=/etc/yum.repos.d/CentOS-Base.repo
elif [ $DISTRI != "Fedora" ]; then
	echo "Unsupported OS. Only CentOS and Fedora are supported!"
	exit 1;
fi

IS_64_BIT=false
if [ "x86_64" == $(uname -m) ]; then
	IS_64_BIT=true
fi

if $IS_64_BIT; then
	POSTGRESQL_REPO_RPM=$POSTGRESQL_REPO_RPM_64
	REPO_RPMFORGE_URL=$REPO_RPMFORGE_URL_64
	JAVA_FILE=$JAVA_FILE_64
else
	POSTGRESQL_REPO_RPM=$POSTGRESQL_REPO_RPM_32
	REPO_RPMFORGE_URL=$REPO_RPMFORGE_URL_32
	JAVA_FILE=$JAVA_FILE_32
fi

START=$(date +%s)
TOMCAT_WEBAPP_DIR=$DEPLOY_DIR/$TOMCAT_NAME/webapps
WORKING_DIR=`pwd`

## Functions
############

fn_download()
{
	FILE="$1"
	URL="$2"

	if wget --no-check-certificate -q -O /dev/null "$URL"; then
		wget --no-check-certificate -q -O "$FILE" "$URL"
	fi
}

# "wget -N" does not work with "-O" option... so we use a workaround here
fn_download_newer()
{
	FILE="$1"
	URL="$2"

	if  [ ! -f "$FILE" ]; then
		if wget --no-check-certificate -q -O /dev/null "$URL"; then
			wget --no-check-certificate -q -O "$FILE" "$URL"
		fi
	fi
}

fn_import_data()
{
	NAME="$1"
	OSM_FILE="$2"
	OSM_FILE_FILTERED="$3"
	BOUNDING="$4"
	SCHEDULE_FILE="$5"
	TABLE_PREFIX="$6"

	echo "Importing data for region of $NAME"
	if $IMPORT_OSMDATA_CACHED; then
		echo "  - downloading cached OpenStreetMap file"
		fn_download_newer $DOWNLOAD_DIR/$OSM_FILE_FILTERED $CACHE_DIR_REMOTE/$OSM_FILE_FILTERED
		cp $DOWNLOAD_DIR/$OSM_FILE_FILTERED $DEPLOY_DIR/$OSM_FILE_FILTERED > /dev/null 2>&1
	fi

	if [ ! -f $DEPLOY_DIR/$OSM_FILE_FILTERED ]; then
		echo "  - downloading OpenStreetMap file"
		OSM_FILENAME=$DOWNLOAD_DIR/${OSM_FILE##*/}
		fn_download_newer $OSM_FILENAME http://download.geofabrik.de/$OSM_FILE

		echo "  - filtering OpenStreetMap data"
		if [[ "$BOUNDING" == *.poly ]]; then
			$DEPLOY_DIR/osmosis/bin/osmosis --read-pbf file="$OSM_FILENAME" --bounding-polygon file="$BOUNDING" --way-key keyList="$OSM_KEYS" --used-node --write-xml file="$DEPLOY_DIR/$OSM_FILE_FILTERED" >> initialize_osm_data.sh 2>&1
		else
			$DEPLOY_DIR/osmosis/bin/osmosis --read-pbf file="$OSM_FILENAME" --bounding-box $BOUNDING --way-key keyList="$OSM_KEYS" --used-node --write-xml file="$DEPLOY_DIR/$OSM_FILE_FILTERED" >> initialize_osm_data.sh 2>&1
		fi
	fi

	if $INSTALL_POSTGIS && $IMPORT_SCHEDULES; then
		if [ -n "$SCHEDULE_FILE" ]; then
			echo "  - downloading schedule"
			fn_download_newer $DOWNLOAD_DIR/$SCHEDULE_FILE $CACHE_DIR_REMOTE/$SCHEDULE_FILE
			cp $DOWNLOAD_DIR/$SCHEDULE_FILE $DEPLOY_DIR/$SCHEDULE_FILE > /dev/null 2>&1

			echo "  - importing schedule into postgis database"
			gunzip -c $DEPLOY_DIR/$SCHEDULE_FILE | PGPASSWORD="$PG_DB_PASSWORD" psql -U "$PG_DB_USER" -h localhost "$PG_DB_NAME" >> $WORKING_DIR/import_schedule.log 2>&1

			echo "  - fixing schedule permissions"
			tables=`PGPASSWORD="$PG_DB_PASSWORD" psql -qAt -U "$PG_DB_USER" -h localhost -c "SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tableowner = 'postgres';" "$PG_DB_NAME"`
			for tbl in $tables ; do
				PGPASSWORD="$PG_DB_PASSWORD" psql -qAt -U "$PG_DB_USER" -h localhost -c "ALTER TABLE $tbl OWNER TO $PG_DB_USER" "$PG_DB_NAME";
			done
		fi
	fi

	if $INSTALL_PGROUTING; then
		echo "  - importing filtered OpenStreetMap data into pgRouting"
		$DEPLOY_DIR/osm2pgrouting/build/osm2pgrouting -file "$DEPLOY_DIR/$OSM_FILE_FILTERED" -conf "$OSM2PGROUTING_MAPPING_CONF" -dbname $PG_DB_NAME -user $PG_DB_USER -passwd $PG_DB_PASSWORD -clean -prefixtables $TABLE_PREFIX >> import_osm2pgrouting.log 2>&1

		echo "  - creating pgRouting topology"
		PGPASSWORD="$PG_DB_PASSWORD" psql -U "$PG_DB_USER" -h localhost -d "$PG_DB_NAME" -c "SELECT pgr_createTopology('${TABLE_PREFIX}ways', $TOPOLOGY_TOLERANCE, 'the_geom', 'gid');" >> $WORKING_DIR/setup_database.log 2>&1
	fi

	if $INSTALL_NEO4J_SPATIAL; then
		echo "  - importing filtered OpenStreetMap data into neo4j-spatial"
		cd $DEPLOY_DIR/neo4j-spatial
		mvn exec:java -Dexec.mainClass=org.neo4j.gis.spatial.osm.OSMImporter -Dexec.args="$DEPLOY_DIR/neo4j/data/graph.db $DEPLOY_DIR/$OSM_FILE_FILTERED" >> $WORKING_DIR/import_osm2neo4j.log 2>&1
		cd $WORKING_DIR
	fi
}

## Start of environment preparation
###################################

echo ""
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " Bootstrapping the VM:"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
if $IS_LOCAL_TEST_DEPLOY; then echo "Starting in local test deploy mode"; fi
if $IMPORT_SCHEDULES && ! $IMPORT_OSMDATA && ! $IMPORT_OSMDATA_CACHED; then
	echo "Warning: Schedules will not be imported, since no data from OSM is imported!"
	IMPORT_SCHEDULES=false
fi
echo "Installing software:"
if $INSTALL_HTTPD; then echo "  - apache webserver"; fi
if $INSTALL_MAVEN; then echo "  - apache maven $MAVEN_VERSION"; fi
if $INSTALL_JAVA; then echo "  - java $JAVA_VERSION"; fi
if $INSTALL_NEO4J; then echo "  - neo4j $NEO4J_VERSION"; fi
if $INSTALL_NEO4J_SPATIAL; then echo "  - neo4j-spatial $NEO4J_SPATIAL_VERSION"; fi
if $INSTALL_POSTGRES; then echo "  - postgresql 9.3"; fi
if $INSTALL_POSTGIS; then echo "  - postgis 2"; fi
if $INSTALL_PGROUTING; then echo "  - pgRouting $PGROUTING_VERSION"; fi
if $INSTALL_TOMCAT; then echo "  - tomcat $TOMCAT_VERSION"; fi
if $INSTALL_GEOSERVER; then echo "  - geoserver $GEOSERVER_VERSION"; fi
if $INSTALL_POSTGRES_ADMIN; then echo "  - phpPgAdmin"; fi
if $IMPORT_OSMDATA; then echo "  - osmosis $OSMOSIS_VERSION"; fi
if $IMPORT_OSMDATA_CACHED; then echo "Importing cached data from OSM (if possible)"; elif $IMPORT_OSMDATA; then echo "Importing data from OSM"; fi
if $IMPORT_SCHEDULES; then echo "Importing schedules"; fi
if $INSTALL_PROJECT_CANIGET2; then echo "Importing project \"CanIGet2\""; fi
if $INSTALL_ISOCHRONE_LOCAL; then echo "Importing project \"isochrone (local testing)\""; fi
if $INSTALL_ISOCHRONE_RELEASE; then echo "Importing project \"isochrone (release)\""; fi
if $INSTALL_ISOCHRONE_SNAPSHOT; then echo "Importing project \"isochrone (testing)\""; fi
if $INSTALL_PROJECT_PSIPROBE; then echo "Importing project \"psi-probe\""; fi
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " Performing installations:"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

# Are we punching above our weight?
if [ "$EUID" -ne "0" ]; then
	echo '- The bootstrap script must be run as root!'
	exit 1
fi

cd $WORKING_DIR
mkdir -p $DOWNLOAD_DIR

echo "Configuring timezone"
cp /usr/share/zoneinfo/Europe/Vienna /etc/localtime > setup_timezone.log 2>&1

echo "Installing utils (gcc, git, ...) with yum repository version"
yum -y install gcc gcc-c++ git iptables-services nano nmap sed tar unzip wget > insall_utils.log 2>&1

#echo "Installing krismer repository"
#fn_download_newer $DOWNLOAD_DIR/krismer.repo $NEXUS_YUM_REPO
#cp $DOWNLOAD_DIR/krismer.repo /etc/yum.repos.d > install_krismer_repo.log 2>&1

if $INSTALL_POSTGRES; then
	if [ $DISTRI == "CentOS" ]; then
		sed -i 's/\[base\]/\[base\]\nexclude=postgresql\*/' $REPO_BASE_CONFIG
		sed -i 's/\[updates\]/\[updates\]\nexclude=postgresql\*/' $REPO_BASE_CONFIG
	else
		sed -i 's/\[fedora\]/\[fedora\]\nexclude=postgresql\*/' $REPO_BASE_CONFIG
	fi

	echo "Installing postgresql-9.3 repository"
	fn_download $DOWNLOAD_DIR/postgresql-repo.rpm $POSTGRESQL_REPO_RPM
	yum -y localinstall $DOWNLOAD_DIR/postgresql-repo.rpm > install_postgresql_repo.log 2>&1

	echo "Installing epel repository"
	fn_download $DOWNLOAD_DIR/epel-repo.rpm http://fedora.aau.at/epel/6/i386/epel-release-6-8.noarch.rpm
	yum -y localinstall $DOWNLOAD_DIR/epel-repo.rpm > install_epel_repo.log 2>&1
fi

echo "Stopping iptables and SELinux"
service iptables stop > stop_iptables.log 2>&1
if [ $(getenforce) == "Enforcing" ]; then
  setenforce 0 > stop_selinux.log 2>&1
fi

if $INSTALL_HTTPD; then
	echo "Installing httpd server"
	yum -y install httpd > install_httpd.log 2>&1
fi

if $INSTALL_POSTGRES; then
	echo "Installing $POSTGRESQL_PKG_NAME"
	yum -y install $POSTGRESQL_PKG_NAME $POSTGRESQL_PKG_NAME-server $POSTGRESQL_PKG_NAME-contrib > install_postgresql.log 2>&1

	echo "export PostgreSQL_ROOT=/usr/pgsql-9.3" > /etc/profile.d/postgresql.sh
	source /etc/profile.d/postgresql.sh
fi

if $INSTALL_POSTGIS; then
#	echo "Installing postgis dependencies"
#	yum -y install gdal-devel geos-devel json-c-devel libxml2-devel proj-devel > install_postgis_deps.log 2>&1

#	echo "Installing postgis $POSTGIS_VERSION from source"
#	git clone -q https://github.com/postgis/postgis.git $DEPLOY_DIR/postgis-$POSTGIS_VERSION
#	ln -sf $DEPLOY_DIR/postgis-$POSTGIS_VERSION $DEPLOY_DIR/postgis
#	cd $DEPLOY_DIR/postgis
#	git checkout -q $POSTGIS_VERSION > /dev/null 2>&1
#	./configure > $WORKING_DIR/install_postgis.log 2>&1
#	make >> $WORKING_DIR/install_postgis.log 2>&1
#	make install >> $WORKING_DIR/install_postgis.log 2>&1
#	cd $WORKING_DIR

	echo "Installing $POSTGRESQL_PKG_NAME from repository"
	yum -y install postgis2_93 > install_postgis.log 2>&1
fi

if $INSTALL_POSTGRES_ADMIN; then
	echo "Installing phpPgAdmin"
	yum -y install phpPgAdmin > install_phpPgAdmin.log 2>&1
fi

if $INSTALL_PGROUTING; then
#	echo "Installing cmake $CMAKE_VERSION from source"
#	fn_download_newer $DOWNLOAD_DIR/$CMAKE_FILE http://www.cmake.org/files/$CMAKE_VERSION_MAIN/$CMAKE_FILE
#	cp $DOWNLOAD_DIR/$CMAKE_FILE $DEPLOY_DIR/$CMAKE_FILE
#	tar -xvzf $DEPLOY_DIR/$CMAKE_FILE -C $DEPLOY_DIR > install_cmake.log 2>&1
#	cd $DEPLOY_DIR/cmake*
#	./bootstrap >> install_cmake.log 2>&1
#	make >> install_cmake.log 2>&1
#	make install >> install_cmake.log 2>&1
#	cd $WORKSPACE_DIR

	echo "Installing rpmForge repository"
	fn_download_newer $DOWNLOAD_DIR/rpmforge-repo.rpm $REPO_RPMFORGE_URL
	yum -y localinstall $DOWNLOAD_DIR/rpmforge-repo.rpm > install_rpmforge_repo.log 2>&1
	sed -i 's/enabled = 1/enabled = 0/' $REPO_RPMFORGE_CONFIG

	echo "Installing cmake from repository"
	yum -y --enablerepo=rpmforge-extras install cmake > install_cmake.log 2>&1

	echo "Installing pgRouting dependencies"
	yum -y install $POSTGRESQL_PKG_NAME-devel $POSTGRESQL_PKG_NAME-libs boost-devel postgis2_93-devel > install_pgRouting_deps.log 2>&1

#	echo "Installing CGAL 4.3"
#	fn_download_newer $DOWNLOAD_DIR/CGAL-4.3.zip https://gforge.inria.fr/frs/download.php/32996/CGAL-4.3.zip
#	cp $DOWNLOAD_DIR/CGAL-4.3.zip $DEPLOY_DIR/CGAL-4.3.zip
#	unzip -o -d $DEPLOY_DIR $DEPLOY_DIR/CGAL-4.3.zip > install_cgal.log 2>&1
#	cd $DEPLOY_DIR/CGAL-4.3
#	cmake . >> install_cgal.log 2>&1
#	make >> install_cgal.log 2>&1
#	make install >> install_cgal.log 2>&1
#	cd $WORKING_DIR

	echo "Installing pgRouting $PGROUTING_VERSION"
	git clone -q https://github.com/pgRouting/pgrouting.git $DEPLOY_DIR/pgRouting-$PGROUTING_VERSION
	ln -sf $DEPLOY_DIR/pgRouting-$PGROUTING_VERSION $DEPLOY_DIR/pgRouting
	cd $DEPLOY_DIR/pgRouting
	git checkout -q pgrouting-$PGROUTING_VERSION > /dev/null 2>&1
	mkdir build
	cd build
#	cmake -DWITH_DD=ON  -DBoost_DIR:PATH=/usr/lib64/boost -DPOSTGRESQL_EXECUTABLE:FILEPATH="$PostgreSQL_ROOT"/bin/postgres -DPOSTGRESQL_PG_CONFIG:FILEPATH="$PostgreSQL_ROOT"/bin/pg_config .. > $WORKING_DIR/install_pgRouting.log 2>&1
	cmake -DWITH_DD=OFF -DBoost_DIR:PATH=/usr/lib64/boost -DPOSTGRESQL_EXECUTABLE:FILEPATH="$PostgreSQL_ROOT"/bin/postgres -DPOSTGRESQL_PG_CONFIG:FILEPATH="$PostgreSQL_ROOT"/bin/pg_config .. > $WORKING_DIR/install_pgRouting.log 2>&1
	make >> $WORKING_DIR/install_pgRouting.log 2>&1
	make install >> $WORKING_DIR/install_pgRouting.log 2>&1
	cd $WORKING_DIR
fi

if $INSTALL_JAVA; then
	echo "Installing java (oracle jdk-$JAVA_VERSION)"
	fn_download_newer $DOWNLOAD_DIR/$JAVA_FILE $CACHE_DIR_REMOTE/$JAVA_FILE
	yum -y localinstall $DOWNLOAD_DIR/$JAVA_FILE > install_java.log 2>&1
	ln -sf /usr/java/latest $DEPLOY_DIR/jdk > setup_java.log 2>&1
	ln -sf /usr/java/latest/jre $DEPLOY_DIR/jre > setup_java.log 2>&1

	echo " - setting alternatives for java"
	alternatives --install /usr/bin/java java $DEPLOY_DIR/jre/bin/java 200000 >> setup_java.log 2>&1
	alternatives --install /usr/bin/javaws javaws $DEPLOY_DIR/jre/bin/javaws 200000 >> setup_java.log 2>&1
	alternatives --set java $DEPLOY_DIR/jre/bin/java >> setup_java.log 2>&1
	alternatives --install /usr/bin/javac javac $DEPLOY_DIR/jdk/bin/javac 200000 >> setup_java.log 2>&1
	alternatives --install /usr/bin/jar jar $DEPLOY_DIR/jdk/bin/jar 200000 >> setup_java.log 2>&1

	echo "export JAVA_HOME=$DEPLOY_DIR/jre" > /etc/profile.d/java.sh
	echo "export PATH=\${JAVA_HOME}/bin:\${PATH}" >> /etc/profile.d/java.sh
	source /etc/profile.d/java.sh

	echo " - installing strong cryptographie"
	fn_download_newer $DOWNLOAD_DIR/$JAVA_CRYPTO_FILE $CACHE_DIR_REMOTE/$JAVA_CRYPTO_FILE
	unzip -j -u $DOWNLOAD_DIR/$JAVA_CRYPTO_FILE -d $DEPLOY_DIR/jre/lib/security >> setup_java.log 2>&1
fi

if $INSTALL_TOMCAT; then
	echo "Installing $TOMCAT_NAME $TOMCAT_VERSION servlet container"
#	yum -y install $TOMCAT_NAME $TOMCAT_NAME-webapps $TOMCAT_NAME-admin-webapps > install_tomcat.log 2>&1
#	ln -sf /usr/share/$TOMCAT_NAME $DEPLOY_DIR/$TOMCAT_NAME

	fn_download_newer $DOWNLOAD_DIR/$TOMCAT_FILE http://tweedo.com/mirror/apache/tomcat/tomcat-8/v$TOMCAT_VERSION/bin/$TOMCAT_FILE
	cp $DOWNLOAD_DIR/$TOMCAT_FILE $DEPLOY_DIR/$TOMCAT_FILE
	tar -xvzf $DEPLOY_DIR/$TOMCAT_FILE -C $DEPLOY_DIR > install_tomcat.log 2>&1
	rm -f $DEPLOY_DIR/$TOMCAT_FILE >> install_tomcat.log 2>&1
	ln -sf $DEPLOY_DIR/apache-tomcat-$TOMCAT_VERSION $DEPLOY_DIR/$TOMCAT_NAME >> install_tomcat.log 2>&1
fi

if $INSTALL_GEOSERVER; then
	echo "Installing geoserver $GEOSERVER_VERSION"
	fn_download_newer $DOWNLOAD_DIR/$GEOSERVER_FILE http://sourceforge.net/projects/geoserver/files/GeoServer/$GEOSERVER_VERSION/$GEOSERVER_FILE
	unzip -o -d $TOMCAT_WEBAPP_DIR $DOWNLOAD_DIR/$GEOSERVER_FILE geoserver.war > install_geoserver.log 2>&1

	echo "Installing geoserver web archive into tomcat"
	mkdir -p $TOMCAT_WEBAPP_DIR/geoserver
	unzip -o -d $TOMCAT_WEBAPP_DIR/geoserver $TOMCAT_WEBAPP_DIR/geoserver.war  >> install_geoserver.log 2>&1
	rm -f $TOMCAT_WEBAPP_DIR/geoserver.war >> install_geoserver.log 2>&1

	echo "Installing geoserver data directory"
#	mkdir -p $DEPLOY_DIR/geoserver >> install_geoserver.log 2>&1
#	mv $TOMCAT_WEBAPP_DIR/geoserver/data $DEPLOY_DIR/geoserver >> install_geoserver.log 2>&1
	mkdir -p $DEPLOY_DIR/geoserver/data >> install_geoserver.log 2>&1
	echo "export CATALINA_OPTS=\"-Djava.awt.headless=true $TOMCAT_MEMORY_OPTS -DGEOSERVER_DATA_DIR=$DEPLOY_DIR/geoserver/data\"" > /etc/profile.d/catalina.sh
	source /etc/profile.d/catalina.sh

	echo "Installing geoserver-shell $GEOSERVER_SHELL_VERSION"
	fn_download_newer $DOWNLOAD_DIR/$GEOSERVER_SHELL_FILE $CACHE_DIR_REMOTE/$GEOSERVER_SHELL_FILE
	unzip $DOWNLOAD_DIR/$GEOSERVER_SHELL_FILE -d $DEPLOY_DIR > install_geoserver_shell.log 2>&1
	ln -sf $DEPLOY_DIR/gs-shell-0.2-SNAPSHOT $DEPLOY_DIR/gs-shell
	make >> install_geoserver_shell.log 2>&1
	make install >> install_geoserver_shell.log 2>&1
fi

if $INSTALL_ISOCHRONE_LOCAL; then
	echo "Installing template project \"isochrone (local testing)\""
	echo " - creating war using gradle from $TEMPLATE_DIR_ISOCHRONE"

	$TEMPLATE_DIR_ISOCHRONE/gradlew -b $TEMPLATE_DIR_ISOCHRONE/build.gradle -c $TEMPLATE_DIR_ISOCHRONE/settings.gradle clean war > install_isochrone_local.log 2>&1
	unzip -o -d $TOMCAT_WEBAPP_DIR/localTesting $TEMPLATE_DIR_ISOCHRONE/build/libs/isochrone-*.war >> install_isochrone_local.log 2>&1
fi

if $INSTALL_ISOCHRONE_RELEASE; then
	echo "Installing template project \"isochrone (release)\""
	echo " - artifact: $NEXUS_RELEASE_ISOCHRONE"

	# we do not save this file in download dir (we do not want caching for isochrone.war)
	fn_download $DOWNLOAD_DIR/isochrone.war $NEXUS_RELEASE_ISOCHRONE
	cp $DOWNLOAD_DIR/isochrone.war $TOMCAT_WEBAPP_DIR/isochrone.war
	unzip -o -d $TOMCAT_WEBAPP_DIR/isochrone $TOMCAT_WEBAPP_DIR/isochrone.war > install_isochrone_release.log 2>&1
	rm -f $TOMCAT_WEBAPP_DIR/isochrone.war >> install_isochrone_release.log 2>&1
fi

if $INSTALL_ISOCHRONE_SNAPSHOT; then
	echo "Installing template project \"isochrone (testing)\""
	echo " - artifact: $NEXUS_RELEASE_ISOCHRONE"

	# we do not save this file in download dir (we do not want caching for testing.war)
	fn_download $DOWNLOAD_DIR/testing.war $NEXUS_SNAPSHOT_ISOCHRONE
	cp $DOWNLOAD_DIR/testing.war $TOMCAT_WEBAPP_DIR/testing.war
	unzip -o -d $TOMCAT_WEBAPP_DIR/testing $TOMCAT_WEBAPP_DIR/testing.war > install_isochrone_snapshot.log 2>&1
	rm -f $TOMCAT_WEBAPP_DIR/testing.war >> install_isochrone_snapshot.log 2>&1
fi

if $INSTALL_PROJECT_CANIGET2; then
	echo "Installing template project \"CanIGet2\""
	echo " - artifact: $NEXUS_RELEASE_CANIGET2"

	fn_download_newer $DOWNLOAD_DIR/caniget2.war $NEXUS_RELEASE_CANIGET2
	cp $DOWNLOAD_DIR/caniget2.war $TOMCAT_WEBAPP_DIR
	unzip -o -d $TOMCAT_WEBAPP_DIR/caniget2 $TOMCAT_WEBAPP_DIR/caniget2.war > install_caniget2.log 2>&1
	rm -f $TOMCAT_WEBAPP_DIR/caniget2.war >> install_caniget2.log 2>&1
fi

if $INSTALL_PROJECT_PSIPROBE; then
	echo "Installing template project \"psi-probe\""
	echo " - artifact: https://psi-probe.googlecode.com/files/$TEMPLATE_FILE_PSIPROBE"

	fn_download_newer $DOWNLOAD_DIR/$TEMPLATE_FILE_PSIPROBE https://psi-probe.googlecode.com/files/$TEMPLATE_FILE_PSIPROBE
	unzip $DOWNLOAD_DIR/$TEMPLATE_FILE_PSIPROBE probe.war -d $TOMCAT_WEBAPP_DIR
	unzip -o -d $TOMCAT_WEBAPP_DIR/psiprobe $TOMCAT_WEBAPP_DIR/probe.war > install_psiprobe.log 2>&1
	rm -f $TOMCAT_WEBAPP_DIR/probe.war >> install_psiprobe.log 2>&1
fi

if $INSTALL_MAVEN; then
	echo "Installing maven $MAVEN_VERSION"

	mkdir -p $CACHE_DIR_LOCAL/maven
	fn_download_newer $DOWNLOAD_DIR/$MAVEN_FILE http://tweedo.com/mirror/apache/maven/maven-3/3.1.1/binaries/$MAVEN_FILE
	unzip -o $DOWNLOAD_DIR/$MAVEN_FILE -d $DEPLOY_DIR > install_maven.log 2>&1
	ln -sf $DEPLOY_DIR/apache-maven-$MAVEN_VERSION $DEPLOY_DIR/apache-maven

	echo "export M2_HOME=$DEPLOY_DIR/apache-maven" > /etc/profile.d/maven.sh
	echo "export PATH=\${M2_HOME}/bin:\${PATH}" >> /etc/profile.d/maven.sh
	source /etc/profile.d/maven.sh

	echo "Configuring maven to use vagrant-cache plugin"
#	yum -y install xmlstarlet >> install_xmlstarlet.log
#	xmlstarlet edit --inplace --subnode "/_:settings" -t elem -n "localRepository" -v "$CACHE_DIR_LOCAL/maven" $DEPLOY_DIR/apache-maven/conf/settings.xml
	cp $SHARED_CONF_DIR/maven-settings.xml $DEPLOY_DIR/apache-maven/conf/settings.xml
fi

if $INSTALL_NEO4J; then
	echo "Installing neo4j dependencies"
	yum install -y lsof > install_neo4j_deps.log 2>&1

	echo "Installing neo4j $NEO4J_VERSION"
	fn_download_newer $DOWNLOAD_DIR/$NEO4J_FILE http://dist.neo4j.org/$NEO4J_FILE
	tar -xvzf $DOWNLOAD_DIR/$NEO4J_FILE -C $DEPLOY_DIR > install_neo4j.log 2>&1
	ln -sf $DEPLOY_DIR/neo4j-community-$NEO4J_VERSION $DEPLOY_DIR/neo4j
	echo "org.neo4j.server.webserver.address=0.0.0.0" >> $DEPLOY_DIR/neo4j/conf/neo4j-server.properties
fi

if $INSTALL_NEO4J_SPATIAL; then
	echo "Installing neo4j-spatial $NEO4J_SPATIAL_VERSION"
	git clone -q https://github.com/neo4j/spatial.git $DEPLOY_DIR/neo4j-spatial-$NEO4J_SPATIAL_VERSION
	ln -sf $DEPLOY_DIR/neo4j-spatial-$NEO4J_SPATIAL_VERSION $DEPLOY_DIR/neo4j-spatial
	cd $DEPLOY_DIR/neo4j-spatial
	git checkout -q $NEO4J_SPATIAL_VERSION > /dev/null 2>&1

	if $INSTALL_GEOSERVER; then
		if $IMPORT_OSMDATA || $IMPORT_OSMDATA_CACHED; then
			# We need to compile the source when importing data, so that the main class gets compiled
			echo "Installing neo4j-spatial into geoserver from source"
			mvn clean install -DskipTests > $WORKING_DIR/install_neo4j_spatial.log 2>&1
			unzip -o $DEPLOY_DIR/neo4j-spatial/target/*server-plugin.zip -d $TOMCAT_WEBAPP_DIR/geoserver/WEB-INF/lib > $WORKING_DIR/install_neo4j_spatial_plugin.log 2>&1
		else
			echo "Installing neo4j-spatial into geoserver from binary"
			fn_download_newer $DOWNLOAD_DIR/neo4j-spatial-$NEO4J_SPATIAL_VERSION-server-plugin.zip http://dist.neo4j.org.s3.amazonaws.com/spatial/neo4j-spatial-$NEO4J_SPATIAL_VERSION-server-plugin.zip
			unzip -o $DOWNLOAD_DIR/neo4j-spatial-$NEO4J_SPATIAL_VERSION-server-plugin.zip -d $TOMCAT_WEBAPP_DIR/geoserver/WEB-INF/lib > $WORKING_DIR/install_neo4j_spatial_plugin.log 2>&1
		fi
	fi
	cd $WORKING_DIR
fi

if $IMPORT_OSMDATA; then
	echo "Installing osmosis $OSMOSIS_VERSION"
	fn_download_newer $DOWNLOAD_DIR/$OSMOSIS_FILE http://bretth.dev.openstreetmap.org/osmosis-build/$OSMOSIS_FILE
	mkdir -p $DEPLOY_DIR/osmosis-$OSMOSIS_VERSION
	unzip -o $DOWNLOAD_DIR/$OSMOSIS_FILE -d $DEPLOY_DIR/osmosis-$OSMOSIS_VERSION > install_osmosis.log 2>&1
	ln -sf $DEPLOY_DIR/osmosis-* $DEPLOY_DIR/osmosis
	chmod a+x $DEPLOY_DIR/osmosis/bin/osmosis
fi

if ( $IMPORT_OSMDATA || $IMPORT_OSMDATA_CACHED ) && $INSTALL_PGROUTING; then
	echo "Installing osm2pgrouting dependencies"
	yum install -y expat-devel boost-devel > install_osm2pgrouting_deps.log 2>&1

	echo "Installing osm2pgrouting $OSM2PGROUTING_VERSION"
	git clone -q https://github.com/pgRouting/osm2pgrouting.git $DEPLOY_DIR/osm2pgrouting-$OSM2PGROUTING_VERSION
	ln -sf $DEPLOY_DIR/osm2pgrouting-$OSM2PGROUTING_VERSION $DEPLOY_DIR/osm2pgrouting
	cd $DEPLOY_DIR/osm2pgrouting
	git checkout -q $OSM2PGROUTING_VERSION > /dev/null 2>&1
	cmake -H. -Bbuild > $WORKING_DIR/install_osm2pgrouting.log 2>&1
	cd build/
	make >> $WORKING_DIR/install_osm2pgrouting.log 2>&1
	make install >> $WORKING_DIR/install_osm2pgrouting.log 2>&1
	cd $WORKING_DIR
fi

echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " Installations done!"
echo " Preparing services"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
if $INSTALL_POSTGRES; then
	echo "Initialize postgresql database"
	service $POSTGRESQL_SERVICE_NAME initdb > initialize_postgresql.log 2>&1
	sleep 2

	echo "Configuring and starting postgresql-server"
	cp $SHARED_CONF_DIR/pg_hba.conf $POSTGRESQL_HBA_CONF
	echo "listen_addresses = '*'" >> $POSTGRESQL_DATA_DIR/postgresql.conf
	echo "port = 5432" >> $POSTGRESQL_DATA_DIR/postgresql.conf
fi

if $INSTALL_POSTGRES_ADMIN; then
	echo "Configuring phpPgAdmin"
	cp $SHARED_CONF_DIR/phpPgAdmin.conf /etc/httpd/conf.d/phpPgAdmin.conf
	sed -i 's/\$conf\['\''servers'\''\]\[0\]\['\''host'\''\] = '\'''\''/\$conf\['\''servers'\''\]\[0\]\['\''host'\''\] = '\''localhost'\''/' /usr/share/phpPgAdmin/conf/config.inc.php
fi

if $INSTALL_NEO4J; then
	echo "Initialize neo4j database"
	$DEPLOY_DIR/neo4j/bin/neo4j -h -u $NEO4J_DB_USER install > initialize_neo4j.log 2>&1

	# Configuring max open file limit for user "neo4j"
	echo "$NEO4J_DB_USER    soft    nofile    40000" >> /etc/security/limits.conf
	echo "$NEO4J_DB_USER    hard    nofile    40000" >> /etc/security/limits.conf
	echo "session    required    pam_limits.so" >> /etc/pam.d/su
	ulimit -n 40000
fi

if $INSTALL_TOMCAT; then
	echo "Configuring tomcat users"
	groupadd -g 521 $TOMCAT_USER >> install_tomcat.log 2>&1
	useradd -u 521 -g 521 -c "Tomcat Service Account" -d $DEPLOY_DIR/apache-tomcat-$TOMCAT_VERSION $TOMCAT_USER >> install_tomcat.log 2>&1
	chown -R $TOMCAT_USER:$TOMCAT_USER $DEPLOY_DIR/apache-tomcat-$TOMCAT_VERSION >> install_tomcat.log 2>&1
	chown -R $TOMCAT_USER:$TOMCAT_USER $DEPLOY_DIR/$TOMCAT_NAME >> install_tomcat.log 2>&1

	cp $SHARED_CONF_DIR/tomcat-users.xml $DEPLOY_DIR/$TOMCAT_NAME/conf/tomcat-users.xml
	sed -i "s/password=\"admin\"/password=\"$PG_DB_PASSWORD\"/" $DEPLOY_DIR/$TOMCAT_NAME/conf/tomcat-users.xml

	echo "Configuring tomcat default web.xml (enabling CORS filer)"
	cp -f $SHARED_CONF_DIR/tomcat_web.xml $DEPLOY_DIR/$TOMCAT_NAME/conf/web.xml

	echo "Configuring tomcat permissions"
	if $INSTALL_GEOSERVER; then
		chown -R $TOMCAT_USER:$TOMCAT_USER $TOMCAT_WEBAPP_DIR/geoserver
		chown -R $TOMCAT_USER:$TOMCAT_USER $DEPLOY_DIR/geoserver
	fi

	echo "Configuring tomcat startup script"
	cp $SHARED_CONF_DIR/tomcat_startscript.sh /etc/init.d/$TOMCAT_NAME >> install_tomcat.log 2>&1
	chmod 755 /etc/init.d/$TOMCAT_NAME >> install_tomcat.log 2>&1
fi

if $INSTALL_POSTGIS && $INSTALL_GEOSERVER; then
	echo "Configuring geoserver epsg projections"
	mkdir -p $DEPLOY_DIR/geoserver/data/user_projections
	echo "82344=`grep ^[^//,^#] /setup/conf/srid_82344_wkt.txt | paste -sd "" | sed 's/ \+ / /g'`" >> $DEPLOY_DIR/geoserver/data/user_projections/epsg.properties
	chown -R $TOMCAT_USER:$TOMCAT_USER $DEPLOY_DIR/geoserver/data/user_projections
fi

echo "Starting services"
if $INSTALL_HTTPD; then
	service httpd start > start_httpd.log 2>&1
	chkconfig httpd on >> start_httpd.log 2>&1
	sleep 2
fi
if $INSTALL_POSTGRES; then
	service $POSTGRESQL_SERVICE_NAME start > start_pg.log 2>&1
	chkconfig $POSTGRESQL_SERVICE_NAME on >> start_pg.log 2>&1
	sleep 2
fi
if $INSTALL_NEO4J; then
	service $NEO4J_SERVICE_NAME start > start_neo4j.log 2>&1
	chkconfig $NEO4J_SERVICE_NAME on >> start_neo4j.log 2>&1
	sleep 2
fi
if $INSTALL_TOMCAT; then
	service $TOMCAT_NAME start > start_tomcat.log 2>&1
	chkconfig $TOMCAT_NAME on >> start_tomcat.log 2>&1
	sleep 2
fi

if $INSTALL_POSTGRES; then
	echo "Creating postgresql database $PG_DB_NAME"
	sudo -u "postgres" psql -d template1 -c "CREATE DATABASE \"$PG_DB_NAME\";" > $WORKING_DIR/setup_database.log 2>&1
	sudo -u "postgres" psql -d "$PG_DB_NAME" -c "CREATE USER \"$PG_DB_USER\" WITH PASSWORD '$PG_DB_PASSWORD';" >> $WORKING_DIR/setup_database.log 2>&1
	sudo -u "postgres" psql -d "$PG_DB_NAME" -c "ALTER DATABASE \"$PG_DB_NAME\" OWNER TO \"$PG_DB_USER\";" >> $WORKING_DIR/setup_database.log 2>&1
	sudo -u "postgres" psql -d "$PG_DB_NAME" -c "GRANT ALL PRIVILEGES ON DATABASE \"$PG_DB_NAME\" TO \"$PG_DB_USER\";" >> $WORKING_DIR/setup_database.log 2>&1
	sudo -u "postgres" psql -d "$PG_DB_NAME" -c "ALTER SCHEMA public OWNER TO \"$PG_DB_USER\";" >> $WORKING_DIR/setup_database.log 2>&1
	sudo -u "postgres" psql -d "$PG_DB_NAME" -c "ALTER ROLE \"$PG_DB_USER\" SUPERUSER;" >> $WORKING_DIR/setup_database.log 2>&1
fi

if $INSTALL_POSTGIS; then
	PGPASSWORD="$PG_DB_PASSWORD" psql -U "$PG_DB_USER" -h localhost -d "$PG_DB_NAME" -c "CREATE EXTENSION postgis;" >> $WORKING_DIR/setup_database.log 2>&1
	PGPASSWORD="$PG_DB_PASSWORD" psql -U "$PG_DB_USER" -h localhost -d "$PG_DB_NAME" -f $SHARED_CONF_DIR/pg_procedures.sql >> $WORKING_DIR/setup_database.log 2>&1
	PGPASSWORD="$PG_DB_PASSWORD" psql -U "$PG_DB_USER" -h localhost -d "$PG_DB_NAME" -f $SHARED_CONF_DIR/srid_82344_insert.sql >> $WORKING_DIR/setup_database.log 2>&1
fi

if $INSTALL_PGROUTING; then
	PGPASSWORD="$PG_DB_PASSWORD" psql -U "$PG_DB_USER" -h localhost -d "$PG_DB_NAME" -c "CREATE EXTENSION pgRouting;" >> $WORKING_DIR/setup_database.log 2>&1
fi

echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " Services prepared!"
if $IMPORT_OSMDATA || $IMPORT_OSMDATA_CACHED; then
	echo " Importing data"
	echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"

	fn_import_data "Bolzen" "$OSM_FILE_ITALY" "$OSM_FILE_BZ_FILTERED" "$OSM_BBOX_BZ" "bz_export.sql.gz" $TABLE_PREFIX_BZ
	fn_import_data "Innsbruck" "$OSM_FILE_AUSTRIA" "$OSM_FILE_IBK_FILTERED" "$OSM_BBOX_IBK" "" $TABLE_PREFIX_IBK
	if ! $IS_LOCAL_TEST_DEPLOY; then
#		fn_import_data "Italy" "$OSM_FILE_ITALY" "$OSM_FILE_IT_FILTERED" "$OSM_BBOX_IT" "it_export.sql.gz" $TABLE_PREFIX_IT
		fn_import_data "San Francisco" "$OSM_FILE_CALIFORNIA" "$OSM_FILE_SF_FILTERED" "$OSM_BBOX_SF" "sf_export.sql.gz" $TABLE_PREFIX_SF
#		fn_import_data "Alto Adige" "$OSM_FILE_ITALY" "$OSM_FILE_ST_FILTERED" "$OSM_BBOX_ST" "st_export.sql.gz" $TABLE_PREFIX_ST
	fi

	if $INSTALL_GEOSERVER; then
		if $INSTALL_NEO4J_SPATIAL; then
			echo "Configuring neo4j data permissions for geoserver"
			chown -R $TOMCAT_USER:$TOMCAT_USER $DEPLOY_DIR/neo4j/data/graph.db
		fi

		echo "Configuring geoserver $GEOSERVER_VERSION using geoserver-shell $GEOSERVER_SHELL_VERSION"
		sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_ws.gs > setup_geoserver_workspace.log 2>&1
		sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_styles.gs > setup_geoserver_styles.log 2>&1
		cp $SHARED_IMG_DIR/* $DEPLOY_DIR/geoserver/data/styles >> setup_geoserver_styles.log 2>&1

		if $INSTALL_NEO4J_SPATIAL; then
			sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_neo4j_ds.gs > setup_geoserver_neo4j.log 2>&1
			sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_neo4j_ft_bz.gs >> setup_geoserver_neo4j.log 2>&1
			sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_neo4j_ft_ibk.gs >> setup_geoserver_neo4j.log 2>&1
			if ! $IS_LOCAL_TEST_DEPLOY; then
#				sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_neo4j_ft_it.gs >> setup_geoserver_neo4j.log 2>&1
				sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_neo4j_ft_sf.gs >> setup_geoserver_neo4j.log 2>&1
#				sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_neo4j_ft_st.gs >> setup_geoserver_neo4j.log 2>&1
				sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_neo4j_ft.gs >> setup_geoserver_neo4j.log 2>&1
			fi
		fi
		if $INSTALL_POSTGIS; then
			# copy geoserver_setup_postgis_ds and replace username/password
			cp $SHARED_CONF_DIR/geoserver_setup_postgis_ds.gs $WORKING_DIR/geoserver_setup_postgis_ds.gs
			sed -i "s/@db_username@/$PG_DB_USER/" $WORKING_DIR/geoserver_setup_postgis_ds.gs
			sed -i "s/@db_password@/$PG_DB_PASSWORD/" $WORKING_DIR/geoserver_setup_postgis_ds.gs

			sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $WORKING_DIR/geoserver_setup_postgis_ds.gs > setup_geoserver_postgis.log 2>&1
			sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_postgis_ft_bz.gs >> setup_geoserver_postgis.log 2>&1
			sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_postgis_ft_ibk.gs >> setup_geoserver_postgis.log 2>&1
			if ! $IS_LOCAL_TEST_DEPLOY; then
#				sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_postgis_ft_it.gs >> setup_geoserver_postgis.log 2>&1
				sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_postgis_ft_sf.gs >> setup_geoserver_postgis.log 2>&1
#				sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_postgis_ft_st.gs >> setup_geoserver_postgis.log 2>&1
				sh $DEPLOY_DIR/gs-shell/bin/gs-shell --cmdfile $SHARED_CONF_DIR/geoserver_setup_postgis_ft.gs >> setup_geoserver_postgis.log 2>&1
			fi
		fi
	fi
fi

# Prevent second provision (done by check at the beginning of this file)
touch /var/vagrant_provision

END=$(date +%s)
TOTAL=$(( $END - $START ))

echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " All preparations done... box can now be used"
echo " Bootstrapping time: $TOTAL seconds"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"