rspm icon indicating copy to clipboard operation
rspm copied to clipboard

Difficulty with rspm when working with renv

Open IanVermes opened this issue 9 months ago • 7 comments

I've been having a little trouble trying to get your package to work for me in a Docker context, and suspect it's my own misunderstanding.

Without renv I know that working without renv works well, as this minimal Dockerfile works perfectly:

FROM rocker/r-base:4.2.2

RUN apt-get update -yq \
    && apt-get install -yq \
    apt-file

WORKDIR /opt/example

RUN Rscript -e 'install.packages("rspm"); rspm::enable(); install.packages("units")'

With renv

But with renv I'm doing something wrong but can't see what.

I have a small reproducible example where I try to install the units package with rspm and renv.

## Dockerfile
FROM rocker/r-base:4.2.2

RUN apt-get update -yq \
    && apt-get install -yq \
    apt-file

WORKDIR /opt/example

RUN Rscript -e 'install.packages("renv"); renv::init(); renv::install("rspm"); rspm::install_sysreqs()'

RUN Rscript -e 'rspm::renv_init(); renv::install("units")'

Then I run it as follows (Docker version 24.0.5) but fails to build:

docker build --progress plain --no-cache . > build.log 2>&1

And the logs yield the following (complete build.log attached)

...
#8 [5/5] RUN Rscript -e 'rspm::renv_init(); renv::install("units")'
#8 1.484 # Downloading packages -------------------------------------------------------
#8 1.487 - Downloading units from CRAN ...               OK [242.2 Kb]
#8 1.668 - Downloading Rcpp from CRAN ...                OK [3.3 Mb]
#8 1.865 Successfully downloaded 2 packages in 0.57 seconds.
#8 1.865 
#8 1.866 The following package(s) will be installed:
#8 1.866 - Rcpp  [1.0.12]
#8 1.866 - units [0.8-5]
#8 1.866 These packages will be installed into "/opt/example/renv/library/R-4.2/x86_64-pc-linux-gnu".
#8 1.866 
#8 1.866 # Installing packages --------------------------------------------------------
#8 1.931 - Installing Rcpp ...                           OK [built from source and cached in 32s]
#8 34.16 - Installing units ...                          FAILED
#8 35.94 Error: Error installing package 'units':
#8 35.94 =================================
#8 35.94 
#8 35.94 * installing *source* package ‘units’ ...
#8 35.94 ** package ‘units’ successfully unpacked and MD5 sums checked
#8 35.94 ** using staged installation
#8 35.94 configure: units: 0.8-5
#8 35.94 checking whether the C++ compiler works... yes
#8 35.94 checking for C++ compiler default output file name... a.out
#8 35.94 checking for suffix of executables... 
#8 35.94 checking whether we are cross compiling... no
#8 35.94 checking for suffix of object files... o
#8 35.94 checking whether the compiler supports GNU C++... yes
#8 35.94 checking whether g++ -std=gnu++14 accepts -g... yes
#8 35.94 checking for g++ -std=gnu++14 option to enable C++11 features... none needed
#8 35.94 checking for stdio.h... yes
#8 35.94 checking for stdlib.h... yes
#8 35.94 checking for string.h... yes
#8 35.94 checking for inttypes.h... yes
#8 35.94 checking for stdint.h... yes
#8 35.94 checking for strings.h... yes
#8 35.94 checking for sys/stat.h... yes
#8 35.94 checking for sys/types.h... yes
#8 35.94 checking for unistd.h... yes
#8 35.94 checking for _Bool... no
#8 35.94 checking for stdbool.h that conforms to C99... yes
#8 35.94 checking for error_at_line... yes
#8 35.94 checking for gcc... gcc
#8 35.94 checking whether the compiler supports GNU C... yes
#8 35.94 checking whether gcc accepts -g... yes
#8 35.94 checking for gcc option to enable C11 features... none needed
#8 35.94 checking for XML_ParserCreate in -lexpat... no
#8 35.94 checking for udunits2.h... no
#8 35.94 checking for udunits2/udunits2.h... no
#8 35.94 checking for ut_read_xml in -ludunits2... no
#8 35.94 configure: error: in `/tmp/Rtmpt7NwwG/R.INSTALLcbdc56a2a/units':
#8 35.94 configure: error: 
#8 35.94 --------------------------------------------------------------------------------
#8 35.94   Configuration failed because libudunits2.so was not found. Try installing:
#8 35.94     * deb: libudunits2-dev (Debian, Ubuntu, ...)
#8 35.94     * rpm: udunits2-devel (Fedora, EPEL, ...)
#8 35.94     * brew: udunits (OSX)
#8 35.94   If udunits2 is already installed in a non-standard location, use:
#8 35.94     --configure-args='--with-udunits2-lib=/usr/local/lib'
#8 35.94   if the library was not found, and/or:
#8 35.94     --configure-args='--with-udunits2-include=/usr/include/udunits2'
#8 35.94   if the header was not found, replacing paths with appropriate values.
#8 35.94   You can alternatively set UDUNITS2_INCLUDE and UDUNITS2_LIBS manually.
#8 35.94 --------------------------------------------------------------------------------
#8 35.94 
#8 35.94 See `config.log' for more details
#8 35.94 ERROR: configuration failed for package ‘units’
#8 35.94 * removing ‘/opt/example/renv/staging/1/units’
#8 35.94 install of package 'units' failed [error code 1]
...

While it is a very helpful error message and I could resolve the installation manually, but was hoping from the documentation that renv::install("[email protected]") followed by rspm::install_sysreqs() would work.

Please let me know what I've missed.

Our workflow revolves around renv and renv::install - so moving back to install.packages wouldn't be desirable.

IanVermes avatar May 13 '24 17:05 IanVermes