X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=launcher;h=879d9b10a57292c5efb44ab78d32aa892d02f672;hb=087e11016524a613ee28b9b97a260971f939994f;hp=b0e14d983d50da995e5a16eaa06837513ef2b369;hpb=8100fab05d12d56c8204b467f4b68811b8c0c796;p=discourse_docker.git diff --git a/launcher b/launcher index b0e14d9..879d9b1 100755 --- a/launcher +++ b/launcher @@ -56,15 +56,15 @@ fi cd "$(dirname "$0")" -docker_min_version='1.8.0' -docker_rec_version='1.8.0' +docker_min_version='17.03.1' +docker_rec_version='17.06.2' git_min_version='1.8.0' git_rec_version='1.8.0' config_file=containers/"$config".yml cidbootstrap=cids/"$config"_bootstrap.cid local_discourse=local_discourse -image=discourse/discourse:1.3.5 +image=discourse/base:2.0.20171204 docker_path=`which docker.io || which docker` git_path=`which git` @@ -90,25 +90,27 @@ else awk -F: '{ print $3 }';` fi +# From https://stackoverflow.com/a/44660519/702738 compare_version() { - declare -a ver_a - declare -a ver_b - IFS=. read -a ver_a <<< "$1" - IFS=. read -a ver_b <<< "$2" - - while [[ -n $ver_a ]]; do - if (( ver_a > ver_b )); then - return 0 - elif (( ver_b > ver_a )); then + if [[ $1 == $2 ]]; then + return 1 + fi + local IFS=. + local i a=(${1%%[^0-9.]*}) b=(${2%%[^0-9.]*}) + local arem=${1#${1%%[^0-9.]*}} brem=${2#${2%%[^0-9.]*}} + for ((i=0; i<${#a[@]} || i<${#b[@]}; i++)); do + if ((10#${a[i]:-0} < 10#${b[i]:-0})); then return 1 - else - unset ver_a[0] - ver_a=("${ver_a[@]}") - unset ver_b[0] - ver_b=("${ver_b[@]}") + elif ((10#${a[i]:-0} > 10#${b[i]:-0})); then + return 0 fi done - return 1 # They are equal + if [ "$arem" '<' "$brem" ]; then + return 1 + elif [ "$arem" '>' "$brem" ]; then + return 0 + fi + return 1 } @@ -133,15 +135,15 @@ check_prereqs() { exit 1 fi - # 2. running aufs or btrfs - test=`$docker_path info 2> /dev/null | grep 'Driver: '` - if [[ "$test" =~ [aufs|btrfs|zfs|overlay] ]] ; then : ; else - echo "Your Docker installation is not using a supported filesystem if we were to proceed you may have a broken install." - echo "aufs is the recommended filesystem you should be using (zfs/btrfs and overlay may work as well)" - echo "You can tell what filesystem you are using by running \"docker info\" and looking at the driver" + # 2. running an approved storage driver? + if ! $docker_path info 2> /dev/null | egrep -q '^Storage Driver: (aufs|btrfs|zfs|overlay|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/btrfs/overlay and overlay2 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 "If you wish to continue anyway using your existing unsupported filesystem, " - echo "read the source code of launcher and figure out how to bypass this." + echo "If you wish to continue anyway using your existing unsupported storage driver," + echo "read the source code of launcher and figure out how to bypass this check." exit 1 fi @@ -196,10 +198,27 @@ check_prereqs() { exit 1 fi + # 7. enough space for the bootstrap on docker folder + folder=`$docker_path info --format '{{.DockerRootDir}}'` + safe_folder=${folder:-/var/lib/docker} + test=$(($(stat -f --format="%a*%S" $safe_folder)/1024**3 < 5)) + if [[ $test -ne 0 ]] ; then + 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 system prune + echo "If the cleanup was successful, you may try again now" + fi + exit 1 + fi } -if [ -z "$SKIP_PREREQS" ] ; then +if [ -z "$SKIP_PREREQS" ] && [ "$command" != "cleanup" ]; then check_prereqs fi @@ -352,7 +371,7 @@ RUBY if [ "$i" == "*ERROR." ]; then ok=0 elif [ -n "$i" ]; then - labels[${#labels[@]}]=$i + labels[${#labels[@]}]=$(echo $i | sed s/{{config}}/${config}/g) fi done <<< "$raw" @@ -517,8 +536,8 @@ run_start() { fi set -x - $docker_path run $user_args $links $attach_on_run $restart_policy "${env[@]}" "${labels[@]}" -h "$hostname" \ - -e DOCKER_HOST_IP=$docker_ip --name $config -t $ports $volumes $mac_address $docker_args \ + $docker_path run $links $attach_on_run $restart_policy "${env[@]}" "${labels[@]}" -h "$hostname" \ + -e DOCKER_HOST_IP="$docker_ip" --name $config -t $ports $volumes $mac_address $docker_args $user_args \ $run_image $boot_command ) @@ -562,7 +581,7 @@ run_bootstrap() { echo $run_command unset ERR - (exec echo "$input" | $docker_path run $user_args $links "${env[@]}" -e DOCKER_HOST_IP=$docker_ip --cidfile $cidbootstrap -i -a stdin -a stdout -a stderr $volumes $image \ + (exec echo "$input" | $docker_path run $user_args $links "${env[@]}" -e DOCKER_HOST_IP="$docker_ip" --cidfile $cidbootstrap -i -a stdin -a stdout -a stderr $volumes $image \ /bin/bash -c "$run_command") || ERR=$? unset FAILED @@ -644,7 +663,7 @@ case "$command" in elif [ $LOCAL = $BASE ]; then 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]}