X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=launcher;h=bc7f2041f4fca25a758317bf8bb8010ba34c0295;hb=be55cb66c609b460249142aa7bda23e5de8c2d4b;hp=0d0ca6f05c3f3372a6bfe0311c4ce8a9487d872a;hpb=cf00fce0ffa858c4de26080c314b481fdcb9c7f5;p=discourse_docker.git diff --git a/launcher b/launcher index 0d0ca6f..bc7f204 100755 --- a/launcher +++ b/launcher @@ -6,14 +6,14 @@ opt=$3 cd "$(dirname "$0")" -docker_min_version='0.9.1' -docker_rec_version='0.11.1' +docker_min_version='1.2.0' +docker_rec_version='1.2.0' config_file=containers/"$config".yml cidfile=cids/"$config".cid cidbootstrap=cids/"$config"_boostrap.cid local_discourse=local_discourse -image=samsaffron/discourse:0.2.1 +image=samsaffron/discourse:1.0.3 docker_path=`which docker.io || which docker` docker_ip=`/sbin/ifconfig | \ @@ -30,6 +30,7 @@ usage () { echo " stop: Stop a running container" echo " restart: Restart a container" echo " destroy: Stop and remove a container" + echo " enter: Use nsenter to enter a container" echo " ssh: Start a bash shell in a running container" echo " logs: Docker logs for container" echo " mailtest: Test the mail settings in a container" @@ -182,7 +183,8 @@ set_template_info() { require 'yaml' input=STDIN.readlines.join - env = {} + # default to UTF-8 for the dbs sake + env = {'LANG' => 'en_US.UTF-8'} input.split('_FILE_SEPERATOR_').each do |yml| yml.strip! begin @@ -212,7 +214,7 @@ RUBY if [ "$ok" -ne 1 ]; then echo "${env[@]}" - echo "YAML syntax error. Please check your configuration files." + echo "YAML syntax error. Please check your /var/docker/containers/*.yml config files." exit 1 fi echo "Calculated ENV: ${env[@]}" @@ -230,10 +232,23 @@ 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 +docker_version=($($docker_path --version)) +docker_version=${test[2]//,/} + +if compare_version "1.2.0" "$docker_version"; then + echo "We recommend you upgrade docker, the version you are running has no restart policies, on reboot your container may not start up" + restart_policy="" +else + restart_policy="--restart=always" +fi + + run_mailtest(){ if [ ! -e $config_file ]; then echo "Config does not exist: $config_file" >&2 @@ -271,8 +286,8 @@ run_start(){ exit 1 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 + $docker_path run $restart_policy "${env[@]}" -h "`hostname`-$config" -e DOCKER_HOST_IP=$docker_ip --name $config -t --cidfile $cidfile $ports \ + -d $volumes $local_discourse/$config /sbin/runit exit 0 else @@ -357,6 +372,35 @@ case "$command" in exit 0 ;; + enter) + + if [ ! -e $cidfile ] + then + echo "No cid found" + exit 1 + fi + + if [ ! $UID -eq 0 ] ; + then + echo "enter command must run as root, will attempt to sudo" + echo + fi + + if [ ! -e bin/nsenter ] + then + echo "Downloading nsenter" + $docker_path pull samsaffron/nsenter + ($docker_path run --rm samsaffron/nsenter cat /nsenter > bin/nsenter1) || exit 1 + cp bin/nsenter1 bin/nsenter + chmod +x bin/nsenter + fi + + PID=$($docker_path inspect --format {{.State.Pid}} `cat $cidfile`) + SHELL=/bin/bash sudo -E bin/nsenter --target $PID --mount --uts --ipc --net --pid + + exit 0; + ;; + ssh) if [ ! -e $cidfile ] then @@ -399,6 +443,10 @@ case "$command" in ;; rebuild) + if [ "$(git symbolic-ref --short HEAD)" == "master" ]; then + echo "Updating discourse docker" + git pull || (echo 'failed to update' && exit 1) + fi if [ -e $cidfile ] then echo "Stopping old container"