From ea3b4c23e272b7f11943e701fdbad54cce2b04b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Sun, 12 May 2024 12:41:02 +0200 Subject: [PATCH 1/2] Add Fedora 40 --- Makefile | 2 +- builder/Dockerfile.fedora-40 | 88 ++++++++++++++++++++++++++++++++++++ builder/docker-compose.yml | 12 +++++ builder/package.fedora-40 | 74 ++++++++++++++++++++++++++++++ serverless-resources.yml | 14 ++++++ serverless.yml | 4 +- test/docker-compose.yml | 8 ++++ 7 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 builder/Dockerfile.fedora-40 create mode 100644 builder/package.fedora-40 diff --git a/Makefile b/Makefile index 1bcc708..c20463e 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-2004 ubuntu-2204 ubuntu-2404 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-155 fedora-38 fedora-39 +PLATFORMS := ubuntu-2004 ubuntu-2204 ubuntu-2404 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-155 fedora-38 fedora-39 fedora-40 SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: diff --git a/builder/Dockerfile.fedora-40 b/builder/Dockerfile.fedora-40 new file mode 100644 index 0000000..5a8a18c --- /dev/null +++ b/builder/Dockerfile.fedora-40 @@ -0,0 +1,88 @@ +FROM fedora:40 + +ENV OS_IDENTIFIER fedora-40 + +RUN dnf -y upgrade \ + && dnf -y install dnf-plugins-core \ + && dnf -y install \ + autoconf \ + automake \ + bzip2-devel \ + cairo-devel \ + flexiblas-devel \ + gcc-c++ \ + gcc-gfortran \ + java-11-openjdk-devel \ + libICE-devel \ + libSM-devel \ + libX11-devel \ + libXmu-devel \ + libXt-devel \ + libcurl-devel \ + libicu-devel \ + libjpeg-devel \ + libpng-devel \ + libtiff-devel \ + libtool \ + make \ + ncurses-devel \ + pango-devel \ + pcre-devel \ + pcre2-devel \ + readline-devel \ + rpm-build \ + tcl-devel \ + tex \ + texinfo-tex \ + texlive-collection-latexrecommended \ + tk-devel \ + unzip \ + valgrind-devel \ + which \ + wget \ + xz-devel \ + zlib-devel \ + && dnf clean all + +# Install AWS CLI +RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ + unzip awscliv2.zip && \ + ./aws/install && \ + rm -rf aws awscliv2.zip + +RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ + dnf install -y "nfpm_$(cat /tmp/arch).rpm" && \ + rm "nfpm_$(cat /tmp/arch).rpm" + +RUN chmod 0777 /opt + +# Configure flags for that don't use the defaults in build.sh +ENV CONFIGURE_OPTIONS="\ + --enable-R-shlib \ + --with-tcltk \ + --enable-memory-profiling \ + --with-x \ + --with-system-valgrind-headers \ + --with-tcl-config=/usr/lib64/tclConfig.sh \ + --with-tk-config=/usr/lib64/tkConfig.sh \ + --enable-prebuilt-html \ + --with-blas=flexiblas \ + --with-lapack=flexiblas" + +# Make sure that patching Java does not break R. +# R's default JAVA_HOME path includes the exact Java version on CentOS/RHEL, which +# requires users to run `R CMD javareconf` even on minor/patch upgrades. Use the +# major version symlink to avoid this. +# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Java-support +# https://solutions.posit.co/envs-pkgs/using-rjava/ +ENV JAVA_HOME=/usr/lib/jvm/jre-11-openjdk + +# R 3.x requires PCRE2 for Pango support on RHEL 9 +ENV INCLUDE_PCRE2_IN_R_3 yes + +COPY package.fedora-40 /package.sh +COPY build.sh . +COPY patches /patches +ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 817219b..f76a421 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -143,3 +143,15 @@ services: image: r-builds:fedora-39 volumes: - ./integration/tmp:/tmp/output + fedora-40: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.fedora-40 + image: r-builds:fedora-40 + volumes: + - ./integration/tmp:/tmp/output diff --git a/builder/package.fedora-40 b/builder/package.fedora-40 new file mode 100644 index 0000000..9a7151f --- /dev/null +++ b/builder/package.fedora-40 @@ -0,0 +1,74 @@ +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" +fi + +# R 3.x requires PCRE1. On RHEL 9, R 3.x also requires PCRE2 for Pango support. +pcre_libs='- pcre2-devel' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_libs='- pcre2-devel +- pcre-devel' +fi + +blas_lib='flexiblas-devel' + +# Create postremove script to remove empty directories, as nFPM doesn't include them in the RPM files. +cat <> /after-remove.sh +if [ -d ${R_INSTALL_PATH} ]; then + rm -r ${R_INSTALL_PATH} +fi +EOF + +scripts="scripts: + postremove: /after-remove.sh +" + +if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch + +cat < /tmp/nfpm.yml +name: R-${R_VERSION} +version: 1 +version_schema: none +arch: $(cat /tmp/arch) +release: 1 +maintainer: Posit Software, PBC +description: | + GNU R statistical computation and graphics system +vendor: Posit Software, PBC +homepage: https://www.r-project.org +license: GPLv2+ +depends: +- bzip2-devel +- gcc +- gcc-c++ +- gcc-gfortran +- libcurl-devel +- libicu-devel +- libSM +- libtiff +- libXmu +- libXt +- make +- ${blas_lib} +- pango +${pcre_libs} +- tcl +- tk +- unzip +- which +- xz-devel +- zip +- zlib-devel +contents: +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} +${scripts} +EOF + +nfpm package \ + -f /tmp/nfpm.yml \ + -p rpm \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/R-${R_VERSION}*.rpm | head -1) diff --git a/serverless-resources.yml b/serverless-resources.yml index caead53..143b403 100644 --- a/serverless-resources.yml +++ b/serverless-resources.yml @@ -297,6 +297,20 @@ rBuildsBatchJobDefinitionFedora39: Image: "#{AWS::AccountId}.dkr.ecr.#{AWS::Region}.amazonaws.com/r-builds:fedora-39" Timeout: AttemptDurationSeconds: 7200 +rBuildsBatchJobDefinitionFedora40: + 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:fedora-40" + Timeout: + AttemptDurationSeconds: 7200 # step function cloudwatch event trigger resources rBuildsEventRuleIamRole: diff --git a/serverless.yml b/serverless.yml index 987228d..12bdc93 100644 --- a/serverless.yml +++ b/serverless.yml @@ -79,7 +79,9 @@ provider: Ref: rBuildsBatchJobDefinitionFedora38 JOB_DEFINITION_ARN_fedora_39: Ref: rBuildsBatchJobDefinitionFedora39 - SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,ubuntu-2404,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-155,fedora-38,fedora-39 + JOB_DEFINITION_ARN_fedora_40: + Ref: rBuildsBatchJobDefinitionFedora40 + SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,ubuntu-2404,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-155,fedora-38,fedora-39,fedora-40 functions: queueBuilds: diff --git a/test/docker-compose.yml b/test/docker-compose.yml index 5b76974..7c11ff4 100644 --- a/test/docker-compose.yml +++ b/test/docker-compose.yml @@ -95,3 +95,11 @@ services: - R_VERSION=${R_VERSION} volumes: - ../:/r-builds + fedora-40: + image: fedora:40 + command: /r-builds/test/test-yum.sh + environment: + - OS_IDENTIFIER=fedora-40 + - R_VERSION=${R_VERSION} + volumes: + - ../:/r-builds From 43418b3aa6702688882e4f838ec01d39b93afc43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Cs=C3=A1rdi?= Date: Sun, 12 May 2024 14:22:12 +0200 Subject: [PATCH 2/2] Fedora 40: need util-linux-core for /usr/bin/more --- builder/package.fedora-40 | 1 + 1 file changed, 1 insertion(+) diff --git a/builder/package.fedora-40 b/builder/package.fedora-40 index 9a7151f..b05bab1 100644 --- a/builder/package.fedora-40 +++ b/builder/package.fedora-40 @@ -56,6 +56,7 @@ ${pcre_libs} - tcl - tk - unzip +- util-linux-core - which - xz-devel - zip