upgrade.sh.txt 5.23 KB
Newer Older
1
#!/bin/sh
2 3 4 5 6 7 8 9 10

########################################################################
# 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.
########################################################################

helmo's avatar
helmo committed
11
# Basic variables, change before running.
12
AEGIR_VERSION="7.x-3.x"
13
NEW_DRUSH_VERSION=8.0.0
14

15
# Extra variables, no changes needed for most use-cases.
16
DRUSH_DIR=$HOME/drush
17
DRUSH=$DRUSH_DIR/drush.php
18

19 20 21 22 23 24 25
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
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59

########################################################################
# 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

60
# Test if we have Drush.
61 62
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"
63
  # we do not set DRUSH to `which drush` because we're not sure how 'which' will behave
64
  DRUSH=drush
65 66 67 68 69 70
  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`
71 72 73 74 75 76 77 78
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

helmo's avatar
helmo committed
79
# Detect the current Drush version to work with.
80
CURRENT_DRUSH_VERSION=`drush --version --pipe`
81

82
case "$CURRENT_DRUSH_VERSION" in
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
  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"
  ;;

98
  [6789]*)
helmo's avatar
helmo committed
99 100
  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'`
101 102

esac
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119


########################################################################
# 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
120
 * you have read http://community.aegirproject.org/upgrading and have prepared the server accordingly
121 122 123 124
 * you are executing this script as your "aegir" user
 * that the following settings are correct

The Aegir version to upgrade to is $AEGIR_VERSION
125
The Aegir home dir is $HOME
126 127 128 129
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"
130
EOF
131

132 133
if [ -w $DRUSH_DIR ]; then
  cat <<EOF
134
The version of Drush will be $NEW_DRUSH_VERSION
135
EOF
136
else
137
  echo "Drush will not be upgraded as its directory is not writable: $DRUSH_DIR"
138
fi
139 140 141 142 143 144 145 146 147 148

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

helmo's avatar
helmo committed
149
# Upgrade drush if desired and writable.
helmo's avatar
helmo committed
150
if [ "$NEW_DRUSH_VERSION" != "$CURRENT_DRUSH_VERSION" ]; then
151 152 153 154 155
  if [ -w $DRUSH_DIR ]; then
    if [ -d $DRUSH_DIR ]; then
      msg "Moving existing drush into $BACKUP_DIR"
      mv $DRUSH_DIR $BACKUP_DIR
    fi
156

157 158 159 160 161 162 163 164 165
    cd $HOME
    wget http://github.com/drush-ops/drush/archive/${NEW_DRUSH_VERSION}.zip
    unzip ${NEW_DRUSH_VERSION}.zip
    rm ${NEW_DRUSH_VERSION}.zip
    mv drush-$NEW_DRUSH_VERSION $DRUSH_DIR
  else
    msg "Drush dir($DRUSH_DIR) is not writable, not upgrading Drush."
  fi
else
helmo's avatar
helmo committed
166
  msg "Not upgrading Drush, $CURRENT_DRUSH_VERSION will be used."
167 168
fi

helmo's avatar
helmo committed
169
# Fetch new version of provision.
170 171 172 173 174 175 176 177
# move existing provision
cd $HOME/.drush

if [ -d "provision" ] ; then
  msg "Moving existing provision into $BACKUP_DIR"
  mv provision $BACKUP_DIR
fi

178
if [ "$AEGIR_VERSION" = "7.x-3.x" ]; then
179
  git clone --branch "$AEGIR_VERSION" http://git.drupal.org/project/provision.git $HOME/.drush/provision
180
else
181 182 183
  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
184 185
fi

helmo's avatar
helmo committed
186
# Clear the drush command cache.
187 188
drush cache-clear drush

helmo's avatar
helmo committed
189
# Start the actual upgrade of Aegir itself.
190 191
cd $OLD_DRUPAL_DIR
$DRUSH hostmaster-migrate $AEGIR_DOMAIN $DRUPAL_DIR
helmo's avatar
helmo committed
192 193

# All should be done.