This repository orchestrates tools to produce R binaries. The binaries are available as a community resource, they are not professionally supported by Posit. The R language is open source, please see the official documentation at https://www.r-project.org/.
These binaries are not a replacement to existing binary distributions for R. The binaries were built with the following considerations:
- They use a minimal set of build and runtime dependencies.
- They are designed to be used side-by-side, e.g., on Posit Workbench.
- They give users a consistent option for accessing R across different Linux distributions.
These binaries have been extensively tested, and are used in production everyday on Posit Cloud and shinyapps.io. Please open an issue to report a specific bug, or ask questions on Posit Community.
R binaries are built for the following Linux operating systems:
- Ubuntu 18.04, 20.04, 22.04
- Debian 10, 11, 12
- CentOS 7
- Red Hat Enterprise Linux 7, 8, 9
- openSUSE 15.3, 15.4
- SUSE Linux Enterprise 15 SP3, 15 SP4
Operating systems are supported until their vendor end-of-support dates, which can be found on the Posit Platform Support page. When an operating system has reached its end of support, builds for it will be discontinued, but existing binaries will continue to be available.
To use our quick install script to install R, simply run the following
command. To use the quick installer, you must have root or sudo privileges,
and curl
must be installed.
bash -c "$(curl -L https://rstd.io/r-install)"
Define the version of R that you want to install. Available versions of R can be found here: https://cdn.posit.co/r/versions.json
R_VERSION=4.1.3
Download the deb package:
# Ubuntu 18.04
curl -O https://cdn.posit.co/r/ubuntu-1804/pkgs/r-${R_VERSION}_1_amd64.deb
# Ubuntu 20.04
curl -O https://cdn.posit.co/r/ubuntu-2004/pkgs/r-${R_VERSION}_1_amd64.deb
# Ubuntu 22.04
curl -O https://cdn.posit.co/r/ubuntu-2204/pkgs/r-${R_VERSION}_1_amd64.deb
# Debian 10
curl -O https://cdn.posit.co/r/debian-10/pkgs/r-${R_VERSION}_1_amd64.deb
# Debian 11
curl -O https://cdn.posit.co/r/debian-11/pkgs/r-${R_VERSION}_1_amd64.deb
# Debian 12
curl -O https://cdn.posit.co/r/debian-12/pkgs/r-${R_VERSION}_1_amd64.deb
Then install the package:
sudo apt-get install gdebi-core
sudo gdebi r-${R_VERSION}_1_amd64.deb
Enable the Extra Packages for Enterprise Linux repository (RHEL/CentOS 7 and RHEL 9 only):
# CentOS / RHEL 7
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# Rocky Linux 9 / AlmaLinux 9
sudo dnf install dnf-plugins-core
sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release
# RHEL 9
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
On RHEL 7, you may also need to enable the Optional repository:
sudo subscription-manager repos --enable "rhel-*-optional-rpms" # If running RHEL 7 in a public cloud, such as Amazon EC2, enable the # Optional repository from Red Hat Update Infrastructure (RHUI) instead sudo yum install yum-utils sudo yum-config-manager --enable "rhel-*-optional-rpms"
On RHEL 9, you may also need to enable the CodeReady Linux Builder repository:
sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms # If running RHEL 9 in a public cloud, such as Amazon EC2, enable the CodeReady # Linux Builder repository from Red Hat Update Infrastructure (RHUI) instead sudo dnf install dnf-plugins-core sudo dnf config-manager --enable codeready-builder-for-rhel-9-*-rpms
Download the rpm package:
# CentOS / RHEL 7
curl -O https://cdn.posit.co/r/centos-7/pkgs/R-${R_VERSION}-1-1.x86_64.rpm
# RHEL 8 / Rocky Linux 8 / AlmaLinux 8
curl -O https://cdn.posit.co/r/centos-8/pkgs/R-${R_VERSION}-1-1.x86_64.rpm
# RHEL 9 / Rocky Linux 9 / AlmaLinux 9
curl -O https://cdn.posit.co/r/rhel-9/pkgs/R-${R_VERSION}-1-1.x86_64.rpm
Then install the package:
sudo yum install R-${R_VERSION}-1-1.x86_64.rpm
Download the rpm package:
# openSUSE 15.3 / SLES 15 SP3
curl -O https://cdn.posit.co/r/opensuse-153/pkgs/R-${R_VERSION}-1-1.x86_64.rpm
# openSUSE 15.4 / SLES 15 SP4
curl -O https://cdn.posit.co/r/opensuse-154/pkgs/R-${R_VERSION}-1-1.x86_64.rpm
Then install the package:
sudo zypper --no-gpg-checks install R-${R_VERSION}-1-1.x86_64.rpm
Test that R was successfully installed by running:
/opt/R/${R_VERSION}/bin/R --version
To ensure that R is available on the system path, create symbolic links to the version of R that you installed:
sudo ln -s /opt/R/${R_VERSION}/bin/R /usr/local/bin/R
sudo ln -s /opt/R/${R_VERSION}/bin/Rscript /usr/local/bin/Rscript
You may want to install additional system dependencies for R packages. We recommend installing a TeX distribution (such as TinyTeX or TeX Live) and Pandoc. For more information on system dependencies, see system requirements for R packages.
If you want to install multiple versions of R on the same system, you can repeat these steps to install a different version of R alongside existing versions.
This repository orchestrates builds using a variety of tools. The instructions below outline the components in the stack and describe how to add a new platform or inspect an existing platform.
To build the R binaries from source, you will need to have Git,
Docker, and make
installed.
First, clone the Git repository locally and navigate to it.
git clone https://github.com/rstudio/R-builds
cd R-builds
Then, run the build-r-$PLATFORM
Make target with the R_VERSION
environment variable
set to your desired R version, where $PLATFORM
is one of the supported platform
identifiers, such as ubuntu-2204
or rhel-9
.
export PLATFORM=ubuntu-2204
export R_VERSION=4.1.3
make build-r-$PLATFORM
The built DEB or RPM package will be available in the builder/integration/tmp/$PLATFORM
directory.
$ ls builder/integration/tmp/$PLATFORM
r-4.1.3_1_amd64.deb
R is installed to /opt/R/${R_VERSION}
by default. If you want to customize the
installation path, set the optional R_INSTALL_PATH
environment variable to a
custom location such as /opt/custom/R-4.1.3
.
export PLATFORM=rhel-9
export R_VERSION=4.1.3
export R_INSTALL_PATH=/opt/custom/R-4.1.3
make build-r-$PLATFORM
Create a builder/Dockerfile.platform-version
(where platform-version
is ubuntu-2204
or centos-7
, etc.) This file must contain four major tasks:
- an
OS_IDENTIFIER
env with theplatform-version
. - a step which ensures the R source build dependencies are installed
- The
awscli
, 1.17.10+ if installed viapip
, for uploading tarballs to S3 COPY
andENTRYPOINT
for thebuild.sh
file inbuilder/
.
A new service in the docker-compose file named according to the platform-version
and containing the proper entries:
command: ./build.sh
environment:
- R_VERSION=${R_VERSION} # for testing out R builds locally
- LOCAL_STORE=/tmp/output # ensures that output tarballs are persisted locally
build:
context: .
dockerfile: Dockerfile.debian-11
image: r-builds:debian-11
volumes:
- ./integration/tmp:/tmp/output # path to output tarballs
IN serverless-resources.yml
you'll need to add a job definition that points to the ECR image.
rBuildsBatchJobDefinitionDebian11:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: #{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:debian-11
The serverless functions which trigger R builds need to be informed of new platforms.
- Add a
JOB_DEFINITION_ARN_PlatformVersion
env variable with a ref to the Job definition above. - Append the
platform-version
toSUPPORTED_PLATFORMS
.
environment:
# snip
JOB_DEFINITION_ARN_debian_11:
Ref: rBuildsBatchJobDefinitionDebian11
SUPPORTED_PLATFORMS: ubuntu-1804,debian-10,centos-7,centos-8
In order for the makefile to push these new platforms to ECR, add them to the PLATFORMS variable near the top of the Makefile
A new service in the test/docker-compose.yml
file named according to the platform-version
and containing the proper entries:
ubuntu-2204:
image: ubuntu:jammy
command: /r-builds/test/test-apt.sh
environment:
- OS_IDENTIFIER=ubuntu-2204
- R_VERSION=${R_VERSION}
volumes:
- ../:/r-builds
Once you've followed the steps above, submit a pull request. On successful merge, builds for this platform will begin to be available from the CDN.
Periodically, someone with access to these resources may need to re-trigger every R version/platform combination. This quite easy with the serverless
tool installed.
# Rebuild all R versions
serverless invoke stepf -n rBuilds -d '{"force": true}'
# Rebuild specific R versions
serverless invoke stepf -n rBuilds -d '{"force": true, "versions": ["3.6.3", "4.0.2"]}'
Tests are automatically run on each push that changes a file in builder/
, test/
, or the Makefile
.
These tests validate that R was correctly configured, built, and packaged. By default, the tests run
for the last 5 minor R versions on each platform.
To run the tests manually, you can navigate to the GitHub Actions workflow page and use "Run workflow" to run the tests from a custom branch, list of platforms, and list of R versions.
To skip the tests, add [skip ci]
to your commit message. See Skipping workflow runs
for more information.
To test the R builds locally, you can use the build-r-$PLATFORM
and test-r-$PLATFORM
targets to build R and run the tests. The tests use the quick install script to install R,
using a locally built R if present, or otherwise a build from the CDN.
# Build R 4.1.3 for Ubuntu 22
R_VERSION=4.1.3 make build-r-ubuntu-2204
# Test R 4.1.3 for Ubuntu 22
R_VERSION=4.1.3 make test-r-ubuntu-2204
Alternatively, you can build an image using the docker-build-$PLATFORM
target, launch a bash session within a container using the bash-$PLATFORM
target,
and interactively run the build script:
# Build the image for Ubuntu 22
make docker-build-ubuntu-2204
# Launch a bash session for Ubuntu 22
make bash-ubuntu-2204
# Build R 4.1.3
R_VERSION=4.1.3 ./build.sh
# Build R devel with parallel execution to speed up the build
MAKEFLAGS=-j4 R_VERSION=devel ./build.sh
# Build a prerelease version of R (e.g., alpha or beta)
R_VERSION=rc R_TARBALL_URL=https://cran.r-project.org/src/base-prerelease/R-latest.tar.gz ./build.sh