r-builds/builder/package.alpine-320
pat-s a2a6a4f7ef
fix(alpine): declare xz-dev so R can start after a clean install
libR.so links against liblzma, but the Alpine package never declared a
dependency on it. The list carried `# - liblzma-dev`, the Debian name,
which does not exist on Alpine and so had been commented out rather than
translated. The result is a package that installs cleanly and then fails
on every invocation:

  Error loading shared library liblzma.so.5: No such file or directory
    (needed by /opt/R/4.6.1/lib/R/lib/libR.so)
  Error relocating /opt/R/4.6.1/lib/R/lib/libR.so: lzma_code: symbol not found

Replace it with xz-dev, the Alpine equivalent, which pulls xz-libs, the
package that owns liblzma.so.5. Keep the -dev variant to match every other
entry in the list, which are -dev so that CRAN packages can be installed
from source on the target.

Verified by repackaging the currently published r-4.6.1_1_aarch64.apk with
this dependency list and installing it into a clean alpine:3.22 container:
R now starts with no manually added packages, where before it did not.
2026-09-18 09:08:12 +02:00

77 lines
1.6 KiB
Shell

#!/bin/bash
if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then
mkdir -p "/tmp/output/${OS_IDENTIFIER}"
fi
# R 3.x requires PCRE1. On Ubuntu 24, R 3.x also requires PCRE2 for Pango support.
pcre_libs='- pcre2-dev'
if [[ "${R_VERSION}" =~ ^3 ]]; then
pcre_libs='- pcre2-dev
- libpcre3-dev'
fi
deflate_libs='# - libdeflate-dev'
if grep -q '^LIBS *=.*[-]ldeflate' ${R_INSTALL_PATH}/lib/R/etc/Makeconf; then
deflate_libs='- libdeflate-dev'
fi
cat <<EOF > /tmp/nfpm.yml
name: r-${R_VERSION}
version: 1
version_schema: none
section: universe/math
priority: optional
arch: $(arch)
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: GPL-2
depends:
- g++
- gcc
- gfortran
- libbz2
# - libc6
- cairo
- libcurl
${deflate_libs}
# - libglib2.0-0t64
# - libgomp1
- icu-dev
- jpeg-dev
# liblzma-dev is the Debian name and does not exist on Alpine; xz-dev is the
# equivalent and pulls xz-libs, which owns liblzma.so.5. Without it libR.so
# cannot relocate its lzma symbols and R fails to start at all.
- xz-dev
- openblas-dev
- pango
# - libpangocairo-1.0-0
- libpaper
${pcre_libs}
- libpng-dev
- readline-dev
- tcl
- tiff-dev
- libtirpc-dev
- tk
# - libx11-6
# - libxt6t64
- make
# - ucf
- unzip
- zip
- zlib-ng-dev
contents:
- src: ${R_INSTALL_PATH}
dst: ${R_INSTALL_PATH}
EOF
nfpm package \
-f /tmp/nfpm.yml \
-p apk \
-t "/tmp/output/${OS_IDENTIFIER}"
export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.apk | head -1)