X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d3d368758db1f4a9fa5b89f77b5ee61d68ef5b72:/bin/arvbox..f4ca9ad94a6bb006d1f3c7ba207837f1736d1247:/tools/arvbox/bin/static/gitweb.js diff --git a/bin/arvbox b/bin/arvbox deleted file mode 100755 index d790cb6b9f..0000000000 --- a/bin/arvbox +++ /dev/null @@ -1,402 +0,0 @@ -#!/bin/sh - -set -e - -if ! test -d /sys/fs/cgroup ; then - echo "Arvbox requires cgroups to be mounted at /sys/fs/cgroup in order to use" - echo "Docker-in-Docker. Older operating systems that put cgroups in other" - echo "places (such as /cgroup) are not supported." - exit 1 -fi - -if ! which docker >/dev/null 2>/dev/null ; then - echo "Arvbox requires Docker. To install, run the following command as root:" - echo "curl -sSL https://get.docker.com/ | sh" - exit 1 -fi - -if test -z "$ARVBOX_DOCKER" ; then - if which greadlink >/dev/null 2>/dev/null ; then - ARVBOX_DOCKER=$(greadlink -f $(dirname $0)/../lib/arvbox/docker) - else - ARVBOX_DOCKER=$(readlink -f $(dirname $0)/../lib/arvbox/docker) - fi -fi - -if test -z "$ARVBOX_CONTAINER" ; then - ARVBOX_CONTAINER=arvbox -fi - -if test -z "$ARVBOX_BASE" ; then - ARVBOX_BASE="$HOME/.arvbox" -fi - -if test -z "$ARVBOX_DATA" ; then - ARVBOX_DATA="$ARVBOX_BASE/$ARVBOX_CONTAINER" -fi - -if test -z "$ARVADOS_ROOT" ; then - ARVADOS_ROOT="$ARVBOX_DATA/arvados" -fi - -if test -z "$ARVADOS_DEV_ROOT" ; then - ARVADOS_DEV_ROOT="$ARVBOX_DATA/arvados-dev" -fi - -if test -z "$SSO_ROOT" ; then - SSO_ROOT="$ARVBOX_DATA/sso-devise-omniauth-provider" -fi - -PG_DATA="$ARVBOX_DATA/postgres" -VAR_DATA="$ARVBOX_DATA/var" -PASSENGER="$ARVBOX_DATA/passenger" -GEMS="$ARVBOX_DATA/gems" - -getip() { - docker inspect $ARVBOX_CONTAINER | grep \"IPAddress\" | head -n1 | tr -d ' ":,\n' | cut -c10- -} - -updateconf() { - if test -f ~/.config/arvados/$ARVBOX_CONTAINER.conf ; then - sed "s/ARVADOS_API_HOST=.*/ARVADOS_API_HOST=$(getip):8000/" <$HOME/.config/arvados/$ARVBOX_CONTAINER.conf >$HOME/.config/arvados/$ARVBOX_CONTAINER.conf.tmp - mv ~/.config/arvados/$ARVBOX_CONTAINER.conf.tmp ~/.config/arvados/$ARVBOX_CONTAINER.conf - else - mkdir -p $HOME/.config/arvados - cat >$HOME/.config/arvados/$ARVBOX_CONTAINER.conf < $FF & - LOGPID=$! - while read line ; do - echo $line - if echo $line | grep "Workbench is running at" >/dev/null ; then - kill $LOGPID - fi - done < $FF - rm $FF - echo - if test -n "$localip" ; then - echo "export ARVADOS_API_HOST=$localip:8000" - else - echo "export ARVADOS_API_HOST=$(getip):8000" - fi -} - -run() { - if docker ps -a | grep -E "$ARVBOX_CONTAINER$" -q ; then - echo "Container $ARVBOX_CONTAINER is already running, use stop, restart or reboot" - exit 0 - fi - - if echo "$1" | grep '^public' ; then - if test -n "$ARVBOX_PUBLISH_IP" ; then - localip=$ARVBOX_PUBLISH_IP - else - defaultdev=$(/sbin/ip route|awk '/default/ { print $5 }') - localip=$(ip addr show $defaultdev | grep 'inet ' | sed 's/ *inet \(.*\)\/.*/\1/') - fi - iptemp=$(tempfile) - echo $localip > $iptemp - chmod og+r $iptemp - PUBLIC="--volume=$iptemp:/var/run/localip_override - --publish=80:80 - --publish=8000:8000 - --publish=8900:8900 - --publish=9001:9001 - --publish=9002:9002 - --publish=25100:25100 - --publish=25107:25107 - --publish=25108:25108 - --publish=8001:8001" - else - PUBLIC="" - fi - - if echo "$1" | grep 'demo$' ; then - if test -d "$ARVBOX_DATA" ; then - echo "It looks like you already have a development container named $ARVBOX_CONTAINER." - echo "Set ARVBOX_CONTAINER to set a different name for your demo container" - exit 1 - fi - - if ! (docker ps -a | grep -E "$ARVBOX_CONTAINER-data$" -q) ; then - docker create -v /var/lib/postgresql -v /var/lib/arvados --name $ARVBOX_CONTAINER-data arvados/arvbox-demo /bin/true - fi - - docker run \ - --detach \ - --name=$ARVBOX_CONTAINER \ - --privileged \ - --volumes-from $ARVBOX_CONTAINER-data \ - $PUBLIC \ - arvados/arvbox-demo - updateconf - wait_for_arvbox - else - mkdir -p "$PG_DATA" "$VAR_DATA" "$PASSENGER" "$GEMS" - - if ! test -d "$ARVADOS_ROOT" ; then - git clone https://github.com/curoverse/arvados.git "$ARVADOS_ROOT" - fi - if ! test -d "$SSO_ROOT" ; then - git clone https://github.com/curoverse/sso-devise-omniauth-provider.git "$SSO_ROOT" - fi - - if test "$1" = test ; then - shift - - if ! test -d "$ARVADOS_DEV_ROOT" ; then - git clone https://github.com/curoverse/arvados-dev.git "$ARVADOS_DEV_ROOT" - fi - - mkdir -p $VAR_DATA/test - - docker run \ - --detach \ - --name=$ARVBOX_CONTAINER \ - --privileged \ - "--volume=$ARVADOS_ROOT:/usr/src/arvados:rw" \ - "--volume=$ARVADOS_DEV_ROOT:/usr/src/arvados-dev: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" \ - arvados/arvbox-dev \ - /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 - - docker exec -ti \ - $ARVBOX_CONTAINER \ - /usr/local/lib/arvbox/runsu.sh \ - /usr/src/arvados-dev/jenkins/run-tests.sh \ - --temp /var/lib/arvados/test \ - WORKSPACE=/usr/src/arvados \ - GEM_HOME=/var/lib/gems \ - "$@" - elif echo "$1" | grep 'dev$' ; then - 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" \ - $PUBLIC \ - arvados/arvbox-dev - updateconf - wait_for_arvbox - echo "The Arvados source code is checked out at: $ARVADOS_ROOT" - else - echo "Unknown configuration '$1'" - fi - fi -} - -stop() { - if docker ps -a --filter "status=running" | grep -E "$ARVBOX_CONTAINER$" -q ; then - docker stop $ARVBOX_CONTAINER - fi - - VOLUMES=--volumes=true - if docker ps -a --filter "status=created" | grep -E "$ARVBOX_CONTAINER$" -q ; then - docker rm $VOLUMES $ARVBOX_CONTAINER - fi - if docker ps -a --filter "status=exited" | grep -E "$ARVBOX_CONTAINER$" -q ; then - docker rm $VOLUMES $ARVBOX_CONTAINER - fi -} - -build() { - if ! test -f "$ARVBOX_DOCKER/Dockerfile.base" ; then - echo "Could not find Dockerfile ($ARVBOX_DOCKER/Dockerfile.base)" - exit 1 - fi - docker build -t arvados/arvbox-base -f "$ARVBOX_DOCKER/Dockerfile.base" "$ARVBOX_DOCKER" - if test "$1" = localdemo -o "$1" = publicdemo ; then - docker build -t arvados/arvbox-demo -f "$ARVBOX_DOCKER/Dockerfile.demo" "$ARVBOX_DOCKER" - else - docker build -t arvados/arvbox-dev -f "$ARVBOX_DOCKER/Dockerfile.dev" "$ARVBOX_DOCKER" - fi -} - -check() { - case "$1" in - localdemo|publicdemo|dev|publicdev|test) - true - ;; - *) - echo "Argument to $subcmd must be one of localdemo, publicdemo, dev, publicdev, test" - exit 1 - ;; - esac -} - -subcmd="$1" -if test -n "$subcmd" ; then - shift -fi -case "$subcmd" in - build) - check $@ - build $@ - ;; - - start|run) - check $@ - run $@ - ;; - - sh*) - docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM GEM_HOME=/var/lib/gems /bin/bash - ;; - - stop) - stop - ;; - - restart) - check $@ - stop - run $@ - ;; - - reboot) - check $@ - stop - build $@ - run $@ - ;; - - ip|open) - if test "$subcmd" = 'ip' ; then - echo $(getip) - else - xdg-open http://$(getip) - fi - ;; - - status) - echo "Selected: $ARVBOX_CONTAINER" - if docker ps -a --filter "status=running" | grep -E "$ARVBOX_CONTAINER$" -q ; then - echo "Status: running" - echo "IP: $(getip)" - else - echo "Status: not running" - fi - if test -d "$ARVBOX_DATA" ; then - echo "Data: $ARVBOX_DATA" - elif docker ps -a | grep -E "$ARVBOX_CONTAINER-data$" -q ; then - echo "Data: $ARVBOX_CONTAINER-data" - else - echo "Data: none" - fi - ;; - - reset|destroy) - stop - if test -d "$ARVBOX_DATA" ; then - if test "$subcmd" = destroy ; then - if test "$1" != -f ; then - echo "WARNING! This will delete your entire arvbox ($ARVBOX_DATA)." - echo "Use destroy -f if you really mean it." - exit 1 - fi - set -x - rm -rf "$ARVBOX_DATA" - else - if test "$1" != -f ; then - echo "WARNING! This will delete your arvbox data ($ARVBOX_DATA)." - echo "Code and downloaded packages will be preserved." - echo "Use reset -f if you really mean it." - exit 1 - fi - set -x - rm -rf "$ARVBOX_DATA/postgres" - rm -rf "$ARVBOX_DATA/var" - fi - else - if test "$1" != -f ; then - echo "WARNING! This will delete your data container $ARVBOX_CONTAINER-data. Use -f if you really mean it." - exit 1 - fi - set -x - docker rm "$ARVBOX_CONTAINER-data" - fi - ;; - - log) - if test -n "$1" ; then - docker exec -ti $ARVBOX_CONTAINER /usr/bin/env TERM=$TERM less --follow-name +GF "/etc/service/$1/log/main/current" - else - 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") - fi - ;; - - sv) - if test -n "$1" ; then - docker exec -ti $ARVBOX_CONTAINER sv "$1" "$2" - else - echo "Usage: $0 $subcmd " - echo "Available services:" - docker exec -ti $ARVBOX_CONTAINER ls /etc/service - fi - ;; - - clone) - if test -n "$2" ; then - cp -r "$ARVBOX_BASE/$1" "$ARVBOX_BASE/$2" - echo "Created new arvbox $2" - echo "export ARVBOX_CONTAINER=$2" - else - echo "clone clone an arvbox" - echo "available arvboxes: $(ls $ARVBOX_BASE)" - fi - ;; - - *) - echo "Arvados-in-a-box" - echo - echo "$(basename $0) (build|start|run|open|shell|ip|stop|reboot|reset|destroy|log|svrestart)" - echo - echo "build build arvbox Docker image" - echo "start|run start $ARVBOX_CONTAINER container" - echo "open open arvbox workbench in a web browser" - echo "shell enter arvbox shell" - echo "ip print arvbox ip address" - echo "status print some information about current arvbox" - echo "stop stop arvbox container" - echo "restart stop, then run again" - echo "reboot stop, build arvbox Docker image, run" - echo "reset delete arvbox arvados data (be careful!)" - echo "destroy delete all arvbox code and data (be careful!)" - echo "log tail log of specified service" - echo "sv change state of service inside arvbox" - echo "clone clone an arvbox" - ;; -esac