exit 1
}
+# for potential re-exec later
+SAVED_ARGV=("$@")
+
command=$1
config=$2
+
+# user_args_argv is assigned once when the argument vector is parsed.
+user_args_argv=""
+# user_args is mutable: its value may change when templates are parsed.
+# Superset of user_args_argv.
user_args=""
+
user_run_image=""
if [[ $command == "run" ]]; then
SKIP_MAC_ADDRESS="1"
;;
--docker-args)
- user_args="$2"
+ user_args_argv="$2"
+ user_args="$user_args_argv"
shift
;;
--run-image)
if [ -z "$command" -o -z "$config" -a "$command" != "cleanup" ]; then
usage
- exit 1
fi
# Docker doesn't like uppercase characters, spaces or special characters, catch it now before we build everything out and then find out
config_file=containers/"$config".yml
cidbootstrap=cids/"$config"_bootstrap.cid
local_discourse=local_discourse
-image="discourse/base:2.0.20190505-2322"
+image="discourse/base:2.0.20201004-2310"
docker_path=`which docker.io 2> /dev/null || which docker`
git_path=`which git`
exit 1
}
+pull_image() {
+ # Add a single retry to work around dockerhub TLS errors
+ $docker_path pull $image || $docker_path pull $image
+}
+
check_prereqs() {
if [ -z $docker_path ]; then
fi
# 2. running an approved storage driver?
- if ! $docker_path info 2> /dev/null | egrep -q '^Storage Driver: (aufs|zfs|overlay2)$'; then
+ if ! $docker_path info 2> /dev/null | egrep -q 'Storage Driver: (aufs|zfs|overlay2)$'; then
echo "Your Docker installation is not using a supported storage driver. If we were to proceed you may have a broken install."
- echo "aufs is the recommended storage driver, although zfs and overlay2 may work as well."
+ echo "overlay2 is the recommended storage driver, although zfs and aufs may work as well."
echo "Other storage drivers are known to be problematic."
echo "You can tell what filesystem you are using by running \"docker info\" and looking at the 'Storage Driver' line."
echo
echo
echo "Please be patient"
echo
+
+ pull_image
fi
# 5. running recommended git version
echo "You have less than 5GB of free space on the disk where $safe_folder is located. You will need more space to continue"
df -h $safe_folder
echo
- read -p "Would you like to attempt to recover space by cleaning docker images and containers in the system?(y/N)" -n 1 -r
- echo
- if [[ $REPLY =~ ^[Yy]$ ]]
- then
- $docker_path system prune -af
- echo "If the cleanup was successful, you may try again now"
+ if tty >/dev/null; then
+ read -p "Would you like to attempt to recover space by cleaning docker images and containers in the system?(y/N)" -n 1 -r
+ echo
+ if [[ $REPLY =~ ^[Yy]$ ]]
+ then
+ $docker_path container prune --force --filter until=1h >/dev/null
+ $docker_path image prune --all --force --filter until=1h >/dev/null
+ echo "If the cleanup was successful, you may try again now"
+ fi
fi
exit 1
fi
p e
end
end
+ env.each{|k,v| puts "*ERROR." if v.is_a?(Hash)}
puts env.map{|k,v| "-e\n#{k}=#{v}" }.join("\n")
RUBY
fi
[ "$command" == "cleanup" ] && {
- $docker_path system prune -a
+ $docker_path container prune --filter until=1h
+ $docker_path image prune --all --filter until=1h
if [ -d /var/discourse/shared/standalone/postgres_data_old ]; then
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "removing old PostgreSQL data cluster at /var/discourse/shared/standalone/postgres_data_old..."
- rm -rf /var/discourse/shared/standalone/postgres_data_old
+ rm -rf /var/discourse/shared/standalone/postgres_data_old*
else
exit 1
fi
)
else
echo "$config was not started !"
+ echo "./discourse-doctor may help diagnose the problem."
exit 1
fi
}
"require 'yaml'; puts YAML.load(STDIN.readlines.join)['docker_args']"`
if [[ -n "$docker_args" ]]; then
- user_args="$user_args $docker_args"
+ user_args="$user_args_argv $docker_args"
fi
}
# Is the image available?
# If not, pull it here so the user is aware what's happening.
- $docker_path history $image >/dev/null 2>&1 || $docker_path pull $image
+ $docker_path history $image >/dev/null 2>&1 || pull_image
set_template_info
$docker_path rm `cat $cidbootstrap`
rm $cidbootstrap
- echo "** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one"
+ echo "** FAILED TO BOOTSTRAP ** please scroll up and look for earlier error messages, there may be more than one."
+ echo "./discourse-doctor may help diagnose the problem."
exit 1
fi
echo "Launcher is up-to-date"
elif [ $LOCAL = $BASE ]; then
- echo "Updating Launcher"
+ echo "Updating Launcher..."
git pull || (echo 'failed to update' && exit 1)
- for (( i=${#BASH_ARGV[@]}-1,j=0; i>=0,j<${#BASH_ARGV[@]}; i--,j++ ))
- do
- args[$j]=${BASH_ARGV[$i]}
- done
- exec /bin/bash $0 "${args[@]}" # $@ is empty, because of shift at the beginning. Use BASH_ARGV instead.
+ echo "Launcher updated, restarting..."
+ exec "$0" "${SAVED_ARGV[@]}"
elif [ $REMOTE = $BASE ]; then
echo "Your version of Launcher is ahead of origin"
echo "Stopping old container"
(
set -x
- $docker_path stop -t 10 $config
+ $docker_path stop -t 60 $config
)
fi