+ # Mount a keep volume if we don't already have one
+ for mountpoint in $(cut -d ' ' -f 2 /proc/mounts); do
+ if [[ -d "$mountpoint/keep" && "$mountpoint" != "/" ]]; then
+ keep_volumes+=($mountpoint)
+ fi
+ done
+
+ # Create any keep volumes that do not yet exist.
+ while [ ${#keep_volumes[*]} -lt 2 ]
+ do
+ new_keep=$(mktemp -d)
+ echo >&2 "mounting 512M tmpfs keep volume in $new_keep"
+ sudo mount -t tmpfs -o size=512M tmpfs $new_keep
+ mkdir $new_keep/keep
+ keep_volumes+=($new_keep)
+ done
+}
+
+function do_start {
+ local start_doc=false
+ local start_sso=false
+ local start_api=false
+ local start_workbench=false
+ local start_keep=false
+
+ # NOTE: This requires GNU getopt (part of the util-linux package on Debian-based distros).
+ local TEMP=`getopt -o d::s::a::w::kh \
+ --long doc::,sso::,api::,workbench::,keep,help,ssh \
+ -n "$0" -- "$@"`
+
+ if [ $? != 0 ] ; then echo "Use -h for help"; exit 1 ; fi
+
+ # Note the quotes around `$TEMP': they are essential!
+ eval set -- "$TEMP"
+
+ while [ $# -ge 1 ]
+ do
+ case $1 in
+ -d | --doc)
+ case "$2" in
+ "") start_doc=9898; shift 2 ;;
+ *) start_doc=$2; shift 2 ;;
+ esac
+ ;;
+ -s | --sso)
+ case "$2" in
+ "") start_sso=9901; shift 2 ;;
+ *) start_sso=$2; shift 2 ;;
+ esac
+ ;;
+ -a | --api)
+ case "$2" in
+ "") start_api=9900; shift 2 ;;
+ *) start_api=$2; shift 2 ;;
+ esac
+ ;;
+ -w | --workbench)
+ case "$2" in
+ "") start_workbench=9899; shift 2 ;;
+ *) start_workbench=$2; shift 2 ;;
+ esac
+ ;;
+ -k | --keep )
+ start_keep=true
+ shift
+ ;;
+ --ssh)
+ # ENABLE_SSH is a global variable
+ ENABLE_SSH=true
+ shift
+ ;;
+ --)
+ shift
+ break
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+ esac
+ done
+
+ # If no options were selected, then start all servers.
+ if [[ $start_doc == false &&
+ $start_sso == false &&
+ $start_api == false &&
+ $start_workbench == false &&
+ $start_keep == false ]]
+ then
+ start_doc=9898
+ start_sso=9901
+ start_api=9900
+ start_workbench=9899
+ start_keep=true
+ fi
+
+ if [[ $start_doc != false ]]
+ then
+ start_container "9898:80" "doc_server" '' '' "arvados/doc"
+ fi
+
+ if [[ $start_sso != false ]]
+ then
+ start_container "9901:443" "sso_server" '' '' "arvados/sso"
+ fi
+
+ if [[ $start_api != false ]]
+ then
+ start_container "9900:443" "api_server" '' "sso_server:sso" "arvados/api"
+ fi
+
+ if [[ $start_workbench != false ]]
+ then
+ start_container "9899:80" "workbench_server" '' "api_server:api" "arvados/workbench"
+ fi
+
+ if [[ $start_keep != false ]]
+ then
+ # create `keep_volumes' array with a list of keep mount points
+ # remove any stale metadata from those volumes before starting them
+ make_keep_volumes
+ for v in ${keep_volumes[*]}
+ do
+ [ -f $v/keep/.metadata.yml ] && sudo rm $v/keep/.metadata.yml
+ done
+ start_container "25107:25107" "keep_server_0" \
+ "${keep_volumes[0]}:/dev/keep-0" \
+ "api_server:api" \
+ "arvados/warehouse"
+ start_container "25108:25107" "keep_server_1" \
+ "${keep_volumes[1]}:/dev/keep-0" \
+ "api_server:api" \
+ "arvados/warehouse"