cidfile=cids/"$config".cid
cidbootstrap=cids/"$config"_boostrap.cid
local_discourse=local_discourse
-image=samsaffron/discourse
+image=samsaffron/discourse:0.1.2
docker_path=`which docker`
docker_ip=`/sbin/ifconfig | \
exit 1
}
+prereqs() {
+
+ # 1. running aufs
+ test=`docker 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
+ fi
+
+ # 2. running docker 0.9+
+ test=`docker --version | grep 0.9`
+
+ if [[ "$test" =~ "0.9" ]] ; then : ; else
+ echo "Your Docker installation is old, please upgrade to 0.9.0 or up"
+ exit 1
+ fi
+
+ # 3. able to attach stderr / out / tty
+ test=`docker run -i --rm -a stdin -a stdout -a stderr $image echo working`
+ if [[ "$test" =~ "working" ]] ; then : ; else
+ echo "Your Docker installation is not working correctly"
+ echo
+ echo "See: https://meta.discourse.org/t/docker-error-on-bootstrap/13657/18?u=sam"
+ exit 1
+ fi
+}
+
+prereqs
+
+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
+ 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
+ fi
+ fi
+ fi
+
+ ssh_pub_key="$(cat ~/.ssh/id_rsa.pub 2>/dev/null || cat ~/.ssh/id_dsa.pub)"
+}
+
+
install_docker() {
echo "Docker is not installed, make sure you are running on the 3.8 kernel"
exit 1
fi
+
+run_stop(){
+ if [ ! -e $cidfile ]
+ then
+ echo "No cid found"
+ exit 1
+ else
+ docker stop -t 10 `cat $cidfile`
+ fi
+}
+
+run_start(){
+
+ if [ ! -e $cidfile ]
+ then
+ echo "No cid found, creating a new container"
+ ports=`cat $config_file | docker run --rm -i -a stdout -a stdin $image ruby -e \
+ "require 'yaml'; puts YAML.load(STDIN.readlines.join)['expose'].map{|p| '-p ' << p.to_s << ' '}.join"`
+
+ set_template_info
+ set_volumes
+
+ existing=`docker ps -a | awk '{ print $1, $(NF) }' | grep "$config$" | awk '{ print $1 }'`
+ if [ ! -z $existing ]
+ then
+ echo "Found an existing container by its name, recovering cidfile, please rerun"
+ echo $existing > $cidfile
+ exit 1
+ fi
+
+ docker 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
+
+ exit 0
+ else
+ cid=`cat $cidfile`
+
+ if [ -z $cid ]
+ then
+ echo "Detected empty cid file, deleting, please re-run"
+ rm $cidfile
+ exit 1
+ fi
+
+ found=`docker ps -q -a --no-trunc | grep $cid`
+ if [ -z $found ]
+ then
+ echo "Invalid cid file, deleting, please re-run"
+ rm $cidfile
+ exit 1
+ fi
+
+ echo "cid found, ensuring container is started"
+ docker start `cat $cidfile`
+ exit 0
+ fi
+
+}
+
case "$command" in
bootstrap)
+
+ get_ssh_pub_key
+
# Is the image available?
# If not, pull it here so the user is aware what's happening.
docker history $image >/dev/null 2>&1 || docker pull $image
echo $run_command
+ env=("${env[@]}" "-e" "SSH_PUB_KEY=\"$ssh_pub_key\"")
+
(exec echo "$input" | docker run "${env[@]}" -e DOCKER_HOST_IP=$docker_ip --cidfile $cidbootstrap -i -a stdin -a stdout -a stderr $volumes $image \
/bin/bash -c "$run_command") \
|| (docker rm `cat $cidbootstrap` && rm $cidbootstrap)
;;
stop)
- if [ ! -e $cidfile ]
- then
- echo "No cid found"
- exit 1
- else
- docker stop -t 10 `cat $cidfile`
- exit 0
- fi
+ run_stop
+ exit 0
;;
logs)
fi
;;
- start)
-
- if [ ! -e $cidfile ]
- then
- echo "No cid found, creating a new container"
- ports=`cat $config_file | docker run --rm -i -a stdout -a stdin $image ruby -e \
- "require 'yaml'; puts YAML.load(STDIN.readlines.join)['expose'].map{|p| '-p ' << p.to_s << ' '}.join"`
-
- set_template_info
- set_volumes
-
- existing=`docker ps -a | awk '{ print $1, $(NF) }' | grep "$config$" | awk '{ print $1 }'`
- if [ ! -z $existing ]
- then
- echo "Found an existing container by its name, recovering cidfile, please rerun"
- echo $existing > $cidfile
- exit 1
- fi
-
- docker run "${env[@]}" -h "`hostname`-$config" -e DOCKER_HOST_IP=$docker_ip --name $config --cidfile $cidfile $ports \
- -d $volumes $local_discourse/$config /usr/bin/runsvdir -P /etc/service
+ restart)
+ run_stop
+ run_start
+ exit 0
+ ;;
- exit 0
- else
- cid=`cat $cidfile`
-
- if [ -z $cid ]
- then
- echo "Detected empty cid file, deleting, please re-run"
- rm $cidfile
- exit 1
- fi
-
- found=`docker ps -q -a -notrunc | grep $cid`
- if [ -z $found ]
- then
- echo "Invalid cid file, deleting, please re-run"
- rm $cidfile
- exit 1
- fi
-
- echo "cid found, ensuring container is started"
- docker start `cat $cidfile`
- exit 0
- fi
+ start)
+ run_start
+ exit 0
;;