Newer
Older
#!/bin/sh
########################################################################
# Aegir quick upgrade script
#
# This script also *DOES NOT CHECK* if the requirements have been met.
# It's up to the admin to follow the proper upgrade instructions or use
# the packages provided by their platform.
########################################################################
msg() {
echo "==> $*"
}
# basic variables, change before running
AEGIR_VERSION="6.x-2.x"
DRUSH_DIR=$HOME/drush
DRUSH=$DRUSH_DIR/drush.php
if which drush 2> /dev/null > /dev/null && which drush | grep -v 'no drush in' > /dev/null; then
msg "Drush is in the path, good"
# we do not set DRUSH to `which drush` because we're not sure how 'which' will behave
DRUSH=drush
DRUSH_DIR=`which drush`
# yes, this will fail on non-GNU readlink, but we don't care - it
# just means drush won't be upgraded if it's the path on those
# platforms
DRUSH_DIR=`readlink -f $DRUSH_DIR`
DRUSH_DIR=`dirname $DRUSH_DIR`
elif [ -x $DRUSH ] ; then
msg "Drush found in $DRUSH, good"
DRUSH="php $DRUSH"
else
msg "Could not find drush in $DRUSH or in $PATH"
exit 1
fi
# Detect the current Drush version to work with
DRUSH_VERSION=`drush --version --pipe`
case "$DRUSH_VERSION" in
5*)
TEMPFILE=`mktemp`
$DRUSH --pipe @hostmaster status | egrep "site_uri|drupal_root" >> $TEMPFILE || true
if grep -q 'site_uri' $TEMPFILE; then
# this sources the result of drush --pipe so we initialise shell variables used later
. $TEMPFILE
else
msg 'could not find running hostmaster site'
msg 'try running "drush @hostmaster status" to diagnose and repair'
exit 1
fi
AEGIR_DOMAIN="$site_uri"
OLD_DRUPAL_DIR="$drupal_root"
;;
[67]*)
AEGIR_DOMAIN=`drush @hostmaster status --fields="uri" --field-labels=0`
OLD_DRUPAL_DIR=`drush @hostmaster status --fields="root" --field-labels=0`
esac
HOME="$HOME"
DRUPAL_DIR=$HOME/hostmaster-$AEGIR_VERSION
Herman van Rink
committed
DRUSH_VERSION=5.10.0
BACKUP_DIR=$HOME/pre-upgrade-`date '+%F-%H%M'`
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
########################################################################
# functions
# simple prompt
prompt_yes_no() {
while true ; do
printf "$* [Y/n] "
read answer
if [ -z "$answer" ] ; then
return 0
fi
case $answer in
[Yy]|[Yy][Ee][Ss])
return 0
;;
[Nn]|[Nn][Oo])
return 1
;;
*)
echo "Please answer yes or no"
;;
esac
done
}
########################################################################
# Main script
AEGIR_HOST=`uname -n`
AEGIR_DOMAIN=${1:-$AEGIR_DOMAIN}
msg "Aegir $AEGIR_VERSION automated upgrade script"
if [ `whoami` = "root" ] ; then
msg "This script should be run as the aegir user, not as root."
exit 1
fi
msg "This script makes the following assumptions: "
cat <<EOF
* you have read http://community.aegirproject.org/upgrading and have prepared the server accordingly
* you are executing this script as your "aegir" user
* that the following settings are correct
The Aegir version to upgrade to is $AEGIR_VERSION
The Aegir home dir is $HOME
The new hostmaster platform will be $DRUPAL_DIR
Your Aegir domain is $AEGIR_DOMAIN
Your old hostmaster platform was $OLD_DRUPAL_DIR
The Drush command is "$DRUSH"
if [ -w $DRUSH_DIR ]; then
cat <<EOF
The version of Drush will be $DRUSH_VERSION
echo "Drush will not be upgraded as its directory is not writable: $DRUSH_DIR"
if prompt_yes_no "Do you want to proceed with the upgrade?" ; then
true
else
echo "Upgrade aborted by user."
exit 1
fi
mkdir -p $BACKUP_DIR
if [ -w $DRUSH_DIR ]; then
# Can we check Drush version?
if [ -d $DRUSH_DIR ]; then
msg "Moving existing drush into $BACKUP_DIR"
mv $DRUSH_DIR $BACKUP_DIR
fi
Herman van Rink
committed
wget http://github.com/drush-ops/drush/archive/$DRUSH_VERSION.zip
unzip $DRUSH_VERSION.zip
rm $DRUSH_VERSION.zip
mv drush-$DRUSH_VERSION $DRUSH_DIR
fi
# fetch new version of provision
# move existing provision
cd $HOME/.drush
if [ -d "provision" ] ; then
msg "Moving existing provision into $BACKUP_DIR"
mv provision $BACKUP_DIR
fi
Herman van Rink
committed
git clone --branch "$AEGIR_VERSION" http://git.drupal.org/project/provision.git $HOME/.drush/provision
wget http://ftp.drupal.org/files/projects/provision-$AEGIR_VERSION.tar.gz
gunzip -c provision-$AEGIR_VERSION.tar.gz | tar -xf -
rm provision-$AEGIR_VERSION.tar.gz
# Clear the drush command cache
drush cache-clear drush
cd $OLD_DRUPAL_DIR
$DRUSH hostmaster-migrate $AEGIR_DOMAIN $DRUPAL_DIR