diff --git a/.gitmodules b/.gitmodules index e6612923a..67081dc46 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "galaxy/roles/galaxyproject.galaxyextras"] path = galaxy/roles/galaxyprojectdotorg.galaxyextras url = https://github.com/galaxyproject/ansible-galaxy-extras - branch = 18.01 + branch = 18.09 [submodule "galaxy/roles/galaxy-postgresql"] path = galaxy/roles/galaxy-postgresql url = https://github.com/galaxyproject/ansible-postgresql diff --git a/.travis.yml b/.travis.yml index b263b1a4e..27f98763c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -45,10 +45,10 @@ before_install: if [ "${KUBE}" ] then # setup k8s, we will do this before building Galaxy because it takes some time and hopefully we can do both in prallel - gimme 1.8 - source ~/.gimme/envs/go1.8.env - sudo ln -s /home/travis/.gimme/versions/go1.7.linux.amd64/bin/gofmt /usr/bin/gofmt - sudo ln -s /home/travis/.gimme/versions/go1.7.linux.amd64/bin/go /usr/bin/go + gimme 1.11.1 + source ~/.gimme/envs/go1.11.1.env + sudo ln -s /home/travis/.gimme/versions/go1.11.1.linux.amd64/bin/gofmt /usr/bin/gofmt + sudo ln -s /home/travis/.gimme/versions/go1.11.1.linux.amd64/bin/go /usr/bin/go go version mkdir ../kubernetes wget -q -O - https://github.com/kubernetes/kubernetes/archive/master.tar.gz | tar xzf - --strip-components=1 -C ../kubernetes @@ -59,7 +59,7 @@ before_install: sudo ln -s `pwd`/third_party/etcd/etcd /usr/bin/etcd sudo ln -s `pwd`/third_party/etcd/etcdctl /usr/bin/etcdctl # this needs to run in backgroud later, for now try to see the output - sudo ./hack/local-up-cluster.sh & + ./hack/local-up-cluster.sh & cd ../docker-galaxy-stable fi @@ -103,7 +103,11 @@ before_install: - | if [ "${KUBE}" ] then - curl -L https://github.com/kubernetes-incubator/kompose/releases/download/v0.5.0/kompose-linux-amd64 -o kompose + # The compose file recognises ENV vars to change the defaul behavior + cd ${COMPOSE_DIR} + ln -sf .env_k8_native .env + + curl -L https://github.com/kubernetes-incubator/kompose/releases/download/v1.17.1/kompose-linux-amd64 -o kompose chmod +x kompose sudo mv ./kompose /usr/bin/kompose fi @@ -120,7 +124,11 @@ before_install: INSTALL_REPO_ARG="--galaxy-url http://localhost:80" SAMPLE_TOOLS=/export/config/sample_tool_list.yaml cd "$WORKING_DIR" - ./buildlocal.sh + # For build script + export CONTAINER_REGISTRY=quay.io/ + export CONTAINER_USER=bgruening + ./build-orchestration-images.sh --no-push --condor --grafana --slurm --k8s + source ./tags-for-compose-to-source.sh export COMPOSE_PROJECT_NAME=galaxy_compose docker-compose up -d @@ -138,7 +146,7 @@ before_install: docker-compose stop galaxy-slurm sleep 30 fi - + if [ "${COMPOSE_SLURM}" ] || [ "${COMPOSE_SLURM_SINGULARITY}" ] then # turn down the htcondor services @@ -150,7 +158,7 @@ before_install: if [ "${COMPOSE_SLURM_SINGULARITY}" ] then # docker-compose is already started and has pre-populated the /export dir - # we now turn it down again and copy in an example tool with tool_conf.xml and + # we now turn it down again and copy in an example tool with tool_conf.xml and # a test singularity image. If we copy this from the beginning, the magic Docker Galax startup # script will not work as it detects something in /export/ docker-compose down @@ -161,6 +169,9 @@ before_install: sudo curl -L -o /export/cat_tool_conf.xml https://github.com/bgruening/singularity-galaxy-tests/raw/master/cat_tool_conf.xml sudo curl -L -o /export/cat.xml https://github.com/bgruening/singularity-galaxy-tests/raw/master/cat.xml + rm .env + ln -sf .env_slurm_singularity2 .env + docker-compose up -d sleep 60 @@ -171,10 +182,10 @@ before_install: sleep 15 # we are lucky that the out test image has a small bug and always prints a warning. We use this to grep if the tool was running with SINGULARITY # WARNING Bind file destination does not exist in container /usr/local/var/singularity/mnt/overlay/final/etc/... - parsec datasets show_dataset $OUTPUT_ID | jq .misc_info | grep singularity + parsec jobs show_job --full_details $OUTPUT_ID | jq .stderr | grep singularity fi - + docker-compose logs --tail 50 # Define start functions docker_exec() { @@ -243,6 +254,11 @@ script: cd $TRAVIS_BUILD_DIR/test/gridengine/ && bash test.sh && cd $WORKING_DIR fi # Test Web api + - | + if [ "${COMPOSE_CONDOR_DOCKER}" ] + then + docker-compose logs --tail 50 + fi - curl -v --fail $BIOBLEND_GALAXY_URL/api/version # Test self-signed HTTPS @@ -255,7 +271,7 @@ script: - date > time.txt && curl -v --fail -T time.txt ftp://localhost:8021 --user $GALAXY_USER:$GALAXY_USER_PASSWD || true # Test FTP Server get - curl -v --fail ftp://localhost:8021 --user $GALAXY_USER:$GALAXY_USER_PASSWD - + # Test CVMFS - docker_exec bash -c "service autofs start" - docker_exec bash -c "cvmfs_config chksetup" diff --git a/README.md b/README.md index 64961185b..9d65468d6 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,18 @@ ![docker pulls](https://img.shields.io/docker/pulls/bgruening/galaxy-stable.svg) ![docker stars](https://img.shields.io/docker/stars/bgruening/galaxy-stable.svg) [![docker image stats](https://images.microbadger.com/badges/image/bgruening/galaxy-stable.svg)](https://microbadger.com/images/bgruening/galaxy-stable "Get your own image badge on microbadger.com") + +:information_source: `19.01` will be the last release which is based on `ubuntu:14.04` and +PostgreSQL 9.3. We will migrate to `ubuntu:18.04` and a newer PostgreSQL version in `19.05`. Furthermore, we will not +support old Galaxy tool dependencies. These are deprecated since a few years and we think its time to remove support +for this in the default installation. You can install all needed packages manually to enable support again, though. + +In short, with 19.05: + * Galaxy tool dependencies will not be supported by default + * `ubuntu:18.04` will be the new base image + * a new PostgreSQL version means you need to migrate any old database to the new version + + Galaxy Docker Image =================== @@ -815,6 +827,9 @@ If you simply want to change the Galaxy repository and/or the Galaxy branch, fro - Singularity support and tests (compose only) - more work on K8s support and testing (@jmchilton) - using .env files to configure the compose setup for SLURM, Condor, K8s, SLURM-Singularity, Condor-Docker +- 18.09: + - new and more powerful orchestration build script (build-orchestration-images.sh) by @pcm32 + - a lot of bug-fixes to the compose setup by @abretaud # Support & Bug Reports [[toc]](#toc) diff --git a/compose/.env_htcondor_docker b/compose/.env_htcondor_docker index 12182a726..e082eb769 100644 --- a/compose/.env_htcondor_docker +++ b/compose/.env_htcondor_docker @@ -6,7 +6,7 @@ # Galaxy deployments. # ln -sf .env_htcondor_docker .env -TAG=18.01 +TAG=18.09 GALAXY_DESTINATIONS_DEFAULT=condor_cluster diff --git a/compose/.env_k8_native b/compose/.env_k8_native index dccbab79a..f1c4f7c63 100644 --- a/compose/.env_k8_native +++ b/compose/.env_k8_native @@ -4,4 +4,4 @@ GALAXY_DESTINATIONS_DOCKER_DEFAULT=k8s_default GALAXY_DESTINATIONS_NO_DOCKER_DEFAULT=local_no_container GALAXY_CONFIG_CONTAINERS_RESOLVERS_CONFIG_FILE=/export/config/container_resolvers_conf.xml -TAG=18.01 +TAG=18.09 diff --git a/compose/.env_slurm b/compose/.env_slurm index 7cd741493..11d8abf70 100644 --- a/compose/.env_slurm +++ b/compose/.env_slurm @@ -6,7 +6,7 @@ # Galaxy deployments. # ln -sf .env_slurm .env -TAG=18.01 +TAG=18.09 # default destination is our SLURM cluster GALAXY_DESTINATIONS_DEFAULT=slurm_cluster diff --git a/compose/.env_slurm_singularity b/compose/.env_slurm_singularity index 0dcd70a00..926b6c534 100644 --- a/compose/.env_slurm_singularity +++ b/compose/.env_slurm_singularity @@ -6,7 +6,7 @@ # Galaxy deployments. # ln -sf .env_slurm .env -TAG=18.01 +TAG=18.09 # default destination is our SLURM cluster with Singularity enabled GALAXY_DESTINATIONS_DEFAULT=slurm_cluster_singularity @@ -15,7 +15,7 @@ GALAXY_RUNNERS_ENABLE_SLURM=True # With this Galaxy will search for mulled based images (in /export/database/container_images/singularity/mulled/) GALAXY_CONFIG_ENABLE_BETA_MULLED_CONTAINERS=True -GALAXY_CONFIG_TOOL_CONFIG_FILE=config/tool_conf.xml.sample,config/shed_tool_conf.xml,/export/cat_tool_conf.xml +GALAXY_CONFIG_TOOL_CONFIG_FILE=config/tool_conf.xml.sample,config/shed_tool_conf.xml GALAXY_SINGULARITY_VOLUMES=$tool_directory:rw,$working_directory:rw,$default_file_path:rw diff --git a/compose/.env_slurm_singularity2 b/compose/.env_slurm_singularity2 new file mode 100644 index 000000000..83c6d3134 --- /dev/null +++ b/compose/.env_slurm_singularity2 @@ -0,0 +1,23 @@ +# This file is setting up a composed Galaxy instance with support +# for submitting SLURM. +# Docker compose will use parameters specified in an `.env` file +# next to the docker-compose.yml file. +# We recommend to symlink this file and play around with different +# Galaxy deployments. +# ln -sf .env_slurm .env + +TAG=18.09 + +# default destination is our SLURM cluster with Singularity enabled +GALAXY_DESTINATIONS_DEFAULT=slurm_cluster_singularity +GALAXY_RUNNERS_ENABLE_SLURM=True + +# With this Galaxy will search for mulled based images (in /export/database/container_images/singularity/mulled/) +GALAXY_CONFIG_ENABLE_BETA_MULLED_CONTAINERS=True + +GALAXY_CONFIG_TOOL_CONFIG_FILE=config/tool_conf.xml.sample,config/shed_tool_conf.xml,/export/cat_tool_conf.xml + +GALAXY_SINGULARITY_VOLUMES=$tool_directory:rw,$working_directory:rw,$default_file_path:rw + +GALAXY_CONFIG_CLEANUP_JOB=onsuccess +GALAXY_PORT=8080 diff --git a/compose/build-orchestration-images.sh b/compose/build-orchestration-images.sh new file mode 100755 index 000000000..1002f4fab --- /dev/null +++ b/compose/build-orchestration-images.sh @@ -0,0 +1,296 @@ +#!/bin/bash +# vi: fdm=marker + +set -e + +### Constants ### + +SCRIPT_NAME="${0##*/}" +TRUE='true' +FALSE='false' +DFT_DOCKER_PUSH_ENABLED=$TRUE + +### Functions ### + +function log() { + echo -e "$@" >&2 +} + +function error { + local msg=$1 + local code=$2 + [[ -z $code ]] && code=1 + log "[ERROR] $msg" + + exit $code +} + + +function debug { + local msg=$1 + local level=$2 + [[ -n $level ]] || level=1 + + [[ $DEBUG -lt $level ]] || log "[DEBUG] $msg" +} + +function warning { + local msg=$1 + + log "[WARNING] ##### $msg #####" +} + +function print_help { + ( + echo "Usage: $SCRIPT_NAME [options]" + echo + echo "Build Galaxy docker compose images for different purposes." + echo + echo "Options:" + echo " -g, --debug Debug mode. [false]" + echo " -h, --help Print this help message." + echo " -p, --push Push docker images. You can also set environment variable DOCKER_PUSH_ENABLED to \"true\". [true]" + echo " +p, --no-push Do not push dockers. You can also set environment variable DOCKER_PUSH_ENABLED to \"false\"." + echo " --push-intermediate Also push intermediate images [false]" + echo " --no-cache Tell Docker not to use cached images. [false]" + echo " --init-tag Set the tag for the Galaxy Init Flavour container image." + echo " --postgres-tag Set the tag for the Galaxy Postgres container image." + echo " --proftpd-tag Set the tag for the Galaxy Proftpd container image." + echo " --web-tag Set the tag for the Galaxy Web k8s container image." + echo " --k8s Set settings for Kubernetes usage." + echo " --grafana Build grafana container." + echo " --condor Build condor containers." + echo " --slurm Build slurm containers." + echo " -u, --container-user Set the container user. You can also set the environment variable CONTAINER_USER." + echo " -r, --container-registry Set the container registry. You can also set the environment variable CONTAINER_REGISTRY." + echo + ) >&2 +} + +function read_args { + + local args="$*" # save arguments for debugging purpose + + # Read options + while [[ $# > 0 ]] ; do + shift_count=1 + case $1 in + -g|--debug) DEBUG=$((DEBUG + 1)) ;; + -h|--help) print_help ; exit 0 ;; + -p|--push) DOCKER_PUSH_ENABLED=$TRUE ;; + +p|--no-push) DOCKER_PUSH_ENABLED=$FALSE ;; + --k8s) BUILD_FOR_K8S=$TRUE ;; + --condor) BUILD_FOR_CONDOR=$TRUE ;; + --slurm) BUILD_FOR_SLURM=$TRUE ;; + --grafana) BUILD_FOR_GRAFANA=$TRUE ;; + --push-intermediate) PUSH_INTERMEDIATE_IMAGES=$TRUE ;; + --no-cache) NO_CACHE="--no-cache" ;; + --postgres-tag) OVERRIDE_POSTGRES_TAG="$2" ; shift_count=2 ;; + --proftpd-tag) OVERRIDE_PROFTPD_TAG="$2" ; shift_count=2 ;; + --init-tag) OVERRIDE_GALAXY_INIT_PHENO_FLAVOURED_TAG="$2" ; shift_count=2 ;; + --web-tag) OVERRIDE_GALAXY_WEB_TAG="$2" ; shift_count=2 ;; + -u|--container-user) CONTAINER_USER="$2" ; shift_count=2 ;; + -r|--container-registry) CONTAINER_REGISTRY="$2" ; shift_count=2 ;; + *) error "Illegal option $1." 98 ;; + esac + shift $shift_count + done + + # Debug messages + debug "Command line arguments: $args" + debug "Argument DEBUG=$DEBUG" + debug "Argument DOCKER_PUSH_ENABLED=$DOCKER_PUSH_ENABLED" + debug "Argument DOCKER_USER=$DOCKER_USER" + debug "Argument OVERRIDE_GALAXY_WEB_TAG=$OVERRIDE_GALAXY_WEB_TAG" + debug "Argument OVERRIDE_POSTGRES_TAG=$OVERRIDE_POSTGRES_TAG" + debug "Argument OVERRIDE_PROFTPD_TAG=$OVERRIDE_PROFTPD_TAG" + debug "shift_count=$shift_count" +} + +### MAIN ### +BUILD_FOR_K8S=$FALSE +BUILD_FOR_CONDOR=$FALSE +BUILD_FOR_GRAFANA=$FALSE +BUILD_FOR_SLURM=$FALSE + +read_args "$@" + +DOCKER_PUSH_ENABLED=${DOCKER_PUSH_ENABLED:-$DFT_DOCKER_PUSH_ENABLED} + +DOCKER_REPO=${CONTAINER_REGISTRY:-} +DOCKER_USER=${CONTAINER_USER:-pcm32} + +ANSIBLE_REPO=${ANSIBLE_REPO:-galaxyproject/ansible-galaxy-extras} +ANSIBLE_RELEASE=${ANSIBLE_RELEASE:-18.09} + +GALAXY_VERSION=${GALAXY_VERSION:-18.09} + +# GALAXY_BASE_FROM_TO_REPLACE=${GALAXY_BASE_FROM_TO_REPLACE:-quay.io/bgruening/galaxy-base:$GALAXY_VERSION} +GALAXY_BASE_FROM_TO_REPLACE=$(grep ^FROM galaxy-init/Dockerfile | awk '{ print $2 }') # init starts from base, so we get it from there. +CONDOR_BASE_FROM_TO_REPLACE=quay.io/bgruening/galaxy-htcondor-base:$GALAXY_VERSION + +GALAXY_RELEASE=${GALAXY_RELEASE:-release_$GALAXY_VERSION} +GALAXY_REPO=${GALAXY_REPO:-galaxyproject/galaxy} + +GALAXY_VER_FOR_POSTGRES=$GALAXY_VERSION +# Uncomment to push intermediate images, otherwise only the images needed for the helm chart are pushed. +#PUSH_INTERMEDIATE_IMAGES=yes + +# Set tags +TAG=${GALAXY_TAG:-v$GALAXY_VERSION} + +# TODO This is PhenoMeNal Jenkins specific, should be removed at some point. +if [[ -n ${CONTAINER_TAG_PREFIX:-} && -n ${BUILD_NUMBER:-} ]]; then + TAG=${CONTAINER_TAG_PREFIX}.${BUILD_NUMBER} +fi + +if [[ -n "${DOCKER_REPO}" ]]; then + # Append slash, avoiding double slash + DOCKER_REPO="${DOCKER_REPO%/}/" +fi + +GALAXY_BASE_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-base:$TAG +GALAXY_INIT_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-init:$TAG +GALAXY_WEB_TAG=${OVERRIDE_GALAXY_WEB_TAG:-$DOCKER_REPO$DOCKER_USER/galaxy-web:$TAG} + +if [[ -n "${OVERRIDE_POSTGRES_TAG:-}" ]]; then + POSTGRES_TAG="${OVERRIDE_POSTGRES_TAG}" +else + PG_Dockerfile="galaxy-postgres/Dockerfile" + + [[ -f "${PG_Dockerfile}" ]] || error "The galaxy-postgres Dockerfile is missing under galaxy-Postgres." 99 + POSTGRES_VERSION=$(grep FROM "${PG_Dockerfile}" | awk -F":" '{ print $2 }') + + POSTGRES_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-postgres:$POSTGRES_VERSION"_for_"$GALAXY_VER_FOR_POSTGRES +fi + +if [[ -n "${OVERRIDE_PROFTPD_TAG:-}" ]]; then + PROFTPD_TAG="${OVERRIDE_PROFTPD_TAG}" +else + PROFTPD_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-proftpd:for_galaxy_v$GALAXY_VER_FOR_POSTGRES +fi + +CONDOR_BASE_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-htcondor-base:$TAG +CONDOR_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-htcondor:$TAG +CONDOR_EXEC_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-htcondor-executor:$TAG +GRAFANA_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-grafana:$TAG +SLURM_TAG=$DOCKER_REPO$DOCKER_USER/galaxy-slurm:$TAG +### do work + +if [ -n $ANSIBLE_REPO ] + then + log "Making custom galaxy-base:$TAG from $ANSIBLE_REPO at $ANSIBLE_RELEASE" + docker build $NO_CACHE --build-arg ANSIBLE_REPO=$ANSIBLE_REPO --build-arg ANSIBLE_RELEASE=$ANSIBLE_RELEASE -t $GALAXY_BASE_TAG galaxy-base/ + if [[ ! -z ${PUSH_INTERMEDIATE_IMAGES+x} ]]; + then + log "Pushing intermediate image $DOCKER_REPO$DOCKER_USER/galaxy-base:$TAG" + docker push $GALAXY_BASE_TAG + fi +fi + + +if [ -n $GALAXY_REPO ] + then + log "Making custom galaxy-init:$TAG from $GALAXY_REPO at $GALAXY_RELEASE" + DOCKERFILE_INIT_1=Dockerfile + if [ -n $ANSIBLE_REPO ] + then + sed s+$GALAXY_BASE_FROM_TO_REPLACE+$GALAXY_BASE_TAG+ galaxy-init/Dockerfile > galaxy-init/Dockerfile_init + FROM=`grep ^FROM galaxy-init/Dockerfile_init | awk '{ print $2 }'` + log "Using FROM $FROM for galaxy init" + DOCKERFILE_INIT_1=Dockerfile_init + fi + docker build $NO_CACHE --build-arg GALAXY_REPO=$GALAXY_REPO --build-arg GALAXY_RELEASE=$GALAXY_RELEASE -t $GALAXY_INIT_TAG -f galaxy-init/$DOCKERFILE_INIT_1 galaxy-init/ + if [[ "${DOCKER_PUSH_ENABLED:-}" = "true" ]]; then + log "Pushing image $GALAXY_INIT_TAG" + docker push $GALAXY_INIT_TAG + fi +fi + + +DOCKERFILE_WEB=Dockerfile +if [ -n $GALAXY_REPO ] +then + log "Making custom galaxy-web:$TAG from $GALAXY_REPO at $GALAXY_RELEASE" + GALAXY_BASE_FROM_TO_REPLACE=$(grep ^FROM galaxy-web/Dockerfile | awk '{ print $2 }') + sed s+$GALAXY_BASE_FROM_TO_REPLACE+$GALAXY_BASE_TAG+ galaxy-web/Dockerfile > galaxy-web/Dockerfile_web + FROM=$(grep ^FROM galaxy-web/Dockerfile_web | awk '{ print $2 }') + log "Using FROM $FROM for galaxy web" + DOCKERFILE_WEB=Dockerfile_web +fi +K8S_ANSIBLE_TAGS="" +if $BUILD_FOR_K8S; then + K8S_ANSIBLE_TAGS=,k8,k8s +fi +docker build $NO_CACHE --build-arg GALAXY_ANSIBLE_TAGS=supervisor,startup,scripts,nginx,cvmfs$K8S_ANSIBLE_TAGS -t $GALAXY_WEB_TAG -f galaxy-web/$DOCKERFILE_WEB galaxy-web/ +if $DOCKER_PUSH_ENABLED; then + docker push $GALAXY_WEB_TAG +fi + +# Build postgres +docker build -t $POSTGRES_TAG -f galaxy-postgres/Dockerfile galaxy-postgres/ +if $DOCKER_PUSH_ENABLED; then + docker push $POSTGRES_TAG +fi + +# Build proftpd +docker build -t $PROFTPD_TAG -f galaxy-proftpd/Dockerfile galaxy-proftpd/ +if $DOCKER_PUSH_ENABLED; then + docker push $PROFTPD_TAG +fi + +# Build condor +if $BUILD_FOR_CONDOR; then + docker build $NO_CACHE -t $CONDOR_BASE_TAG galaxy-htcondor-base + sed s+$CONDOR_BASE_FROM_TO_REPLACE+$CONDOR_BASE_TAG+ galaxy-htcondor/Dockerfile > galaxy-htcondor/Dockerfile_condor + FROM=`grep ^FROM galaxy-htcondor/Dockerfile_condor | awk '{ print $2 }'` + log "Using FROM $FROM for condor" + docker build $NO_CACHE -t $CONDOR_TAG -f galaxy-htcondor/Dockerfile_condor galaxy-htcondor/ + sed s+$CONDOR_BASE_FROM_TO_REPLACE+$CONDOR_BASE_TAG+ galaxy-htcondor-executor/Dockerfile > galaxy-htcondor-executor/Dockerfile_condor + FROM=`grep ^FROM galaxy-htcondor-executor/Dockerfile_condor | awk '{ print $2 }'` + log "Using FROM $FROM for condor-executor" + docker build $NO_CACHE -t $CONDOR_EXEC_TAG -f galaxy-htcondor-executor/Dockerfile_condor galaxy-htcondor-executor/ + if $DOCKER_PUSH_ENABLED; then + docker push $CONDOR_TAG + docker push $CONDOR_EXEC_TAG + fi +fi + +# Build for slurm +if $BUILD_FOR_SLURM; then + docker build -t $SLURM_TAG ./galaxy-slurm +fi + +# Build for grafana +if $BUILD_FOR_GRAFANA; then + docker build -t $GRAFANA_TAG ./galaxy-grafana +fi + +log "Relevant containers:" +log "Web: $GALAXY_WEB_TAG" +log "Init: $GALAXY_INIT_TAG" +log "Postgres: $POSTGRES_TAG" +log "Proftpd: $PROFTPD_TAG" +if $BUILD_FOR_CONDOR; then + log "Condor: $CONDOR_TAG" + log "Condor-exec: $CONDOR_EXEC_TAG" +fi +if $BUILD_FOR_SLURM; then + log "Slurm: $SLURM_TAG" +fi +if $BUILD_FOR_GRAFANA; then + log "Grafana: $GRAFANA_TAG" +fi + +log "Now build your own Galaxy init container starting FROM $GALAXY_INIT_TAG to add you own flavour, tools, workflows, etc." +if $BUILD_FOR_K8S; then + log "" + log "For k8s: Once you have built your own init container use it within the galaxy-stable Helm chart at https://github.com/galaxyproject/galaxy-kubernetes together with:" + log " - Web: $GALAXY_WEB_TAG" + log " - Postgres: $POSTGRES_TAG" + log " - Proftpd: $PROFTPD_TAG" +fi + +echo "export TAG="$(echo $GALAXY_WEB_TAG | awk -F':' '{print $2}') > tags-for-compose-to-source.sh +echo "export TAG_POSTGRES="$(echo $POSTGRES_TAG | awk -F':' '{print $2}') >> tags-for-compose-to-source.sh +echo "export TAG_PROFTPD="$(echo $PROFTPD_TAG | awk -F':' '{print $2}') >> tags-for-compose-to-source.sh diff --git a/compose/buildlocal.sh b/compose/buildlocal.sh index e651c5da3..0c6a47c82 100755 --- a/compose/buildlocal.sh +++ b/compose/buildlocal.sh @@ -1,17 +1,21 @@ #!/bin/bash set -x -e +echo "***************** Notice **************************************************" +echo "This script is deprecated, please use build-orchestration-images.sh instead." +echo "***************** Notice **************************************************" + ANSIBLE_REPO=galaxyproject/ansible-galaxy-extras -ANSIBLE_RELEASE=14c60b66f10326c7d158627b004d58e38ca503e4 +ANSIBLE_RELEASE=18.09 -GALAXY_RELEASE=release_18.05 +GALAXY_RELEASE=release_18.09 GALAXY_REPO=galaxyproject/galaxy DOCKER_ADDITIONAL_BUILD_ARGS="" #"--no-cache" # For using latest simply leave this variable empty or set to ":latest". This should be the case on the master branch. -TAG=":18.05" +TAG=":18.09" docker pull postgres @@ -35,3 +39,7 @@ docker build -t quay.io/bgruening/galaxy-htcondor$TAG ./galaxy-htcondor docker build -t quay.io/bgruening/galaxy-htcondor-executor$TAG ./galaxy-htcondor-executor docker build -t quay.io/bgruening/galaxy-grafana$TAG ./galaxy-grafana + +echo "***************** Notice **************************************************" +echo "This script is deprecated, please use build-orchestration-images.sh instead." +echo "***************** Notice **************************************************" diff --git a/compose/docker-compose.yml b/compose/docker-compose.yml index 8e32dd950..8517a3dd4 100644 --- a/compose/docker-compose.yml +++ b/compose/docker-compose.yml @@ -3,7 +3,7 @@ services: # proftpd container galaxy-proftpd: # build: galaxy-proftpd - image: quay.io/bgruening/galaxy-proftpd:${TAG:-latest} + image: quay.io/bgruening/galaxy-proftpd:${TAG_PROFTPD:-latest} env_file: .env environment: - proftpd_db_connection=galaxy@galaxy-postgres @@ -43,7 +43,7 @@ services: # If you are using the official postgres image, it needs to be populated by calling # docker-compose run galaxy install_db.sh # on first run - image: quay.io/bgruening/galaxy-postgres:${TAG:-latest} + image: quay.io/bgruening/galaxy-postgres:${TAG_POSTGRES:-latest} container_name: galaxy-postgres hostname: galaxy-postgres env_file: .env @@ -324,7 +324,6 @@ services: volumes: # This is the directory where all your files from Galaxy will be stored # on your host system - - ${EXPORT_DIR:-/export}/galaxy-central/config/galaxy.yml.sample:/etc/galaxy/galaxy.yml - ${EXPORT_DIR:-/export}/:/export/ - /var/run/docker.sock:/var/run/docker.sock depends_on: diff --git a/compose/dumpsql.sh b/compose/dumpsql.sh index 4a35af44c..e18fba5f1 100755 --- a/compose/dumpsql.sh +++ b/compose/dumpsql.sh @@ -1,6 +1,6 @@ #!/bin/bash -TAG=18.05 +TAG=v18.09 # Sets the image of postgres to use POSTGRES=postgres:9.6.5 diff --git a/compose/galaxy-base/Dockerfile b/compose/galaxy-base/Dockerfile index 4d3b5c10d..51ade8aa6 100644 --- a/compose/galaxy-base/Dockerfile +++ b/compose/galaxy-base/Dockerfile @@ -2,12 +2,12 @@ # # VERSION Galaxy-central -FROM ubuntu:14.04 +FROM ubuntu:18.04 MAINTAINER Björn A. Grüning, bjoern.gruening@gmail.com ARG ANSIBLE_REPO=galaxyproject/ansible-galaxy-extras -ARG ANSIBLE_RELEASE=14c60b66f10326c7d158627b004d58e38ca503e4 +ARG ANSIBLE_RELEASE=18.09 ENV DEBIAN_FRONTEND=noninteractive \ GALAXY_USER=galaxy \ @@ -36,8 +36,6 @@ GALAXY_CONFIG_FTP_UPLOAD_SITE=galaxy.docker.org \ GALAXY_CONFIG_USE_PBKDF2=False \ GALAXY_CONFIG_NGINX_X_ACCEL_REDIRECT_BASE=/_x_accel_redirect \ GALAXY_CONFIG_NGINX_X_ARCHIVE_FILES_BASE=/_x_accel_redirect \ -GALAXY_CONFIG_NGINX_UPLOAD_STORE=/export/nginx_upload_store \ -GALAXY_CONFIG_NGINX_UPLOAD_PATH=/_upload \ GALAXY_CONFIG_DYNAMIC_PROXY_MANAGE=False \ GALAXY_CONFIG_VISUALIZATION_PLUGINS_DIRECTORY=config/plugins/visualizations \ GALAXY_CONFIG_TRUST_IPYTHON_NOTEBOOK_CONVERSION=True \ @@ -64,24 +62,18 @@ HOME=$GALAXY_HOME RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ echo 'Acquire::http::Timeout "20";' > /etc/apt/apt.conf.d/98AcquireTimeout && \ echo 'Acquire::Retries "5";' > /etc/apt/apt.conf.d/99AcquireRetries && \ + apt-get -qq update && apt-get install --no-install-recommends -y locales && \ locale-gen en_US.UTF-8 && dpkg-reconfigure locales && \ - apt-get -qq update && apt-get install --no-install-recommends -y apt-transport-https wget && \ - # Condor mirror is really unreliable and times out too often, using a copy of the deb from cargo port - #echo "deb [arch=amd64] http://research.cs.wisc.edu/htcondor/ubuntu/stable/ trusty contrib" > /etc/apt/sources.list.d/htcondor.list - #wget -qO - http://research.cs.wisc.edu/htcondor/ubuntu/HTCondor-Release.gpg.key | sudo apt-key add - && \ + apt-get install --no-install-recommends -y apt-transport-https gnupg && \ echo "deb [arch=amd64] http://ppa.launchpad.net/ansible/ansible/ubuntu trusty main" > /etc/apt/sources.list.d/ansible.list && \ apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 7BB9C367 && \ apt-get update -qq && apt-get upgrade -y && \ - apt-get install --no-install-recommends -y sudo python-virtualenv \ - supervisor linux-image-extra-virtual munge \ - ansible nano python-pip \ - unattended-upgrades \ - gridengine-drmaa1.0 && \ - wget -q --no-check-certificate https://depot.galaxyproject.org/software/condor/condor_8.6.3_linux_all.deb && \ - dpkg -i condor_8.6.3_linux_all.deb ; apt-get install -f -y && \ - rm condor_8.6.3_linux_all.deb && \ - pip install --upgrade pip setuptools && \ - pip install ephemeris && \ + apt-get install --no-install-recommends -y sudo \ + supervisor linux-image-extra-virtual munge \ + ansible nano python-pip wget htcondor \ + unattended-upgrades \ + gridengine-drmaa1.0 && \ + pip install ephemeris virtualenv && \ apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ mkdir -p /tmp/download && \ wget -qO - https://download.docker.com/linux/static/stable/x86_64/docker-17.06.2-ce.tgz | tar -xz -C /tmp/download && \ @@ -89,9 +81,13 @@ RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ rm -rf /tmp/download && \ rm -rf ~/.cache/ +RUN touch /var/log/condor/StartLog /var/log/condor/StarterLog /var/log/condor/CollectorLog /var/log/condor/NegotiatorLog && \ + mkdir -p /var/run/condor/ /var/lock/condor/ && \ + chown -R condor: /var/log/condor/StartLog /var/log/condor/StarterLog /var/log/condor/CollectorLog /var/log/condor/NegotiatorLog /var/run/condor/ /var/lock/condor/ + RUN groupadd -r $GALAXY_USER -g $GALAXY_GID && \ useradd -u $GALAXY_UID -r -g $GALAXY_USER -d $GALAXY_HOME -c "Galaxy user" $GALAXY_USER && \ - mkdir $EXPORT_DIR $GALAXY_HOME $GALAXY_LOGS_DIR && chown -R $GALAXY_USER:$GALAXY_USER $GALAXY_HOME $GALAXY_LOGS_DIR $EXPORT_DIR + mkdir $EXPORT_DIR $GALAXY_LOGS_DIR && chown -R $GALAXY_USER:$GALAXY_USER $GALAXY_HOME $GALAXY_LOGS_DIR $EXPORT_DIR ADD ./bashrc $GALAXY_HOME/.bashrc # Container Style diff --git a/compose/galaxy-grafana/requirements.txt b/compose/galaxy-grafana/requirements.txt index 3f79978d5..8c9d6c834 100644 --- a/compose/galaxy-grafana/requirements.txt +++ b/compose/galaxy-grafana/requirements.txt @@ -3,7 +3,7 @@ bx-python==0.7.3 MarkupSafe==0.23 PyYAML==3.11 SQLAlchemy==1.0.15 -mercurial==3.7.3 +mercurial==4.1.3 numpy==1.9.2 pycrypto==2.6.1 @@ -38,7 +38,7 @@ Markdown==2.6.3 # BioBlend and dependencies bioblend==0.7.0 boto==2.38.0 -requests==2.8.1 +requests>=2.20.0 requests-toolbelt==0.4.0 # kombu and dependencies @@ -63,7 +63,7 @@ pyparsing==2.1.1 # Fabric and dependencies Fabric==1.10.2 -paramiko==1.15.2 +paramiko>=2.0.9 ecdsa==0.13 # Flexible BAM index naming diff --git a/compose/galaxy-htcondor-base/Dockerfile b/compose/galaxy-htcondor-base/Dockerfile index 2469c4434..afe67f87e 100644 --- a/compose/galaxy-htcondor-base/Dockerfile +++ b/compose/galaxy-htcondor-base/Dockerfile @@ -1,18 +1,14 @@ -FROM ubuntu:14.04 +FROM ubuntu:18.04 ENV DEBIAN_FRONTEND noninteractive RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ echo 'Acquire::http::Timeout "20";' > /etc/apt/apt.conf.d/98AcquireTimeout && \ echo 'Acquire::Retries "5";' > /etc/apt/apt.conf.d/99AcquireRetries && \ + apt-get update -qq && apt-get install -y --no-install-recommends locales && \ locale-gen en_US.UTF-8 && dpkg-reconfigure locales && \ - apt-get update -qq && apt-get install -y --no-install-recommends \ - apt-transport-https wget supervisor unattended-upgrades ca-certificates && \ - # Condor mirror is really unreliable and times out too often, using a copy of the deb from cargo port - #echo "deb [arch=amd64] http://research.cs.wisc.edu/htcondor/ubuntu/stable/ trusty contrib" > /etc/apt/sources.list.d/htcondor.list - wget -q https://depot.galaxyproject.org/software/condor/condor_8.6.3_linux_all.deb && \ - dpkg -i condor_8.6.3_linux_all.deb ; apt-get install -f -y && \ - rm condor_8.6.3_linux_all.deb && \ + apt-get install -y --no-install-recommends \ + apt-transport-https wget supervisor unattended-upgrades ca-certificates htcondor && \ rm -rf /var/lib/apt/lists/* RUN wget https://dl.influxdata.com/telegraf/releases/telegraf-1.5.0_linux_amd64.tar.gz && \ @@ -22,3 +18,8 @@ RUN wget https://dl.influxdata.com/telegraf/releases/telegraf-1.5.0_linux_amd64. rm telegraf-1.5.0_linux_amd64.tar.gz ADD telegraf.conf /etc/telegraf/telegraf.conf + + +RUN touch /var/log/condor/StartLog /var/log/condor/StarterLog /var/log/condor/CollectorLog /var/log/condor/NegotiatorLog && \ + mkdir -p /var/run/condor/ /var/lock/condor/ && \ + chown -R condor: /var/log/condor/StartLog /var/log/condor/StarterLog /var/log/condor/CollectorLog /var/log/condor/NegotiatorLog /var/run/condor/ /var/lock/condor/ diff --git a/compose/galaxy-htcondor-executor/Dockerfile b/compose/galaxy-htcondor-executor/Dockerfile index 3030383c6..46f4a6e27 100644 --- a/compose/galaxy-htcondor-executor/Dockerfile +++ b/compose/galaxy-htcondor-executor/Dockerfile @@ -1,4 +1,4 @@ -FROM quay.io/bgruening/galaxy-htcondor-base:18.05 +FROM quay.io/bgruening/galaxy-htcondor-base:18.09 ENV GALAXY_USER=galaxy \ GALAXY_UID=1450 \ diff --git a/compose/galaxy-htcondor-executor/startup.sh b/compose/galaxy-htcondor-executor/startup.sh index cf7f728ab..147a1d417 100644 --- a/compose/galaxy-htcondor-executor/startup.sh +++ b/compose/galaxy-htcondor-executor/startup.sh @@ -30,8 +30,6 @@ SCHED_NAME = $CONDOR_HOST " > /etc/condor/condor_config.local /usr/bin/telegraf --config /etc/telegraf/telegraf.conf & -sudo -u condor touch /var/log/condor/StartLog -sudo -u condor touch /var/log/condor/StarterLog tail -f -n 1000 /var/log/condor/StartLog /var/log/condor/StarterLog & # Mysterious bug? Docker doesn't output its version as condor user if this is not executed before diff --git a/compose/galaxy-htcondor/Dockerfile b/compose/galaxy-htcondor/Dockerfile index 7c9e414e8..4c26d3265 100644 --- a/compose/galaxy-htcondor/Dockerfile +++ b/compose/galaxy-htcondor/Dockerfile @@ -1,4 +1,4 @@ -FROM quay.io/bgruening/galaxy-htcondor-base:18.05 +FROM quay.io/bgruening/galaxy-htcondor-base:18.09 ADD condor_config.local /etc/condor/condor_config.local ADD supervisord.conf /etc/supervisord.conf diff --git a/compose/galaxy-init/Dockerfile b/compose/galaxy-init/Dockerfile index b7c395536..975212a12 100644 --- a/compose/galaxy-init/Dockerfile +++ b/compose/galaxy-init/Dockerfile @@ -2,13 +2,18 @@ # # VERSION Galaxy-central -FROM quay.io/bgruening/galaxy-base:18.05 +FROM quay.io/bgruening/galaxy-base:18.09 MAINTAINER Björn A. Grüning, bjoern.gruening@gmail.com -ARG GALAXY_RELEASE=release_18.05 +ARG GALAXY_RELEASE=18.09 ARG GALAXY_REPO=galaxyproject/galaxy +RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ + echo "Acquire::http {No-Cache=True;};" > /etc/apt/apt.conf.d/no-cache && \ + apt-get -qq update && apt-get install --no-install-recommends -y && \ + apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm -rf ~/.cache/ + # Create these folders and link to target directory for installation RUN mkdir -p /export /galaxy-export && \ mkdir /galaxy-export/shed_tools && \ @@ -38,6 +43,7 @@ ADD config $GALAXY_ROOT/config ADD welcome /galaxy-export/welcome RUN ansible-playbook /ansible/provision.yml \ + --extra-vars galaxy_extras_config_ie_proxy=False \ --extra-vars galaxy_server_dir=$GALAXY_ROOT \ --extra-vars galaxy_venv_dir=$GALAXY_VIRTUAL_ENV \ --extra-vars galaxy_log_dir=$GALAXY_LOGS_DIR \ @@ -56,12 +62,8 @@ RUN ansible-playbook /ansible/provision.yml \ #--extra-vars container_resolution_cached_mulled=False \ #--extra-vars container_resolution_build_mulled=False \ --tags=ie,pbs,slurm,uwsgi,metrics,k8s -c local && \ - apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* - -#--extra-vars galaxy_extras_config_container_resolution=True \ -#--extra-vars container_resolution_explicit=True \ -#--extra-vars container_resolution_cached_mulled=False \ -#--extra-vars container_resolution_build_mulled=False \ + apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ + chown -R $GALAXY_USER:$GALAXY_USER $GALAXY_HOME $EXPORT_DIR $GALAXY_LOGS_DIR # The following commands will be executed as User galaxy @@ -74,14 +76,25 @@ WORKDIR $GALAXY_ROOT # Updating genome informations from UCSC #RUN export GALAXY=$GALAXY_ROOT && sh ./cron/updateucsc.sh.sample + +RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda2-4.5.11-Linux-x86_64.sh -O ~/miniconda.sh && \ + /bin/bash ~/miniconda.sh -b -p /tool_deps/_conda/ && \ + rm ~/miniconda.sh && \ + echo ". /tool_deps/_conda/etc/profile.d/conda.sh" >> ~/.bashrc && \ + echo "conda activate base" >> ~/.bashrc + # prefetch Python wheels # Install all required Node dependencies. This is required to get proxy support to work for Interactive Environments -RUN ./scripts/common_startup.sh --skip-client-build && \ +RUN export PATH=/tool_deps/_conda/bin/:$PATH && \ + conda install -c conda-forge nodejs=9.11.1 yarn=1.12.1 git && \ + ./scripts/common_startup.sh --skip-client-build && \ . $GALAXY_VIRTUAL_ENV/bin/activate && \ python ./scripts/manage_tool_dependencies.py -c "$GALAXY_CONFIG_FILE" init_if_needed && \ # Install all required Node dependencies. This is required to get proxy support to work for Interactive Environments cd $GALAXY_ROOT/lib/galaxy/web/proxy/js && \ - npm install + npm install && \ + cd $GALAXY_ROOT/client && yarn install --network-timeout 120000 --check-files && yarn run build-production-maps && \ + rm -rf /home/galaxy/.cache/ # Switch back to User root USER root diff --git a/compose/galaxy-init/startup.sh b/compose/galaxy-init/startup.sh index 15d8f6afb..ec8f674d8 100644 --- a/compose/galaxy-init/startup.sh +++ b/compose/galaxy-init/startup.sh @@ -41,13 +41,16 @@ done # Optional, might not work { - if [ ! -d "/export/var/lib/docker" ] + if [ -d "/var/lib/docker" ] then - echo "Moving to /export/var/lib/docker" - mkdir -p /export/var/lib/ - mv /var/lib/docker /export/var/lib/docker - chown -R $GALAXY_UID:$GALAXY_GID /export/var/lib/docker - fi + if [ ! -d "/export/var/lib/docker" ] + then + echo "Moving to /export/var/lib/docker" + mkdir -p /export/var/lib/ + mv /var/lib/docker /export/var/lib/docker + chown -R $GALAXY_UID:$GALAXY_GID /export/var/lib/docker + fi + fi } || echo "Moving docker lib failed, this is not a fatal error" echo "Initialization complete" diff --git a/compose/galaxy-postgres/init-galaxy-db.sql.in b/compose/galaxy-postgres/init-galaxy-db.sql.in index 04099ffd5..eb19cbb2b 100644 --- a/compose/galaxy-postgres/init-galaxy-db.sql.in +++ b/compose/galaxy-postgres/init-galaxy-db.sql.in @@ -2090,7 +2090,7 @@ CREATE TABLE job_metric_numeric ( job_id integer, plugin character varying(255), metric_name character varying(255), - metric_value numeric(22,7) + metric_value numeric(26,7) ); @@ -4283,7 +4283,7 @@ CREATE TABLE task_metric_numeric ( task_id integer, plugin character varying(255), metric_name character varying(255), - metric_value numeric(22,7) + metric_value numeric(26,7) ); @@ -8126,7 +8126,7 @@ GalaxyTools lib/tool_shed/galaxy_install/migrate 1 -- COPY migrate_version (repository_id, repository_path, version) FROM stdin; -Galaxy lib/galaxy/model/migrate 141 +Galaxy lib/galaxy/model/migrate 142 \. diff --git a/compose/galaxy-proftpd/Dockerfile b/compose/galaxy-proftpd/Dockerfile index 39255f75f..15861fff7 100644 --- a/compose/galaxy-proftpd/Dockerfile +++ b/compose/galaxy-proftpd/Dockerfile @@ -1,9 +1,9 @@ # ProFTP Image, used by the Galaxy Docker project -FROM ubuntu:14.04 +FROM ubuntu:18.04 ARG ANSIBLE_REPO=galaxyproject/ansible-galaxy-extras -ARG ANSIBLE_RELEASE=14c60b66f10326c7d158627b004d58e38ca503e4 +ARG ANSIBLE_RELEASE=18.09 ENV GALAXY_USER=galaxy \ GALAXY_UID=1450 \ diff --git a/compose/galaxy-slurm/Dockerfile b/compose/galaxy-slurm/Dockerfile index f9b45320c..e640f6951 100644 --- a/compose/galaxy-slurm/Dockerfile +++ b/compose/galaxy-slurm/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:14.04 +FROM ubuntu:18.04 ENV DEBIAN_FRONTEND noninteractive @@ -13,12 +13,14 @@ RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ groupadd -r $GALAXY_USER -g $GALAXY_GID && \ useradd -u $GALAXY_UID -m -r -g $GALAXY_USER -c "Galaxy user" $GALAXY_USER && \ apt-get update -qq && apt-get install -y --no-install-recommends apt-transport-https \ - slurm-llnl slurm-llnl-torque slurm-drmaa-dev unattended-upgrades \ - python-pip python-psutil supervisor wget build-essential && \ + unattended-upgrades python-pip python-psutil python-setuptools supervisor wget \ + build-essential munge locales slurm-wlm slurm-wlm-torque && \ + wget https://depot.galaxyproject.org/deb/ubuntu/18.04/slurm-drmaa1_1.2.0-dev.deca826_amd64.deb && \ + wget https://depot.galaxyproject.org/deb/ubuntu/18.04/slurm-drmaa-dev_1.2.0-dev.deca826_amd64.deb && \ + dpkg -i slurm-drmaa1_1.2.0-dev.deca826_amd64.deb && \ + dpkg -i slurm-drmaa-dev_1.2.0-dev.deca826_amd64.deb && \ /usr/sbin/create-munge-key && \ - touch /var/log/slurm-llnl/slurmctld.log /var/log/slurm-llnl/slurmd.log && \ - mkdir /tmp/slurm && pip install --upgrade supervisor virtualenv && \ - + pip install --upgrade virtualenv && \ wget https://github.com/singularityware/singularity/releases/download/$SINGULARITY_VERSION/singularity-$SINGULARITY_VERSION.tar.gz && \ tar xvf singularity-$SINGULARITY_VERSION.tar.gz && \ cd singularity-$SINGULARITY_VERSION && \ @@ -26,9 +28,7 @@ RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ make && \ make install && \ rm -rf singularity-$SINGULARITY_VERSION singularity-$SINGULARITY_VERSION.tar.gz && \ - - apt-get remove -y supervisor build-essential && \ - mkdir /var/log/supervisor && \ + apt-get remove -y build-essential && \ apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ mkdir -p /tmp/download && \ wget -qO - https://download.docker.com/linux/static/stable/x86_64/docker-17.06.2-ce.tgz | tar -xz -C /tmp/download && \ @@ -67,7 +67,7 @@ RUN chown -R $SLURM_UID:$SLURM_GID "$GALAXY_VENV" && \ . "$GALAXY_VENV"/bin/activate && \ pip install --upgrade pip && \ pip install galaxy-lib && \ - pip install -r "$GALAXY_VENV"/requirements.txt --index-url https://wheels.galaxyproject.org/simple && \ + pip install -r "$GALAXY_VENV"/requirements.txt --index-url https://wheels.galaxyproject.org/simple --extra-index-url https://pypi.python.org/simple && \ rm -rf ~/.cache/ diff --git a/compose/galaxy-slurm/requirements.txt b/compose/galaxy-slurm/requirements.txt index 3f79978d5..145afdd4d 100644 --- a/compose/galaxy-slurm/requirements.txt +++ b/compose/galaxy-slurm/requirements.txt @@ -38,7 +38,7 @@ Markdown==2.6.3 # BioBlend and dependencies bioblend==0.7.0 boto==2.38.0 -requests==2.8.1 +requests>=2.20.0 requests-toolbelt==0.4.0 # kombu and dependencies @@ -63,7 +63,7 @@ pyparsing==2.1.1 # Fabric and dependencies Fabric==1.10.2 -paramiko==1.15.2 +paramiko>=2.0.9 ecdsa==0.13 # Flexible BAM index naming diff --git a/compose/galaxy-slurm/startup.sh b/compose/galaxy-slurm/startup.sh index e6ebf8994..799796c6c 100644 --- a/compose/galaxy-slurm/startup.sh +++ b/compose/galaxy-slurm/startup.sh @@ -16,6 +16,7 @@ fi if [ ! -f "$SLURM_CONF_PATH" ] then + mkdir -p /etc/slurm-llnl/ python /usr/local/bin/configure_slurm.py cp /etc/slurm-llnl/slurm.conf "$SLURM_CONF_PATH" fi @@ -23,4 +24,4 @@ mkdir -p /tmp/slurm chown $SLURM_USER_NAME /tmp/slurm ln -sf "$GALAXY_DIR" "$SYMLINK_TARGET" ln -sf "$SLURM_CONF_PATH" /etc/slurm-llnl/slurm.conf -exec /usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf +exec /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf diff --git a/compose/galaxy-web/Dockerfile b/compose/galaxy-web/Dockerfile index 5baf04a13..5394f628b 100644 --- a/compose/galaxy-web/Dockerfile +++ b/compose/galaxy-web/Dockerfile @@ -2,7 +2,7 @@ # # VERSION Galaxy-central -FROM quay.io/bgruening/galaxy-base:18.05 +FROM quay.io/bgruening/galaxy-base:18.09 MAINTAINER Björn A. Grüning, bjoern.gruening@gmail.com @@ -22,12 +22,15 @@ GALAXY_HANDLER_NUMPROCS=2 RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ apt-get -qq update && apt-get install --no-install-recommends -y apt-transport-https wget && \ - echo "deb [arch=amd64] http://ppa.launchpad.net/galaxyproject/nginx/ubuntu trusty main" > /etc/apt/sources.list.d/nginx.list && \ - apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 9735427B && \ - apt-get update -qq && apt-get upgrade -y && \ - apt-get install --no-install-recommends -y \ - slurm-drmaa-dev nginx-extras=1.4.6-1ubuntu3.8ppa1 nginx-common=1.4.6-1ubuntu3.8ppa1 supervisor \ - slurm-llnl autofs && \ + echo "deb https://deb.nodesource.com/node_9.x $(lsb_release -sc) main" > /etc/apt/sources.list.d/nodejs.list && \ + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 68576280 && \ + apt-get update -qq && \ + apt-get install --no-install-recommends -y nodejs \ + nginx-extras nginx-common supervisor autofs slurm-wlm slurm-wlm-torque && \ + wget https://depot.galaxyproject.org/deb/ubuntu/18.04/slurm-drmaa1_1.2.0-dev.deca826_amd64.deb && \ + wget https://depot.galaxyproject.org/deb/ubuntu/18.04/slurm-drmaa-dev_1.2.0-dev.deca826_amd64.deb && \ + dpkg -i slurm-drmaa1_1.2.0-dev.deca826_amd64.deb && \ + dpkg -i slurm-drmaa-dev_1.2.0-dev.deca826_amd64.deb && \ # install and remove supervisor, so get the service config file apt-get -qq remove -y supervisor && \ apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ @@ -35,7 +38,7 @@ RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ # this can be optimised I think, we should get the SLURM client only and update it gpasswd -a $GALAXY_USER docker && \ mkdir -p /etc/supervisor/conf.d/ /var/log/supervisor/ && \ - pip install --upgrade pip && \ + #pip install --upgrade pip && \ pip install ephemeris supervisor --upgrade && \ ln -s /usr/local/bin/supervisord /usr/bin/supervisord @@ -54,7 +57,7 @@ RUN rm -f /usr/bin/startup && \ --extra-vars galaxy_extras_config_proftpd=False \ --extra-vars galaxy_extras_config_cvmfs=True \ --extra-vars galaxy_tool_data_table_config_file=/etc/galaxy/tool_data_table_conf.xml \ - --extra-vars nginx_upload_store_path=$GALAXY_CONFIG_NGINX_UPLOAD_STORE \ + --extra-vars galaxy_extras_config_nginx_upload=False \ --extra-vars nginx_welcome_location=$NGINX_WELCOME_LOCATION \ --extra-vars nginx_welcome_path=$NGINX_WELCOME_PATH \ --extra-vars startup_sleeplock=True \ diff --git a/galaxy/Dockerfile b/galaxy/Dockerfile index b6e54004d..f6995e17c 100644 --- a/galaxy/Dockerfile +++ b/galaxy/Dockerfile @@ -9,7 +9,7 @@ MAINTAINER Björn A. Grüning, bjoern.gruening@gmail.com ARG GALAXY_RELEASE ARG GALAXY_REPO -ENV GALAXY_RELEASE=${GALAXY_RELEASE:-release_18.05} \ +ENV GALAXY_RELEASE=${GALAXY_RELEASE:-release_18.09} \ GALAXY_REPO=${GALAXY_REPO:-https://github.com/galaxyproject/galaxy} \ GALAXY_ROOT=/galaxy-central \ GALAXY_CONFIG_DIR=/etc/galaxy \ @@ -53,7 +53,8 @@ GALAXY_CONFIG_GALAXY_INFRASTRUCTURE_URL=http://localhost \ GALAXY_HANDLER_NUMPROCS=2 \ # Setting a standard encoding. This can get important for things like the unix sort tool. LC_ALL=en_US.UTF-8 \ -LANG=en_US.UTF-8 +LANG=en_US.UTF-8 \ +GALAXY_CONDA_PREFIX=$GALAXY_CONFIG_TOOL_DEPENDENCY_DIR/_conda RUN locale-gen en_US.UTF-8 && dpkg-reconfigure locales @@ -71,7 +72,7 @@ RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ apt-add-repository -y ppa:ansible/ansible && \ apt-add-repository -y ppa:galaxyproject/nginx && \ apt-get update -qq && apt-get upgrade -y && \ - apt-get install --no-install-recommends -y postgresql-9.3 sudo python-virtualenv \ + apt-get install --no-install-recommends -y postgresql-9.3 sudo \ nginx-extras=1.4.6-1ubuntu3.8ppa1 nginx-common=1.4.6-1ubuntu3.8ppa1 docker-ce=17.09.0~ce-0~ubuntu slurm-llnl slurm-llnl-torque \ slurm-drmaa-dev proftpd proftpd-mod-pgsql libyaml-dev ansible munge libmunge-dev \ nano vim curl python-crypto python-pip python-psutil condor python-ldap autofs \ @@ -81,8 +82,9 @@ RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup && \ apt-get purge -y software-properties-common && \ apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm -rf ~/.cache/ && \ mkdir -p /etc/supervisor/conf.d/ /var/log/supervisor/ && \ - pip install --upgrade pip setuptools && \ + pip install --upgrade pip && \ pip install ephemeris supervisor --upgrade && \ + rm -rf ~/.cache/ /galaxy-central/client/node_modules/ && \ ln -s /usr/local/bin/supervisord /usr/bin/supervisord RUN groupadd -r $GALAXY_USER -g $GALAXY_GID && \ @@ -90,10 +92,22 @@ RUN groupadd -r $GALAXY_USER -g $GALAXY_GID && \ mkdir $EXPORT_DIR $GALAXY_HOME $GALAXY_LOGS_DIR && chown -R $GALAXY_USER:$GALAXY_USER $GALAXY_HOME $EXPORT_DIR $GALAXY_LOGS_DIR && \ gpasswd -a $GALAXY_USER docker && \ adduser condor docker + ADD ./bashrc $GALAXY_HOME/.bashrc -# Download latest stable release of Galaxy. -RUN mkdir $GALAXY_ROOT && \ +# Install miniconda, then virtualenv from conda and then +# download latest stable release of Galaxy. +RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda2-4.5.11-Linux-x86_64.sh -O ~/miniconda.sh && \ + /bin/bash ~/miniconda.sh -b -p /tool_deps/_conda/ && \ + rm ~/miniconda.sh && \ + ln -s /tool_deps/_conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \ + echo ". /tool_deps/_conda/etc/profile.d/conda.sh" >> $GALAXY_HOME/.bashrc && \ + echo "conda activate base" >> $GALAXY_HOME/.bashrc && \ + export PATH=/tool_deps/_conda/bin/:$PATH && \ + conda install virtualenv pip && \ + # conda install conda-canary::conda=4.6 && \ + chown $GALAXY_USER:$GALAXY_USER -R /tool_deps/ /etc/profile.d/conda.sh && \ + mkdir $GALAXY_ROOT && \ wget -q -O - $GALAXY_REPO/archive/$GALAXY_RELEASE.tar.gz | tar xzf - --strip-components=1 -C $GALAXY_ROOT && \ virtualenv $GALAXY_VIRTUAL_ENV && \ chown -R $GALAXY_USER:$GALAXY_USER $GALAXY_VIRTUAL_ENV && \ @@ -104,11 +118,10 @@ RUN mkdir $GALAXY_ROOT && \ $GALAXY_VIRTUAL_ENV/bin/pip2 install pip --upgrade && \ $GALAXY_VIRTUAL_ENV/bin/pip2 install --extra-index-url https://wheels.galaxyproject.org/ uwsgi==2.0.15 -v --pre && \ chown -R $GALAXY_USER:$GALAXY_USER $GALAXY_VIRTUAL_ENV && \ - rm -rf ~/.cache/ + rm -rf ~/.cache/ /galaxy-central/client/node_modules/ && \ + su $GALAXY_USER -c "cp $GALAXY_ROOT/config/galaxy.yml.sample $GALAXY_CONFIG_FILE" -RUN su $GALAXY_USER -c "cp $GALAXY_ROOT/config/galaxy.yml.sample $GALAXY_CONFIG_FILE" ADD ./reports_wsgi.ini.sample $GALAXY_CONFIG_DIR/reports_wsgi.ini - ADD sample_tool_list.yaml $GALAXY_HOME/ephemeris/sample_tool_list.yaml ADD roles/ /ansible/roles ADD provision.yml /ansible/provision.yml @@ -138,11 +151,12 @@ RUN ansible-playbook /ansible/postgresql_provision.yml && \ --extra-vars supervisor_postgres_autostart=false \ --extra-vars nginx_use_remote_header=True \ --tags=galaxyextras,cvmfs -c local && \ - apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + apt-get autoremove -y && apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && \ + rm -rf ~/.cache/ /galaxy-central/client/node_modules/ RUN mkdir /shed_tools && chown $GALAXY_USER:$GALAXY_USER /shed_tools && \ mkdir $EXPORT_DIR/ftp/ && chown $GALAXY_USER:$GALAXY_USER $EXPORT_DIR/ftp && \ - mkdir /tool_deps/ && chown $GALAXY_USER:$GALAXY_USER /tool_deps && \ + mkdir -p /tool_deps/ && chown $GALAXY_USER:$GALAXY_USER -R /tool_deps && \ ln -s /tool_deps/ $EXPORT_DIR/tool_deps && chown $GALAXY_USER:$GALAXY_USER $EXPORT_DIR/tool_deps # Configure Galaxy to use the Tool Shed # The following commands will be executed as the galaxy user @@ -189,14 +203,13 @@ ADD GalaxyDocker.png $GALAXY_CONFIG_DIR/web/welcome_image.png ADD welcome.html $GALAXY_CONFIG_DIR/web/welcome.html RUN ./scripts/common_startup.sh && \ + export PATH=GALAXY_CONDA_PREFIX/bin/:$PATH && \ . $GALAXY_VIRTUAL_ENV/bin/activate && \ python ./scripts/manage_tool_dependencies.py -c "$GALAXY_CONFIG_FILE" init_if_needed && \ # Install all required Node dependencies. This is required to get proxy support to work for Interactive Environments cd $GALAXY_ROOT/lib/galaxy/web/proxy/js && \ - npm install - -# the following can be removed with 18.01 -RUN /tool_deps/_conda/bin/conda create -y --override-channels --channel iuc --channel bioconda --channel conda-forge --channel defaults --channel r --name mulled-v1-eb2018fd3ce0fcbcee48a4bf89c57219add691c16729281b6c46b30f08339397 samtools=1.3.1 bcftools=1.5 + npm install && \ + rm -rf ~/.cache/ /galaxy-central/client/node_modules/ # Switch back to User root USER root @@ -225,7 +238,9 @@ ADD ./tool_sheds_conf.xml $GALAXY_HOME/tool_sheds_conf.xml ADD install_tools_wrapper.sh /usr/bin/install-tools # script to install BioJS visualizations ADD install_biojs_vis.sh /usr/bin/install-biojs -RUN chmod +x /usr/bin/install-tools /usr/bin/install-biojs +RUN chmod +x /usr/bin/install-tools /usr/bin/install-biojs && \ + cd /usr/bin/ && wget https://git.embl.de/grp-gbcs/galaxy-dir-sync/raw/master/src/galaxy-dir-sync.py && \ + chmod +x galaxy-dir-sync.py RUN echo "DISCARD_SESSION_KEYRING_ON_STARTUP=False" > /etc/condor/condor_config.local && \ echo "TRUST_UID_DOMAIN=true" >> /etc/condor/condor_config.local @@ -249,3 +264,4 @@ RUN chmod +x /usr/bin/install_db.sh # Autostart script that is invoked during container start CMD ["/usr/bin/startup"] + diff --git a/galaxy/install_tools_wrapper.sh b/galaxy/install_tools_wrapper.sh index ff170f5f1..1a79fdcfa 100644 --- a/galaxy/install_tools_wrapper.sh +++ b/galaxy/install_tools_wrapper.sh @@ -24,7 +24,7 @@ else done echo "starting Galaxy" - sudo -E -u galaxy ./run.sh -d $install_log --pidfile galaxy_install.pid --http-timeout 3000 + sudo -E -u galaxy unset $SUDO_UID; ./run.sh -d $install_log --pidfile galaxy_install.pid --http-timeout 3000 galaxy_install_pid=`cat galaxy_install.pid` galaxy-wait -g http://localhost:$PORT -v --timeout 120 diff --git a/galaxy/roles/galaxyprojectdotorg.galaxyextras b/galaxy/roles/galaxyprojectdotorg.galaxyextras index 14c60b66f..21975fcd6 160000 --- a/galaxy/roles/galaxyprojectdotorg.galaxyextras +++ b/galaxy/roles/galaxyprojectdotorg.galaxyextras @@ -1 +1 @@ -Subproject commit 14c60b66f10326c7d158627b004d58e38ca503e4 +Subproject commit 21975fcd6808471bc8bc9707d3dc0f11fbbbceaf diff --git a/test/bioblend/Dockerfile b/test/bioblend/Dockerfile index 90748868f..2dccfcd76 100644 --- a/test/bioblend/Dockerfile +++ b/test/bioblend/Dockerfile @@ -3,18 +3,20 @@ FROM quay.io/bgruening/galaxy USER galaxy WORKDIR /home/galaxy -RUN . /galaxy_venv/bin/activate && \ - wget https://github.com/galaxyproject/bioblend/archive/master.tar.gz && tar xfz master.tar.gz && \ +RUN wget https://github.com/galaxyproject/bioblend/archive/master.tar.gz && tar xfz master.tar.gz && \ cd bioblend-master && \ + export PATH=/tool_deps/_conda/bin/:$PATH && . activate galaxy_env && \ pip install --upgrade "tox>=1.8.0" "pep8<=1.6.2" && \ python setup.py install && \ - sed -i.bak "s/commands.*$/commands =/" tox.ini + sed -i.bak "s/commands.*$/commands =/" tox.ini && \ + sed -i.bak2 "s/GALAXY_VERSION/GALAXY_VERSION BIOBLEND_TEST_JOB_TIMEOUT/" tox.ini ENV TOX_ENV=py27 \ BIOBLEND_GALAXY_API_KEY=admin \ - BIOBLEND_GALAXY_URL=http://galaxy + BIOBLEND_GALAXY_URL=http://galaxy \ + BIOBLEND_TEST_JOB_TIMEOUT="240" -CMD /bin/bash -c ". /galaxy_venv/bin/activate && cd /home/galaxy/bioblend-master && tox -e $TOX_ENV -- -e 'test_download_dataset|test_upload_from_galaxy_filesystem|test_get_datasets|test_datasets_from_fs|test_tool_dependency_install'" +CMD /bin/bash -c "export PATH=/tool_deps/_conda/bin/:$PATH && cd /home/galaxy/bioblend-master && tox -e $TOX_ENV -- -k 'not test_download_dataset and not test_upload_from_galaxy_filesystem and not test_get_datasets and not test_datasets_from_fs and not test_tool_dependency_install and not test_download_history and not test_export_and_download'" # library tests, needs share /tmp filesystem # * test_upload_from_galaxy_filesystem diff --git a/test/bioblend/test.sh b/test/bioblend/test.sh index 3696ddd79..1f84d7add 100644 --- a/test/bioblend/test.sh +++ b/test/bioblend/test.sh @@ -8,11 +8,13 @@ then pip install --upgrade "tox>=1.8.0" "pep8<=1.6.2" ; python setup.py install ; sed -i.bak "s/commands.*$/commands =/" tox.ini ; + sed -i.bak2 "s/GALAXY_VERSION/GALAXY_VERSION BIOBLEND_TEST_JOB_TIMEOUT/" tox.ini ; export TOX_ENV=py27 ; export BIOBLEND_GALAXY_API_KEY=admin ; export BIOBLEND_GALAXY_URL=http://galaxy ; + export BIOBLEND_TEST_JOB_TIMEOUT="240"; cd /home/galaxy/bioblend-master ; - tox -e $TOX_ENV -- -e "test_download_dataset|test_upload_from_galaxy_filesystem|test_get_datasets|test_datasets_from_fs|test_existing_history|test_new_history|test_params|test_tool_dependency_install"' + tox -e $TOX_ENV -- -k "not test_download_dataset and not test_upload_from_galaxy_filesystem and not test_get_datasets and not test_datasets_from_fs and not test_existing_history and not test_new_history and not test_params and not test_tool_dependency_install and not test_download_history and not test_export_and_download"' else docker build -t bioblend_test .