Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a SLES 15 SP6 / openSUSE 15.6 build #233

Merged
merged 6 commits into from
Aug 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
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
PLATFORMS := ubuntu-2004 ubuntu-2204 ubuntu-2404 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-155 opensuse-156 fedora-38 fedora-39 fedora-40
SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js

deps:
npm install

docker-build:
@cd builder && docker-compose build --parallel
@cd builder && docker compose build --parallel

AWS_ACCOUNT_ID:=$(shell aws sts get-caller-identity --output text --query 'Account')
AWS_REGION := us-east-1
Expand All @@ -16,13 +16,13 @@ docker-push: ecr-login docker-build
done

docker-down:
@cd builder && docker-compose down
@cd builder && docker compose down

docker-build-r: docker-build
@cd builder && docker-compose up
@cd builder && docker compose up

docker-shell-r-env:
@cd builder && docker-compose run --entrypoint /bin/bash ubuntu-2004
@cd builder && docker compose run --entrypoint /bin/bash ubuntu-2004

ecr-login:
(aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $(AWS_ACCOUNT_ID).dkr.ecr.$(AWS_REGION).amazonaws.com)
Expand All @@ -41,13 +41,13 @@ serverless-deploy.%: deps fetch-serverless-custom-file

define GEN_TARGETS
docker-build-$(platform):
@cd builder && docker-compose build $(platform)
@cd builder && docker compose build $(platform)

build-r-$(platform):
@cd builder && R_VERSION=$(R_VERSION) docker-compose run --rm $(platform)
@cd builder && R_VERSION=$(R_VERSION) docker compose run --rm $(platform)

test-r-$(platform):
@cd test && R_VERSION=$(R_VERSION) docker-compose run --rm $(platform)
@cd test && R_VERSION=$(R_VERSION) docker compose run --rm $(platform)

bash-$(platform):
docker run -it --rm --entrypoint /bin/bash -v $(CURDIR):/r-builds r-builds:$(platform)
Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ R binaries are built for the following Linux operating systems:
- CentOS 7
- Red Hat Enterprise Linux 7, 8, 9
- openSUSE 15.5
- openSUSE 15.6
- SUSE Linux Enterprise 15 SP5
- Fedora 39, 40

Expand Down Expand Up @@ -148,6 +149,9 @@ Download the rpm package:
```bash
# openSUSE 15.5 / SLES 15 SP5
curl -O https://cdn.posit.co/r/opensuse-155/pkgs/R-${R_VERSION}-1-1.x86_64.rpm

# openSUSE 15.6 / SLES 15 SP6
curl -O https://cdn.posit.co/r/opensuse-156/pkgs/R-${R_VERSION}-1-1.x86_64.rpm
```

Then install the package:
Expand Down
3 changes: 3 additions & 0 deletions builder/Dockerfile.centos-7
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ FROM centos:centos7

ENV OS_IDENTIFIER centos-7

