Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add retrying to installer #7348

Merged
merged 7 commits into from Jul 7, 2016
57 changes: 51 additions & 6 deletions scripts/admin/launch-meteor
Expand Up @@ -73,7 +73,23 @@ if [ ! -x "$METEOR_WAREHOUSE_DIR/meteor" ]; then
TARBALL_URL="${TMP_ROOT_URL}/meteor-bootstrap-${PLATFORM}.tar.gz"

INSTALL_TMPDIR="$(dirname "$METEOR_WAREHOUSE_DIR")/.meteor-install-tmp"
rm -rf "$INSTALL_TMPDIR"

# Generate the $TARBALL_FILE path based on $TARBALL_URL, but with unsafe
# characters replaced by underscores.
PART_FILE=".meteor-${TARBALL_URL//[^A-Za-z0-9_.-]/_}.part"
TARBALL_FILE="$(dirname "$METEOR_WAREHOUSE_DIR")/${PART_FILE}"

cleanUp() {
rm -rf "$TARBALL_FILE"
rm -rf "$INSTALL_TMPDIR"
}

# Remove temporary files now in case they exist.
cleanUp

# Make sure cleanUp gets called if we exit abnormally.
trap cleanUp EXIT

mkdir "$INSTALL_TMPDIR"
if [ -n "${USER-}" ]; then
echo "$USER, this is your first time using Meteor!" 1>&2
Expand All @@ -82,20 +98,49 @@ if [ ! -x "$METEOR_WAREHOUSE_DIR/meteor" ]; then
fi
echo "Installing a Meteor distribution in your home directory." 1>&2


# Only show progress bar animations if we have a tty
# (Prevents tons of console junk when installing within a pipe)
if [[ -t 1 ]]; then
curl --progress-bar --fail "$TARBALL_URL" | tar -xzf - -C "$INSTALL_TMPDIR"
else
curl -s --fail "$TARBALL_URL" | tar -xzf - -C "$INSTALL_TMPDIR"
VERBOSITY="--silent";
if [ -t 1 ]; then
VERBOSITY="--progress-bar"
fi

echo "Downloading Meteor distribution"
# keep trying to curl the file until it works (resuming where possible)
MAX_ATTEMPTS=10
RETRY_DELAY_SECS=5
set +e
ATTEMPTS=0
while [ $ATTEMPTS -lt $MAX_ATTEMPTS ]
do
ATTEMPTS=$((ATTEMPTS + 1))

curl $VERBOSITY --fail --continue-at - \
"$TARBALL_URL" --output "$TARBALL_FILE"

if [ $? -eq 0 ]
then
break
fi

echo "Retrying download in $RETRY_DELAY_SECS seconds..."
sleep $RETRY_DELAY_SECS
done
set -e

# bomb out if it didn't work, eg no net
test -e "${TARBALL_FILE}"
tar -xzf "$TARBALL_FILE" -C "$INSTALL_TMPDIR" -o

test -x "${INSTALL_TMPDIR}/.meteor/meteor"
mv "${INSTALL_TMPDIR}/.meteor" "$METEOR_WAREHOUSE_DIR"
rmdir "${INSTALL_TMPDIR}"
# just double-checking :)
test -x "$METEOR_WAREHOUSE_DIR/meteor"

# The `trap cleanUp EXIT` line above won't actually fire after the exec
# call below, so call cleanUp manually.
cleanUp
fi

exec "$METEOR_WAREHOUSE_DIR/meteor" "$@"