X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5d56a1af42f64df57ef7a1bcef6d016ff2310900..96c3f7c75fb5c57915fb66daf70ced5f2724448f:/tools/arvbox/lib/arvbox/docker/common.sh diff --git a/tools/arvbox/lib/arvbox/docker/common.sh b/tools/arvbox/lib/arvbox/docker/common.sh index d8f3680491..54ec9403ad 100644 --- a/tools/arvbox/lib/arvbox/docker/common.sh +++ b/tools/arvbox/lib/arvbox/docker/common.sh @@ -2,14 +2,22 @@ # # SPDX-License-Identifier: AGPL-3.0 +export RUBY_VERSION=3.2.2 +export BUNDLER_VERSION=2.4.22 + export DEBIAN_FRONTEND=noninteractive -export GEM_HOME=/var/lib/arvados/lib/ruby/gems/2.5.0 -export PATH=${PATH}:/usr/local/go/bin:$GEM_HOME/bin:/var/lib/arvados/bin +export PATH=${PATH}:/usr/local/go/bin:/var/lib/arvados/bin:/opt/arvados-py/bin:/usr/src/arvados/sdk/cli/binstubs export npm_config_cache=/var/lib/npm export npm_config_cache_min=Infinity export R_LIBS=/var/lib/Rlibs export HOME=$(getent passwd arvbox | cut -d: -f6) export ARVADOS_CONTAINER_PATH=/var/lib/arvados-arvbox +export GEM_HOME=$HOME/.gem +GEMLOCK=$HOME/gems.lock + +export LANG=en_US.UTF-8 +export LANGUAGE=en_US:en +export LC_ALL=en_US.UTF-8 defaultdev=$(/sbin/ip route|awk '/default/ { print $5 }') dockerip=$(/sbin/ip route | grep default | awk '{ print $3 }') @@ -27,13 +35,11 @@ server_cert_key=$ARVADOS_CONTAINER_PATH/server-cert-${localip}.key declare -A services services=( - [workbench]=443 [workbench2]=3000 - [workbench2-ssl]=3001 + [workbench2-ssl]=443 [api]=8004 [controller]=8003 [controller-ssl]=8000 - [composer]=4200 [arv-git-httpd-ssl]=9000 [arv-git-httpd]=9001 [keep-web]=9003 @@ -60,38 +66,56 @@ else fi run_bundler() { - if test -f Gemfile.lock ; then - frozen=--frozen + flock $GEMLOCK /var/lib/arvados/bin/gem install --no-document --user bundler:$BUNDLER_VERSION + + BUNDLER=bundle + if test -x $PWD/bin/bundle ; then + # If present, use the one associated with rails API + BUNDLER=$PWD/bin/bundle + fi + + # Use Gemfile.lock only if it is git tracked. + if git ls-files --error-unmatch Gemfile.lock ; then + flock $GEMLOCK $BUNDLER config set --local frozen true else - frozen="" + flock $GEMLOCK $BUNDLER config set --local frozen false fi - BUNDLER=bundler - if test -x $PWD/bin/bundler ; then - # If present, use the one associated with rails workbench or API - BUNDLER=$PWD/bin/bundler + flock $GEMLOCK $BUNDLER config set --local deployment false + + if test -z "$(flock $GEMLOCK /var/lib/arvados/bin/gem list | grep 'arvados[[:blank:]].*[0-9.]*dev')" ; then + (cd /usr/src/arvados/sdk/ruby && \ + /var/lib/arvados/bin/gem build arvados.gemspec && flock $GEMLOCK /var/lib/arvados/bin/gem install $(ls -1 *.gem | sort -r | head -n1)) fi - 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 "$@" + + if ! flock $GEMLOCK $BUNDLER install --verbose --local "$@" ; then + flock $GEMLOCK $BUNDLER install --verbose "$@" fi } -PYCMD="" -pip_install() { - pushd /var/lib/pip - for p in $(ls http*.tar.gz) $(ls http*.tar.bz2) $(ls http*.whl) $(ls http*.zip) ; do - if test -f $p ; then - ln -sf $p $(echo $p | sed 's/.*%2F\(.*\)/\1/') - fi - done - popd - - if [ "$PYCMD" = "python3" ]; then - if ! pip3 install --prefix /usr/local --no-index --find-links /var/lib/pip $1 ; then - pip3 install --prefix /usr/local $1 - fi - else - if ! pip install --no-index --find-links /var/lib/pip $1 ; then - pip install $1 - fi +bundler_binstubs() { + BUNDLER=bundle + if test -x $PWD/bin/bundle ; then + # If present, use the one associated with rails API + BUNDLER=$PWD/bin/bundle fi + flock $GEMLOCK $BUNDLER binstubs --all +} + +# Usage: Pass any number of directories. Relative directories will be taken as +# relative to /usr/src/arvados. This function will build an sdist from each, +# then pip install them all in the arvbox virtualenv. +pip_install_sdist() { + local sdist_dir="$(mktemp --directory --tmpdir py_sdist.XXXXXXXX)" + trap 'rm -rf "$sdist_dir"' RETURN + local src_dir + for src_dir in "$@"; do + case "$src_dir" in + /*) ;; + *) src_dir="/usr/src/arvados/$src_dir" ;; + esac + env -C "$src_dir" /opt/arvados-py/bin/python3 setup.py sdist --dist-dir="$sdist_dir" \ + || return + done + /opt/arvados-py/bin/pip install "$sdist_dir"/* || return + return }