X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9e2e220996943f6de9a059a6b57c458f60f10e8e..39c17737ac69d7693684fe2f95bef0ec235a28bf:/tools/arvbox/bin/arvbox diff --git a/tools/arvbox/bin/arvbox b/tools/arvbox/bin/arvbox index 474913170a..a26c396e2e 100755 --- a/tools/arvbox/bin/arvbox +++ b/tools/arvbox/bin/arvbox @@ -1,4 +1,7 @@ #!/bin/sh +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 set -e @@ -43,12 +46,18 @@ if test -z "$SSO_ROOT" ; then SSO_ROOT="$ARVBOX_DATA/sso-devise-omniauth-provider" fi +if test -z "$COMPOSER_ROOT" ; then + COMPOSER_ROOT="$ARVBOX_DATA/composer" +fi + PG_DATA="$ARVBOX_DATA/postgres" VAR_DATA="$ARVBOX_DATA/var" PASSENGER="$ARVBOX_DATA/passenger" GEMS="$ARVBOX_DATA/gems" PIPCACHE="$ARVBOX_DATA/pip" +NPMCACHE="$ARVBOX_DATA/npm" GOSTUFF="$ARVBOX_DATA/gopath" +RLIBS="$ARVBOX_DATA/Rlibs" getip() { docker inspect $ARVBOX_CONTAINER | grep \"IPAddress\" | head -n1 | tr -d ' ":,\n' | cut -c10- @@ -106,17 +115,25 @@ run() { shift + need_setup=1 + if docker ps -a --filter "status=running" | grep -E "$ARVBOX_CONTAINER$" -q ; then - echo "Container $ARVBOX_CONTAINER is already running" - exit 0 + if test "$CONFIG" = test ; then + need_setup=0 + else + echo "Container $ARVBOX_CONTAINER is already running" + exit 0 + fi fi - if docker ps -a | grep -E "$ARVBOX_CONTAINER$" -q ; then - echo "Container $ARVBOX_CONTAINER already exists but is not running; use restart or rebuild" - exit 1 + if test $need_setup = 1 ; then + if docker ps -a | grep -E "$ARVBOX_CONTAINER$" -q ; then + echo "Container $ARVBOX_CONTAINER already exists but is not running; use restart or reboot" + exit 1 + fi fi - if test ! -z "$TAG" + if test -n "$TAG" then if test $(echo $TAG | cut -c1-1) != '-' ; then TAG=":$TAG" @@ -172,7 +189,7 @@ run() { updateconf wait_for_arvbox else - mkdir -p "$PG_DATA" "$VAR_DATA" "$PASSENGER" "$GEMS" "$PIPCACHE" "$GOSTUFF" + mkdir -p "$PG_DATA" "$VAR_DATA" "$PASSENGER" "$GEMS" "$PIPCACHE" "$NPMCACHE" "$GOSTUFF" "$RLIBS" if ! test -d "$ARVADOS_ROOT" ; then @@ -181,40 +198,48 @@ run() { if ! test -d "$SSO_ROOT" ; then git clone https://github.com/curoverse/sso-devise-omniauth-provider.git "$SSO_ROOT" fi + if ! test -d "$COMPOSER_ROOT" ; then + git clone https://github.com/curoverse/composer.git "$COMPOSER_ROOT" + fi if test "$CONFIG" = test ; then mkdir -p $VAR_DATA/test - docker run \ - --detach \ - --name=$ARVBOX_CONTAINER \ - --privileged \ - "--volume=$ARVADOS_ROOT:/usr/src/arvados:rw" \ - "--volume=$SSO_ROOT:/usr/src/sso:rw" \ - "--volume=$PG_DATA:/var/lib/postgresql:rw" \ - "--volume=$VAR_DATA:/var/lib/arvados:rw" \ - "--volume=$PASSENGER:/var/lib/passenger:rw" \ - "--volume=$GEMS:/var/lib/gems:rw" \ - "--volume=$PIPCACHE:/var/lib/pip:rw" \ - "--volume=$GOSTUFF:/var/lib/gopath:rw" \ - arvados/arvbox-dev$TAG \ - /usr/local/bin/runsvinit -svdir=/etc/test-service - - docker exec -ti \ - $ARVBOX_CONTAINER \ - /usr/local/lib/arvbox/runsu.sh \ - /usr/local/lib/arvbox/waitforpostgres.sh - - docker exec -ti \ - $ARVBOX_CONTAINER \ - /usr/local/lib/arvbox/runsu.sh \ - /var/lib/arvbox/service/sso/run-service --only-setup - - docker exec -ti \ - $ARVBOX_CONTAINER \ - /usr/local/lib/arvbox/runsu.sh \ - /var/lib/arvbox/service/api/run-service --only-setup + if test "$need_setup" = 1 ; then + docker run \ + --detach \ + --name=$ARVBOX_CONTAINER \ + --privileged \ + "--volume=$ARVADOS_ROOT:/usr/src/arvados:rw" \ + "--volume=$SSO_ROOT:/usr/src/sso:rw" \ + "--volume=$COMPOSER_ROOT:/usr/src/composer:rw" \ + "--volume=$PG_DATA:/var/lib/postgresql:rw" \ + "--volume=$VAR_DATA:/var/lib/arvados:rw" \ + "--volume=$PASSENGER:/var/lib/passenger:rw" \ + "--volume=$GEMS:/var/lib/gems:rw" \ + "--volume=$PIPCACHE:/var/lib/pip:rw" \ + "--volume=$NPMCACHE:/var/lib/npm:rw" \ + "--volume=$GOSTUFF:/var/lib/gopath:rw" \ + "--volume=$RLIBS:/var/lib/Rlibs:rw" \ + "--env=SVDIR=/etc/test-service" \ + arvados/arvbox-dev$TAG + + docker exec -ti \ + $ARVBOX_CONTAINER \ + /usr/local/lib/arvbox/runsu.sh \ + /usr/local/lib/arvbox/waitforpostgres.sh + + docker exec -ti \ + $ARVBOX_CONTAINER \ + /usr/local/lib/arvbox/runsu.sh \ + /var/lib/arvbox/service/sso/run-service --only-setup + + docker exec -ti \ + $ARVBOX_CONTAINER \ + /usr/local/lib/arvbox/runsu.sh \ + /var/lib/arvbox/service/api/run-service --only-setup + fi docker exec -ti \ $ARVBOX_CONTAINER \ @@ -231,12 +256,15 @@ run() { --privileged \ "--volume=$ARVADOS_ROOT:/usr/src/arvados:rw" \ "--volume=$SSO_ROOT:/usr/src/sso:rw" \ + "--volume=$COMPOSER_ROOT:/usr/src/composer:rw" \ "--volume=$PG_DATA:/var/lib/postgresql:rw" \ "--volume=$VAR_DATA:/var/lib/arvados:rw" \ "--volume=$PASSENGER:/var/lib/passenger:rw" \ "--volume=$GEMS:/var/lib/gems:rw" \ "--volume=$PIPCACHE:/var/lib/pip:rw" \ + "--volume=$NPMCACHE:/var/lib/npm:rw" \ "--volume=$GOSTUFF:/var/lib/gopath:rw" \ + "--volume=$RLIBS:/var/lib/Rlibs:rw" \ $PUBLIC \ arvados/arvbox-dev$TAG updateconf @@ -317,7 +345,7 @@ case "$subcmd" in ;; sh*) - exec docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM GEM_HOME=/var/lib/gems /bin/bash + exec docker exec -ti -e LINES=$(tput lines) -e COLUMNS=$(tput cols) -e TERM=$TERM -e GEM_HOME=/var/lib/gems $ARVBOX_CONTAINER /bin/bash ;; pipe) @@ -405,9 +433,9 @@ case "$subcmd" in log) if test -n "$1" ; then - exec docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM less --follow-name -R +GF "/etc/service/$1/log/main/current" + exec docker exec -ti -e LINES=$(tput lines) -e COLUMNS=$(tput cols) -e TERM=$TERM $ARVBOX_CONTAINER less --follow-name -R +GF "/etc/service/$1/log/main/current" else - exec 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") + exec docker exec -ti $ARVBOX_CONTAINER tail $(docker exec -ti $ARVBOX_CONTAINER find -L /etc -path '/etc/service/*/log/main/current' -printf " %p") fi ;;