apt-file
).apt-file
).Both R packages and system dependencies are installed into the user home. For lightning-fast system-based installations (which have other advantages, such as multitenancy, reversibility and automatic updates, still without root privileges), see the bspm package and projects such as cran2copr for Fedora or r2u for Ubuntu.
Here we enable rspm
and trigger a binary installation of
the units
package. Then, we can see how the UDUNITS-2
dependency is detected, downloaded and configured.
You can install it directly from GitHub using the
remotes
package:
::install_github("cran4linux/rspm") remotes
You just need to enable it once for your session, and then you can
install or update packages normally via install.packages
or
update.packages
.
::enable()
rspminstall.packages("units")
Packages with system requirements, like the one above, will be scanned and configured automatically. Typically, everything will just work without any further action. But if something gets misconfigured for some reason, it is possible to manually trigger a reconfiguration with the following command:
::install_sysreqs() rspm
To enable it by default for all sessions, put the following into your
.Rprofile
:
::enable() # wrap it in suppressMessages() to suppress the initial message rspm
To initialize an renv
project with rspm
support, just run the following:
::renv_init() rspm
This command runs renv::init()
for you and then installs
the infrastructure required for the integration with
install.packages
and update.packages
. Note
that, if renv::install
or renv::update
are
called directly, then rspm::install_sysreqs()
needs to be
called manually.
In Docker containers, system requirements can be installed directly
as root. Therefore, it is enough to include in your Dockerfile the
following line right after renv::restore()
:
RUN Rscript -e 'renv::install("rspm"); rspm::install_sysreqs()'
Since always, Linux R users have been struggling with source installations and manual management of build dependencies. Several projects over the years tried to lessen this pain by building repositories of binaries that complement and scale up the offer by various distributions. See e.g. the c2d4u.team/c2d4u4.0+ PPA repo for Ubuntu or, more recently, the autoCRAN OBS repo for OpenSUSE, the iucar/cran Copr repo for Fedora, the ArchRPkgs repo for Arch and the r2u repo again for Ubuntu. These are tightly integrated and can be fully managed without leaving the R console thanks to the bspm package. See this paper for a detailed review.
On the other hand, RStudio recently took a complementary approach by building binaries—for various distributions, R versions and architectures—and serving them via their own CRAN mirror, also called the RStudio Public Package Manager (RSPM). In contrast to the previous solutions, this method allows the user to install binary packages as user packages under their home directory (virtually anywhere), instead of as system packages. The main issue is that the user has still to manage run-time system requirements themselves (i.e., shared libraries required by some packages to work), so this method by itself produces installations that are fundamentally broken.
To fill this gap, this package not only provides an easy setup of
RSPM, but also monitors and scans every installation for missing system
requirements, and then automatically downloads, installs and configures
them, relieving the user of this task. This is done following the same
complementary philosophy: everything is installed as user
packages under the home directory. More specifically, this
package uses the path ~/.local/share/R/rspm
for this.
The main technical issue here is that libraries are search for only
in a few pre-configured places that belong to the system (such as
/usr/lib
), and thus we need a mechanism to feed our new
user-hosted library paths to R packages, hopefully without restarting R
and managing environment variables. This is achieved by
automatically updating the RPATH
of every
.so
binary in our user R packages. This RPATH
is an optional entry that lives in the header of ELF executables and
shared libraries, and it is used by the dynamic linker as the primary
search path if exists. Therefore, it is the perfect mechanism for this
task, because it can be applied dynamically as new installations are
made, and without requiring any special privilege.
If you find any bug or you’d like to request support for other distributions (importantly, they must be supported by RStudio), please file issues at our GitHub issue tracker. Note though that some quirks may be expected:
There is nothing we can do from rspm
in either
case, so please do not file issues about them.
Unfortunately, the best you can do is to install the
development packages for the required library and force a source
installation (i.e. business as usual).
RStudio is a registered trademark of Posit. This software provides access to a public repository maintained by RStudio and provided to the open-source community for free, but has no association with it.