UPGRADE: base image to 14.04
[discourse_docker.git] / launcher
index ba2653223e8e2582632d3b3efa5651de3d236f51..d4aff1cffd777b395c37ac7dc285b03c51d9175d 100755 (executable)
--- a/launcher
+++ b/launcher
@@ -7,13 +7,13 @@ opt=$3
 cd "$(dirname "$0")"
 
 docker_min_version='0.9.1'
-docker_rec_version='0.10.0'
+docker_rec_version='0.11.1'
 
 config_file=containers/"$config".yml
 cidfile=cids/"$config".cid
 cidbootstrap=cids/"$config"_boostrap.cid
 local_discourse=local_discourse
-image=samsaffron/discourse:0.2.0
+image=samsaffron/discourse:0.2.3
 docker_path=`which docker.io || which docker`
 
 docker_ip=`/sbin/ifconfig | \
@@ -72,23 +72,22 @@ prereqs() {
     exit 1
   fi
 
-  # 2. running aufs
+  # 2. running aufs 
   test=`$docker_path info 2> /dev/null | grep 'Driver: aufs'`
   if [[ "$test" =~ "aufs" ]] ; then : ; else
-    echo "Your Docker installation is not using aufs"
-    echo "Device mapper and other experimental drivers are unstable"
-    echo
-    echo "Please ensure your kernel is running linux extras and aufs"
-    echo "Please follow the installation guide for Docker here: http://docs.docker.io/en/latest/installation/ubuntulinux/"
-    exit 1
+    echo "Your Docker installation is not using aufs, in the past we have had issues with it"
+    echo "If you are unable to bootstrap your image (or stop it) please report the issue at:"
+    echo "https://meta.discourse.org/t/discourse-docker-installation-without-aufs/15639"
   fi
 
   # 3. running recommended docker version
   test=($($docker_path --version))  # Get docker version string
   test=${test[2]//,/}  # Get version alone and strip comma if exists
 
+  [[ "$test" =~ "0.12.0" ]] && echo "You are running a broken version of Docker, please upgrade ASAP. See: https://meta.discourse.org/t/the-installation-stopped-in-the-middle/16311/ for more details." && exit 1
+
   # At least minimum version
-  if compare_version "${socker_min_version}" "${test}"; then
+  if compare_version "${docker_min_version}" "${test}"; then
     echo "ERROR: Docker version ${test} not supported, please upgrade to at least ${docker_min_version}, or recommended ${docker_rec_version}"
     exit 1
   fi
@@ -115,16 +114,16 @@ fi
 get_ssh_pub_key() {
   if tty -s ; then
     if [[ ! -e ~/.ssh/id_rsa.pub && ! -e ~/.ssh/id_dsa.pub ]] ; then
-      echo You have no SSH key associated to this profile
-      echo "(This will allow you ssh access into your container)"
-      read -p "Generate SSH key at ~/.ssh/id_rsa.pub? (y/N) " -n 1 -r
-      if [[ $REPLY =~ ^[Yy]$ ]] ; then
+      echo "This user has no SSH key, but a SSH key is required to access the Discourse Docker container."
+      read -p "Generate a SSH key? (Y/n) " -n 1 -r
+      if [[ $REPLY =~ ^[Nn]$ ]] ; then
+        echo
+        echo WARNING: You may not be able to log in to your container.
         echo
-        echo Generating SSH key
-        mkdir -p ~/.ssh && ssh-keygen -f ~/.ssh/id_rsa -t rsa -N ''
       else
         echo
-        echo WARNING: You may not be able to log in to your container.
+        echo Generating SSH key
+        mkdir -p ~/.ssh && ssh-keygen -f ~/.ssh/id_rsa -t rsa -N ''
         echo
       fi
     fi
@@ -188,6 +187,9 @@ set_template_info() {
        yml.strip!
        begin
          env.merge!(YAML.load(yml)['env'] || {})
+       rescue Psych::SyntaxError => e
+        puts e
+        puts "*ERROR."
        rescue => e
         puts yml
         p e
@@ -199,12 +201,20 @@ RUBY
     raw=`exec echo "$input" | $docker_path run --rm -i -a stdin -a stdout $image ruby -e "$env_ruby"`
 
     env=()
+    ok=1
     while read i; do
-      if [ -n "$i" ]; then
+      if [ "$i" == "*ERROR." ]; then
+        ok=0
+      elif [ -n "$i" ]; then
         env[${#env[@]}]=$i
       fi
     done <<< "$raw"
 
+    if [ "$ok" -ne 1 ]; then
+      echo "${env[@]}"
+      echo "YAML syntax error. Please check your configuration files."
+      exit 1
+    fi
     echo "Calculated ENV: ${env[@]}"
 }
 
@@ -220,6 +230,8 @@ RUBY
 if [ ! -e $config_file ]
   then
     echo "Config file was not found, ensure $config_file exists"
+    echo ""
+    echo "Available configs ( `cd containers && ls -dm *.yml | tr -s '\n' ' ' | awk '{ gsub(/\.yml/, ""); print }'`)"
     exit 1
 fi
 
@@ -262,7 +274,7 @@ run_start(){
        fi
 
        $docker_path run "${env[@]}" -h "`hostname`-$config" -e DOCKER_HOST_IP=$docker_ip --name $config -t --cidfile $cidfile $ports \
-                  -d $volumes $local_discourse/$config /usr/bin/runsvdir -P /etc/service
+                  -d $volumes $local_discourse/$config /sbin/runit
 
        exit 0
      else