#!/bin/bash # # Automated installation and patching of a per-user ArcGIS Server 10.1 # for Linux to be used in standalone fashion. # # (1) Install the software non-interactively # (2) Kill any processes the installer started (license manager) # (3) Patch the init_Xvfb.sh script to behave more nicely # (4) Emit a Python shell startup script for the end user # # Copyright (c) 2013 # Dr. Jeffrey Frey # Network & Systems Services, University of Delaware # Newark, DE 19716 # # $Id: install-arcgis-10.1,v 1.1 2013/06/20 16:48:54 frey Exp $ # # # Base directory for our installation bits: # DATADIR=/opt/shared/arcgis/data/10.1 # # The installation bits themselves: # PROVISIONING_FILE="${DATADIR}/ArcGISforServerAdvancedEnterprise_server_194954.prvc" INSTALL_PACKAGE="${DATADIR}/ArcGIS_Server_Ent_Linux_101_129046" # # Due to memory limits on the head node and the installer's use of # a memory hungry Java VM, installation must be done on a compute node. # If running on a compute node via qlogin, then use the temp directory # Grid Engine gave us. Otherwise, use the /scratch disk. # HOST=`/bin/hostname | grep '^n[0-9]\{3\}$'` if [ -n "$HOST" ]; then # Don't use /tmp for unpacking the files! if [ -n "$TMPDIR" ]; then IATEMPDIR="$TMPDIR" else IATEMPDIR=/scratch fi export IATEMPDIR fi # # Collect and validate our command line arguments: # INSTALLDIR="$1" if [ -z "$1" ]; then echo "usage:" echo "" echo " $0 " echo "" exit 1 fi if [ ! -d "$INSTALLDIR" ]; then mkdir -p $INSTALLDIR if [ $? -ne 0 ]; then echo "ERROR: could not create $INSTALLDIR" exit 1 fi else if [ ! -w "$INSTALLDIR" ]; then echo "ERROR: cannot write to $INSTALLDIR" exit 1 fi fi ORIGDIR=`pwd` cd "$INSTALLDIR" INSTALLDIR=`pwd` # # The installer needs a Java VM in order to execute: # if [ -z `type -t vpkg_require` ]; then source /etc/profile.d/valet.sh fi vpkg_require openjdk # # Run the installer: # "${INSTALL_PACKAGE}/ArcGISServer/Setup" \ --mode silent \ --directory "$INSTALLDIR" \ --license-agreement Yes \ --authorization-file "$PROVISIONING_FILE" \ 2> /dev/null if [ $? -ne 0 ]; then echo "Installation failed, removing ${INSTALLDIR}/arcgis..." rm -rf "${INSTALLDIR}/arcgis" cd "$ORIGDIR" exit 1 fi # # Kill any software the installer started for us: # HOW_MANY=`pgrep -f "${INSTALLDIR}/arcgis/server" | wc -l` if [ -n "$HOW_MANY" -a $HOW_MANY -gt 0 ]; then echo "" echo "Killing $HOW_MANY process(es) started by the installer..." pkill -9 -f "${INSTALLDIR}/arcgis/server" fi # Patch the init_Xvfb.sh script: echo "" echo "Patching the init_Xvfb.sh script..." base64 --decode < /dev/null 2>&1 LS0tIGFyY2dpcy9zZXJ2ZXIvZnJhbWV3b3JrL3J1bnRpbWUveHZmYi9pbml0X1h2ZmIuc2gJMjAx Mi0wNC0yNiAxMjoxODozNS4wMDAwMDAwMDAgLTA0MDAKKysrIGFyY2dpcy9zZXJ2ZXIvZnJhbWV3 b3JrL3J1bnRpbWUveHZmYi9pbml0X1h2ZmIuc2gJMjAxMy0wNS0yMSAxMTozNTo0OS40Mzg3OTQy NDcgLTA0MDAKQEAgLTcsNiArNywxNiBAQAogWFZGQlBNSU49NjAwCiBYVkZCUE1BWD02MTkKIAor aWYgWyAteiAiJFhWRkJMT0ciIF07IHRoZW4KKyAgWFZGQkxPRz0iJHtYVkZCSE9NRX0veHZmYl9l cnIubG9nIjsgZXhwb3J0IFhWRkJMT0cKK2ZpCitpZiBbIC16ICIkWFZGQlBJRCIgXTsgdGhlbgor ICBYVkZCUElEPSIke1hWRkJIT01FfS94dmZiLnBpZCI7IGV4cG9ydCBYVkZCUElECitmaQoraWYg WyAteiAiJFhWRkJQT1JURiIgXTsgdGhlbgorICBYVkZCUE9SVEY9IiR7WFZGQkhPTUV9L3h2ZmIu cG9ydCI7IGV4cG9ydCBYVkZCUE9SVEYKK2ZpCisKIGV4cG9ydCBYVkZCSE9NRSBYVkZCUE1JTiBY VkZCUE1BWAogCiAjaW50cm9kdWNlZCB0aGUgaWYgY29uZGl0aW9uIGJlbG93IGZvciBBcmNHSVMg U2VydmVyIGNvbmZpZ3VyYXRpb24gbG9nZ2luZwpAQCAtMTUsOCArMjUsNiBAQAogewogICBpZiBb IC1uICIkWFZGQkRFQlVHIiBdOyB0aGVuCiAgICAgZWNobyAiJDEiCi0gIGVsc2UKLSAgICBlY2hv ICIiCiAgIGZpCiB9CiAKQEAgLTY0LDcgKzcyLDggQEAKICAgICAgICAgICAgIFhWRkJCSU49IiR7 WFZGQkhPTUV9L1JIRUwvWHZmYiIKICAgICAgICAgICBmaQogICAgICAgICBmaQotICAgICAgICAk e1hWRkJCSU59IDoke1hWRkJQT1JUfSAtc2NyZWVuIDAgMTI4MHgxMDI0eDI0ICR7RVNSSUZvbnRQ YXRofSAtYWMgMj4gJHtYVkZCSE9NRX0veHZmYl9lcnIubG9nICYKKyAgICAgICAgJHtYVkZCQklO fSA6JHtYVkZCUE9SVH0gLXNjcmVlbiAwIDEyODB4MTAyNHgyNCAke0VTUklGb250UGF0aH0gLWFj IDI+ICR7WFZGQkxPR30gJgorICAgICAgICBYVkZCQklOUElEPSQhCiAKICAgICAgICAgIyBQYXVz ZSBhIG1vbWVudCBhbmQgdGhlbiBzZWUgaWYgaXQgc3RhcnRlZCB1cCBvay4KICAgICAgICAgc2xl ZXAgMQpAQCAtNzQsNiArODMsNyBAQAogICAgICAgICAgIGVjaG8gIkVSUk9SOiBVbmFibGUgdG8g c3RhcnQgWHZmYiBvbiBwb3J0ICRYVkZCUE9SVC4iCiAgICAgICAgIGVsc2UKICAgICAgICAgICAj IFh2ZmIgc3RhcnRlZCBvay4KKyAgICAgICAgICBlY2hvICRYVkZCQklOUElEID4gJHtYVkZCUElE fQogICAgICAgICAgIGJyZWFrCiAgICAgICAgIGZpCiAgICAgICBmaQpAQCAtOTEsNyArMTAxLDcg QEAKICAgaWYgWyAieCR7WFZGQlBPUlR9eCIgIT0gInh4IiBdCiAgIHRoZW4KICAgICAgICNTdG9y ZSB0aGUgcG9ydCB2YWx1ZSBmb3IgdXNlIHdpdGggQUdTIHN5c3RlbSBwb3J0IGxpc3RpbmcgdXRp bGl0eQotICAgICAgZWNobyAkWFZGQlBPUlQgPiAke1hWRkJIT01FfS94dmZiLnBvcnQKKyAgICAg IGVjaG8gJFhWRkJQT1JUID4gJHtYVkZCUE9SVEZ9CiAgICBmaQogfQogCkBAIC05OSwyNSArMTA5 LDM3IEBACiB7CiAgICBpZiBbICJ4JERJU0FCTEVfQVJDR0lTU0VSVkVSX1ZEUyIgPSAieCIgXQog ICAgdGhlbgotICAgICBYVkZCUE9SVD0kWFZGQlBNSU47ZXhwb3J0IFhWRkJQT1JUCi0gICAgICAK LSAgICAgd2hpbGUgWyAkWFZGQlBPUlQgLWxlICRYVkZCUE1BWCBdCi0gICAgIGRvCi0gICAgICAg cHJvY2Vzc19saXN0PWBwcyAtdSAkTE9HTkFNRSAtbyBwaWQsY21kIHwgZ3JlcCBYdmZiIHwgZ3Jl cCAiJHtYVkZCUE9SVH0gLXNjcmVlbiIgfCBncmVwIC12IGdyZXAgfCB4YXJncyB8IGF3ayAne3By aW50ICQxfSdgCi0gICAgICAgaWYgWyAiJHByb2Nlc3NfbGlzdCIgIT0gIiIgXQotICAgICAgIHRo ZW4KLSAgICAgICAgIGVjaG9fZGJnICJTdG9wcGluZyBYdmZiIG9uIHBvcnQgJFhWRkJQT1JUIgot ICAgICAgICAga2lsbCAtVEVSTSAkcHJvY2Vzc19saXN0Ci0gICAgCisgICAgIGlmIFsgLXIgIiR7 WFZGQlBJRH0iIF07IHRoZW4KKyAgICAgICBraWxsIC1URVJNIGBjYXQgJHtYVkZCUElEfWAKKyAg ICAgICBybSAtZiAiJHtYVkZCUElEfSIKKyAgICAgICBpZiBbIC1yICIke1hWRkJQT1JUfSIgXTsg dGhlbgorICAgICAgICAgWFZGQlBPUlQ9YGNhdCAke1hWRkJQT1JURn1gOyBleHBvcnQgWFZGQlBP UlQKICAgICAgICAgIHJtIC1mIC90bXAvLlgxMS11bml4L1gkWFZGQlBPUlQgPi9kZXYvbnVsbCAy PiYxCiAgICAgICAgICBybSAtZiAvdG1wLy5YMTEtcGlwZS9YJFhWRkJQT1JUID4vZGV2L251bGwg Mj4mMQogICAgICAgICAgcm0gLWYgL3RtcC8uWCRYVkZCUE9SVC1sb2NrID4vZGV2L251bGwgMj4m MQotICAgICBpZiBbIC1mICR7WFZGQkhPTUV9L3h2ZmIucG9ydCBdCisgICAgICAgICBybSAtZiAi JHtYVkZCUE9SVEZ9IgorICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBYVkZCUE9SVD0kWFZG QlBNSU47IGV4cG9ydCBYVkZCUE9SVAorICAgICAgICAKKyAgICAgICB3aGlsZSBbICRYVkZCUE9S VCAtbGUgJFhWRkJQTUFYIF0KKyAgICAgICBkbworICAgICAgICAgcHJvY2Vzc19saXN0PWBwcyAt dSAkTE9HTkFNRSAtbyBwaWQsY21kIHwgZ3JlcCBYdmZiIHwgZ3JlcCAiJHtYVkZCUE9SVH0gLXNj cmVlbiIgfCBncmVwIC12IGdyZXAgfCB4YXJncyB8IGF3ayAne3ByaW50ICQxfSdgCisgICAgICAg ICBpZiBbICIkcHJvY2Vzc19saXN0IiAhPSAiIiBdCiAgICAgICAgICB0aGVuCi0gICAgICAgcm0g LWYgJHtYVkZCSE9NRX0veHZmYi5wb3J0CisgICAgICAgICAgIGVjaG9fZGJnICJTdG9wcGluZyBY dmZiIG9uIHBvcnQgJFhWRkJQT1JUIgorICAgICAgICAgICBraWxsIC1URVJNICRwcm9jZXNzX2xp c3QKKyAgICAgIAorICAgICAgICAgICBybSAtZiAvdG1wLy5YMTEtdW5peC9YJFhWRkJQT1JUID4v ZGV2L251bGwgMj4mMQorICAgICAgICAgICBybSAtZiAvdG1wLy5YMTEtcGlwZS9YJFhWRkJQT1JU ID4vZGV2L251bGwgMj4mMQorICAgICAgICAgICBybSAtZiAvdG1wLy5YJFhWRkJQT1JULWxvY2sg Pi9kZXYvbnVsbCAyPiYxCisgICAgICAgICAgIGlmIFsgLWYgJHtYVkZCUE9SVEZ9IF0KKyAgICAg ICAgICAgdGhlbgorICAgICAgICAgICAgIHJtIC1mICR7WFZGQlBPUlRGfQorICAgICAgICAgICBm aQogICAgICAgICAgZmkKLSAgICAgICBmaQotICAgICAgIFhWRkJQT1JUPWBleHByICRYVkZCUE9S VCArIDFgO2V4cG9ydCBYVkZCUE9SVAotICAgICBkb25lCisgICAgICAgICBYVkZCUE9SVD1gZXhw ciAkWFZGQlBPUlQgKyAxYDtleHBvcnQgWFZGQlBPUlQKKyAgICAgICBkb25lCisgICAgIGZpCiAg ICBmaQogfQo= EOT if [ $? -ne 0 ]; then echo "Failed patching the init_Xvfb.sh script, removing ${INSTALLDIR}/arcgis..." rm -rf "${INSTALLDIR}/arcgis" cd "$ORIGDIR" exit 1 fi # # Create the shell launcher script for the user: # echo "" echo "Adding ArcGIS shell startup script. You can run the Python shell with the command" echo "" echo " ${INSTALLDIR}/arcgis-10.1-shell" echo "" cat > ${INSTALLDIR}/arcgis-10.1-shell < /dev/null 2>&1 if [ -r \$XVFBPORTF ]; then export DISPLAY=:\`cat \$XVFBPORTF\` fi else NEED_XVFB=0 fi # Launch the Windows Python shell inside WINE: trap "{ if [ \$NEED_XVFB -ne 0 ]; then StopXvfb > /dev/null 2>&1; rm -f \$XVFBLOG \$XVFBPID \$XVFBPORTF; fi }" SIGTERM EXIT wine "C:/Python27/ArcGISx6410.1/python.exe" "-B" \$* EOT if [ $? -eq 0 ]; then chmod +x ${INSTALLDIR}/arcgis-10.1-shell else echo "Failed to create ArcGIS shell starter script" fi cd "$ORIGDIR" exit 0