#!/bin/bash -e #For use on clean Rocky Linux 9 only!!! #Cited, Inc. Wilmington, Delaware #Description: GeoHelm Rocky Linux installer # default menu options WEBMIN_MODS='geoserver postgis certbot' TOMCAT_MAJOR=9 JAVA_FLAVOR='OpenJDK' GEOSERVER_WEBAPP='Yes' #Set application user and database name APPUSER='pgis' APPDB='postgisftw' APPUSER_PG_PASS=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32); #Get hostname HNAME=$(hostname | sed -n 1p | cut -f1 -d' ' | tr -d '\n') #Set postgresql version and password (random) PG_VER='15' PG_PASS=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32); BUILD_SSL='no' #Create certificate for use by postgres function make_cert_key(){ name=$1 SSL_PASS=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32); if [ $(grep -m 1 -c "ssl ${name} pass" /root/auth.txt) -eq 0 ]; then echo "ssl ${name} pass: ${SSL_PASS}" >> /root/auth.txt else sed -i.save "s/ssl ${name} pass:.*/ssl ${name} pass: ${SSL_PASS}/" /root/auth.txt fi openssl genrsa -des3 -passout pass:${SSL_PASS} -out ${name}.key 2048 openssl rsa -in ${name}.key -passin pass:${SSL_PASS} -out ${name}.key chmod 400 ${name}.key openssl req -new -key ${name}.key -days 3650 -out ${name}.crt -passin pass:${SSL_PASS} -x509 -subj "/C=CA/ST=Frankfurt/L=Frankfurt/O=${HNAME}/CN=${HNAME}/emailAddress=info@acugis.com" } function disable_pg_versions(){ # disable other PG versions repos dnf config-manager --set-disabled pgdg* dnf config-manager --set-enabled pgdg${PG_VER} pgdg-common } #Install PostgreSQL function install_postgresql(){ #1. Install PostgreSQL repo PG_V2=$(echo ${PG_VER} | sed 's/\.//') if [ ! -f /etc/yum.repos.d/pgdg-redhat-all.repo ]; then rpm -ivh https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm fi #2. Disable CentOS repo for PostgreSQL if [ $(grep -m 1 -c 'exclude=postgresql' /etc/yum.repos.d/CentOS-Base.repo) -eq 0 ]; then sed -i.save '/\[base\]/a\exclude=postgresql*' /etc/yum.repos.d/CentOS-Base.repo sed -i.save '/\[updates\]/a\exclude=postgresql*' /etc/yum.repos.d/CentOS-Base.repo fi #3. Install PostgreSQL # postgresql${PG_V2}-devel* dnf install -y postgresql${PG_V2} postgresql${PG_VER}-devel postgresql${PG_V2}-server postgresql${PG_V2}-libs postgresql${PG_V2}-contrib postgresql${PG_V2}-plperl postgresql${PG_V2}-plpython3 postgresql${PG_V2}-pltcl postgresql${PG_V2}-odbc export PGDATA='/var/lib/pgsql/${PG_VER}/data' export PATH="${PATH}:/usr/pgsql-${PG_VER}/bin/" if [ $(grep -m 1 -c '/usr/pgsql-${PG_VER}/bin/' /etc/environment) -eq 0 ]; then echo "PATH=${PATH}" >> /etc/environment fi if [ $(grep -m 1 -c 'PGDATA' /etc/environment) -eq 0 ]; then echo "PGDATA=${PGDATA}" >> /etc/environment fi if [ ! -f /var/lib/pgsql/${PG_VER}/data/pg_hba.conf ]; then sudo -u postgres /usr/pgsql-${PG_VER}/bin/initdb -D /var/lib/pgsql/${PG_VER}/data fi systemctl start postgresql-${PG_VER} #5. Set postgres Password if [ $(grep -m 1 -c 'pg pass' /root/auth.txt) -eq 0 ]; then sudo -u postgres psql 2>/dev/null -c "alter user postgres with password '${PG_PASS}'" echo "pg pass: ${PG_PASS}" > /root/auth.txt fi #6. Configure ph_hba.conf cat >/var/lib/pgsql/${PG_VER}/data/pg_hba.conf <> /root/auth.txt } #Load Natual Earth data for testing function load_pg_data(){ pushd /home/pgis wget --quiet https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_0_countries.zip unzip ne_50m_admin_0_countries.zip rm -f ne_50m_admin_0_countries.zip chown pgis:pgis ne_50m_admin_0_countries.* shp2pgsql -I -s 4326 -W "latin1" ne_50m_admin_0_countries.shp countries | sudo -u ${APPUSER} psql -d ${APPDB} #load routing data wget --quiet http://download.osgeo.org/livedvd/data/osm/Boston_MA/Boston_MA.osm.bz2 bunzip2 Boston_MA.osm.bz2 osm2pgrouting --username ${APPUSER} --password ${APPUSER_PG_PASS} --host 127.0.0.1 --dbname ${APPDB} --file Boston_MA.osm rm -f Boston_MA.osm popd } #Install pg_tileserv and config to run as a service function install_pg_tileserv(){ TILESERV_HOME='/opt/pg_tileserv' mkdir -p ${TILESERV_HOME} pushd ${TILESERV_HOME} wget --quiet -P/tmp https://postgisftw.s3.amazonaws.com/pg_tileserv_latest_linux.zip unzip /tmp/pg_tileserv_latest_linux.zip rm -f /tmp/pg_tileserv_latest_linux.zip pushd config sed -i.save "s|# DbConnection = \"postgresql://username:password@host/dbname\"|DbConnection = \"postgresql://${APPUSER}:${APPUSER_PG_PASS}@localhost/${APPDB}\"|" pg_tileserv.toml.example sed -i.save "s|^AssetsPath =.*|AssetsPath = \"${TILESERV_HOME}/assets\"|g" pg_tileserv.toml.example sed -i.save 's/^[# ]*HttpPort = .*/HttpPort = 7800/' pg_tileserv.toml.example sed -i.save 's/^[# ]*CacheTTL = .*/CacheTTL = 600/' pg_tileserv.toml.example sed -i.save 's/^HttpsPort =/#HttpsPort =/' pg_tileserv.toml.example mv pg_tileserv.toml.example pg_tileserv.toml popd popd chown -R ${APPUSER}:${APPUSER} ${TILESERV_HOME} #The service file cat >/etc/systemd/system/pg_tileserv.service </etc/systemd/system/pg_featureserv.service < \$1 -- Find nearest node. LIMIT 1; \$\$ LANGUAGE 'sql' STABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION ${APPDB}.boston_find_route( from_lon FLOAT8 DEFAULT -71.07246980438231, from_lat FLOAT8 DEFAULT 42.3439930733156, to_lon FLOAT8 DEFAULT -71.06028184661864, to_lat FLOAT8 DEFAULT 42.354491297186655) RETURNS TABLE(path_seq integer, edge bigint, cost double precision, agg_cost double precision, geom geometry) AS \$\$ BEGIN RETURN QUERY WITH clicks AS ( SELECT ST_SetSRID(ST_Point(from_lon, from_lat), 4326) AS start, ST_SetSRID(ST_Point(to_lon, to_lat), 4326) AS stop ) SELECT dijk.path_seq, dijk.edge, dijk.cost, dijk.agg_cost, ways.the_geom AS geom FROM ways CROSS JOIN clicks JOIN pgr_dijkstra( 'SELECT gid as id, source, target, length_m as cost, length_m as reverse_cost FROM ways', -- source boston_nearest_id(clicks.start), -- target boston_nearest_id(clicks.stop) ) AS dijk ON ways.gid = dijk.edge; END; \$\$ LANGUAGE 'plpgsql' STABLE STRICT PARALLEL SAFE; CMD_EOF #get the routing web UI sed -i.save " s/var serverName =.*/var serverName = '${HNAME}'/ s/:7800\/public.ways/:7800\/tile\/public.ways/ " /var/www/html/openlayers-pgrouting.html systemctl restart pg_tileserv pg_featureserv } function info_for_user() { #End message for user echo -e "Installation is now completed." echo -e "Access pg-tileserv at ${HNAME}:7800" echo -e "Access pg-featureserv at ${HNAME}:9000" echo -e "Access pg-routing at ${HNAME}/openlayers-pgrouting.html" echo -e "postgres and crunchy pg passwords are saved in /root/auth.txt file" if [ ${BUILD_SSL} == 'yes' ]; then if [ ! -f /etc/letsencrypt/live/${HNAME}/privkey.pem ]; then echo 'SSL Provisioning failed. Please see geohelm.docs.acugis.com for troubleshooting tips.' else echo 'SSL Provisioning Success.' fi fi } function setup_user(){ useradd -m ${APPUSER} echo "${APPDB}:${APPUSER}:${APPUSER_PG_PASS}" >/home/${APPUSER}/.pgpass chown ${APPUSER}:${APPUSER} /home/${APPUSER}/.pgpass chmod 0600 /home/${APPUSER}/.pgpass } function install_bootstrap_app(){ wget --quiet -P/tmp https://github.com/AcuGIS/GeoHelm/archive/refs/heads/master.zip unzip /tmp/master.zip -d/tmp cp -r /tmp/GeoHelm-master/app/* /var/www/html/ mv /tmp/GeoHelm-master/app/data /opt/ rm -rf /tmp/master.zip #update app find /var/www/html/ -type f -not -path "/var/www/html/latest/*" -name "*.html" -exec sed -i.save "s/MYLOCALHOST/${HNAME}/g" {} \; sed -i.save "s/MYPGISPASSWORD/${APPUSER_PG_PASS}/" /var/www/html/get-json.php } function install_openlayers(){ OL_VER=$(wget -q -L -O- https://github.com/openlayers/openlayers/releases/latest | grep 'Release' | sed 's/.*v\([0-9\.]\+\).*/\1/') wget --quiet -P/tmp "https://github.com/openlayers/openlayers/releases/download/v${OL_VER}/v${OL_VER}-package.zip" mkdir /var/www/html/OpenLayers pushd /var/www/html/OpenLayers unzip -u /tmp/v${OL_VER}-package.zip popd rm -f /tmp/v${OL_VER}-package.zip chown -R apache:apache /var/www/html/OpenLayers } function install_leafletjs(){ LL_VER=$(wget -q -O- 'https://leafletjs.com/download.html' | sed -n 's/.*\/leaflet\/v\([0-9\.]\+\)\/leaflet\.zip.*/\1/p' | sort -rn | head -1) wget --quiet -P/tmp "https://leafletjs-cdn.s3.amazonaws.com/content/leaflet/v${LL_VER}/leaflet.zip" unzip /tmp/leaflet.zip -d /var/www/html/leafletjs rm -f /tmp/leaflet.zip chown -R apache:apache /var/www/html/leafletjs dnf install -y https://rpms.remirepo.net/enterprise/remi-release-9.rpm dnf module enable php:remi-8.1 -y dnf install php-{common,gmp,fpm,curl,intl,pdo,mbstring,gd,xml,cli,zip,pgsql} -y } function install_nlohmann(){ wget --quiet -P/tmp https://github.com/nlohmann/json/releases/download/v3.11.2/include.zip pushd /usr/ unzip /tmp/include.zip popd rm -rf /tmp/include.zip } function install_osm2pgsql_source(){ dnf install -y cmake bzip2-devel git zlib-devel expat-devel lua-devel boost-devel wget -P/tmp https://github.com/openstreetmap/osm2pgsql/archive/master.zip unzip -ou /tmp/master.zip rm -f /tmp/master.zip pushd osm2pgsql-master mkdir build pushd build cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr .. make -j $(cat /proc/cpuinfo | grep -c processor) make install popd popd rm -rf osm2pgsql-master } function install_osm2pgrouting_source(){ dnf install -y libpqxx-devel wget -P/tmp https://github.com/pgRouting/osm2pgrouting/archive/master.zip unzip -ou /tmp/master.zip rm -rf /tmp/master.zip pushd osm2pgrouting-main mkdir build pushd build cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr -DPOSTGRESQL_LIBRARIES="$(pg_config --libdir)/libpq.so" .. make -j $(cat /proc/cpuinfo | grep -c processor) make install popd popd rm -rf osm2pgrouting-main } function install_postgis_pkgs(){ dnf install -y postgis33_${PG_VER} postgis33_${PG_VER}-client pgrouting_${PG_VER} #osm2pg{sql,routing} are not available in Rocky Linux dnf install -y cmake make gcc-c++ boost-devel expat-devel zlib-devel \ bzip2-devel proj-devel lua-devel libpq-devel libpqxx-devel } function install_webmin(){ wget -P/tmp 'https://download.webmin.com/developers-key.asc' rpm --import /tmp/developers-key.asc || true cp -f /tmp/developers-key.asc /etc/pki/rpm-gpg/RPM-GPG-KEY-webmin-developers cat >/etc/yum.repos.d/webmin.repo <<EOF [Webmin] name=Webmin Distribution Neutral baseurl=https://download.webmin.com/download/newkey/yum enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-webmin-developers EOF dnf --nogpgcheck install -y webmin tar rsync mkdir -p /etc/webmin/authentic-theme cp -r /var/www/html/portal/* /etc/webmin/authentic-theme } function install_geoserver_module(){ pushd /tmp/GeoHelm-master/ tar -czf geoserver.wbm.gz geoserver rm -rf geoserver /usr/libexec/webmin/install-module.pl geoserver.wbm.gz rm -rf geoserver.wbm.gz popd } function install_postgis_module(){ pushd /tmp/GeoHelm-master/ rm -f postgis/setup.cgi tar -czf postgis.wbm.gz postgis rm -rf postgis /usr/libexec/webmin/install-module.pl postgis.wbm.gz rm -rf postgis.wbm.gz popd } function install_certbot_module(){ dnf install -y python3-certbot-apache certbot mod_ssl systemctl restart httpd pushd /opt/ wget --quiet https://github.com/cited/Certbot-Webmin-Module/archive/master.zip unzip master.zip mv Certbot-Webmin-Module-master certbot tar -czf /opt/certbot.wbm.gz certbot rm -rf certbot master.zip /usr/libexec/webmin/install-module.pl certbot.wbm.gz rm -rf certbot.wbm.gz popd } function install_tomcat(){ #dnf install -y haveged if [ ! -d /home/tomcat ]; then useradd -m tomcat fi cd /home/tomcat if [ ! -d apache-tomcat-${TOMCAT_VER} ]; then if [ ! -f /tmp/apache-tomcat-${TOMCAT_VER}.tar.gz ]; then wget -q -P/tmp "https://archive.apache.org/dist/tomcat/tomcat-${TOMCAT_MAJOR}/v${TOMCAT_VER}/bin/apache-tomcat-${TOMCAT_VER}.tar.gz" fi tar xzf /tmp/apache-tomcat-${TOMCAT_VER}.tar.gz chown -R tomcat:tomcat apache-tomcat-${TOMCAT_VER} rm -rf /tmp/apache-tomcat-${TOMCAT_VER}.tar.gz fi if [ $(grep -m 1 -c CATALINA_HOME /etc/environment) -eq 0 ]; then cat >>/etc/environment <<EOF CATALINA_HOME=/home/tomcat/apache-tomcat-${TOMCAT_VER} CATALINA_BASE=/home/tomcat/apache-tomcat-${TOMCAT_VER} EOF fi TOMCAT_MANAGER_PASS=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32); TOMCAT_ADMIN_PASS=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c32); if [ $(grep -m 1 -c 'tomcat manager pass' /root/auth.txt) -eq 0 ]; then echo "tomcat manager pass: ${TOMCAT_MANAGER_PASS}" >> /root/auth.txt else sed -i.save "s/tomcat manager pass: .*/tomcat manager pass: ${TOMCAT_MANAGER_PASS}/" /root/auth.txt fi if [ $(grep -m 1 -c 'tomcat admin pass' /root/auth.txt) -eq 0 ]; then echo "tomcat admin pass: ${TOMCAT_ADMIN_PASS}" >> /root/auth.txt else sed -i.save "s/tomcat admin pass: .*/tomcat admin pass: ${TOMCAT_ADMIN_PASS}/" /root/auth.txt fi cat >/home/tomcat/apache-tomcat-${TOMCAT_VER}/conf/tomcat-users.xml <<EOF <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="manager-gui" /> <user username="manager" password="${TOMCAT_MANAGER_PASS}" roles="manager-gui" /> <role rolename="admin-gui" /> <user username="admin" password="${TOMCAT_ADMIN_PASS}" roles="manager-gui,admin-gui" /> </tomcat-users> EOF #folder is created after tomcat is started, but we need it now mkdir -p /home/tomcat/apache-tomcat-${TOMCAT_VER}/conf/Catalina/localhost/ cat >/home/tomcat/apache-tomcat-${TOMCAT_VER}/conf/Catalina/localhost/manager.xml <<EOF <Context privileged="true" antiResourceLocking="false" docBase="\${catalina.home}/webapps/manager"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*\$" /> </Context> EOF chown -R tomcat:tomcat /home/tomcat cat >>"${CATALINA_HOME}/bin/setenv.sh" <<CMD_EOF CATALINA_PID="${CATALINA_HOME}/temp/tomcat.pid" JAVA_OPTS="\${JAVA_OPTS} -server -Djava.awt.headless=true -Dorg.geotools.shapefile.datetime=false -XX:+UseParallelGC -XX:ParallelGCThreads=4 -Dfile.encoding=UTF8 -Duser.timezone=UTC -Djavax.servlet.request.encoding=UTF-8 -Djavax.servlet.response.encoding=UTF-8 -DGEOSERVER_CSRF_DISABLED=true -DPRINT_BASE_URL=http://localhost:8080/geoserver/pdf -Dgwc.context.suffix=gwc" CMD_EOF cat >/etc/systemd/system/tomcat.service <<EOF [Unit] Description=Tomcat ${TOMCAT_VER} After=multi-user.target [Service] User=tomcat Group=tomcat WorkingDirectory=${CATALINA_HOME} Type=forking Restart=always EnvironmentFile=/etc/environment ExecStart=$CATALINA_HOME/bin/startup.sh ExecStop=$CATALINA_HOME/bin/shutdown.sh 60 -force [Install] WantedBy=multi-user.target EOF if [ $(sestatus | grep -cm1 enabled) -eq 1 ]; then find ${CATALINA_HOME}/bin/ -type f -name "*.sh" -exec semanage fcontext --add --type initrc_exec_t {} \; restorecon -rv ${CATALINA_HOME}/bin fi systemctl daemon-reload systemctl enable tomcat systemctl start tomcat } function install_geoserver(){ if [ ! -f /tmp/geoserver-${GEO_VER}-war.zip ]; then wget -P/tmp http://sourceforge.net/projects/geoserver/files/GeoServer/${GEO_VER}/geoserver-${GEO_VER}-war.zip fi unzip -ou /tmp/geoserver-${GEO_VER}-war.zip -d/tmp/ mv /tmp/geoserver.war ${CATALINA_HOME}/webapps/ chown -R tomcat:tomcat ${CATALINA_HOME}/webapps/geoserver.war rm -f /tmp/geoserver-${GEO_VER}-war.zip cat >>/etc/httpd/conf.d/geoserver.conf <<EOF ProxyPass /geoserver http://localhost:8080/geoserver ProxyPassReverse /geoserver http://localhost:8080/geoserver EOF service tomcat restart while [ ! -f ${CATALINA_HOME}/webapps/geoserver/WEB-INF/web.xml ]; do sleep 1 done sed -i.save '/<\/web-app>/d' ${CATALINA_HOME}/webapps/geoserver/WEB-INF/web.xml cat >>${CATALINA_HOME}/webapps/geoserver/WEB-INF/web.xml <<CAT_EOF <context-param> <param-name>PROXY_BASE_URL</param-name> <param-value>https://${HNAME}/geoserver</param-value> </context-param> </web-app> CAT_EOF service tomcat restart } function install_java(){ dnf install -y java-11-openjdk-headless } function menu(){ # disable error flag set +e SUITE_FLAVOR=$(whiptail --title "GeoHelm Installer" --menu \ "Select the GeoHelm version you want to install:" 20 78 4 \ "GeoHelm Full Installation" " " 3>&1 1>&2 2>&3) exitstatus=$? if [ $exitstatus != 0 ]; then echo "GeoHelm installation cancelled." exit 1 fi # set options based on flavor we have case ${SUITE_FLAVOR} in "GeoHelm Full Installation") ;; esac whiptail --title "Hostname is $(hostname -f)" --yesno \ --yes-button "Continue" --no-button "Quit" \ "Be sure to set the hostname if you wish to use SSL" 8 78 exitstatus=$? if [ $exitstatus != 0 ]; then exit 0 fi whiptail --title "GeoHelm can provision SSL for ${HNAME}" --yesno \ "Provision SSL for ${HNAME}?" 8 78 exitstatus=$? if [ $exitstatus == 0 ]; then BUILD_SSL='yes' fi # enable error flag set -e echo "Begining installation:" echo -e "\tSuite Version: ${SUITE_FLAVOR}" echo -e "\tControl Panel Modules: ${WEBMIN_MODS}" echo -e "\tTomcat Version: ${TOMCAT_MAJOR}" echo -e "\tJava Version: ${JAVA_FLAVOR}" } function install_deps(){ touch /root/auth.txt dnf module disable -y postgresql dnf config-manager --enable crb # PowerTools dnf install -y wget unzip tar httpd bzip2 epel-release policycoreutils-python-utils # Get Tomcat latest version and set CATALINA_HOME TOMCAT_VER=$(wget -q -O- --no-check-certificate https://archive.apache.org/dist/tomcat/tomcat-${TOMCAT_MAJOR}/ | sed -n "s|.*<a href=\"v\(${TOMCAT_MAJOR}\.[0-9.]\+\)/\">v.*|\1|p" | sort -V | tail -n 1) if [ -z "${TOMCAT_VER}" ]; then echo "Error: Failed to get tomcat version"; exit 1; fi CATALINA_HOME="/home/tomcat/apache-tomcat-${TOMCAT_VER}" GEO_VER=$(wget http://geoserver.org/release/stable/ -O- 2>/dev/null | sed -n 's/^[ \t]\+<h1>GeoServer \(.*\)<\/h1>.*/\1/p') cat >/etc/httpd/conf.d/default.conf <<CAT_EOF <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ServerName ${HNAME} </VirtualHost> CAT_EOF } function setup_firewalld(){ #apache and django app firewall-cmd --permanent --zone=public --add-port=80/tcp firewall-cmd --permanent --zone=public --add-port=443/tcp firewall-cmd --permanent --zone=public --add-port=8080/tcp firewall-cmd --permanent --zone=public --add-port=10000/tcp #crunchy services firewall-cmd --permanent --zone=public --add-port=7800/tcp firewall-cmd --permanent --zone=public --add-port=9000/tcp systemctl reload firewalld sleep 10; } function setup_selinux(){ #allow apache port for django app semanage port -a -t http_port_t -p tcp 7800 semanage port -m -t http_port_t -p tcp 9000 setsebool -P httpd_can_network_connect 1 } function whiptail_gauge(){ local MAX_STEPS=${#STEPS[@]} let STEP_PERC=100/MAX_STEPS local perc=0 for step in "${!STEPS[@]}"; do echo "XXX" echo $perc echo "${STEPS[step]}\\n" echo "XXX" ${CMDS[$step]} 1>"/tmp/${CMDS[$step]}.log" 2>&1 let perc=perc+STEP_PERC || true done | whiptail --gauge "Please wait while install completes..." 6 50 0 } function provision_ssl(){ /bin/bash /tmp/build-ssl.sh || true } ################################################################################ menu; declare -x STEPS=( 'Checking Requirements...' 'Installing Demo Data....' 'Installing Libraries....' 'Installing LeafletJS Apps...' 'Setting Up Users...' 'Installing PostgreSQL Repository....' 'Installing PostGIS Packages....' 'Installing NLOHMAN/JSON lib...' 'Compiling osm2pgsql' 'Compiling osm2pgrouting' 'Creating Crunchy Database....' 'Loading Crunchy Data...' 'Installing pg_tileserv' 'Installing pg_featurserv' 'Installing pg_routing' 'Installing Java....' ) declare -x CMDS=( 'install_deps' 'install_bootstrap_app' 'install_openlayers' 'install_leafletjs' 'setup_user' 'install_postgresql' 'install_postgis_pkgs' 'install_nlohmann' 'install_osm2pgsql_source' 'install_osm2pgrouting_source' 'crunchy_setup_pg' 'load_pg_data' 'install_pg_tileserv' 'install_pg_featureserv' 'install_pg_routing' 'install_java' ) if [ "${GEOSERVER_WEBAPP}" == 'Yes' ]; then STEPS+=("Installing Apache Tomcat...." "Configure Geoserver WAR....") CMDS+=("install_tomcat" "install_geoserver") fi STEPS+=("Installing Webmin...") CMDS+=("install_webmin") for mod in ${WEBMIN_MODS}; do mod=$(echo ${mod} | sed 's/"//g') STEPS+=("${mod} module") CMDS+=("install_${mod}_module") done # setup SELinux only if enabled if [ $(sestatus | grep -cm1 enabled) -eq 1 ]; then STEPS+=("SELinux setup") CMDS+=("setup_selinux") fi # setup firewalld only if installed and enabled if [ -f /usr/bin/firewall-cmd ] && [ $(firewall-cmd --state | grep -cm1 running) -eq 1 ]; then STEPS+=("Firewalld setup") CMDS+=("setup_firewalld") fi if [ ${BUILD_SSL} == 'yes' ]; then STEPS+=("Provisioning SSL") CMDS+=('provision_ssl') fi # -------------------- # whiptail_gauge; info_for_user