-
Notifications
You must be signed in to change notification settings - Fork 3
/
upgrade.sh.txt
224 lines (181 loc) · 6.51 KB
/
upgrade.sh.txt
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
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
#!/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 <<EOF
* you have read http://docs.aegirproject.org/en/3.x/install/upgrade/ 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 [ "$NEW_DRUSH_VERSION" != "$CURRENT_DRUSH_VERSION" -o "$DRUSH_VERSION" != "ignore" ]; then
if [ -w $DRUSH_DIR ]; then
echo "The version of Drush will be $NEW_DRUSH_VERSION"
if prompt_yes_no "Do you want to upgrade Drush to the specified PHAR package?" ; then
true
else
echo "If you wish to upgrade Drush manually you can best abort now and start this script again when ready."
echo
# Set the version equal to not upgrade Drush later in this script.
NEW_DRUSH_VERSION=$CURRENT_DRUSH_VERSION
fi
else
echo "Drush will not be upgraded as its directory is not writable: $DRUSH_DIR"
# Set the version equal to not upgrade Drush later in this script.
NEW_DRUSH_VERSION=$CURRENT_DRUSH_VERSION
fi
else
msg "Not upgrading Drush, $CURRENT_DRUSH_VERSION will be used."
# Set the version equal to not upgrade Drush later in this script.
NEW_DRUSH_VERSION=$CURRENT_DRUSH_VERSION
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
# Upgrade drush if desired.
if [ "$NEW_DRUSH_VERSION" != "$CURRENT_DRUSH_VERSION" -o "$DRUSH_VERSION" != "ignore" ]; then
if [ -d $DRUSH_DIR ]; then
msg "Moving existing drush into $BACKUP_DIR"
mv $DRUSH_DIR/drush $BACKUP_DIR
fi
# Cleanup composer Drush (< 8)
if [ -f $HOME/.composer/vendor/bin/drush ]; then
mv HOME/.composer/vendor/bin/drush HOME/.composer/vendor/bin/drush-old-$(date +'%Y-%m-%d')
fi
DRUSH_MAJOR_VERSION=$(echo $NEW_DRUSH_VERSION| cut -d. -f1)
if [ "$DRUSH_VERSION" = "stable" ]; then
DRUSH_PHAR_URL="http://files.drush.org/drush.phar"
elif [ "$DRUSH_VERSION" = "unstable" ]; then
DRUSH_PHAR_URL="http://files.drush.org/drush-unstable.phar"
elif [ "$DRUSH_MAJOR_VERSION" -ge "8" ]; then
DRUSH_PHAR_URL="https://github.com/drush-ops/drush/releases/download/$NEW_DRUSH_VERSION/drush.phar"
fi
curl -SsL $DRUSH_PHAR_URL -o $DRUSH_DIR/drush
chmod +x $DRUSH_DIR/drush
else
msg "Not upgrading Drush, $CURRENT_DRUSH_VERSION will be used."
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" = "7.x-3.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
# Start the actual upgrade of Aegir itself.
cd $OLD_DRUPAL_DIR
$DRUSH hostmaster-migrate $MIGRATE_OPTIONS $AEGIR_DOMAIN $DRUPAL_DIR
# All should be done.