summaryrefslogtreecommitdiffstats
path: root/upgrade.sh.txt
blob: e4ca2607ad0ce561976c642b8ca588e0069dadf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
60
61
62
63
64
65
66
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#! /bin/sh

# $Id$

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

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"
HOME="$HOME"
DRUPAL_DIR=$HOME/hostmaster-$AEGIR_VERSION
DRUSH_VERSION=7.x-5.8
BACKUP_DIR=$HOME/pre-upgrade-`date '+%F-%H%M'`

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

if [ -w $DRUSH_DIR ]; then
  cat <<EOF
The version of Drush will be $DRUSH_VERSION
EOF
else
  echo "Drush will not be upgraded as its directory is not writable: $DRUSH_DIR"
fi

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

  cd $HOME
  wget http://ftp.drupal.org/files/projects/drush-$DRUSH_VERSION.tar.gz 
  gunzip -c drush-$DRUSH_VERSION.tar.gz | tar -xf -
  rm drush-$DRUSH_VERSION.tar.gz
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

if [ "$AEGIR_VERSION" = "6.x-2.x" ]; then
  git clone --branch '$AEGIR_VERSION' http://git.drupal.org/project/provision.git $HOME/.drush/provision
else
  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
fi

# Clear the drush command cache
drush cache-clear drush

cd $OLD_DRUPAL_DIR
$DRUSH hostmaster-migrate $AEGIR_DOMAIN $DRUPAL_DIR