5 if ! test -d /sys/fs/cgroup ; then
6 echo "Arvbox requires cgroups to be mounted at /sys/fs/cgroup in order to use"
7 echo "Docker-in-Docker. Older operating systems that put cgroups in other"
8 echo "places (such as /cgroup) are not supported."
12 if ! which docker >/dev/null 2>/dev/null ; then
13 echo "Arvbox requires Docker. To install, run the following command as root:"
14 echo "curl -sSL https://get.docker.com/ | sh"
18 if test -z "$ARVBOX_DOCKER" ; then
19 if which greadlink >/dev/null 2>/dev/null ; then
20 ARVBOX_DOCKER=$(greadlink -f $(dirname $0)/../lib/arvbox/docker)
22 ARVBOX_DOCKER=$(readlink -f $(dirname $0)/../lib/arvbox/docker)
26 if test -z "$ARVBOX_CONTAINER" ; then
27 ARVBOX_CONTAINER=arvbox
30 if test -z "$ARVBOX_BASE" ; then
31 ARVBOX_BASE="$HOME/.arvbox"
34 if test -z "$ARVBOX_DATA" ; then
35 ARVBOX_DATA="$ARVBOX_BASE/$ARVBOX_CONTAINER"
38 if test -z "$ARVADOS_ROOT" ; then
39 ARVADOS_ROOT="$ARVBOX_DATA/arvados"
42 if test -z "$ARVADOS_DEV_ROOT" ; then
43 ARVADOS_DEV_ROOT="$ARVBOX_DATA/arvados-dev"
46 if test -z "$SSO_ROOT" ; then
47 SSO_ROOT="$ARVBOX_DATA/sso-devise-omniauth-provider"
50 PG_DATA="$ARVBOX_DATA/postgres"
51 VAR_DATA="$ARVBOX_DATA/var"
52 PASSENGER="$ARVBOX_DATA/passenger"
53 GEMS="$ARVBOX_DATA/gems"
56 docker inspect $ARVBOX_CONTAINER | grep \"IPAddress\" | head -n1 | tr -d ' ":,\n' | cut -c10-
60 if test -f ~/.config/arvados/$ARVBOX_CONTAINER.conf ; then
61 sed "s/ARVADOS_API_HOST=.*/ARVADOS_API_HOST=$(getip):8000/" <$HOME/.config/arvados/$ARVBOX_CONTAINER.conf >$HOME/.config/arvados/$ARVBOX_CONTAINER.conf.tmp
62 mv ~/.config/arvados/$ARVBOX_CONTAINER.conf.tmp ~/.config/arvados/$ARVBOX_CONTAINER.conf
64 mkdir -p $HOME/.config/arvados
65 cat >$HOME/.config/arvados/$ARVBOX_CONTAINER.conf <<EOF
66 ARVADOS_API_HOST=$(getip):8000
68 ARVADOS_API_HOST_INSECURE=true
74 FF=/tmp/arvbox-fifo-$$
76 docker logs -f $ARVBOX_CONTAINER > $FF &
80 if echo $line | grep "Workbench is running at" >/dev/null ; then
86 if test -n "$localip" ; then
87 echo "export ARVADOS_API_HOST=$localip:8000"
89 echo "export ARVADOS_API_HOST=$(getip):8000"
94 if docker ps -a | grep -E "$ARVBOX_CONTAINER$" -q ; then
95 echo "Container $ARVBOX_CONTAINER is already running, use stop, restart or reboot"
99 if echo "$1" | grep '^public' ; then
100 if test -n "$ARVBOX_PUBLISH_IP" ; then
101 localip=$ARVBOX_PUBLISH_IP
103 defaultdev=$(/sbin/ip route|awk '/default/ { print $5 }')
104 localip=$(ip addr show $defaultdev | grep 'inet ' | sed 's/ *inet \(.*\)\/.*/\1/')
107 echo $localip > $iptemp
109 PUBLIC="--volume=$iptemp:/var/run/localip_override
115 --publish=25100:25100
116 --publish=25107:25107
117 --publish=25108:25108
123 if echo "$1" | grep 'demo$' ; then
124 if test -d "$ARVBOX_DATA" ; then
125 echo "It looks like you already have a development container named $ARVBOX_CONTAINER."
126 echo "Set ARVBOX_CONTAINER to set a different name for your demo container"
130 if ! (docker ps -a | grep -E "$ARVBOX_CONTAINER-data$" -q) ; then
131 docker create -v /var/lib/postgresql -v /var/lib/arvados --name $ARVBOX_CONTAINER-data arvados/arvbox-demo /bin/true
136 --name=$ARVBOX_CONTAINER \
138 --volumes-from $ARVBOX_CONTAINER-data \
144 mkdir -p "$PG_DATA" "$VAR_DATA" "$PASSENGER" "$GEMS"
146 if ! test -d "$ARVADOS_ROOT" ; then
147 git clone https://github.com/curoverse/arvados.git "$ARVADOS_ROOT"
149 if ! test -d "$SSO_ROOT" ; then
150 git clone https://github.com/curoverse/sso-devise-omniauth-provider.git "$SSO_ROOT"
153 if test "$1" = test ; then
156 if ! test -d "$ARVADOS_DEV_ROOT" ; then
157 git clone https://github.com/curoverse/arvados-dev.git "$ARVADOS_DEV_ROOT"
160 mkdir -p $VAR_DATA/test
164 --name=$ARVBOX_CONTAINER \
166 "--volume=$ARVADOS_ROOT:/usr/src/arvados:rw" \
167 "--volume=$ARVADOS_DEV_ROOT:/usr/src/arvados-dev:rw" \
168 "--volume=$SSO_ROOT:/usr/src/sso:rw" \
169 "--volume=$PG_DATA:/var/lib/postgresql:rw" \
170 "--volume=$VAR_DATA:/var/lib/arvados:rw" \
171 "--volume=$PASSENGER:/var/lib/passenger:rw" \
172 "--volume=$GEMS:/var/lib/gems:rw" \
174 /usr/local/bin/runsvinit -svdir=/etc/test-service
178 /usr/local/lib/arvbox/runsu.sh \
179 /usr/local/lib/arvbox/waitforpostgres.sh
183 /usr/local/lib/arvbox/runsu.sh \
184 /usr/local/lib/arvbox/service/sso/run-service --only-setup
188 /usr/local/lib/arvbox/runsu.sh \
189 /usr/local/lib/arvbox/service/api/run-service --only-setup
193 /usr/local/lib/arvbox/runsu.sh \
194 /usr/src/arvados-dev/jenkins/run-tests.sh \
195 --temp /var/lib/arvados/test \
196 WORKSPACE=/usr/src/arvados \
197 GEM_HOME=/var/lib/gems \
199 elif echo "$1" | grep 'dev$' ; then
202 --name=$ARVBOX_CONTAINER \
204 "--volume=$ARVADOS_ROOT:/usr/src/arvados:rw" \
205 "--volume=$SSO_ROOT:/usr/src/sso:rw" \
206 "--volume=$PG_DATA:/var/lib/postgresql:rw" \
207 "--volume=$VAR_DATA:/var/lib/arvados:rw" \
208 "--volume=$PASSENGER:/var/lib/passenger:rw" \
209 "--volume=$GEMS:/var/lib/gems:rw" \
214 echo "The Arvados source code is checked out at: $ARVADOS_ROOT"
216 echo "Unknown configuration '$1'"
222 if docker ps -a --filter "status=running" | grep -E "$ARVBOX_CONTAINER$" -q ; then
223 docker stop $ARVBOX_CONTAINER
226 VOLUMES=--volumes=true
227 if docker ps -a --filter "status=created" | grep -E "$ARVBOX_CONTAINER$" -q ; then
228 docker rm $VOLUMES $ARVBOX_CONTAINER
230 if docker ps -a --filter "status=exited" | grep -E "$ARVBOX_CONTAINER$" -q ; then
231 docker rm $VOLUMES $ARVBOX_CONTAINER
236 if ! test -f "$ARVBOX_DOCKER/Dockerfile.base" ; then
237 echo "Could not find Dockerfile ($ARVBOX_DOCKER/Dockerfile.base)"
240 docker build -t arvados/arvbox-base -f "$ARVBOX_DOCKER/Dockerfile.base" "$ARVBOX_DOCKER"
241 if test "$1" = localdemo -o "$1" = publicdemo ; then
242 docker build -t arvados/arvbox-demo -f "$ARVBOX_DOCKER/Dockerfile.demo" "$ARVBOX_DOCKER"
244 docker build -t arvados/arvbox-dev -f "$ARVBOX_DOCKER/Dockerfile.dev" "$ARVBOX_DOCKER"
250 localdemo|publicdemo|dev|publicdev|test)
254 echo "Argument to $subcmd must be one of localdemo, publicdemo, dev, publicdev, test"
261 if test -n "$subcmd" ; then
276 docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM GEM_HOME=/var/lib/gems /bin/bash
297 if test "$subcmd" = 'ip' ; then
300 xdg-open http://$(getip)
305 echo "Selected: $ARVBOX_CONTAINER"
306 if docker ps -a --filter "status=running" | grep -E "$ARVBOX_CONTAINER$" -q ; then
307 echo "Status: running"
310 echo "Status: not running"
312 if test -d "$ARVBOX_DATA" ; then
313 echo "Data: $ARVBOX_DATA"
314 elif docker ps -a | grep -E "$ARVBOX_CONTAINER-data$" -q ; then
315 echo "Data: $ARVBOX_CONTAINER-data"
323 if test -d "$ARVBOX_DATA" ; then
324 if test "$subcmd" = destroy ; then
325 if test "$1" != -f ; then
326 echo "WARNING! This will delete your entire arvbox ($ARVBOX_DATA)."
327 echo "Use destroy -f if you really mean it."
331 rm -rf "$ARVBOX_DATA"
333 if test "$1" != -f ; then
334 echo "WARNING! This will delete your arvbox data ($ARVBOX_DATA)."
335 echo "Code and downloaded packages will be preserved."
336 echo "Use reset -f if you really mean it."
340 rm -rf "$ARVBOX_DATA/postgres"
341 rm -rf "$ARVBOX_DATA/var"
344 if test "$1" != -f ; then
345 echo "WARNING! This will delete your data container $ARVBOX_CONTAINER-data. Use -f if you really mean it."
349 docker rm "$ARVBOX_CONTAINER-data"
354 if test -n "$1" ; then
355 docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM less --follow-name +GF "/etc/service/$1/log/main/current"
357 docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM tail $(docker exec -ti $ARVBOX_CONTAINER find -L /etc -path '/etc/service/*/log/main/current' -printf " %p")
362 if test -n "$1" ; then
363 docker exec -ti $ARVBOX_CONTAINER sv restart "$1"
364 docker exec -ti $ARVBOX_CONTAINER sv restart ready
366 echo "Usage: $0 $subcmd <service>"
367 echo "Available services:"
368 docker exec -ti $ARVBOX_CONTAINER ls /etc/service
373 if test -n "$2" ; then
374 cp -r "$ARVBOX_BASE/$1" "$ARVBOX_BASE/$2"
375 echo "Created new arvbox $2"
376 echo "export ARVBOX_CONTAINER=$2"
378 echo "clone <from> <to> clone an arvbox"
379 echo "available arvboxes: $(ls $ARVBOX_BASE)"
384 echo "Arvados-in-a-box"
386 echo "$(basename $0) (build|start|run|open|shell|ip|stop|reboot|reset|destroy|log|svrestart)"
388 echo "build <config> build arvbox Docker image"
389 echo "start|run <config> start $ARVBOX_CONTAINER container"
390 echo "open open arvbox workbench in a web browser"
391 echo "shell enter arvbox shell"
392 echo "ip print arvbox ip address"
393 echo "status print some information about current arvbox"
394 echo "stop stop arvbox container"
395 echo "restart <config> stop, then run again"
396 echo "reboot <config> stop, build arvbox Docker image, run"
397 echo "reset delete arvbox arvados data (be careful!)"
398 echo "destroy delete all arvbox code and data (be careful!)"
399 echo "log <service> tail log of specified service"
400 echo "svrestart <service> restart specified service inside arvbox"
401 echo "clone <from> <to> clone an arvbox"