Entering edit mode
Hello, I'm building docker image containing the mzR package with both centos:latest and r-base:latest (which is also used by Bioconductor docker images) as base images.
Both installation of package ‘mzR’ had non-zero exit status and doesn't finish compiling at all. I'm not using the Bioconductor docker images to keep image sizes to a minimum.
Below is the debian build Dockerfile
## start with the Docker 'base R' Debian-based image FROM r-base:latest ## Remain current RUN apt-get update -qq \ && apt-get dist-upgrade -y RUN apt-get update -qq \ && apt-get install -y \ curl \ libnetcdf-dev \ libxml2-dev # Setup default cran repo RUN echo "r <- getOption('repos'); r['CRAN'] <- 'http://cran.us.r-project.org'; options(repos = r);" > ~/.Rprofile # This installs other R packages under Bioconductor RUN Rscript -e "source('https://bioconductor.org/biocLite.R'); biocLite('mzR')"
Here is the buildlog: http://pastebin.com/gWvBjN1N
Below is the centos build Dockerfile
FROM centos:centos7 # Update System Image and install EPEL RUN \ yum update -y && \ yum upgrade -y && \ yum install -y epel-release # Install R RUN \ yum install -y R #install additional tools and library prerequisites RUN \ yum install -y netcdf-devel libxml2-devel # Setup default cran repo RUN echo "r <- getOption('repos'); r['CRAN'] <- 'http://cran.us.r-project.org'; options(repos = r);" > ~/.Rprofile # This installs other R packages under Bioconductor RUN Rscript -e "source('https://bioconductor.org/biocLite.R'); biocLite('mzR')" CMD "/bin/bash"
This build ends with an internal compiler error.
Sounds like an issue I have discussed with the mzR developers. At least for the debian-based image, the compiler is too new. This is at least partially fixed in https://github.com/sneumann/mzR/tree/boost_159.
So if you do the following:
source("http://bioconductor.org/biocLite.R")
biocLite("devtools")
library(devtools)
install_github("sneumann/mzR", branch="boost_159", repos=biocinstallRepos())
That should install mzR. However, I found that the installation that takes place as part of
R CMD check
was still failing. I asked the mzR people about that but have not heard back. I would hope that when that issue is resolved, theboost_159
branch will be merged into master. Maybe someone from the mzr team can chime in here.I don't know if the same instructions will help you on centos or not, but you could try them and let us know.
Sorry, I haven't had a chance to make any progress on that front. KK is the person who is most au fait.
To answer your question: yes, the plan is to merge into master, once recent boost and pwiz have been successfully tested.
It might be good to call KK's attention to this thread so he can update us.
Have done it before posting my previous reply.
If it helps, the centos build fails on Unimod.c from pwiz:
I'm also failing on Unimod.c from pwiz.. Any resolution to this yet?
g++ -I/usr/share/R/include -DNDEBUG -D_LARGEFILE_SOURCE -I./boost_aux/ -I. -DHAVE_PWIZ_MZML_LIB -D_NODEBUG -DWITHOUT_MZ5 -I./boost `nc-config --cflags || /bin/true` -I"/home/lerman/R/x86_64-pc-linux-gnu-library/3.2/Rcpp/include" -I"/home/lerman/R/x86_64-pc-linux-gnu-library/3.2/zlibbioc/include" -fpic -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -g -c pwiz/data/common/Unimod.cpp -o pwiz/data/common/Unimod.o
virtual memory exhausted: Cannot allocate memory
make: *** [pwiz/data/common/Unimod.o] Error 1
ERROR: compilation failed for package ‘mzR’
* removing ‘/home/lerman/R/x86_64-pc-linux-gnu-library/3.2/mzR’
Error: Command failed (1)
I think I only have 2 GB RAM on this machine. Is that a problem?
Thank you. Will try your suggestion. If this workaround proves hard to maintain in the future, I might just base my images on latest ubuntu lts or centos
Surprisingly, when I tried installing mzR on an actual installation of centos and locally building the docker image, mzR compiles to completion and installs without errors in contrast to the docker image being built in the dockerhub repository. There must be something amiss when mzR is built on Dockerhub repository.
Here i the centos dockerfile build log from dockerhub for completeness.
A few comments:
1) Development libraries for xml2 should be explicitly added to mzR dependencies. Took me some time to figure that out from the log file for both centos and debian docker builds.
2) For the debian build, since the official Bioconductor docker images are also based on rocker/r-base which is the official R docker images and which you also have adopted, resolving errors when using those as base images should have some priority. Perhaps all Bioconductor packages should be built and tested against that image. Pushing it further, if possible perhaps it should be the reference architecture for building Bioconductor packages for *nix since its docker image can be easily deployed with a few commands on any computer system.
Just my two cents.
Can you clarify what you mean by "Surprisingly, when I tried installing mzR on an actual installation of centos and locally building the docker image, mzR compiles to completion and installs without errors in contrast to the docker image being built in the dockerhub repository. There must be something amiss when mzR is built on Dockerhub repository."
?
Are you saying that running '
docker build
' on a centos machine works but building the exact same dockerfile in docker hub does not? It could be that the dockerhub build machine does not have enough memory.Or do you mean you installed mzR directly on a centos machine without docker?
I am not sure that mzR has a dependency on libxml2-devel. I think perhaps some package in its dependency tree may depend on it. But I could be wrong.
I did both. Installed mzR on a local centos install and build the docker image locally (this was under windows). I'll try to replicate to verify it's not a quirk. Please feel free to do the same using the dockerfiles above.
My bad with the libml2-dev dependency of mzR, indeed it is not the case, perhaps with another package where mzR is a dependency. For the record I also added netconfig-bin to the build.
I can also confirm the compiler error on building mzR on dockerhub is probably due to insufficient memory (2 GB, single core)
https://github.com/docker/hub-feedback/issues/319
About to try the workround posted by using the boost branch for the debian build. Is it too late to incorporate this into the latest Bioconductor release?