Everything was OK until I encountered problems installing
Cairo R packages. Later, I also had an error installing scRepertoire dependency
It turns out I have to install debian packages inside the container:
$ apt update && apt install -y --no-install-recommends libjpeg62-turbo-dev zlib1g-dev libpng-dev \ && apt install -y --no-install-recommends libx11-dev libcairo2-dev libxt-dev \ && apt install -y libgsl-dev
However, singularity file system is read-only.
You CAN NOT do:
singularity shell rstudio.simg ## and then inside the container apt install -y --no-install-recommends libjpeg62-turbo-dev zlib1g-dev libpng-dev
Nathan Weeks, our previous docker expert at Harvard FAS informatics told me:
Easiest would be to extend the Docker image, then create a new Singularity image from that.
The followings are the steps I took.
prepare a dockerfile
On my local mac which has docker running prepare a Dockerfile and put it into a folder
FROM rocker/tidyverse:3.6.3 RUN apt update && apt install -y --no-install-recommends libjpeg62-turbo-dev zlib1g-dev libpng-dev \ && apt install -y --no-install-recommends libx11-dev libcairo2-dev libxt-dev \ && apt install -y libgsl-dev \ && rm -rf /var/lib/apt/lists/*
build the docker image
$ cd rocker-jpeg ## build the extended docker image $ docker build -t rocker-with-jpeg:3.6.3 . ## push to docker hub $ docker tag rocker-with-jpeg:3.6.3 crazyhottommy/rocker-with-jpeg:3.6.3 $ docker push crazyhottommy/rocker-with-jpeg:3.6.3
Now, I can install those packages successfully:
$ docker run -it rocker-with-jpeg:3.6.3 bash $ R
inside R console:
> install.package(c("jpeg", "Cario"))
use the image
I can now either directly
singularity pull docker://crazyhottommy/rocker-with-jpeg:3.6.3
to get the singularity image or convert the docker image to singularity image at my local mac:
$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v /tmp/singularity:/output --privileged -t --rm quay.io/singularity/docker2singularity:v3.6.3 my-rocker-with-jpeg:3.6.3
The resulting singularity image will be in
NOTE: My previous colleague Seth Sahil mentioned that I may want to use the geospacial rocker image since it includes most of the libraries.