From ebcbb53cb12db3c087a69fa5b68bfd2068d7e87e Mon Sep 17 00:00:00 2001 From: "Thomas A. Christensen II" <25492070+MillironX@users.noreply.github.com> Date: Wed, 9 Aug 2023 23:21:33 -0500 Subject: [PATCH] refactor: Switch to multi-stage build --- modules/viquas/Dockerfile | 344 ++++++++++++++++++++++++++------------ modules/viquas/viquas | 47 ++++++ 2 files changed, 285 insertions(+), 106 deletions(-) create mode 100644 modules/viquas/viquas diff --git a/modules/viquas/Dockerfile b/modules/viquas/Dockerfile index 069c482..a152d91 100644 --- a/modules/viquas/Dockerfile +++ b/modules/viquas/Dockerfile @@ -1,116 +1,248 @@ -FROM ubuntu:bionic +### +### R base image +### Based on r-ver +### +FROM debian:buster AS rver -ENV R_VERSION=3.6.3 -ENV ROCKER_VERSION=4.1.1 -ENV R_HOME=/usr/local/lib/R -ENV TZ=Etc/UTC -ENV SAMTOOLS_VERSION=1.2 +LABEL org.label-schema.license="GPL-2.0" \ + org.label-schema.vcs-url="https://github.com/rocker-org/rocker-versioned" \ + org.label-schema.vendor="Rocker Project" \ + maintainer="Carl Boettiger " + +ARG R_VERSION +ARG BUILD_DATE +ARG CRAN +ENV BUILD_DATE ${BUILD_DATE:-2020-04-24} +ENV R_VERSION=${R_VERSION:-3.6.3} \ + CRAN=${CRAN:-https://cran.r-project.org} \ + LC_ALL=en_US.UTF-8 \ + LANG=en_US.UTF-8 \ + TERM=xterm RUN <> /etc/locale.gen +locale-gen en_US.utf8 +/usr/sbin/update-locale LANG=en_US.UTF-8 +BUILDDEPS="curl \ + default-jdk \ + libbz2-dev \ + libcairo2-dev \ + libcurl4-openssl-dev \ + libpango1.0-dev \ + libjpeg-dev \ + libicu-dev \ + libpcre3-dev \ + libpng-dev \ + libreadline-dev \ + libtiff5-dev \ + liblzma-dev \ + libx11-dev \ + libxt-dev \ + perl \ + tcl8.6-dev \ + tk8.6-dev \ + texinfo \ + texlive-extra-utils \ + texlive-fonts-recommended \ + texlive-fonts-extra \ + texlive-latex-recommended \ + x11proto-core-dev \ + xauth \ + xfonts-base \ + xvfb \ + zlib1g-dev" +apt-get install -y --no-install-recommends $BUILDDEPS +## Download source code +curl -O https://cran.r-project.org/src/base/R-3/R-${R_VERSION}.tar.gz +## Extract source code +tar -xf R-${R_VERSION}.tar.gz +cd R-${R_VERSION} +## Set compiler flags +R_PAPERSIZE=letter \ +R_BATCHSAVE="--no-save --no-restore" +R_BROWSER=xdg-open +PAGER=/usr/bin/pager +PERL=/usr/bin/perl +R_UNZIPCMD=/usr/bin/unzip +R_ZIPCMD=/usr/bin/zip +R_PRINTCMD=/usr/bin/lpr +LIBnn=lib +AWK=/usr/bin/awk +CFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g" +CXXFLAGS="-g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -g" +## Configure options +./configure --enable-R-shlib \ + --enable-memory-profiling \ + --with-readline \ + --with-blas \ + --with-tcltk \ + --disable-nls \ + --with-recommended-packages \ + --prefix /usr/local +## Build and install +make -j $(nproc) -O +make install +## Add a library directory (for user-installed packages) +mkdir -p /usr/local/lib/R/site-library +chown root:staff /usr/local/lib/R/site-library +chmod g+ws /usr/local/lib/R/site-library +## Fix library path +sed -i '/^R_LIBS_USER=.*$/d' /usr/local/lib/R/etc/Renviron +echo "R_LIBS_USER=\${R_LIBS_USER-'/usr/local/lib/R/site-library'}" >> /usr/local/lib/R/etc/Renviron +echo "R_LIBS=\${R_LIBS-'/usr/local/lib/R/site-library:/usr/local/lib/R/library:/usr/lib/R/library'}" >> /usr/local/lib/R/etc/Renviron +echo "options(repos = c(CRAN='$CRAN'), download.file.method = 'libcurl')" >> /usr/local/lib/R/etc/Rprofile.site +## Clean up from R source install +apt-get remove --purge -y $BUILDDEPS +apt-get autoremove -y +apt-get autoclean -y +rm -rf /var/lib/apt/lists/* END_RUN_CMD +### +### Added Bioconductor packages to r-ver +### +FROM rver as bioconductor +RUN < /usr/bin/viquas -#!/bin/sh -USAGE=" - USAGE: - viquas reference.fsa reads.bam [o r perform_richness diversity_region_length] -" - -NUM_ARGS=$# -case $NUM_ARGS in - 2) - ;; - 6) - ;; - *) - echo "${USAGE}" - echo "Incorrect number of arguments: expecting 2 or 6" - exit 1 -esac - -PWD_BACKUP=$PWD - -if [ ! -f "${1}" ]; then - echo "Error: ${1} is not a file" - exit 1 -fi - -if [ ! -f "${2}" ]; then - echo "Error: ${2} is not a file" - exit 1 -fi - -REFERENCE_FILE=$(basename "${1}") -BAM_FILE=$(basename "${2}") - -cp "${1}" /viquas -cp "${2}" /viquas - -cd /viquas || exit 1 - -case $NUM_ARGS in - 2) - Rscript /viquas/ViQuaS.R "${REFERENCE_FILE}" "${BAM_FILE}" - ;; - 6) - Rscript /viquas/ViQuaS.R "${REFERENCE_FILE}" "${BAM_FILE}" "${@[3:]}" - ;; - *) - echo "${USAGE}" - echo "Incorrect number of arguments: expecting 2 or 6" - exit 1 -esac - -mv /viquas/ViQuaS-Spectrum.fa "${PWD_BACKUP}" -mv /viquas/ViQuaS-Richness.txt "${PWD_BACKUP}" 2> /dev/null - -cd "${PWD_BACKUP}" || exit 1 -EOF -chmod +x /usr/bin/viquas -chmod -R 777 /viquas +curl -fL https://www.cpan.org/src/5.0/perl-5.34.1.tar.xz -o perl-5.34.1.tar.xz +tar --strip-components=1 -xaf perl-5.34.1.tar.xz -C /usr/src/perl +rm perl-5.34.1.tar.xz +cat *.patch | patch -p1 +gnuArch="$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" +archBits="$(dpkg-architecture --query DEB_BUILD_ARCH_BITS)" +archFlag="$([ "$archBits" = '64' ] && echo '-Duse64bitall' || echo '-Duse64bitint')" +./Configure -Darchname="$gnuArch" "$archFlag" -Dusethreads -Duseshrplib -Dvendorprefix=/usr/local -des +make -j$(nproc) +TEST_JOBS=$(nproc) make test_harness +make install +cd /usr/src +curl -fLO https://www.cpan.org/authors/id/M/MI/MIYAGAWA/App-cpanminus-1.7047.tar.gz +tar -xzf App-cpanminus-1.7047.tar.gz && cd App-cpanminus-1.7047 && perl bin/cpanm . && cd /root +cpanm IO::Socket::SSL +curl -fL https://raw.githubusercontent.com/skaji/cpm/0.997011/cpm -o /usr/local/bin/cpm +chmod +x /usr/local/bin/cpm +rm -fr /root/.cpanm /usr/src/perl /usr/src/App-cpanminus-1.7047* END_RUN_CMD +### +### Added bioperl packaged +### +FROM perl AS bioperl +RUN <