Skip to content

🏗️ Self-contained manylinux tool installs for portable images #746

Description

@bschwedler

Self-contained (manylinux) tool installs for images whose payload gets
copied or mounted apart from the OS that built it.

Background

#577 adds install_manylinux() /
run_install_manylinux() to r.j2, downloading the self-contained R
tarball from cdn.posit.co/r/manylinux_2_34/ instead of the deb/RPM
package. It was originally written as a workaround for the RHEL 10 (UBI)
flexiblas-devel blocker (#575), but that blocker
is already fixed upstream (rstudio/r-builds#329, merged) and doesn't need
this workaround — posit-dev/images-package-manager#104 (the RHEL 10
consumer of these macros) has been closed accordingly.

The macros are still worth having for an unrelated reason: manylinux
tarballs bundle their own non-glibc runtime dependencies and only require
a minimum glibc version, which makes them safe to copy alone into a
scratch image — unlike a deb/RPM install, which dynamically links
against system libraries that live in the builder OS and are lost when
only /opt/<tool> is copied out. This matters concretely for
posit-dev/images-volumes, whose images are built FROM scratch and
mounted as Kubernetes image volumes into arbitrary other containers.

Goals

  • Land the r.j2 manylinux macros on their own merits (not tied to the
    RHEL 10 epic)
  • Switch images-volumes' r image to the manylinux tarball install
  • Add a runtime-portability check to images-volumes CI that catches this
    class of bug for all images in that repo (not just r), by executing
    each image's payload inside an unrelated, minimal container rather than
    inside its own builder stage
  • Resolve the equivalent gap found in images-volumes' quarto image:
    TinyTeX ships several Perl-script tools (tlmgr, latexmk, etc.) that
    require the full perl package, not just perl-base, which most
    minimal target containers only provide

Child issues

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    dockerRelated to container images we produceepicEpic level

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions