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 = *


Reply via email to