From 154bfc562eafc642cc801f25b3c258e3846633ba Mon Sep 17 00:00:00 2001 From: Ward Vandewege Date: Wed, 23 Sep 2020 19:46:21 -0400 Subject: [PATCH] 16267: switch to `arvados-server install -type test` for installing dependencies. Arvados-DCO-1.1-Signed-off-by: Ward Vandewege --- tools/arvbox/bin/arvbox | 69 +++++++------ .../arvbox/lib/arvbox/docker/Dockerfile.base | 91 ++++++----------- .../arvbox/lib/arvbox/docker/Dockerfile.demo | 10 +- tools/arvbox/lib/arvbox/docker/Dockerfile.dev | 8 +- tools/arvbox/lib/arvbox/docker/api-setup.sh | 32 +++--- .../lib/arvbox/docker/cluster-config.sh | 97 ++++++++++--------- tools/arvbox/lib/arvbox/docker/common.sh | 25 ++--- tools/arvbox/lib/arvbox/docker/createusers.sh | 21 ++-- tools/arvbox/lib/arvbox/docker/devenv.sh | 3 +- tools/arvbox/lib/arvbox/docker/go-setup.sh | 8 +- tools/arvbox/lib/arvbox/docker/keep-setup.sh | 20 ++-- tools/arvbox/lib/arvbox/docker/runit/2 | 2 +- tools/arvbox/lib/arvbox/docker/runsu.sh | 6 +- .../lib/arvbox/docker/service/api/run-service | 6 +- .../docker/service/arv-git-httpd/run-service | 2 +- .../lib/arvbox/docker/service/certificate/run | 8 +- .../lib/arvbox/docker/service/controller/run | 2 +- .../service/crunch-dispatch-local/run-service | 2 +- .../docker/service/gitolite/run-service | 34 +++---- .../docker/service/keepproxy/run-service | 8 +- .../lib/arvbox/docker/service/nginx/run | 6 +- .../lib/arvbox/docker/service/postgres/run | 3 +- .../docker/service/postgres/run-service | 1 - .../arvbox/docker/service/ready/run-service | 8 +- tools/arvbox/lib/arvbox/docker/service/vm/run | 4 +- .../lib/arvbox/docker/service/vm/run-service | 4 +- .../lib/arvbox/docker/service/websockets/run | 2 +- .../lib/arvbox/docker/service/workbench/run | 8 +- .../docker/service/workbench/run-service | 6 +- .../docker/service/workbench2/run-service | 2 +- .../lib/arvbox/docker/waitforpostgres.sh | 2 +- 31 files changed, 239 insertions(+), 261 deletions(-) diff --git a/tools/arvbox/bin/arvbox b/tools/arvbox/bin/arvbox index 122e2bec7c..8fd77f1f2d 100755 --- a/tools/arvbox/bin/arvbox +++ b/tools/arvbox/bin/arvbox @@ -60,6 +60,8 @@ PIPCACHE="$ARVBOX_DATA/pip" NPMCACHE="$ARVBOX_DATA/npm" GOSTUFF="$ARVBOX_DATA/gopath" RLIBS="$ARVBOX_DATA/Rlibs" +ARVADOS_CONTAINER_PATH="/var/lib/arvados-arvbox" +GEM_HOME="/var/lib/arvados/lib/ruby/gems/2.5.0" getip() { docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $ARVBOX_CONTAINER @@ -78,7 +80,7 @@ gethost() { } getclusterid() { - docker exec $ARVBOX_CONTAINER cat /var/lib/arvados/api_uuid_prefix + docker exec $ARVBOX_CONTAINER cat $ARVADOS_CONTAINER_PATH/api_uuid_prefix } updateconf() { @@ -96,7 +98,7 @@ EOF } listusers() { - docker exec -ti $ARVBOX_CONTAINER /usr/local/lib/arvbox/edit_users.py /var/lib/arvados/cluster_config.yml $(getclusterid) list + docker exec -ti $ARVBOX_CONTAINER /usr/local/lib/arvbox/edit_users.py $ARVADOS_CONTAINER_PATH/cluster_config.yml $(getclusterid) list } wait_for_arvbox() { @@ -129,9 +131,9 @@ docker_run_dev() { "--volume=$COMPOSER_ROOT:/usr/src/composer:rw" \ "--volume=$WORKBENCH2_ROOT:/usr/src/workbench2:rw" \ "--volume=$PG_DATA:/var/lib/postgresql:rw" \ - "--volume=$VAR_DATA:/var/lib/arvados:rw" \ + "--volume=$VAR_DATA:$ARVADOS_CONTAINER_PATH:rw" \ "--volume=$PASSENGER:/var/lib/passenger:rw" \ - "--volume=$GEMS:/var/lib/gems:rw" \ + "--volume=$GEMS:$GEM_HOME:rw" \ "--volume=$PIPCACHE:/var/lib/pip:rw" \ "--volume=$NPMCACHE:/var/lib/npm:rw" \ "--volume=$GOSTUFF:/var/lib/gopath:rw" \ @@ -220,7 +222,7 @@ run() { 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 + docker create -v /var/lib/postgresql -v $ARVADOS_CONTAINER_PATH --name $ARVBOX_CONTAINER-data arvados/arvbox-demo /bin/true fi docker run \ @@ -264,11 +266,6 @@ run() { $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/api/run-service --only-setup fi interactive="" @@ -281,12 +278,12 @@ run() { -e COLUMNS=$(tput cols) \ -e TERM=$TERM \ -e WORKSPACE=/usr/src/arvados \ - -e GEM_HOME=/var/lib/gems \ - -e CONFIGSRC=/var/lib/arvados/run_tests \ + -e GEM_HOME=$GEM_HOME \ + -e CONFIGSRC=$ARVADOS_CONTAINER_PATH/run_tests \ $ARVBOX_CONTAINER \ /usr/local/lib/arvbox/runsu.sh \ /usr/src/arvados/build/run-tests.sh \ - --temp /var/lib/arvados/test \ + --temp $ARVADOS_CONTAINER_PATH/test \ $interactive \ "$@" elif [[ "$CONFIG" = devenv ]] ; then @@ -299,15 +296,15 @@ run() { --volume=/tmp/.X11-unix:/tmp/.X11-unix:rw \ arvados/arvbox-dev$TAG fi - exec docker exec --interactive --tty \ - -e LINES=$(tput lines) \ - -e COLUMNS=$(tput cols) \ - -e TERM=$TERM \ - -e "ARVBOX_HOME=$HOME" \ - -e "DISPLAY=$DISPLAY" \ - --workdir=$PWD \ + exec docker exec --interactive --tty \ + -e LINES=$(tput lines) \ + -e COLUMNS=$(tput cols) \ + -e TERM=$TERM \ + -e "ARVBOX_HOME=$HOME" \ + -e "DISPLAY=$DISPLAY" \ + --workdir=$PWD \ ${ARVBOX_CONTAINER} \ - /usr/local/lib/arvbox/devenv.sh "$@" + /usr/local/lib/arvbox/devenv.sh "$@" elif [[ "$CONFIG" =~ dev$ ]] ; then docker_run_dev \ --detach \ @@ -424,7 +421,7 @@ case "$subcmd" in -e LINES=$(tput lines) \ -e COLUMNS=$(tput cols) \ -e TERM=$TERM \ - -e GEM_HOME=/var/lib/gems \ + -e GEM_HOME=$GEM_HOME \ $ARVBOX_CONTAINER /bin/bash ;; @@ -433,14 +430,14 @@ case "$subcmd" in -e LINES=$(tput lines) \ -e COLUMNS=$(tput cols) \ -e TERM=$TERM \ - -e GEM_HOME=/var/lib/gems \ + -e GEM_HOME=$GEM_HOME \ -u arvbox \ -w /usr/src/arvados \ $ARVBOX_CONTAINER /bin/bash --login ;; pipe) - exec docker exec -i $ARVBOX_CONTAINER /usr/bin/env GEM_HOME=/var/lib/gems /bin/bash - + exec docker exec -i $ARVBOX_CONTAINER /usr/bin/env GEM_HOME=$GEM_HOME /bin/bash - ;; stop) @@ -587,24 +584,24 @@ case "$subcmd" in if test -n "$1" ; then CERT="$1" fi - docker exec $ARVBOX_CONTAINER cat /var/lib/arvados/root-cert.pem > "$CERT" + docker exec $ARVBOX_CONTAINER cat $ARVADOS_CONTAINER_PATH/root-cert.pem > "$CERT" echo "Certificate copied to $CERT" ;; psql) - exec docker exec -ti $ARVBOX_CONTAINER bash -c 'PGPASSWORD=$(cat /var/lib/arvados/api_database_pw) exec psql --dbname=arvados_development --host=localhost --username=arvados' + exec docker exec -ti $ARVBOX_CONTAINER bash -c 'PGPASSWORD=$(cat $ARVADOS_CONTAINER_PATH/api_database_pw) exec psql --dbname=arvados_development --host=localhost --username=arvados' ;; checkpoint) - exec docker exec -ti $ARVBOX_CONTAINER bash -c 'PGPASSWORD=$(cat /var/lib/arvados/api_database_pw) exec pg_dump --host=localhost --username=arvados --clean arvados_development > /var/lib/arvados/checkpoint.sql' + exec docker exec -ti $ARVBOX_CONTAINER bash -c 'PGPASSWORD=$(cat $ARVADOS_CONTAINER_PATH/api_database_pw) exec pg_dump --host=localhost --username=arvados --clean arvados_development > $ARVADOS_CONTAINER_PATH/checkpoint.sql' ;; restore) - exec docker exec -ti $ARVBOX_CONTAINER bash -c 'PGPASSWORD=$(cat /var/lib/arvados/api_database_pw) exec psql --dbname=arvados_development --host=localhost --username=arvados --quiet --file=/var/lib/arvados/checkpoint.sql' + exec docker exec -ti $ARVBOX_CONTAINER bash -c 'PGPASSWORD=$(cat $ARVADOS_CONTAINER_PATH/api_database_pw) exec psql --dbname=arvados_development --host=localhost --username=arvados --quiet --file=$ARVADOS_CONTAINER_PATH/checkpoint.sql' ;; hotreset) - exec docker exec -i $ARVBOX_CONTAINER /usr/bin/env GEM_HOME=/var/lib/gems /bin/bash - < /etc/apt/sources.list.d/backports.list + RUN apt-get update && \ apt-get -yq --no-install-recommends -o Acquire::Retries=6 install \ - postgresql postgresql-contrib git build-essential runit curl libpq-dev \ - libcurl4-openssl-dev libssl-dev zlib1g-dev libpcre3-dev libpam-dev \ - openssh-server netcat-traditional \ - graphviz bzip2 less sudo virtualenv \ - fuse libfuse-dev \ - pkg-config libattr1-dev \ - libwww-perl libio-socket-ssl-perl libcrypt-ssleay-perl \ - libjson-perl nginx gitolite3 lsof libreadline-dev \ - apt-transport-https ca-certificates python3-yaml \ - linkchecker python3-virtualenv python3-venv xvfb iceweasel \ - libgnutls28-dev python3-dev vim cadaver cython gnupg dirmngr \ - libsecret-1-dev r-base r-cran-testthat libxml2-dev pandoc \ - python3-setuptools python3-pip default-jdk-headless bsdmainutils net-tools \ - ruby ruby-dev bundler shellinabox && \ - apt-get clean + golang -t buster-backports -ENV RUBYVERSION_MINOR 2.5 -ENV RUBYVERSION 2.5.1 - -# Install Ruby from source -# RUN cd /tmp && \ -# curl -f http://cache.ruby-lang.org/pub/ruby/${RUBYVERSION_MINOR}/ruby-${RUBYVERSION}.tar.gz | tar -xzf - && \ -# cd ruby-${RUBYVERSION} && \ -# ./configure --disable-install-doc && \ -# make && \ -# make install && \ -# cd /tmp && \ -# rm -rf ruby-${RUBYVERSION} +# The arvbox-specific dependencies are +# gnupg2 runit python3-pip python3-setuptools python3-yaml shellinabox netcat less +RUN apt-get -yq --no-install-recommends -o Acquire::Retries=6 install \ + build-essential ca-certificates git libpam0g-dev \ + gnupg2 runit python3-pip python3-setuptools python3-yaml shellinabox netcat less && \ + apt-get clean -ENV GEM_HOME /var/lib/gems -ENV PATH $PATH:/var/lib/gems/bin +ENV GOPATH /var/lib/gopath -ENV GOVERSION 1.15.2 +RUN cd /usr/src && \ + git clone https://git.arvados.org/arvados.git && \ + cd arvados && \ + go mod download && \ + cd cmd/arvados-server && \ + go install && \ + $GOPATH/bin/arvados-server install -type test -# Install golang binary -RUN curl -f http://storage.googleapis.com/golang/go${GOVERSION}.linux-amd64.tar.gz | \ - tar -C /usr/local -xzf - +RUN /etc/init.d/postgresql start && \ + su postgres -c 'dropuser arvados' && \ + su postgres -c 'createuser -s arvbox' && \ + /etc/init.d/postgresql stop -ENV PATH ${PATH}:/usr/local/go/bin +ENV GEM_HOME /var/lib/arvados/lib/ruby/gems/2.5.0 +ENV PATH $PATH:$GEM_HOME/bin VOLUME /var/lib/docker VOLUME /var/log/nginx @@ -62,35 +51,6 @@ RUN mkdir -p /etc/apt/sources.list.d && \ apt-get -yq --no-install-recommends install docker-ce=5:19.03.13~3-0~debian-buster && \ apt-get clean -RUN rm -rf /var/lib/postgresql && mkdir -p /var/lib/postgresql - -ENV PJSVERSION=1.9.8 -# bitbucket is the origin, but downloads fail sometimes, so use our own mirror instead. -#ENV PJSURL=https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-${PJSVERSION}-linux-x86_64.tar.bz2 -ENV PJSURL=http://cache.arvados.org/phantomjs-${PJSVERSION}-linux-x86_64.tar.bz2 - -RUN set -e && \ - curl -L -f ${PJSURL} | tar -C /usr/local -xjf - && \ - ln -s ../phantomjs-${PJSVERSION}-linux-x86_64/bin/phantomjs /usr/local/bin - -ENV GDVERSION=v0.23.0 -ENV GDURL=https://github.com/mozilla/geckodriver/releases/download/$GDVERSION/geckodriver-$GDVERSION-linux64.tar.gz -RUN set -e && curl -L -f ${GDURL} | tar -C /usr/local/bin -xzf - geckodriver - -ENV NODEVERSION v8.15.1 - -# Install nodejs binary -RUN curl -L -f https://nodejs.org/dist/${NODEVERSION}/node-${NODEVERSION}-linux-x64.tar.xz | tar -C /usr/local -xJf - && \ - ln -s ../node-${NODEVERSION}-linux-x64/bin/node ../node-${NODEVERSION}-linux-x64/bin/npm /usr/local/bin - -ENV GRADLEVERSION 5.3.1 - -RUN cd /tmp && \ - curl -L -O https://services.gradle.org/distributions/gradle-${GRADLEVERSION}-bin.zip && \ - unzip gradle-${GRADLEVERSION}-bin.zip -d /usr/local && \ - ln -s ../gradle-${GRADLEVERSION}/bin/gradle /usr/local/bin && \ - rm gradle-${GRADLEVERSION}-bin.zip - # Set UTF-8 locale RUN echo en_US.UTF-8 UTF-8 > /etc/locale.gen && locale-gen ENV LANG en_US.UTF-8 @@ -111,6 +71,11 @@ ADD gitolite.rc \ ADD runit /etc/runit +# arvbox mounts a docker volume at $ARVADOS_CONTAINER_PATH, make sure that that +# doesn't overlap with the directory where `arvados-server install -type test` +# put everything (/var/lib/arvados) +ENV ARVADOS_CONTAINER_PATH /var/lib/arvados-arvbox + # Start the supervisor. ENV SVDIR /etc/service STOPSIGNAL SIGINT diff --git a/tools/arvbox/lib/arvbox/docker/Dockerfile.demo b/tools/arvbox/lib/arvbox/docker/Dockerfile.demo index ed728204fa..192b2a144c 100644 --- a/tools/arvbox/lib/arvbox/docker/Dockerfile.demo +++ b/tools/arvbox/lib/arvbox/docker/Dockerfile.demo @@ -8,7 +8,6 @@ ARG composer_version=arvados-fork ARG workbench2_version=master RUN cd /usr/src && \ - git clone --no-checkout https://git.arvados.org/arvados.git && \ git -C arvados checkout ${arvados_version} && \ git -C arvados pull && \ git clone --no-checkout https://github.com/arvados/composer.git && \ @@ -19,11 +18,14 @@ RUN cd /usr/src && \ git -C workbench2 pull && \ chown -R 1000:1000 /usr/src +# avoid rebuilding arvados-server, it's already been built as part of the base image +RUN install $GOPATH/bin/arvados-server /usr/local/bin + ADD service/ /var/lib/arvbox/service RUN ln -sf /var/lib/arvbox/service /etc -RUN mkdir -p /var/lib/arvados -RUN echo "production" > /var/lib/arvados/api_rails_env -RUN echo "production" > /var/lib/arvados/workbench_rails_env +RUN mkdir -p $ARVADOS_CONTAINER_PATH +RUN echo "production" > $ARVADOS_CONTAINER_PATH/api_rails_env +RUN echo "production" > $ARVADOS_CONTAINER_PATH/workbench_rails_env RUN /usr/local/lib/arvbox/createusers.sh diff --git a/tools/arvbox/lib/arvbox/docker/Dockerfile.dev b/tools/arvbox/lib/arvbox/docker/Dockerfile.dev index c7621e387d..e9c296a190 100644 --- a/tools/arvbox/lib/arvbox/docker/Dockerfile.dev +++ b/tools/arvbox/lib/arvbox/docker/Dockerfile.dev @@ -7,11 +7,11 @@ ARG arvados_version ADD service/ /var/lib/arvbox/service RUN ln -sf /var/lib/arvbox/service /etc -RUN mkdir -p /var/lib/arvados -RUN echo "development" > /var/lib/arvados/api_rails_env -RUN echo "development" > /var/lib/arvados/workbench_rails_env +RUN mkdir -p $ARVADOS_CONTAINER_PATH +RUN echo "development" > $ARVADOS_CONTAINER_PATH/api_rails_env +RUN echo "development" > $ARVADOS_CONTAINER_PATH/workbench_rails_env RUN mkdir /etc/test-service && \ ln -sf /var/lib/arvbox/service/postgres /etc/test-service && \ ln -sf /var/lib/arvbox/service/certificate /etc/test-service -RUN mkdir /etc/devenv-service \ No newline at end of file +RUN mkdir /etc/devenv-service diff --git a/tools/arvbox/lib/arvbox/docker/api-setup.sh b/tools/arvbox/lib/arvbox/docker/api-setup.sh index 6a261bf4c5..f20278a69c 100755 --- a/tools/arvbox/lib/arvbox/docker/api-setup.sh +++ b/tools/arvbox/lib/arvbox/docker/api-setup.sh @@ -11,27 +11,27 @@ set -ex -o pipefail cd /usr/src/arvados/services/api -if test -s /var/lib/arvados/api_rails_env ; then - export RAILS_ENV=$(cat /var/lib/arvados/api_rails_env) +if test -s $ARVADOS_CONTAINER_PATH/api_rails_env ; then + export RAILS_ENV=$(cat $ARVADOS_CONTAINER_PATH/api_rails_env) else export RAILS_ENV=development fi set -u -flock /var/lib/arvados/cluster_config.yml.lock /usr/local/lib/arvbox/cluster-config.sh +flock $ARVADOS_CONTAINER_PATH/cluster_config.yml.lock /usr/local/lib/arvbox/cluster-config.sh if test -a /usr/src/arvados/services/api/config/arvados_config.rb ; then rm -f config/application.yml config/database.yml else - uuid_prefix=$(cat /var/lib/arvados/api_uuid_prefix) - secret_token=$(cat /var/lib/arvados/api_secret_token) - blob_signing_key=$(cat /var/lib/arvados/blob_signing_key) - management_token=$(cat /var/lib/arvados/management_token) - database_pw=$(cat /var/lib/arvados/api_database_pw) - vm_uuid=$(cat /var/lib/arvados/vm-uuid) + uuid_prefix=$(cat $ARVADOS_CONTAINER_PATH/api_uuid_prefix) + secret_token=$(cat $ARVADOS_CONTAINER_PATH/api_secret_token) + blob_signing_key=$(cat $ARVADOS_CONTAINER_PATH/blob_signing_key) + management_token=$(cat $ARVADOS_CONTAINER_PATH/management_token) + database_pw=$(cat $ARVADOS_CONTAINER_PATH/api_database_pw) + vm_uuid=$(cat $ARVADOS_CONTAINER_PATH/vm-uuid) -cat >config/application.yml <config/application.yml <config/database.yml + (cd config && /usr/local/lib/arvbox/yml_override.py application.yml) + sed "s/password:.*/password: $database_pw/" config/database.yml fi -if ! test -f /var/lib/arvados/api_database_setup ; then +if ! test -f $ARVADOS_CONTAINER_PATH/api_database_setup ; then bundle exec rake db:setup - touch /var/lib/arvados/api_database_setup + touch $ARVADOS_CONTAINER_PATH/api_database_setup fi -if ! test -s /var/lib/arvados/superuser_token ; then +if ! test -s $ARVADOS_CONTAINER_PATH/superuser_token ; then superuser_tok=$(bundle exec ./script/create_superuser_token.rb) - echo "$superuser_tok" > /var/lib/arvados/superuser_token + echo "$superuser_tok" > $ARVADOS_CONTAINER_PATH/superuser_token fi rm -rf tmp diff --git a/tools/arvbox/lib/arvbox/docker/cluster-config.sh b/tools/arvbox/lib/arvbox/docker/cluster-config.sh index bebf983b6b..948eb00a55 100755 --- a/tools/arvbox/lib/arvbox/docker/cluster-config.sh +++ b/tools/arvbox/lib/arvbox/docker/cluster-config.sh @@ -6,7 +6,9 @@ exec 2>&1 set -ex -o pipefail -if [[ -s /etc/arvados/config.yml ]] && [[ /var/lib/arvados/cluster_config.yml.override -ot /etc/arvados/config.yml ]] ; then +export ARVADOS_CONTAINER_PATH=/var/lib/arvados-arvbox + +if [[ -s /etc/arvados/config.yml ]] && [[ $ARVADOS_CONTAINER_PATH/cluster_config.yml.override -ot /etc/arvados/config.yml ]] ; then exit fi @@ -14,58 +16,58 @@ fi set -u -if ! test -s /var/lib/arvados/api_uuid_prefix ; then - ruby -e 'puts "x#{rand(2**64).to_s(36)[0,4]}"' > /var/lib/arvados/api_uuid_prefix +if ! test -s $ARVADOS_CONTAINER_PATH/api_uuid_prefix ; then + ruby -e 'puts "x#{rand(2**64).to_s(36)[0,4]}"' > $ARVADOS_CONTAINER_PATH/api_uuid_prefix fi -uuid_prefix=$(cat /var/lib/arvados/api_uuid_prefix) +uuid_prefix=$(cat $ARVADOS_CONTAINER_PATH/api_uuid_prefix) -if ! test -s /var/lib/arvados/api_secret_token ; then - ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/api_secret_token +if ! test -s $ARVADOS_CONTAINER_PATH/api_secret_token ; then + ruby -e 'puts rand(2**400).to_s(36)' > $ARVADOS_CONTAINER_PATH/api_secret_token fi -secret_token=$(cat /var/lib/arvados/api_secret_token) +secret_token=$(cat $ARVADOS_CONTAINER_PATH/api_secret_token) -if ! test -s /var/lib/arvados/blob_signing_key ; then - ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/blob_signing_key +if ! test -s $ARVADOS_CONTAINER_PATH/blob_signing_key ; then + ruby -e 'puts rand(2**400).to_s(36)' > $ARVADOS_CONTAINER_PATH/blob_signing_key fi -blob_signing_key=$(cat /var/lib/arvados/blob_signing_key) +blob_signing_key=$(cat $ARVADOS_CONTAINER_PATH/blob_signing_key) -if ! test -s /var/lib/arvados/management_token ; then - ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/management_token +if ! test -s $ARVADOS_CONTAINER_PATH/management_token ; then + ruby -e 'puts rand(2**400).to_s(36)' > $ARVADOS_CONTAINER_PATH/management_token fi -management_token=$(cat /var/lib/arvados/management_token) +management_token=$(cat $ARVADOS_CONTAINER_PATH/management_token) -if ! test -s /var/lib/arvados/system_root_token ; then - ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/system_root_token +if ! test -s $ARVADOS_CONTAINER_PATH/system_root_token ; then + ruby -e 'puts rand(2**400).to_s(36)' > $ARVADOS_CONTAINER_PATH/system_root_token fi -system_root_token=$(cat /var/lib/arvados/system_root_token) +system_root_token=$(cat $ARVADOS_CONTAINER_PATH/system_root_token) -if ! test -s /var/lib/arvados/vm-uuid ; then - echo $uuid_prefix-2x53u-$(ruby -e 'puts rand(2**400).to_s(36)[0,15]') > /var/lib/arvados/vm-uuid +if ! test -s $ARVADOS_CONTAINER_PATH/vm-uuid ; then + echo $uuid_prefix-2x53u-$(ruby -e 'puts rand(2**400).to_s(36)[0,15]') > $ARVADOS_CONTAINER_PATH/vm-uuid fi -vm_uuid=$(cat /var/lib/arvados/vm-uuid) +vm_uuid=$(cat $ARVADOS_CONTAINER_PATH/vm-uuid) -if ! test -f /var/lib/arvados/api_database_pw ; then - ruby -e 'puts rand(2**128).to_s(36)' > /var/lib/arvados/api_database_pw +if ! test -f $ARVADOS_CONTAINER_PATH/api_database_pw ; then + ruby -e 'puts rand(2**128).to_s(36)' > $ARVADOS_CONTAINER_PATH/api_database_pw fi -database_pw=$(cat /var/lib/arvados/api_database_pw) +database_pw=$(cat $ARVADOS_CONTAINER_PATH/api_database_pw) if ! (psql postgres -c "\du" | grep "^ arvados ") >/dev/null ; then psql postgres -c "create user arvados with password '$database_pw'" fi psql postgres -c "ALTER USER arvados WITH SUPERUSER;" -if ! test -s /var/lib/arvados/workbench_secret_token ; then - ruby -e 'puts rand(2**400).to_s(36)' > /var/lib/arvados/workbench_secret_token +if ! test -s $ARVADOS_CONTAINER_PATH/workbench_secret_token ; then + ruby -e 'puts rand(2**400).to_s(36)' > $ARVADOS_CONTAINER_PATH/workbench_secret_token fi -workbench_secret_key_base=$(cat /var/lib/arvados/workbench_secret_token) +workbench_secret_key_base=$(cat $ARVADOS_CONTAINER_PATH/workbench_secret_token) -if test -s /var/lib/arvados/api_rails_env ; then - database_env=$(cat /var/lib/arvados/api_rails_env) +if test -s $ARVADOS_CONTAINER_PATH/api_rails_env ; then + database_env=$(cat $ARVADOS_CONTAINER_PATH/api_rails_env) else database_env=development fi -cat >/var/lib/arvados/cluster_config.yml <$ARVADOS_CONTAINER_PATH/cluster_config.yml </var/lib/arvados/run_tests/config.yml <$ARVADOS_CONTAINER_PATH/run_tests/config.yml </dev/null | head -n1 || true) # if test -n "$bundlergem" ; then - # flock /var/lib/gems/gems.lock gem install --verbose --local --no-document $bundlergem + # flock $GEM_HOME/gems.lock gem install --verbose --local --no-document $bundlergem # else - # flock /var/lib/gems/gems.lock gem install --verbose --no-document bundler --version ${bundleversion} + # flock $GEM_HOME/gems.lock gem install --verbose --no-document bundler --version ${bundleversion} # fi # fi - if ! flock /var/lib/gems/gems.lock bundler install --verbose --local --no-deployment $frozen "$@" ; then - flock /var/lib/gems/gems.lock bundler install --verbose --no-deployment $frozen "$@" + if ! flock $GEM_HOME/gems.lock bundler install --verbose --local --no-deployment $frozen "$@" ; then + flock $GEM_HOME/gems.lock bundler install --verbose --no-deployment $frozen "$@" fi } diff --git a/tools/arvbox/lib/arvbox/docker/createusers.sh b/tools/arvbox/lib/arvbox/docker/createusers.sh index de1e7bba96..cea23bc815 100755 --- a/tools/arvbox/lib/arvbox/docker/createusers.sh +++ b/tools/arvbox/lib/arvbox/docker/createusers.sh @@ -5,16 +5,19 @@ set -e -o pipefail +export GEM_HOME=/var/lib/arvados/lib/ruby/gems/2.5.0 +export ARVADOS_CONTAINER_PATH=/var/lib/arvados-arvbox + if ! grep "^arvbox:" /etc/passwd >/dev/null 2>/dev/null ; then HOSTUID=$(ls -nd /usr/src/arvados | sed 's/ */ /' | cut -d' ' -f4) HOSTGID=$(ls -nd /usr/src/arvados | sed 's/ */ /' | cut -d' ' -f5) - mkdir -p /var/lib/arvados/git /var/lib/gems \ + mkdir -p $ARVADOS_CONTAINER_PATH/git $GEM_HOME \ /var/lib/passenger /var/lib/gopath \ /var/lib/pip /var/lib/npm if test -z "$ARVBOX_HOME" ; then - ARVBOX_HOME=/var/lib/arvados + ARVBOX_HOME=$ARVADOS_CONTAINER_PATH fi groupadd --gid $HOSTGID --non-unique arvbox @@ -25,27 +28,25 @@ if ! grep "^arvbox:" /etc/passwd >/dev/null 2>/dev/null ; then --groups docker \ --shell /bin/bash \ arvbox - useradd --home-dir /var/lib/arvados/git --uid $HOSTUID --gid $HOSTGID --non-unique git + useradd --home-dir $ARVADOS_CONTAINER_PATH/git --uid $HOSTUID --gid $HOSTGID --non-unique git useradd --groups docker crunch if [[ "$1" != --no-chown ]] ; then - chown arvbox:arvbox -R /usr/local /var/lib/arvados /var/lib/gems \ + chown arvbox:arvbox -R /usr/local $ARVADOS_CONTAINER_PATH $GEM_HOME \ /var/lib/passenger /var/lib/postgresql \ /var/lib/nginx /var/log/nginx /etc/ssl/private \ - /var/lib/gopath /var/lib/pip /var/lib/npm + /var/lib/gopath /var/lib/pip /var/lib/npm \ + /var/lib/arvados fi - mkdir -p /var/lib/gems/ruby - chown arvbox:arvbox -R /var/lib/gems/ruby - mkdir -p /tmp/crunch0 /tmp/crunch1 chown crunch:crunch -R /tmp/crunch0 /tmp/crunch1 echo "arvbox ALL=(crunch) NOPASSWD: ALL" >> /etc/sudoers cat < /etc/profile.d/paths.sh -export PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/go/bin:/var/lib/gems/bin:$(ls -d /usr/local/node-*)/bin -export GEM_HOME=/var/lib/gems +export PATH=/usr/local/bin:/usr/bin:/bin:$GEM_HOME/bin +export GEM_HOME=/var/lib/arvados/lib/ruby/gems/2.5.0 export npm_config_cache=/var/lib/npm export npm_config_cache_min=Infinity export R_LIBS=/var/lib/Rlibs diff --git a/tools/arvbox/lib/arvbox/docker/devenv.sh b/tools/arvbox/lib/arvbox/docker/devenv.sh index 4df5463f1f..b5c57f39fc 100755 --- a/tools/arvbox/lib/arvbox/docker/devenv.sh +++ b/tools/arvbox/lib/arvbox/docker/devenv.sh @@ -3,7 +3,8 @@ # # SPDX-License-Identifier: AGPL-3.0 -flock /var/lib/arvados/createusers.lock /usr/local/lib/arvbox/createusers.sh --no-chown +export ARVADOS_CONTAINER_PATH=/var/lib/arvados-arvbox +flock $ARVADOS_CONTAINER_PATH/createusers.lock /usr/local/lib/arvbox/createusers.sh --no-chown if [[ -n "$*" ]] ; then exec su --preserve-environment arvbox -c "$*" diff --git a/tools/arvbox/lib/arvbox/docker/go-setup.sh b/tools/arvbox/lib/arvbox/docker/go-setup.sh index 9bee910448..21be0ccd6f 100644 --- a/tools/arvbox/lib/arvbox/docker/go-setup.sh +++ b/tools/arvbox/lib/arvbox/docker/go-setup.sh @@ -8,10 +8,14 @@ mkdir -p $GOPATH cd /usr/src/arvados if [[ $UID = 0 ]] ; then - /usr/local/lib/arvbox/runsu.sh flock /var/lib/gopath/gopath.lock go mod download + /usr/local/lib/arvbox/runsu.sh flock /var/lib/gopath/gopath.lock go mod download + if [[ ! -f /usr/local/bin/arvados-server ]]; then /usr/local/lib/arvbox/runsu.sh flock /var/lib/gopath/gopath.lock go install git.arvados.org/arvados.git/cmd/arvados-server + fi else - flock /var/lib/gopath/gopath.lock go mod download + flock /var/lib/gopath/gopath.lock go mod download + if [[ ! -f /usr/local/bin/arvados-server ]]; then flock /var/lib/gopath/gopath.lock go install git.arvados.org/arvados.git/cmd/arvados-server + fi fi install $GOPATH/bin/arvados-server /usr/local/bin diff --git a/tools/arvbox/lib/arvbox/docker/keep-setup.sh b/tools/arvbox/lib/arvbox/docker/keep-setup.sh index 3bc3899b0b..657a9a2600 100755 --- a/tools/arvbox/lib/arvbox/docker/keep-setup.sh +++ b/tools/arvbox/lib/arvbox/docker/keep-setup.sh @@ -17,11 +17,11 @@ if test "$1" = "--only-deps" ; then exit fi -mkdir -p /var/lib/arvados/$1 +mkdir -p $ARVADOS_CONTAINER_PATH/$1 export ARVADOS_API_HOST=$localip:${services[controller-ssl]} export ARVADOS_API_HOST_INSECURE=1 -export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token) +export ARVADOS_API_TOKEN=$(cat $ARVADOS_CONTAINER_PATH/superuser_token) set +e read -rd $'\000' keepservice < /var/lib/arvados/$1-uuid + echo $UUID > $ARVADOS_CONTAINER_PATH/$1-uuid fi -management_token=$(cat /var/lib/arvados/management_token) +management_token=$(cat $ARVADOS_CONTAINER_PATH/management_token) set +e sv hup /var/lib/arvbox/service/keepproxy -cat >/var/lib/arvados/$1.yml <$ARVADOS_CONTAINER_PATH/$1.yml < /var/lib/arvados/arvados-git-uuid + echo $repo_uuid > $ARVADOS_CONTAINER_PATH/arvados-git-uuid fi -repo_uuid=$(cat /var/lib/arvados/arvados-git-uuid) +repo_uuid=$(cat $ARVADOS_CONTAINER_PATH/arvados-git-uuid) -if ! test -s /var/lib/arvados/arvados-git-link-uuid ; then +if ! test -s $ARVADOS_CONTAINER_PATH/arvados-git-link-uuid ; then all_users_group_uuid="$prefix-j7d0g-fffffffffffffff" set +e @@ -89,19 +89,19 @@ if ! test -s /var/lib/arvados/arvados-git-link-uuid ; then EOF set -e link_uuid=$(arv --format=uuid link create --link "$newlink") - echo $link_uuid > /var/lib/arvados/arvados-git-link-uuid + echo $link_uuid > $ARVADOS_CONTAINER_PATH/arvados-git-link-uuid fi -if ! test -d /var/lib/arvados/git/repositories/$repo_uuid.git ; then - git clone --bare /usr/src/arvados /var/lib/arvados/git/repositories/$repo_uuid.git +if ! test -d $ARVADOS_CONTAINER_PATH/git/repositories/$repo_uuid.git ; then + git clone --bare /usr/src/arvados $ARVADOS_CONTAINER_PATH/git/repositories/$repo_uuid.git else - git --git-dir=/var/lib/arvados/git/repositories/$repo_uuid.git fetch -f /usr/src/arvados master:master + git --git-dir=$ARVADOS_CONTAINER_PATH/git/repositories/$repo_uuid.git fetch -f /usr/src/arvados master:master fi cd /usr/src/arvados/services/api -if test -s /var/lib/arvados/api_rails_env ; then - RAILS_ENV=$(cat /var/lib/arvados/api_rails_env) +if test -s $ARVADOS_CONTAINER_PATH/api_rails_env ; then + RAILS_ENV=$(cat $ARVADOS_CONTAINER_PATH/api_rails_env) else RAILS_ENV=development fi @@ -110,8 +110,8 @@ git_user_key=$(cat ~git/.ssh/id_rsa.pub) cat > config/arvados-clients.yml < /var/lib/arvados/keepproxy-uuid + echo $UUID > $ARVADOS_CONTAINER_PATH/keepproxy-uuid fi exec /usr/local/bin/keepproxy diff --git a/tools/arvbox/lib/arvbox/docker/service/nginx/run b/tools/arvbox/lib/arvbox/docker/service/nginx/run index cfb7788def..82db921370 100755 --- a/tools/arvbox/lib/arvbox/docker/service/nginx/run +++ b/tools/arvbox/lib/arvbox/docker/service/nginx/run @@ -21,9 +21,9 @@ fi openssl verify -CAfile $root_cert $server_cert -cat </var/lib/arvados/nginx.conf +cat <$ARVADOS_CONTAINER_PATH/nginx.conf worker_processes auto; -pid /var/lib/arvados/nginx.pid; +pid $ARVADOS_CONTAINER_PATH/nginx.pid; error_log stderr; daemon off; @@ -235,4 +235,4 @@ server { EOF -exec nginx -c /var/lib/arvados/nginx.conf +exec nginx -c $ARVADOS_CONTAINER_PATH/nginx.conf diff --git a/tools/arvbox/lib/arvbox/docker/service/postgres/run b/tools/arvbox/lib/arvbox/docker/service/postgres/run index 3ef78ee455..d8abc4d89d 100755 --- a/tools/arvbox/lib/arvbox/docker/service/postgres/run +++ b/tools/arvbox/lib/arvbox/docker/service/postgres/run @@ -3,7 +3,8 @@ # # SPDX-License-Identifier: AGPL-3.0 -flock /var/lib/arvados/createusers.lock /usr/local/lib/arvbox/createusers.sh +export ARVADOS_CONTAINER_PATH=/var/lib/arvados-arvbox +flock $ARVADOS_CONTAINER_PATH/createusers.lock /usr/local/lib/arvbox/createusers.sh make-ssl-cert generate-default-snakeoil --force-overwrite diff --git a/tools/arvbox/lib/arvbox/docker/service/postgres/run-service b/tools/arvbox/lib/arvbox/docker/service/postgres/run-service index f2377a0c2d..3569fd3126 100755 --- a/tools/arvbox/lib/arvbox/docker/service/postgres/run-service +++ b/tools/arvbox/lib/arvbox/docker/service/postgres/run-service @@ -10,7 +10,6 @@ PGVERSION=11 if ! test -d /var/lib/postgresql/$PGVERSION/main ; then /usr/lib/postgresql/$PGVERSION/bin/initdb --locale=en_US.UTF-8 -D /var/lib/postgresql/$PGVERSION/main - sh -c "while ! (psql postgres -c'\du' | grep '^ arvbox ') >/dev/null ; do createuser -s arvbox ; sleep 1 ; done" & fi mkdir -p /var/run/postgresql/$PGVERSION-main.pg_stat_tmp diff --git a/tools/arvbox/lib/arvbox/docker/service/ready/run-service b/tools/arvbox/lib/arvbox/docker/service/ready/run-service index 21cb7d48c6..b29dafed70 100755 --- a/tools/arvbox/lib/arvbox/docker/service/ready/run-service +++ b/tools/arvbox/lib/arvbox/docker/service/ready/run-service @@ -49,9 +49,9 @@ export ARVADOS_API_HOST=$localip:${services[controller-ssl]} export ARVADOS_API_HOST_INSECURE=1 vm_ok=0 -if test -s /var/lib/arvados/vm-uuid -a -s /var/lib/arvados/superuser_token; then - vm_uuid=$(cat /var/lib/arvados/vm-uuid) - export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token) +if test -s $ARVADOS_CONTAINER_PATH/vm-uuid -a -s $ARVADOS_CONTAINER_PATH/superuser_token; then + vm_uuid=$(cat $ARVADOS_CONTAINER_PATH/vm-uuid) + export ARVADOS_API_TOKEN=$(cat $ARVADOS_CONTAINER_PATH/superuser_token) if (which arv && arv virtual_machine get --uuid $vm_uuid) >/dev/null 2>/dev/null ; then vm_ok=1 fi @@ -63,7 +63,7 @@ fi if ! [[ -z "$waiting" ]] ; then if ps x | grep -v grep | grep "bundle install" > /dev/null; then - gemcount=$(ls /var/lib/gems/ruby/2.1.0/gems 2>/dev/null | wc -l) + gemcount=$(ls $GEM_HOME/gems 2>/dev/null | wc -l) gemlockcount=0 for l in /usr/src/arvados/services/api/Gemfile.lock \ diff --git a/tools/arvbox/lib/arvbox/docker/service/vm/run b/tools/arvbox/lib/arvbox/docker/service/vm/run index ee210e35d8..4ea11aadcd 100755 --- a/tools/arvbox/lib/arvbox/docker/service/vm/run +++ b/tools/arvbox/lib/arvbox/docker/service/vm/run @@ -16,8 +16,8 @@ cd /usr/src/arvados/services/login-sync export ARVADOS_API_HOST=$localip:${services[controller-ssl]} export ARVADOS_API_HOST_INSECURE=1 -export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token) -export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat /var/lib/arvados/vm-uuid) +export ARVADOS_API_TOKEN=$(cat $ARVADOS_CONTAINER_PATH/superuser_token) +export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat $ARVADOS_CONTAINER_PATH/vm-uuid) while true ; do arvados-login-sync diff --git a/tools/arvbox/lib/arvbox/docker/service/vm/run-service b/tools/arvbox/lib/arvbox/docker/service/vm/run-service index 932ba59818..5369af31d0 100755 --- a/tools/arvbox/lib/arvbox/docker/service/vm/run-service +++ b/tools/arvbox/lib/arvbox/docker/service/vm/run-service @@ -21,8 +21,8 @@ set -u export ARVADOS_API_HOST=$localip:${services[controller-ssl]} export ARVADOS_API_HOST_INSECURE=1 -export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token) -export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat /var/lib/arvados/vm-uuid) +export ARVADOS_API_TOKEN=$(cat $ARVADOS_CONTAINER_PATH/superuser_token) +export ARVADOS_VIRTUAL_MACHINE_UUID=$(cat $ARVADOS_CONTAINER_PATH/vm-uuid) set +e read -rd $'\000' vm < /usr/src/workbench2/public/config.json EOF export ARVADOS_API_HOST=$localip:${services[controller-ssl]} -export ARVADOS_API_TOKEN=$(cat /var/lib/arvados/superuser_token) +export ARVADOS_API_TOKEN=$(cat $ARVADOS_CONTAINER_PATH/superuser_token) url_prefix="https://$localip:${services[workbench2-ssl]}/" diff --git a/tools/arvbox/lib/arvbox/docker/waitforpostgres.sh b/tools/arvbox/lib/arvbox/docker/waitforpostgres.sh index 6bda618ab8..9b2eb69f9e 100755 --- a/tools/arvbox/lib/arvbox/docker/waitforpostgres.sh +++ b/tools/arvbox/lib/arvbox/docker/waitforpostgres.sh @@ -9,6 +9,6 @@ while ! psql postgres -c\\du >/dev/null 2>/dev/null ; do sleep 1 done -while ! test -s /var/lib/arvados/server-cert-${localip}.pem ; do +while ! test -s $ARVADOS_CONTAINER_PATH/server-cert-${localip}.pem ; do sleep 1 done -- 2.30.2