# Use vault.centos.org since CentOS 7 is EOL and the official mirrors are no longer available
RUN sed -i -e 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/*

RUN yum -y update \
&& yum -y install \
autoconf \
Expand Down
105 changes: 105 additions & 0 deletions builder/Dockerfile.opensuse-156
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
FROM opensuse/leap:15.6

ENV OS_IDENTIFIER opensuse-156

# Most of these packages, and also the configure options that follow were determined
# by reviewing "R-base.spec" from the following OpenSUSE RPM:
# https://download.opensuse.org/repositories/devel:/languages:/R:/released/openSUSE_Leap_42.3/src/R-base-3.5.3-103.1.src.rpm

RUN zypper --non-interactive update
RUN zypper --non-interactive --gpg-auto-import-keys -n install \
bzip2 \
cairo-devel \
curl \
fdupes \
gcc \
gcc-c++ \
gcc-fortran \
glib2-devel \
glibc-locale \
help2man \
java-11-openjdk-devel \
libX11-devel \
libXScrnSaver-devel \
libXmu-devel \
libXt-devel \
libbz2-devel \
libcurl-devel \
# Like openSUSE/SLES 15.5, SUSE 15.6 ships with both ICU 65 (libicu-devel)
# and a later version; unlike 15.5, the later version is ICU 73
# (libicu73_2-devel). Prefer ICU 73 because the devel packages can't
# coexist, and zypper resolves libicu-devel to libicu73_2-devel when
# installing RPMs.
libicu73_2-devel \
Comment on lines +28 to +33
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

difference from 15.5

libjpeg-devel \
libpng-devel \
libtiff-devel \
make \
pango-devel \
pcre-devel \
pcre2-devel \
perl \
perl-macros \
readline-devel \
rpm-build \
shadow \
tcl-devel \
texinfo \
texlive-ae \
texlive-bibtex \
texlive-cm-super \
texlive-dvips \
texlive-fancyvrb \
texlive-helvetic \
texlive-inconsolata \
texlive-latex \
texlive-makeindex \
texlive-metafont \
texlive-psnfss \
texlive-tex \
texlive-times \
tk-devel \
unzip \
wget \
xdg-utils \
xorg-x11-devel \
xz-devel \
zip \
zlib-devel \
&& zypper clean

# 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" && \
zypper --non-interactive --no-gpg-checks install "nfpm_$(cat /tmp/arch).rpm" && \
rm "nfpm_$(cat /tmp/arch).rpm"

RUN chmod 0777 /opt

# Configure flags for SUSE that don't use the defaults in build.sh
ENV CONFIGURE_OPTIONS="\
--enable-R-shlib \
--with-tcltk \
--with-x \
--enable-memory-profiling \
--with-tcl-config=/usr/lib64/tclConfig.sh \
--with-tk-config=/usr/lib64/tkConfig.sh"

# Make sure that patching Java does not break R.
# On SUSE, the default JAVA_HOME path always uses the major Java version only,
# but the JDK path is chosen by default. We change this to the JRE path to
# support users who only want to install the JRE (non-devel) package.
# 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/lib64/jvm/jre-11-openjdk

COPY package.opensuse-156 /package.sh
COPY build.sh .
COPY patches /patches
ENTRYPOINT ./build.sh
12 changes: 12 additions & 0 deletions builder/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,18 @@ services:
image: r-builds:opensuse-155
volumes:
- ./integration/tmp:/tmp/output
opensuse-156:
command: ./build.sh
environment:
- R_VERSION=${R_VERSION}
- R_INSTALL_PATH=${R_INSTALL_PATH}
- LOCAL_STORE=/tmp/output
build:
context: .
dockerfile: Dockerfile.opensuse-156
image: r-builds:opensuse-156
volumes:
- ./integration/tmp:/tmp/output
fedora-38:
command: ./build.sh
environment:
Expand Down
100 changes: 100 additions & 0 deletions builder/package.opensuse-156
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
#!/bin/bash

if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then
mkdir -p "/tmp/output/${OS_IDENTIFIER}"
fi

# R 3.x requires PCRE1
pcre_lib='pcre2-devel'
if [[ "${R_VERSION}" =~ ^3 ]]; then
pcre_lib='pcre-devel'
fi

# Create post-install script required for OpenBLAS.
#
# On RHEL and SUSE, we link R against the internal shared BLAS to make the
# R binaries more portable and allow users to switch BLAS implementations without
# having to recompile R. We default to OpenBLAS, but users may prefer other implementations.
#
# Binary packages built against the shared BLAS are also more portable and may be used
# with the default R distributed by RHEL/SUSE, or other R installations using
# shared BLAS and configured with a different BLAS (such as Microsoft R Open with MKL).
# This is especially important for RSPM's binary packages.
#
# On Ubuntu/Debian, we link R against the external BLAS instead (--with-blas/--with-lapack),
# as those distributions use the alternatives system to swap BLAS libraries at runtime.
# The default R distributions on Ubuntu/Debian use the external BLAS, so we do as well
# for portability.
#
# https://cran.r-project.org/doc/manuals/r-release/R-admin.html#Shared-BLAS
cat <<EOF >> /post-install.sh
mv ${R_INSTALL_PATH}/lib/R/lib/libRblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so.keep
ln -s /usr/lib64/libopenblas.so ${R_INSTALL_PATH}/lib/R/lib/libRblas.so
EOF

# Create after-remove script to remove internal BLAS, which won't be cleaned up automatically.
cat <<EOF >> /after-remove.sh
if [ -d ${R_INSTALL_PATH} ]; then
rm -r ${R_INSTALL_PATH}
fi
EOF

if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch

cat <<EOF > /tmp/nfpm.yml
name: R-${R_VERSION}
version: 1
version_schema: none
arch: $(cat /tmp/arch)
release: 1
maintainer: Posit Software, PBC <https://github.com/rstudio/r-builds>
description: |
GNU R statistical computation and graphics system
vendor: Posit Software, PBC
homepage: https://www.r-project.org
license: GPLv2+
depends:
- fontconfig
- gcc
- gcc-c++
- gcc-fortran
- glibc-locale
- gzip
- libbz2-devel
- libcairo2
- libcurl-devel
- libfreetype6
- libgomp1
- libicu73_2-devel
- libjpeg62
- libopenblas_pthreads-devel
- libpango-1_0-0
- libreadline7
- libtiff6
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

difference from 15.5

- make
- ${pcre_lib}
- tar
- tcl
- tk
- unzip
- which
- xorg-x11
- xorg-x11-fonts-100dpi
- xorg-x11-fonts-75dpi
- xz-devel
- zip
- zlib-devel
contents:
- src: ${R_INSTALL_PATH}
dst: ${R_INSTALL_PATH}
scripts:
postinstall: /post-install.sh
postremove: /after-remove.sh
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)
6 changes: 4 additions & 2 deletions install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,9 @@ download_url () {
echo "${CDN_URL}/opensuse-42/pkgs/${name}"
;;
"LEAP15" | "SLES15")
if [ "${ver}" -ge 155 ]; then
if [ "${ver}" -ge 156 ]; then
echo "${CDN_URL}/opensuse-156/pkgs/${name}"
elif [ "${ver}" -ge 155 ]; then
echo "${CDN_URL}/opensuse-155/pkgs/${name}"
elif [ "${ver}" -eq 154 ]; then
echo "${CDN_URL}/opensuse-154/pkgs/${name}"
Expand Down Expand Up @@ -385,7 +387,7 @@ install_epel () {
${SUDO} yum install ${yes} https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
;;
"7")
${SUDO} yum install ${yes} https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
${SUDO} yum install ${yes} https://dl.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm
;;
"8")
;;
Expand Down
14 changes: 14 additions & 0 deletions serverless-resources.yml
Original file line number Diff line number Diff line change
Expand Up @@ -271,6 +271,20 @@ rBuildsBatchJobDefinitionOpensuse155:
Image: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/r-builds:opensuse-155"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionOpensuse156:
Type: AWS::Batch::JobDefinition
Properties:
Type: container
ContainerProperties:
Command:
- ./build.sh
Vcpus: 4
Memory: 4096
JobRoleArn:
"Fn::GetAtt": [ rBuildsEcsTaskIamRole, Arn ]
Image: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/r-builds:opensuse-156"
Timeout:
AttemptDurationSeconds: 7200
rBuildsBatchJobDefinitionFedora38:
Type: AWS::Batch::JobDefinition
Properties:
Expand Down
4 changes: 3 additions & 1 deletion serverless.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,15 @@ provider:
Ref: rBuildsBatchJobDefinitionRhel9
JOB_DEFINITION_ARN_opensuse_155:
Ref: rBuildsBatchJobDefinitionOpensuse155
JOB_DEFINITION_ARN_opensuse_156:
Ref: rBuildsBatchJobDefinitionOpensuse156
JOB_DEFINITION_ARN_fedora_38:
Ref: rBuildsBatchJobDefinitionFedora38
JOB_DEFINITION_ARN_fedora_39:
Ref: rBuildsBatchJobDefinitionFedora39
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
SUPPORTED_PLATFORMS: ubuntu-2004,ubuntu-2204,ubuntu-2404,debian-10,debian-11,debian-12,centos-7,centos-8,rhel-9,opensuse-155,opensuse-156,fedora-38,fedora-39,fedora-40

functions:
queueBuilds:
Expand Down
12 changes: 11 additions & 1 deletion test/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ services:
- ../:/r-builds
centos-7:
image: centos:centos7
command: /r-builds/test/test-yum.sh
command: |
/bin/bash -c 'sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/* &&
/r-builds/test/test-yum.sh'
environment:
- OS_IDENTIFIER=centos-7
- R_VERSION=${R_VERSION}
Expand Down Expand Up @@ -79,6 +81,14 @@ services:
- R_VERSION=${R_VERSION}
volumes:
- ../:/r-builds
opensuse-156:
image: opensuse/leap:15.6
command: /r-builds/test/test-zypper.sh
environment:
- OS_IDENTIFIER=opensuse-156
- R_VERSION=${R_VERSION}
volumes:
- ../:/r-builds
fedora-38:
image: fedora:38
command: /r-builds/test/test-yum.sh
Expand Down
Loading