refactor: Switch to multi-stage build

This commit is contained in:
Thomas A. Christensen II 2023-08-09 23:21:33 -05:00
parent 58759e3314
commit ebcbb53cb1
Signed by: millironx
GPG key ID: 09335146883990B9
2 changed files with 285 additions and 106 deletions

View file

@ -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 <cboettig@ropensci.org>"
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 <<END_RUN_CMD
# Install R
apt-get update
apt-get install --no-install-recommends -y \
curl \
ca-certificates
curl -L "https://github.com/rocker-org/rocker-versioned2/archive/refs/tags/R${ROCKER_VERSION}.tar.gz" | tar xvz
./rocker-versioned2-R${ROCKER_VERSION}/scripts/install_R.sh
rm -rf rocker-versioned2-R${ROCKER_VERSION}
# Install BioPerl
apt-get update
apt-get install --no-install-recommends -y \
curl \
perl \
cpanminus \
build-essential \
DEBIAN_FRONTEND=noninteractive
apt-get update && apt-get install -y --no-install-recommends \
bash-completion \
ca-certificates \
file \
fonts-texgyre \
g++ \
gfortran \
gsfonts \
libblas-dev \
libbz2-1.0 \
libcurl4 \
libicu63 \
libjpeg62-turbo \
libopenblas-dev \
libpangocairo-1.0-0 \
libpcre3 \
libpng16-16 \
libreadline7 \
libtiff5 \
liblzma5 \
locales \
make \
libexpat1-dev \
libssl-dev \
zlib1g-dev \
libncurses5-dev
cpanm -n -v Bio::Seq Bio::SeqIO Perl4::CoreLibs
# Install R packages
install2.r --error --skipinstalled BiocManager
R -e "BiocManager::install(c('Biostrings', 'seqinr'))"
# Install samtools
curl -L "https://github.com/samtools/samtools/releases/download/${SAMTOOLS_VERSION}/samtools-${SAMTOOLS_VERSION}.tar.bz2" | tar xvj
cd samtools-${SAMTOOLS_VERSION} && make && make install && cd ..
rm -rf samtools-${SAMTOOLS_VERSION}
# Install viquas
mkdir /viquas && \
curl -L "https://master.dl.sourceforge.net/project/viquas/ViQuaS1.3.tar.gz" | tar xvz -C /viquas --strip-components=1
# Cleanup
apt-get remove -y \
build-essential \
make \
curl
rm -rf /var/lib/apt/lists
unzip \
zip \
zlib1g
echo "en_US.UTF-8 UTF-8" >> /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 <<END_RUN_CMD
apt-get update && apt-get install --no-install-recommends -y \
zlib1g-dev
R -e "install.packages('BiocManager', repos='https://cran.r-project.org')"
R -e "BiocManager::install('Biostrings')"
R -e "BiocManager::install('seqinr')"
apt-get autoremove -y
apt-get autoclean -y
rm -rf /var/lib/apt/lists/*
END_RUN_CMD
###
### Perl base image
###
FROM buildpack-deps:buster AS perl
LABEL maintainer="Peter Martini <PeterCMartini@GMail.com>, Zak B. Elep <zakame@cpan.org>"
RUN <<END_RUN_CMD
cat << 'EOF' > /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 <<END_RUN_CMD
cpanm -n -v Bio::Seq Bio::SeqIO Perl4::CoreLibs
END_RUN_CMD
###
### Samtools build
###
FROM buildpack-deps:buster AS samtools
ARG SAMTOOLS_VERSION=1.2
RUN <<END_RUN_CMD
curl -L "https://github.com/samtools/samtools/releases/download/${SAMTOOLS_VERSION}/samtools-${SAMTOOLS_VERSION}.tar.bz2" | tar xvj
cd samtools-${SAMTOOLS_VERSION} && make && make install && cd ..
END_RUN_CMD
###
### Viquas extraction
###
FROM buildpack-deps:buster AS viquas
RUN <<END_RUN_CMD
mkdir /viquas
curl -L "https://master.dl.sourceforge.net/project/viquas/ViQuaS1.3.tar.gz" | tar xvz -C /viquas --strip-components=1
END_RUN_CMD
###
### Final build
###
FROM debian:buster as final
RUN <<END_RUN_CMD
apt-get update && apt-get install -y --no-install-recommends \
bash-completion \
file \
fonts-texgyre \
gfortran \
gsfonts \
libblas-dev \
libbz2-1.0 \
libcurl4 \
libicu63 \
libjpeg62-turbo \
libncurses5-dev \
libopenblas-dev \
libpangocairo-1.0-0 \
libpcre3 \
libpng16-16 \
libreadline7 \
libtiff5 \
liblzma5 \
locales \
unzip \
zip \
zlib1g
apt-get autoremove -y
apt-get autoclean -y
rm -rf /var/lib/apt/lists/*
END_RUN_CMD
COPY --from=bioconductor /usr/local/bin /usr/local/bin
COPY --from=bioconductor /usr/local/lib /usr/local/lib
COPY --from=bioconductor /usr/local/share /usr/local/share
COPY --from=bioperl /usr/local/bin /usr/local/bin
COPY --from=bioperl /usr/local/lib /usr/local/lib
COPY --from=bioperl /usr/local/share /usr/local/share
COPY --from=bioperl /usr/share/perl /usr/share/perl
COPY --from=samtools /usr/local/bin /usr/local/bin
COPY --from=samtools /usr/local/lib /usr/local/lib
COPY --from=samtools /usr/local/share /usr/local/share
COPY --from=viquas /viquas /viquas
COPY --chmod=755 viquas /usr/local/bin/viquas
ENTRYPOINT [ "viquas" ]

47
modules/viquas/viquas Normal file
View file

@ -0,0 +1,47 @@
#!/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
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 -r /viquas/{viquas_files,ViQuaS.R} .
case $NUM_ARGS in
2)
Rscript ./ViQuaS.R "${REFERENCE_FILE}" "${BAM_FILE}"
;;
6)
Rscript ./ViQuaS.R "${REFERENCE_FILE}" "${BAM_FILE}" "${@[3:]}"
;;
*)
echo "${USAGE}"
echo "Incorrect number of arguments: expecting 2 or 6"
exit 1
esac
rm -rf ./{viquas_files,ViQuaS.R}