You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vcl.apache.org by jf...@apache.org on 2015/01/29 18:28:15 UTC

svn commit: r1655759 - /vcl/trunk/vcl-upgrade.sh

Author: jfthomps
Date: Thu Jan 29 17:28:14 2015
New Revision: 1655759

URL: http://svn.apache.org/r1655759
Log:
VCL-810 - 2.4 install script

initial commit of upgrade script

Added:
    vcl/trunk/vcl-upgrade.sh   (with props)

Added: vcl/trunk/vcl-upgrade.sh
URL: http://svn.apache.org/viewvc/vcl/trunk/vcl-upgrade.sh?rev=1655759&view=auto
==============================================================================
--- vcl/trunk/vcl-upgrade.sh (added)
+++ vcl/trunk/vcl-upgrade.sh Thu Jan 29 17:28:14 2015
@@ -0,0 +1,819 @@
+#!/bin/bash
+
+(
+cat <<'EOF'
+
+# need to know
+database admin account
+database admin password
+database name
+database host
+
+# need to do
+-download new archive
+-validate new archive
+-run install_perl_libs.pl
+-stop vcld
+-stop httpd
+-determine installed version
+-dump database
+-create tar backup of web code
+-create tar backup of management node code
+-copy new web code in place
+-copy configuration files from old web code to new code
+-add any updates to conf.php
+-copy new management node code in place
+-add any updates to vcld.conf
+-rename old web code directory
+-rename old management node directory
+-create web symlink
+-create management node symlink
+-create .htaccess file in old web code location that blocks access
+-upgrade database schema
+-start httpd
+-start vcld
+
+EOF
+) > /dev/null
+
+function print_break() {
+	echo "------------------------------------------------------------------------------------------"
+}
+
+function random_string() {
+	local string_length
+	if [[ -n $1 ]]; then string_length=$1; else string_length=8; fi
+	random_string=</dev/urandom tr -dc A-Za-z0-9 | head -c $string_length
+	echo $random_string
+}
+
+function help() {
+	name=`basename $0`
+	echo ""
+	echo "$name [-h|--help] [-d|--database] [-w|--web] [-m|--managementnode]"
+	echo -e "\t\t[--dbhost <hostname>] [--dbadminuser <username>]"
+	echo -e "\t\t[--dbadminpass <password>]"
+	echo ""
+	echo -e "\t-d|--database - upgrade database components"
+	echo -e "\t\t--dbhost may optionally be specified if not localhost"
+	echo ""
+	echo -e "\t-w|--web - upgrade web server components"
+	echo ""
+	echo -e "\t-m|--managementnode - upgrade management node (vcld) components"
+	echo ""
+	echo -e "\t--dbhost <hostname> - hostname of database server (default=localhost)"
+	echo ""
+	echo -e "\t--dbname <name> - name of VCL database on database server (default=vcl)"
+	echo ""
+	echo -e "\t--dbadminuser <username> - admin username for database; must have access"
+	echo -e "\t\tto modify database schema and dump data for backup (default=root)"
+	echo ""
+	echo -e "\t--dbadminpass <password> - password for dbadminuser (default=[no password])"
+	echo ""
+	echo "If no arguments supplied, all components will be upgraded using default"
+	echo "values for optional arguments."
+	echo ""
+	exit 2
+}
+
+args=$(getopt -q -o dwmh -l database,web,managementnode,help,dbhost:,dbname:,dbadminuser:,dbadminpass: -n $0 -- "$@")
+
+if [ $? -ne 0 ]; then help; fi
+
+eval set -- "$args"
+
+# ------------------------- variables -------------------------------
+VCL_VERSION=2.4-test
+OLD_VERSION= # TODO
+DB_NAME=vcl
+WEB_PATH=/var/www/html/vcl
+MN_PATH=/usr/local/vcl
+DB_ADMINUSER=root
+DB_ADMINPASS=""
+
+DB_HOST=localhost
+ARCHIVE=apache-VCL-$VCL_VERSION.tar.bz2
+#ARCHIVEURLPATH=http://vcl.apache.org/downloads/download.cgi?action=download&filename=%2Fvcl%2F
+#ARCHIVEURLPATH=http://people.apache.org/~jfthomps/tmp/ # TODO
+ARCHIVEURLPATH=http://people.engr.ncsu.edu/jfthomps/vcltest/ # TODO
+#SIGPATH=http://www.apache.org/dist/vcl/
+#SIGPATH=http://people.apache.org/~jfthomps/tmp/ # TODO
+SIGPATH=http://people.engr.ncsu.edu/jfthomps/vcltest/ # TODO
+
+
+DODB=0
+DOWEB=0
+DOMN=0
+DOALL=1
+dbhostdefault=1
+dbnamedefault=1
+dbadminuserdefault=1
+dbadminpassdefault=1
+
+while true; do
+	case "$1" in
+		-d|--database)
+			DODB=1
+			DOALL=0
+			shift
+			;;
+		-w|--web)
+			DOWEB=1
+			DOALL=0
+			shift
+			;;
+		-m|--managementnode)
+			DOMN=1
+			DOALL=0
+			shift
+			;;
+		--dbhost)
+			DB_HOST=$2
+			dbhostdefault=0
+			shift 2
+			;;
+		--dbname)
+			DB_NAME=$2
+			dbnamedefault=0
+			shift 2
+			;;
+		--dbadminuser)
+			DB_ADMINUSER=$2
+			dbadminuserdefault=0
+			shift 2
+			;;
+		--dbadminpass)
+			DB_ADMINPASS=$2
+			dbadminpassdefault=0
+			shift 2
+			;;
+		-h|--help)
+			help
+			exit 1
+			;;
+		--)
+			shift
+			break
+			;;
+		*)
+			echo "unknown option: $1"
+			exit 1
+			;;
+	esac
+done
+
+if [[ $DOALL -eq 1 ]]; then
+	DODB=1
+	DOWEB=1
+	DOMN=1
+fi
+
+if [[ $DODB -eq 1 && $DOWEB -eq 1 && $DOMN -eq 1 ]]; then
+	DOALL=1
+fi
+
+# ------------------------- check for being root -----------------------------
+who=$(whoami)
+if [[ $who != "root" ]]; then
+	echo "You must be root to run this script."
+	exit 1
+fi
+
+# ----------------------- notify user of defaults ----------------------------
+if [[ $DODB -eq 1 ]]; then
+	if [[ $dbhostdefault -eq 1 ]]; then
+		echo ""
+		echo "Database host defaulted to be $DB_HOST"
+	fi
+	if [[ $dbnamedefault -eq 1 ]]; then
+		echo ""
+		echo "Database name defaulted to be $DB_NAME"
+	fi
+	if [[ $dbadminuserdefault -eq 1 ]]; then
+		echo ""
+		echo "Database username defaulted to be $DB_ADMINUSER"
+	fi
+	if [[ $dbadminpassdefault -eq 1 ]]; then
+		echo ""
+		echo "Database password defaulted to be empty."
+	fi
+fi
+
+WORKPATH=$(pwd)
+
+if [[ -f NOTICE && -f LICENSE && -d managementnode && -d web && -d mysql ]]; then
+	WORKPATH=$(dirname `pwd`)
+fi
+
+# TODO
+#tmp=$(dirname $0)
+#pushd $tmp > /dev/null
+#SCRIPTPATH=$(pwd)
+#popd > /dev/null
+#echo $SCRIPTPATH
+
+if [[ $DB_ADMINPASS = "" ]]; then
+	alias mysql="mysql -u $DB_ADMINUSER -h $DB_HOST"
+	alias mysqldump="mysqldump -u $DB_ADMINUSER -h $DB_HOST"
+else
+	alias mysql="mysql -u $DB_ADMINUSER -p'$DB_ADMINPASS' -h $DB_HOST"
+	alias mysqldump="mysqldump -u $DB_ADMINUSER -p'$DB_ADMINPASS' -h $DB_HOST"
+fi
+
+# ------------------- checks for existing installation -----------------------
+echo ""
+echo "Checking for existing VCL components selected for upgrade..."
+# database
+if [[ $DODB -eq 1 ]]; then
+	mysql -e "use $DB_NAME;" &> /dev/null
+	if [ $? -ne 0 ]; then echo "Existing VCL database not found, exiting"; exit 1; fi
+fi
+echo "Found existing database"
+# web code
+if [[ $DOWEB -eq 1 ]]; then
+	if [ ! -d $WEB_PATH ]; then echo "Existing web code not found at $WEB_PATH, exiting"; exit 1; fi
+	if grep 'VCLversion' $WEB_PATH/index.php | grep -q $VCL_VERSION; then
+		echo "Web code appears to be at current version, exiting"
+		exit 1
+	fi
+fi
+echo "Found existing web code"
+# management code
+if [[ $DOMN -eq 1 ]]; then
+	if [ ! -d $MN_PATH ]; then echo "Existing management node code not found at $MN_PATH, exiting"; exit 1; fi
+	if [[ ! -f /etc/vcl/vcld.conf ]]; then echo "/etc/vcl/vcld.conf not found, exiting"; exit 1; fi
+	if grep '$VERSION' $MN_PATH/lib/VCL/utils.pm | grep -q $VCL_VERSION; then
+		echo "Management node code appears to be at current version, exiting"
+		exit 1
+	fi
+fi
+echo "Found existing management node code"
+
+# ------------------------- detemine old version ---------------------
+if [[ $DOWEB -eq 1 || $DOMN -eq 1 ]]; then
+	print_break
+	echo "Determining previous versions of VCL..."
+	if [[ $DOWEB -eq 1 ]]; then
+		OLD_WEB_VERSION=$(grep 'VCLversion' $WEB_PATH/index.php | awk -F"'" '{print $2}')
+		if [[ $OLD_WEB_VERSION = "" ]]; then
+			OLD_WEB_VERSION=$(grep '# ASF VCL' $WEB_PATH/index.php | awk '{print $4}' | sed 's/v//')
+			if [[ $OLD_WEB_VERSION = "" ]]; then
+				echo "Error: Failed to determine previous version of web code, exiting"
+				exit 1
+			fi
+		fi
+		echo "Determined previous web code version to be $OLD_WEB_VERSION"
+		OLD_VERSION=$OLD_WEB_VERSION
+	fi
+	if [[ $DOMN -eq 1 ]]; then
+		OLD_MN_VERSION=$(grep '$VERSION' $MN_PATH/lib/VCL/utils.pm | awk -F"'" '{print $2}')
+		if [[ $OLD_MN_VERSION = "" ]]; then echo "Error: Failed to determine previous version of management node code, exiting"; exit 1; fi
+		echo "Determined previous management node code version to be $OLD_MN_VERSION"
+		OLD_VERSION=$OLD_MN_VERSION
+	fi
+	if [[ $DOWEB -eq 1 && $DOMN -eq 1 && $OLD_WEB_VERSION != $OLD_MN_VERSION ]]; then
+		echo "Error: Previous versions of web code and management node do not match; exiting"
+		exit 1
+	fi
+elif [[ $DODB -eq 1 && $DOWEB -eq 0 && $DOMN -eq 0 ]]; then
+	# TODO
+	OLD_VERSION=
+fi
+
+if [[ $OLD_VERSION = $VCL_VERSION ]]; then
+	echo "Error: The installed version of VCL is the same version this script installs; exiting"
+	exit 1
+fi
+
+# ------------------------------ NOTICES -------------------------------------
+if [[ $DOMN -eq 1 ]]; then 
+	print_break
+	echo ""
+	echo "NOTICE: Later in this process, you will be prompted to download and install"
+	echo "Linux packages and Perl modules. At that time, if you agree with the license"
+	echo "terms, enter YES to install them. Otherwise, enter NO to exit and abort the "
+	echo "installation."
+	echo ""
+	echo "(Press Enter to continue)"
+	read tmp
+fi
+
+# ------------------------- install basic required packages --------------------
+print_break
+echo "Installing Linux packages..."
+yum -q -y install wget
+if [ $? -ne 0 ]; then echo "Error: Failed to install required linux package (wget)"; exit 1; fi;
+
+# ------------------------------------ functions -------------------------------
+
+function download_archive() {
+	wget -q "$ARCHIVEURLPATH$ARCHIVE" -O $ARCHIVE
+	if [ $? -ne 0 ]; then generic_error "failed to download $ARCHIVE from $ARCHIVEURLPATH"; exit 1; fi
+}
+
+function validate_archive_sha1() {
+	echo "Downloading sha1 file for $VCL_VERSION..."
+	wget -q $SIGPATH$ARCHIVE.sha1
+	echo "validating $ARCHIVE"
+	sha1sum -c $ARCHIVE.sha1
+	return $?
+}
+
+function validate_archive_gpg() {
+	echo "Downloading GPG file for $VCL_VERSION..."
+	wget -q $SIGPATH$ARCHIVE.asc
+	echo "Downloading KEYS file for ASF VCL..."
+	wget -q https://svn.apache.org/repos/asf/vcl/KEYS
+	echo "Importing KEYS..."
+	gpg -q --import KEYS
+	/bin/rm -f KEYS
+	echo "validating $ARCHIVE..."
+	gpg -q --verify $ARCHIVE.asc 2>&1 | grep 'Good signature'
+	return $?
+}
+
+function generic_error() {
+	if [[ -n $1 ]]; then
+		echo "$1; correct any errors listed above and try again"
+	else
+		echo "installation failed; correct any errors listed above and try again"
+	fi
+}
+
+function confUpgradeFrom22() {
+	sed -i 's|https://cwiki.apache.org/VCLDOCS/|https://cwiki.apache.org/confluence/display/VCL/Using+VCL|' $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	sed -i 's|^\$blockNotifyUsers|#\$blockNotifyUsers|' $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	sed -i '/^\$userlookupUsers = array(.*);/d' $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	sed -i '/^\$userlookupUsers = array/,/);/d' $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+
+	if ! grep -q '$NOAUTH_HOMENAV' $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/a );' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \\t"Report a Problem" => "mailto:" . HELPEMAIL,                ' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \\t"How to use VCL" => "https://cwiki.apache.org/confluence/display/VCL/Using+VCL",' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \\t"What is VCL" => "http://vcl.apache.org/",                  ' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a $NOAUTH_HOMENAV = array (                                      ' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a #   where authentication method is selected when NOAUTH_HOMENAV is set to 1' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # documentation links to display on login page and page' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q XMLRPCLOGGING $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("XMLRPCLOGGING", 1);' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # boolean value of 0 or 1 to control logging of XMLRPC calls for auditing or debugging purposes; queries are logged to the xmlrpcLog table' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q QUERYLOGGING $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("QUERYLOGGING", 1);' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # boolean value of 0 or 1 to control logging of non SELECT database queries for auditing or debugging purposes; queries are logged to the querylog table' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q 'define..NOAUTH_HOMENAV' $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("NOAUTH_HOMENAV", 0);' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # 0 = disables; 1 = enabled' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a #   where authentication method is selected' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # boolean value of 0 or 1 to enable documentation links on login page and page' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q MAXSUBIMAGES $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("MAXSUBIMAGES", 5000);  // maximum allowed number for subimages in a config' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q MAXINITIALIMAGINGTIME $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("MAXINITIALIMAGINGTIME", 720); // for imaging reservations, users will have at least this long as the max selectable duration' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q ALLOWADDSHIBUSERS $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \                                // will be added to the database with the typoed userid' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \                                // a userid, there is no way to verify that it was entered incorrectly so the user' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \                                // privilege somewhere in the privilege tree. Note that if you enable this and typo' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \                                // through things such as adding a user to a user group or directly granting a user a' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \                                // set this to 1 to allow users be manually added to VCL before they have ever logged in' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \                                // also have LDAP set up (i.e. affiliation.shibonly = 1)' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("ALLOWADDSHIBUSERS", 0); // this is only related to using Shibboleth authentication for an affiliation that does not' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q SEMTIMEOUT $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("SEMTIMEOUT", "45");' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q DEFAULTLOCALE $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("DEFAULTLOCALE", "en_US");              // default locale for the site' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+}
+
+function confUpgradeFrom221() {
+	confUpgradeFrom22
+	sed -i "s/\$addUserFunc\[\$item\['affiliationid'\]\] = create_function('', 'return 0;');/\$addUserFunc[\$item['affiliationid']] = create_function('', 'return NULL;');/" $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	sed -i "s/\$updateUserFunc\[\$item\['affiliationid'\]\] = create_function('', 'return 0;');/\$updateUserFunc[\$item['affiliationid']] = create_function('', 'return NULL;');/" $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+}
+
+function confUpgradeFrom222() {
+	confUpgradeFrom221
+}
+
+function confUpgradeFrom23() {
+	sed -i 's|https://cwiki.apache.org/VCLDOCS/|https://cwiki.apache.org/confluence/display/VCL/Using+VCL|' $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+
+	if ! grep -q '$NOAUTH_HOMENAV' $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/a );' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \\t"Report a Problem" => "mailto:" . HELPEMAIL,                ' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \\t"How to use VCL" => "https://cwiki.apache.org/confluence/display/VCL/Using+VCL",' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a \\t"What is VCL" => "http://vcl.apache.org/",                  ' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a $NOAUTH_HOMENAV = array (                                      ' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a #   where authentication method is selected when NOAUTH_HOMENAV is set to 1' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # documentation links to display on login page and page' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q XMLRPCLOGGING $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("XMLRPCLOGGING", 1);' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # boolean value of 0 or 1 to control logging of XMLRPC calls for auditing or debugging purposes; queries are logged to the xmlrpcLog table' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q QUERYLOGGING $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("QUERYLOGGING", 1);' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # boolean value of 0 or 1 to control logging of non SELECT database queries for auditing or debugging purposes; queries are logged to the querylog table' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q 'define..NOAUTH_HOMENAV' $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("NOAUTH_HOMENAV", 0);' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # 0 = disables; 1 = enabled' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a #   where authentication method is selected' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a # boolean value of 0 or 1 to enable documentation links on login page and page' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q MAXSUBIMAGES $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("MAXSUBIMAGES", 5000);  // maximum allowed number for subimages in a config' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q MAXINITIALIMAGINGTIME $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("MAXINITIALIMAGINGTIME", 720); // for imaging reservations, users will have at least this long as the max selectable duration' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	if ! grep -q SEMTIMEOUT $WEB_PATH/.ht-inc/conf.php; then
+		sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+		sed -i '/ENABLE_ITECSAUTH/a define("SEMTIMEOUT", "45");' $WEB_PATH/.ht-inc/conf.php
+		if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+	fi
+
+	sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH/.ht-inc/conf.php
+	if [ $? -ne 0 ]; then echo "Error: Failed to update conf.php"; exit 1; fi
+}
+
+function confUpgradeFrom231() {
+	confUpgradeFrom23
+}
+
+function confUpgradeFrom232() {
+	confUpgradeFrom23
+}
+
+# ------------------- download/validate arvhice ---------------------
+print_break
+cd $WORKPATH
+if [[ ! -f $ARCHIVE ]]; then
+	echo "Downloading VCL $VCL_VERSION..."
+	download_archive
+	validate_archive_sha1
+	if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+	validate_archive_gpg
+	if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+else
+	dir=`pwd`
+	echo "archive for $VCL_VERSION found at $dir/$ARCHIVE"
+	validate_archive_sha1
+	if [ $? -ne 0 ]; then
+		echo "failed to validate $ARCHIVE; downloading again..."
+		/bin/mv -f $ARCHIVE $ARCHIVE.old
+		download_archive
+		validate_archive_sha1
+		if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+		validate_archive_gpg
+		if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+	else
+		validate_archive_gpg
+		if [ $? -ne 0 ]; then generic_error "failed to validate $ARCHIVE"; exit 1; fi;
+	fi;
+fi
+
+# ------------------------ extract archive ---------------------------
+echo "Extracting $ARCHIVE"
+tar -xf $ARCHIVE
+if [ $? -ne 0 ]; then generic_error "failed to extract $ARCHIVE"; exit 1; fi;
+
+# ------------------- run install_perl_libs.pl ------------------------
+if [[ $DOMN -eq 1 ]]; then
+	print_break
+	echo "Installing Linux and PERL system requirements (this takes a while)"
+	sleep 1
+	yum -q -y install perl-CPAN
+	if [ $? -ne 0 ]; then echo "Error: Failed to install perl-CPAN"; exit 1; fi;
+	perl apache-VCL-$VCL_VERSION/managementnode/bin/install_perl_libs.pl
+	rc=$?
+	if [ $rc -eq 2 ]; then
+		echo "License terms not accepted; aborting installation"
+		exit 2
+	elif [ $rc -ne 0 ]; then
+		generic_error "Failed to install system requirements"
+		exit 1
+	fi
+fi
+
+# ------------------------- stop httpd --------------------------------
+if [[ $DOWEB -eq 1 ]]; then
+	echo "Stopping httpd service..."
+	/sbin/service httpd stop
+	if [ $? -ne 0 ]; then generic_error "Failed to stop httpd service"; exit 1; fi;
+fi
+
+# ---------------------------- stop vcld ----------------------------
+if [[ $DOMN -eq 1 ]]; then
+	print_break
+	echo "Stopping vcld service..."
+	/sbin/service vcld stop
+	if [ $? -ne 0 ]; then generic_error "Failed to stop vcld service"; exit 1; fi;
+fi
+
+# -------------------------- backup database -------------------------
+if [[ $DODB -eq 1 ]]; then
+	print_break
+	echo "Backing up $DB_NAME database..."
+	if [[ ! -x /bin/mysqldump && ! -x /usr/bin/mysqldump ]]; then
+		echo "mysqldump command not found; cannot backup database; exiting..."
+		exit 1
+	fi
+	mysqldump $DB_NAME > $WORKPATH/vcl-${OLD_VERSION}-backup.sql
+	if [ $? -ne 0 ]; then generic_error "Failed to create backup of $DB_NAME database"; exit 1; fi;
+fi
+
+# -------------------------- backup web code -------------------------
+if [[ $DOWEB -eq 1 ]]; then
+	print_break
+	echo "Backing up web code..."
+	tar czf $WORKPATH/web-${OLD_VERSION}-backup.tar.gz $WEB_PATH
+	if [ $? -ne 0 ]; then generic_error "Failed to create backup of web code at $WEB_PATH"; exit 1; fi;
+fi
+
+# -------------------------- backup web code -------------------------
+if [[ $DOMN -eq 1 ]]; then
+	echo "Backing up management node code..."
+	tar czf $WORKPATH/managmentnode-${OLD_VERSION}-backup.tar.gz $MN_PATH
+	if [ $? -ne 0 ]; then generic_error "Failed to create backup of management node code at $MN_PATH"; exit 1; fi;
+fi
+
+# -------------------------- install php -----------------------------
+if [[ $DOWEB -eq 1 ]]; then
+	print_break
+	echo "Ensuring required php components are installed..."
+	missing=
+	for pkg in php php-gd php-mysql php-xml php-xmlrpc php-ldap php-process php-mbstring; do
+		alt=$(echo $pkg | sed 's/php/php53/')
+		if ! (rpm --quiet -q $pkg || rpm --quiet -q $alt); then
+			missing="$missing $pkg"
+		fi
+		if rpm -qa | grep -q php53; then
+			missing=$(echo $missing | sed 's/php/php53/g')
+		fi
+		if [[ $missing != "" ]]; then
+			echo "yum -q -y install $missing"
+			yum -q -y install $missing
+			if [ $? -ne 0 ]; then generic_error "Failed to install php components"; exit 1;
+			else echo "php components successfully installed"; fi
+		fi
+	done
+fi
+
+# ------------------------- copy web code in place -------------------------
+if [[ $DOWEB -eq 1 ]]; then
+	print_break
+	echo "Installing new VCL web code..."
+	/bin/cp -r $WORKPATH/apache-VCL-$VCL_VERSION/web/ ${WEB_PATH}-$VCL_VERSION
+	if [ $? -ne 0 ]; then generic_error "Failed to install new VCL web code"; exit 1; fi;
+	chown apache ${WEB_PATH}-$VCL_VERSION/.ht-inc/maintenance
+fi
+
+# ---------------------------- configure web code --------------------------
+if [[ $DOWEB -eq 1 ]]; then
+	print_break
+	echo "Copying in web configuration files from previous version"
+	/bin/cp -f ${WEB_PATH}/.ht-inc/secrets.php ${WEB_PATH}-$VCL_VERSION/.ht-inc/
+	if [ $? -ne 0 ]; then echo "Error: Failed to copy secrets.php"; exit 1; fi;
+	/bin/cp -f ${WEB_PATH}/.ht-inc/conf.php ${WEB_PATH}-$VCL_VERSION/.ht-inc/
+	if [ $? -ne 0 ]; then echo "Error: Failed to copy conf.php"; exit 1; fi;
+
+	if [[ $OLD_VERSION = '2.2' ]]; then confUpgradeFrom22; fi
+	if [[ $OLD_VERSION = '2.2.1' ]]; then confUpgradeFrom221; fi
+	if [[ $OLD_VERSION = '2.2.2' ]]; then confUpgradeFrom222; fi
+	if [[ $OLD_VERSION = '2.3' ]]; then confUpgradeFrom23; fi
+	if [[ $OLD_VERSION = '2.3.1' ]]; then confUpgradeFrom231; fi
+	if [[ $OLD_VERSION = '2.3.2' ]]; then confUpgradeFrom232; fi
+
+	/bin/cp -f ${WEB_PATH}/.ht-inc/pubkey.pem ${WEB_PATH}-$VCL_VERSION/.ht-inc/
+	if [ $? -ne 0 ]; then echo "Error: Failed to copy pubkey.pem"; exit 1; fi;
+	/bin/cp -f ${WEB_PATH}/.ht-inc/keys.pem ${WEB_PATH}-$VCL_VERSION/.ht-inc/
+	if [ $? -ne 0 ]; then echo "Error: Failed to copy keys.pem"; exit 1; fi;
+fi
+
+# ---------------- copy management node code in place ------------------
+if [[ $DOMN -eq 1 ]]; then
+	print_break
+	echo "Installing management node components..."
+	if [[ ! -d ${MN_PATH}-$OLD_VERSION ]]; then
+		/bin/cp -r ${MN_PATH} ${MN_PATH}-$VCL_VERSION
+		if [ $? -ne 0 ]; then generic_error "Failed to install new VCL management node code (1)"; exit 1; fi;
+	fi
+	/bin/cp -r ${MN_PATH}-$OLD_VERSION ${MN_PATH}-$VCL_VERSION
+	/bin/cp -r $WORKPATH/apache-VCL-$VCL_VERSION/managementnode/* ${MN_PATH}-$VCL_VERSION
+	if [ $? -ne 0 ]; then generic_error "Failed to install new VCL management node code (2)"; exit 1; fi;
+fi
+
+# -------------------- configure management node code ------------------
+if [[ $DOMN -eq 1 ]]; then
+	print_break
+	echo "Configuring vcld.conf..."
+
+	# TODO add/remove entries from vcld.conf
+
+	if [ $? -ne 0 ]; then echo "Error: Failed to configure vcld.conf"; exit 1; fi
+fi
+
+# -------------------- rename old web code directory ---------------------
+if [[ $DOWEB -eq 1 ]]; then
+	if [[ ! -h $WEB_PATH && -d $WEB_PATH && -d ${WEB_PATH}-$OLD_VERSION ]]; then
+		print_break
+		echo "Moving ${WEB_PATH}-$OLD_VERSION to ${WEB_PATH}-${OLD_VERSION}.old"
+		mv -f ${WEB_PATH}-$OLD_VERSION ${WEB_PATH}-${OLD_VERSION}.old
+		if [ $? -ne 0 ]; then echo "Error: Failed to move old web code (1)"; exit 1; fi
+	fi
+	if [[ ! -d ${WEB_PATH}-$OLD_VERSION ]]; then
+		print_break
+		echo "Moving ${WEB_PATH} to ${WEB_PATH}-$OLD_VERSION"
+		mv -f ${WEB_PATH} ${WEB_PATH}-$OLD_VERSION
+		if [ $? -ne 0 ]; then echo "Error: Failed to move old web code (2)"; exit 1; fi
+	fi
+fi
+
+# -------------- rename old management node code directory ---------------
+if [[ $DOMN -eq 1 ]]; then
+	if [[ ! -h $MN_PATH && -d $MN_PATH && -d ${MN_PATH}-$OLD_VERSION ]]; then
+		print_break
+		echo "Moving ${MN_PATH}-$OLD_VERSION to ${MN_PATH}-${OLD_VERSION}.old"
+		mv -f ${MN_PATH}-$OLD_VERSION ${MN_PATH}-${OLD_VERSION}.old
+		if [ $? -ne 0 ]; then echo "Error: Failed to move old management node code (1)"; exit 1; fi
+	fi
+	if [[ ! -d ${MN_PATH}-$OLD_VERSION ]]; then
+		print_break
+		echo "Moving ${MN_PATH} to ${MN_PATH}-$OLD_VERSION"
+		mv -f ${MN_PATH} ${MN_PATH}-$OLD_VERSION
+		if [ $? -ne 0 ]; then echo "Error: Failed to move old management node code (2)"; exit 1; fi
+	fi
+fi
+
+# ---------------------- create/update web symlink -----------------------
+if [[ $DOWEB -eq 1 ]]; then
+	print_break
+	echo "Setting $WEB_PATH as a link to ${WEB_PATH}-$VCL_VERSION"
+	ln -n -s -f ${WEB_PATH}-$VCL_VERSION $WEB_PATH
+	if [ $? -ne 0 ]; then echo "Error: Failed to create/update link to ${WEB_PATH}-$VCL_VERSION"; exit 1; fi
+fi
+
+# ---------------- create/update management node symlink -----------------
+if [[ $DOMN -eq 1 ]]; then
+	print_break
+	echo "Setting $MN_PATH as a link to ${MN_PATH}-$VCL_VERSION"
+	ln -n -s -f ${MN_PATH}-$VCL_VERSION $MN_PATH
+	if [ $? -ne 0 ]; then echo "Error: Failed to create/update link to ${MN_PATH}-$VCL_VERSION"; exit 1; fi
+fi
+
+# ----------------- disabling web access to old web code -----------------
+if [[ $DOWEB -eq 1 ]]; then
+	print_break
+	echo "Disabling web access to ${WEB_PATH}-$OLD_VERSION"
+	if [[ -f ${WEB_PATH}-$OLD_VERSION/.htaccess ]]; then
+		mv -f ${WEB_PATH}-$OLD_VERSION/.htaccess ${WEB_PATH}-$OLD_VERSION/.htaccess.preupgrade
+	fi
+	echo "Deny from all" > ${WEB_PATH}-$OLD_VERSION/.htaccess
+	if [ $? -ne 0 ]; then echo "Error: Failed to create new ${WEB_PATH}-$OLD_VERSION/.htaccess file"; exit 1; fi
+fi
+
+# ------------------------ upgrade vcl database --------------------------
+if [[ $DODB -eq 1 ]]; then
+	print_break
+	echo "Upgrading VCL database..."
+	mysql $DB_NAME < $WORKPATH/apache-VCL-$VCL_VERSION/mysql/update-vcl.sql
+	if [ $? -ne 0 ]; then generic_error "Failed to upgrade VCL database"; exit 1; fi;
+fi
+
+# ------------------------- start httpd --------------------------------
+if [[ $DOWEB -eq 1 ]]; then
+	print_break
+	echo "Starting httpd service..."
+	/sbin/service httpd start
+	if [ $? -ne 0 ]; then generic_error "Failed to start httpd"; exit 1; fi;
+fi
+
+# ---------------------------- start vcld ----------------------------
+if [[ $DOMN -eq 1 ]]; then
+	print_break
+	echo "Starting vcld service..."
+	/sbin/service vcld stop &> /dev/null
+	sleep 1
+	/sbin/service vcld start
+	if [ $? -ne 0 ]; then echo "Error: Failed to start vcld service"; exit 1; fi;
+fi
+
+echo ""
+if [[ $DOALL -eq 1 ]]; then
+	echo "VCL upgrade complete"
+elif [[ $DODB -eq 1 && $DOWEB -eq 1 ]]; then
+	echo "VCL upgrade of database and web components complete."
+elif [[ $DODB -eq 1 && $DOMN -eq 1 ]]; then
+	 echo "VCL upgrade of database and management node components complete."
+elif [[ $DOWEB -eq 1 && $DOMN -eq 1 ]]; then
+	 echo "VCL upgrade of web and management node components complete."
+elif [[ $DODB -eq 1 ]]; then
+	 echo "VCL upgrade of database components complete."
+elif [[ $DOWEB -eq 1 ]]; then
+	 echo "VCL upgrade of web components complete."
+elif [[ $DOMN -eq 1 ]]; then
+	 echo "VCL upgrade of management node components complete."
+fi
+echo ""

Propchange: vcl/trunk/vcl-upgrade.sh
------------------------------------------------------------------------------
    svn:executable = *