Search
Question: Building mzR package under docker fails
0
gravatar for mjmg
2.1 years ago by
mjmg0
Philippines
mjmg0 wrote:

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.

 

 

ADD COMMENTlink modified 2.1 years ago • written 2.1 years ago by mjmg0
1

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, the boost_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.

ADD REPLYlink modified 2.1 years ago • written 2.1 years ago by Dan Tenenbaum ♦♦ 8.2k

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.

ADD REPLYlink written 2.1 years ago by Laurent Gatto840

It might be good to call KK's attention to this thread so he can update us.

ADD REPLYlink written 2.1 years ago by Dan Tenenbaum ♦♦ 8.2k

Have done it before posting my previous reply.

ADD REPLYlink written 2.1 years ago by Laurent Gatto840

If it helps, the centos build fails on Unimod.c from pwiz:

g++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report, with preprocessed source if appropriate.   See <http://bugzilla.redhat.com/bugzilla> for instructions.   
make: *** [pwiz/data/common/Unimod.o] Error 4   
ERROR: compilation failed for package 'mzR'  removing '/usr/lib64/R/library/mzR' 
ADD REPLYlink written 2.1 years ago by mjmg0

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?

ADD REPLYlink modified 2.1 years ago • written 2.1 years ago by lerman0

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. 

 

 

ADD REPLYlink modified 2.1 years ago • written 2.1 years ago by mjmg0

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.

ADD REPLYlink written 2.1 years ago by Dan Tenenbaum ♦♦ 8.2k

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. 

ADD REPLYlink written 2.1 years ago by mjmg0

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?

 

 

ADD REPLYlink written 2.1 years ago by mjmg0
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.2.0
Traffic: 284 users visited in the last hour