-
User expired authored
from being installed... we have to check performance on changes here)
User expired authoredfrom being installed... we have to check performance on changes here)
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
bootstrap.sh 42.82 KiB
#! /bin/bash
#############################
# This bootstrap script sets up some build tools and the installs the packages
# - geoserver
# - httpd
# - neo4j
# - neo4j-spatial
# - postgresql
# - postgis
# - pgRouting
# - osmosis
# - osm2pgrouting
# into a centos6 environment (fedora 20 might also work, but is untested).
#
# It can be used in the context of a Vagrantfile to configure a vagrant box and all
# the installations can be configured using global variables (some packages are only
# installed if their installed flag is set to "true")
#
# Some data (from the road network of innsbruck) is also downloaded (from osm) and
# imported into the installed databases (neo4j and postgresql)
# After various installations the installed services are started as well
############################
if [ -f "/var/vagrant_provision" ]; then
exit 0
fi
if [ "$EUID" -ne "0" ]; then
echo '- The bootstrap script must be run as root!'
exit 1
fi
############################
# Variable definitions #
############################
IMPORT_OSMDATA=true
IMPORT_OSMDATA_CACHED=true
IMPORT_SCHEDULES=true
INSTALL_GEOSERVER=false
INSTALL_HTTPD=true
INSTALL_ISOCHRONE_LOCAL=false # installs isochrone from vagrant start directory (eclipse project)
INSTALL_ISOCHRONE_RELEASE=true # installs latest isochrone release from nexus repository
INSTALL_ISOCHRONE_SNAPSHOT=true # installs latest isochrone snapshot from nexus repository
INSTALL_NEO4J=false
INSTALL_NEO4J_SPATIAL=false
INSTALL_PGROUTING=true
INSTALL_POSTGIS=true
INSTALL_POSTGRES=true
INSTALL_POSTGRES_ADMIN=true
INSTALL_PROJECT_CANIGET2=false # installs caniget2 sample project
INSTALL_PROJECT_PSIPROBE=true
############################
# Ext. argument handling #
############################
IS_LOCAL_TEST_DEPLOY=false # will prevent install of projects if set to 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"
WORKING_DIR=`pwd`
############################
# Components configuration #
############################
#Armadillo from epel is too new for postgis (version 4 instead of 3), so use hard-coded file here
ARMADILLO_FILE="armadillo-3.800.2-1.el6.x86_64.rpm"
ARMADILLO_URL="$CACHE_DIR_REMOTE/armadillo-3.800.2-1.el6.x86_64.rpm"
GEOSERVER_VERSION="2.5.2"
GEOSERVER_FILE="geoserver-$GEOSERVER_VERSION-war.zip"
GEOSERVER_DOWNLOAD_URL="http://sourceforge.net/projects/geoserver/files/GeoServer/$GEOSERVER_VERSION/$GEOSERVER_FILE"
GEOSERVER_SHELL_VERSION="0.2-SNAPSHOT"
GEOSERVER_SHELL_FILE="gs-shell-$GEOSERVER_SHELL_VERSION-app.zip"
JAVA_VERSION="8u11"
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.2"
MAVEN_FILE="apache-maven-$MAVEN_VERSION-bin.zip"
MAVEN_DOWNLOAD_URL="http://tweedo.com/mirror/apache/maven/maven-3/$MAVEN_VERSION/binaries/$MAVEN_FILE"
NEO4J_DB_USER="neo4j"
NEO4J_VERSION="2.1.3"
NEO4J_FILE="neo4j-community-$NEO4J_VERSION-unix.tar.gz"
NEO4J_DOWNLOAD_URL="http://dist.neo4j.org/$NEO4J_FILE"
NEO4J_SERVICE_NAME="neo4j-service"
NEO4J_SPATIAL_GIT_URL="https://github.com/neo4j/spatial.git"
NEO4J_SPATIAL_VERSION="0.13-neo4j-2.1"
NEO4J_SPATIAL_PLUGIN_DOWNLOAD_URL="http://dist.neo4j.org.s3.amazonaws.com/spatial/neo4j-spatial-$NEO4J_SPATIAL_VERSION-server-plugin.zip"
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"
OSM_DOWNLOAD_MIRROR="http://download.geofabrik.de"
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_GIT_URL="https://github.com/pgRouting/osm2pgrouting.git"
OSM2PGROUTING_VERSION="v2.0.0"
OSM2PGROUTING_MAPPING_CONF="$DEPLOY_DIR/osm2pgrouting/mapconfig.xml"
OSMOSIS_VERSION="0.43.1"
OSMOSIS_FILE="osmosis-$OSMOSIS_VERSION.zip"
OSMOSIS_DOWNLOAD_URL="http://bretth.dev.openstreetmap.org/osmosis-build/$OSMOSIS_FILE"
POSTGIS_GIT_URL="https://github.com/postgis/postgis.git"
POSTGIS_VERSION="auto" # activate to install from repository
#POSTGIS_VERSION="2.1.3" # activate to install from source
POSTGRESQL_DATA_DIR="/var/lib/pgsql/data"
POSTGRESQL_SERVICE_NAME="postgresql"
POSTGRESQL_SHORT_VERSION=""
POSTGRESQL_VERSION=""
PGROUTING_GIT_URL="https://github.com/pgRouting/pgrouting.git"
PGROUTING_VERSION="auto" # activate to install from repository
#PGROUTING_VERSION="2.0.0" # activate to install from source
REPO_ELGIS="none"
REPO_EPEL="none"
REPO_POSTGRESQL="" # will be set later (depending on architecture)
REPO_POSTGRESQL_32="auto"
REPO_POSTGRESQL_64="auto"
REPO_RPMFORGE="" # will be set later (depending on architecture)
REPO_RPMFORGE_32="http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm"
REPO_RPMFORGE_64="http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm"
REPO_RPMFORGE_CONFIG="/etc/yum.repos.d/rpmforge.repo"
SELINUX_CONFIG="/etc/selinux/config"
TABLE_PREFIX_BZ="bz_"
TABLE_PREFIX_IBK="ibk_"
TABLE_PREFIX_IT="it_"
TABLE_PREFIX_SF="sf_"
TABLE_PREFIX_ST="st_"
TEMPLATE_PSIPROBE_VERSION="2.3.3"
TEMPLATE_PSIPROBE_FILE="probe-$TEMPLATE_PSIPROBE_VERSION.zip"
TEMPLATE_PSIPROBE_DOWNLOAD_URL="https://psi-probe.googlecode.com/files/$TEMPLATE_PSIPROBE_FILE"
TEMPLATE_DIR_ISOCHRONE="/vagrant"
TOMCAT_VERSION="8.0.9"
TOMCAT_FILE="apache-tomcat-$TOMCAT_VERSION.tar.gz"
TOMCAT_DOWNLOAD_URL="http://tweedo.com/mirror/apache/tomcat/tomcat-8/v$TOMCAT_VERSION/bin/$TOMCAT_FILE"
TOMCAT_MEMORY_OPTS="-Xmx2048m -Xms512m"
TOMCAT_NAME="tomcat"
TOMCAT_USER="tomcat"
TOMCAT_WEBAPP_DIR="$DEPLOY_DIR/$TOMCAT_NAME/webapps"
TOPOLOGY_TOLERANCE=0.0005
############################
# OS check & configuration #
############################
IS_64_BIT=false
if [ "x86_64" == $(uname -m) ]; then
IS_64_BIT=true
fi
DISTRI_FILE="/etc/redhat-release"
if [ ! -f "$DISTRI_FILE" ]; then
DISTRI_FILE="/etc/issue"
fi
DISTRI_NAME=$(cat "$DISTRI_FILE" | head -n 1)
DISTRI_SUPPORTED=false
DISTRI_TYPE="Fedora 20"
DISTRI=$(printf "$DISTRI_NAME" | cut -d " " -f 1)
if [ "$DISTRI" == "CentOS" ]; then
if printf "$DISTRI_NAME" | egrep -q " 6." ; then
DISTRI_TYPE="CentOS 6"
POSTGRESQL_SHORT_VERSION="93"
POSTGRESQL_VERSION="9.3"
REPO_ELGIS="http://elgis.argeo.org/repos/6/elgis-release-6-6_0.noarch.rpm"
REPO_EPEL="http://fedora.aau.at/epel/6/i386/epel-release-6-8.noarch.rpm"
REPO_POSTGRESQL_32="http://yum.postgresql.org/$POSTGRESQL_VERSION/redhat/rhel-6-i386/pgdg-centos$POSTGRESQL_SHORT_VERSION-$POSTGRESQL_VERSION-1.noarch.rpm"
REPO_POSTGRESQL_64="http://yum.postgresql.org/$POSTGRESQL_VERSION/redhat/rhel-6-x86_64/pgdg-centos$POSTGRESQL_SHORT_VERSION-$POSTGRESQL_VERSION-1.noarch.rpm"
DISTRI_SUPPORTED=true
elif printf "$DISTRI_NAME" | egrep -q " 7." ; then
DISTRI_TYPE="CentOS 7"
POSTGRESQL_SHORT_VERSION="94"
POSTGRESQL_VERSION="9.4"
REPO_EPEL="http://fedora.aau.at/epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpm"
REPO_POSTGRESQL_64="http://yum.postgresql.org/$POSTGRESQL_VERSION/redhat/rhel-7-x86_64/pgdg-centos$POSTGRESQL_SHORT_VERSION-$POSTGRESQL_VERSION-1.noarch.rpm"
REPO_RPMFORGE_64="http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm"
# Activate centos 7 as soon as hdf5 is available as dependency for postgis (using epel); remember to update documentation of this file at the very top
# DISTRI_SUPPORTED=$IS_64_BIT
fi
elif [ "$DISTRI" == "Fedora"]; then
if echo $DISTRI_NAME | egrep -q " 20 (Heisenbug)" ; then
DISTRI_SUPPORTED=true
fi
fi
if ! $DISTRI_SUPPORTED; then
echo "Unsupported OS. Only CentOS 6, CentOS 7 (64bit) and Fedora 20 are supported!"
exit 1;
fi
############################
# Calculated configuration #
############################
INSTALL_JAVA=false
INSTALL_MAVEN=false
INSTALL_TOMCAT=false
if $IS_LOCAL_TEST_DEPLOY; then
# Some projects will never be installed when in local deploy mode (like latest release/snapshot from nexus)
INSTALL_PROJECT_CANIGET2=false
INSTALL_PROJECT_PSIPROBE=false
INSTALL_ISOCHRONE_LOCAL=false
INSTALL_ISOCHRONE_RELEASE=false
INSTALL_ISOCHRONE_SNAPSHOT=false
else
# Some projects will only be installed when in local deploy mode (like pgRouting that can be used for performance comparisons)
INSTALL_PGROUTING=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
if [ ! $POSTGRESQL_VERSION == "" ]; then
POSTGRESQL_DATA_DIR="/var/lib/pgsql/$POSTGRESQL_VERSION/data"
POSTGRESQL_SERVICE_NAME="postgresql-$POSTGRESQL_VERSION"
fi
POSTGRESQL_GLOB_CONF="$POSTGRESQL_DATA_DIR/postgresql.conf"
POSTGRESQL_HBA_CONF="$POSTGRESQL_DATA_DIR/pg_hba.conf"
POSTGRESQL_PKG_NAME="postgresql$POSTGRESQL_SHORT_VERSION"
if $IS_64_BIT; then
REPO_POSTGRESQL="$REPO_POSTGRESQL_64"
REPO_RPMFORGE="$REPO_RPMFORGE_64"
JAVA_FILE="$JAVA_FILE_64"
else
REPO_POSTGRESQL="$REPO_POSTGRESQL_32"
REPO_RPMFORGE="$REPO_RPMFORGE_32"
JAVA_FILE="$JAVA_FILE_32"
fi
############################
# Function definitions #
############################
fn_download()
{
local FILE="$1"
local 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()
{
local FILE="$1"
local 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()
{
local NAME="$1"
local OSM_FILE="$2"
local OSM_FILE_FILTERED="$3"
local BOUNDING="$4"
local SQL_EXPORT_FILE="$5"
local TABLE_PREFIX="$6"
local VALID_SQL_EXPORT=false
if $INSTALL_POSTGIS && $IMPORT_SCHEDULES; then
if [ -n "$SQL_EXPORT_FILE" ]; then
VALID_SQL_EXPORT=true
fi
fi
echo "Importing data for region of $NAME"
if ! $VALID_SQL_EXPORT && ! $INSTALL_PGROUTING && ! $INSTALL_NEO4J_SPATIAL; then
echo " - skipping import"
return 1
fi
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 (no cached file found)"
OSM_FILENAME=$DOWNLOAD_DIR/${OSM_FILE##*/}
fn_download_newer $OSM_FILENAME $OSM_DOWNLOAD_MIRROR/$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_osmData_$NAME.log" 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_osmData_$NAME.log" 2>&1
fi
fi
if $VALID_SQL_EXPORT; then
echo " - downloading sql export"
fn_download_newer $DOWNLOAD_DIR/$SQL_EXPORT_FILE $CACHE_DIR_REMOTE/$SQL_EXPORT_FILE
cp $DOWNLOAD_DIR/$SQL_EXPORT_FILE $DEPLOY_DIR/$SQL_EXPORT_FILE >> /dev/null 2>&1
echo " - importing sql export into postgis database"
gunzip -c $DEPLOY_DIR/$SQL_EXPORT_FILE | PGPASSWORD="$PG_DB_PASSWORD" psql -U "$PG_DB_USER" -h localhost "$PG_DB_NAME" >> "$WORKING_DIR/import_schedule_$NAME.log" 2>&1
echo " - fixing table 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
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_$NAME.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_$NAME.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
return 0
}
fn_service_start()
{
local SERVICE_NAME="$1"
touch "service_start_$SERVICE_NAME.log" 2>&1
if [ "$DISTRI_TYPE" == "CentOS 6" ]; then
service $SERVICE_NAME start >> "service_start_$SERVICE_NAME.log" 2>&1
chkconfig $SERVICE_NAME on "service_start_$SERVICE_NAME.log" 2>&1
else
systemctl start $SERVICE_NAME >> "service_start_$SERVICE_NAME.log" 2>&1
systemctl enable $SERVICE_NAME >> "service_start_$SERVICE_NAME.log" 2>&1
fi
sleep 2
}
fn_service_stop()
{
local SERVICE_NAME="$1"
touch "service_stop_$SERVICE_NAME.log" 2>&1
if [ "$DISTRI_TYPE" == "CentOS 6" ]; then
service $SERVICE_NAME stop >> "service_stop_$SERVICE_NAME.log" 2>&1
chkconfig $SERVICE_NAME off "service_stop_$SERVICE_NAME.log" 2>&1
else
systemctl stop $SERVICE_NAME >> "service_stop_$SERVICE_NAME.log" 2>&1
systemctl disable $SERVICE_NAME >> "service_stop_$SERVICE_NAME.log" 2>&1
fi
sleep 2
}
START=$(date +%s)
echo ""
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " Performing basic system preparations:"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
############################
# Basic preparations #
############################
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, ...)"
yum -y install gcc gcc-c++ git gzip iptables-services nano nmap sed tar unzip wget >> install_utils.log 2>&1
############################
# Security preparations #
############################
echo "Stopping Firewall and SELinux"
if [ "$DISTRI_TYPE" == "CentOS 6" ]; then
fn_service_stop "iptables"
fn_service_stop "ip6tables"
else
fn_service_stop "firewalld"
fi
if [ $(getenforce) == "Enforcing" ]; then
setenforce 0 >> stop_selinux.log 2>&1
fi
sed -i 's/SELINUX=enabled/SELINUX=disabled/' $SELINUX_CONFIG
############################
# Repository preparations #
############################
if [ ! $REPO_ELGIS == "none" ]; then
# Postgresql 9.4 needs never version of gdal which is not part of epel yet (so we install elgis repo)
if [ $POSTGRESQL_SHORT_VERSION \> "93" ]; then
echo "Installing elgis repository"
fn_download $DOWNLOAD_DIR/elgis-repo.rpm $REPO_ELGIS
yum -y localinstall $DOWNLOAD_DIR/elgis-repo.rpm >> install_elgis_repo.log 2>&1
echo " - enabled"
fi
fi
if [ ! $REPO_EPEL == "none" ]; then
# Epel Repository is needed for dependencies (gdal!) of postgresql/postgis/pgRouting
echo "Installing epel repository"
fn_download $DOWNLOAD_DIR/epel-repo.rpm $REPO_EPEL
yum -y localinstall $DOWNLOAD_DIR/epel-repo.rpm >> install_epel_repo.log 2>&1
echo " - enabled"
fi
if $INSTALL_POSTGRES; then
if [ "$DISTRI" == "CentOS" ]; then
REPO_CONFIG="/etc/yum.repos.d/CentOS-Base.repo"
sed -i 's/\[base\]/\[base\]\nexclude=postgresql\*/' $REPO_CONFIG
sed -i 's/\[updates\]/\[updates\]\nexclude=postgresql\*/' $REPO_CONFIG
fi
echo "Installing $POSTGRESQL_SERVICE_NAME repository"
fn_download $DOWNLOAD_DIR/postgresql-repo.rpm $REPO_POSTGRESQL
yum -y localinstall $DOWNLOAD_DIR/postgresql-repo.rpm >> install_postgresql_repo.log 2>&1
echo " - enabled"
fi
# RpmForge is deactivated by default and has to be explicitly activated when using yum
echo "Installing rpmForge repository"
fn_download_newer $DOWNLOAD_DIR/rpmforge-repo.rpm $REPO_RPMFORGE
yum -y localinstall $DOWNLOAD_DIR/rpmforge-repo.rpm >> install_rpmforge_repo.log 2>&1
echo " - disabled"
sed -i 's/enabled = 1/enabled = 0/' $REPO_RPMFORGE_CONFIG
############################
# Starting boostrap #
############################
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " Bootstrapping the VM:"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "Operating system $DISTRI_NAME"
echo " - osType: $DISTRI_TYPE"
if [ "$DISTRI_TYPE" == "Fedora 20" ]; then
echo " - using untested operating system!!"
fi
if $IS_LOCAL_TEST_DEPLOY; then echo "Starting in local test deploy mode"; 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 $POSTGRESQL_VERSION"; 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 "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "Installing cmake"
yum -y --enablerepo=rpmforge-extras install cmake >> install_cmake.log 2>&1
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_SERVICE_NAME"
yum -y install $POSTGRESQL_PKG_NAME $POSTGRESQL_PKG_NAME-contrib $POSTGRESQL_PKG_NAME-server >> install_postgresql.log 2>&1
echo " - exporting postgresql options"
echo "export PostgreSQL_ROOT=/usr/pgsql-$POSTGRESQL_VERSION" >> /etc/profile.d/postgresql.sh
source /etc/profile.d/postgresql.sh
fi
if $INSTALL_POSTGIS; then
fn_download_newer $DOWNLOAD_DIR/$ARMADILLO_FILE "$ARMADILLO_URL"
yum -y localinstall $DOWNLOAD_DIR/$ARMADILLO_FILE >> install_armadillo.log 2>&1
if [ "$POSTGIS_VERSION" == "auto" ]; then
echo "Installing postgis (from repository)"
yum -y install postgis2_$POSTGRESQL_SHORT_VERSION >> install_postgis.log 2>&1
else
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 "$POSTGIS_GIT_URL" $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
fi
fi
if $INSTALL_POSTGRES_ADMIN; then
echo "Installing phpPgAdmin"
yum -y install phpPgAdmin >> install_phpPgAdmin.log 2>&1
fi
if $INSTALL_PGROUTING; then
if [ "$PGROUTING_VERSION" == "auto" ]; then
echo "Installing pgRouting (from repository)"
yum -y install pgrouting_$POSTGRESQL_SHORT_VERSION >> install_pgRouting.log 2>&1
else
echo "Installing pgRouting dependencies"
yum -y install boost-devel $POSTGRESQL_PKG_NAME-devel $POSTGRESQL_PKG_NAME-libs postgis2_$POSTGRESQL_SHORT_VERSION-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 (from source)"
git clone -q "$PGROUTING_GIT_URL" $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=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
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 " - exporting java options"
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 $TOMCAT_DOWNLOAD_URL
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
echo " - exporting catalina options"
if $INSTALL_GEOSERVER; then
echo "export CATALINA_OPTS=\"-Djava.awt.headless=true $TOMCAT_MEMORY_OPTS -DGEOSERVER_DATA_DIR=$DEPLOY_DIR/geoserver/data\"" >> /etc/profile.d/catalina.sh
else
echo "export CATALINA_OPTS=\"-Djava.awt.headless=true $TOMCAT_MEMORY_OPTS\"" >> /etc/profile.d/catalina.sh
fi
source /etc/profile.d/catalina.sh
fi
if $INSTALL_GEOSERVER; then
echo "Installing geoserver $GEOSERVER_VERSION"
fn_download_newer $DOWNLOAD_DIR/$GEOSERVER_FILE $GEOSERVER_DOWNLOAD_URL
unzip -o -d $TOMCAT_WEBAPP_DIR $DOWNLOAD_DIR/$GEOSERVER_FILE geoserver.war >> install_geoserver.log 2>&1
echo " - copying 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 " - creating 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 "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_SNAPSHOT_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\" version $TEMPLATE_PSIPROBE_VERSION"
echo " - artifact: $TEMPLATE_PSIPROBE_DOWNLOAD_URL"
fn_download_newer $DOWNLOAD_DIR/$TEMPLATE_PSIPROBE_FILE "$TEMPLATE_PSIPROBE_DOWNLOAD_URL"
unzip $DOWNLOAD_DIR/$TEMPLATE_PSIPROBE_FILE 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 "$MAVEN_DOWNLOAD_URL"
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 " - exporting maven options"
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 "$NEO4J_DOWNLOAD_URL"
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 " - enabling neo4j network access"
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 "$NEO4J_SPATIAL_GIT_URL" $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 " - copying 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 " - copying neo4j-spatial into geoserver (from binary)"
fn_download_newer $DOWNLOAD_DIR/neo4j-spatial-$NEO4J_SPATIAL_VERSION-server-plugin.zip "$NEO4J_SPATIAL_PLUGIN_DOWNLOAD_URL"
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 "$OSMOSIS_DOWNLOAD_URL"
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 "$OSM2PGROUTING_GIT_URL" $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 performed!"
echo " Preparing services:"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
if $INSTALL_POSTGRES; then
echo "Initializing postgresql database"
if [ -f "$PostgreSQL_ROOT/bin/postgresql$POSTGRESQL_SHORT_VERSION-setup" ]; then
rm -rf $POSTGRESQL_DATA_DIR
$PostgreSQL_ROOT/bin/postgresql$POSTGRESQL_SHORT_VERSION-setup initdb >> initialize_postgresql.log 2>&1
else
service $POSTGRESQL_SERVICE_NAME initdb >> initialize_postgresql.log 2>&1
fi
sleep 2
echo "Configuring and starting postgresql-server"
cp $SHARED_CONF_DIR/pg_hba.conf $POSTGRESQL_HBA_CONF
echo "listen_addresses = '*'" >> $POSTGRESQL_GLOB_CONF
echo "port = 5432" >> $POSTGRESQL_GLOB_CONF
echo "log_hostname = off" >> $POSTGRESQL_GLOB_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 "Initializing neo4j database"
$DEPLOY_DIR/neo4j/bin/neo4j -h -u $NEO4J_DB_USER install >> initialize_neo4j.log 2>&1
echo " - setting max open file limit for neo4j user"
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
echo "Configuring tomcat webapps (removing unnecessary ones)"
rm -rf "$TOMCAT_WEBAPP_DIR/docs"
rm -rf "$TOMCAT_WEBAPP_DIR/examples"
rm -rf "$TOMCAT_WEBAPP_DIR/host-manager"
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 "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " Services prepared!"
echo " Starting services:"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
if $INSTALL_HTTPD; then
fn_service_start "httpd"
fi
if $INSTALL_POSTGRES; then
fn_service_start "$POSTGRESQL_SERVICE_NAME"
fi
if $INSTALL_NEO4J; then
fn_service_start "$NEO4J_SERVICE_NAME"
fi
if $INSTALL_TOMCAT; then
fn_service_start "$TOMCAT_NAME"
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 started!"
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
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "Data imported!"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
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... the system can now be used"
echo " Provisioning time: $TOTAL seconds"
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"