#!/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. ######################################################################## # Basic variables, change before running. AEGIR_VERSION="7.x-3.x" NEW_DRUSH_VERSION="stable" # e.g stable, unstable, ignore or a version number like 8.1.3 # Extra variables, no changes needed for most use-cases. DRUSH_DIR=$HOME/drush DRUSH=$DRUSH_DIR/drush.php MIGRATE_OPTIONS="" # Optional: --working-copy BACKUP_DIR=$HOME/pre-upgrade-$(date '+%F-%H%M') if [ "$AEGIR_VERSION" = "7.x-3.x" ]; then DRUPAL_DIR=$HOME/hostmaster-${AEGIR_VERSION}-$(date +'%F-%H%M') else DRUPAL_DIR=$HOME/hostmaster-$AEGIR_VERSION fi ######################################################################## # Functions # Indent printed messages. msg() { echo "==> $*" } # 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 } ######################################################################## # Preparation # Test if we have Drush. 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. CURRENT_DRUSH_VERSION=`drush --version --pipe` case "$CURRENT_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" ;; [6789]*) AEGIR_DOMAIN=`drush @hostmaster status --fields="uri" --field-labels=0 | sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*\$//g'` OLD_DRUPAL_DIR=`drush @hostmaster status --fields="root" --field-labels=0 | sed -e 's/^[[:space:]]*//g' -e 's/[[:space:]]*\$//g'` esac ######################################################################## # 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 <