blob: a44b87abb17d2b4456f2d0984ff11828ea3419a4 [file] [log] [blame]
#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
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:,rc: -n $0 -- "$@")
if [ $? -ne 0 ]; then help; fi
eval set -- "$args"
# ------------------------- variables -------------------------------
VCL_VERSION=2.4.2
OLD_VERSION=""
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"
SIGPATH="http://www.apache.org/dist/vcl/"
DODB=0
DOWEB=0
DOMN=0
DOALL=1
dbhostdefault=1
dbnamedefault=1
dbadminuserdefault=1
dbadminpassdefault=1
dorc=0
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
;;
--rc)
RC=$2
dorc=1
shift 2
;;
-h|--help)
help
exit 1
;;
--)
shift
break
;;
*)
echo "unknown option: $1"
exit 1
;;
esac
done
if [[ $dorc -eq 1 ]]; then
if [[ ! $RC =~ ^[0-9]+$ ]]; then
echo ""
echo "Invalid value specified for --rc=, must be a number"
echo ""
exit 1
fi
VCL_VERSION=${VCL_VERSION}-RC$RC
ARCHIVE=apache-VCL-$VCL_VERSION.tar.bz2
ARCHIVEURLPATH="http://people.apache.org/~jfthomps/apache-VCL-${VCL_VERSION}/"
SIGPATH="http://people.apache.org/~jfthomps/apache-VCL-${VCL_VERSION}/"
fi
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
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 [[ $DOWEB -eq 1 && $OLD_WEB_VERSION = "2.2.2" && $OLD_MN_VERSION = "2.2.1" ]]; then
# 2.2.2 release did not include an upgrade to management node code
OLD_MN_VERSION="2.2.2"
fi
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
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..."
/bin/rm -f $ARCHIVE.sha1
wget -q $SIGPATH$ARCHIVE.sha1
echo "validating $ARCHIVE"
sha1sum -c $ARCHIVE.sha1
return $?
}
function validate_archive_gpg() {
echo "Downloading GPG file for $VCL_VERSION..."
/bin/rm -f $ARCHIVE.asc
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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/a );' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/a );' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.ht-inc/conf.php; then
sed -i '/ENABLE_ITECSAUTH/G' $WEB_PATH-$VCL_VERSION/.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-$VCL_VERSION/.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-$VCL_VERSION/.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
if [[ $OLD_VERSION = "" ]]; then
mysqldump $DB_NAME > $WORKPATH/vcl-pre${VCL_VERSION}-backup.sql
if [ $? -ne 0 ]; then generic_error "Failed to create backup of $DB_NAME database"; exit 1; fi;
gzip $WORKPATH/vcl-pre${VCL_VERSION}-backup.sql
else
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;
gzip $WORKPATH/vcl-${OLD_VERSION}-backup.sql
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-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..."
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 ""