conda-forge/conda-forge-pinning-feedstock

Use alma9 images on linux, while staying on 2.17 sysroot

h-vetinari opened this issue ยท 19 comments

Since it's taken us so long to upgrade from centOS 6 to 7, we'll very quickly find ourselves in a situation that we struggled with already some time ago (see discussion in this issue): a growing number of feedstocks will require a newer glibc, and our images should provide a new enough baseline version, so that the only thing that feedstocks need to actively override is c_stdlib_version (and thus the sysroot), but nothing else.

For example, google's "foundational" support matrix defines a lower bound of glibc 2.27, meaning that things like abseil/bazel/grpc/protobuf/re2 etc. will start beginning to rely on glibc features >2.17 in the near future (and even though it's not a google project, one of the baseline dependencies of that stack is starting to require it).

We can handle the c_stdlib_version in the migrators (like we did for macOS 10.13, before the conda-forge-wide baseline was lifted), but changing more than one key of the mega-zip involving the docker images is really painful, especially if CUDA is involved (example), so having the images be alma8 by default will be very helpful there.

To a lesser extent, it will also save us from run-time bugs in older glibc versions, like we had with some broken trigonometry functions in 2.12 (before the image moved to cos7 while the sysroot still stayed at 2.12).

There are other scenarios still where this is necessary, see the discussion here for example.

While it's already possible to use alma8 images, the main thing we're blocked is the lack of CDTs for alma 8 (pending conda-forge/cdt-builds#66), c.f. conda-forge/conda-forge.github.io#1941

This issue is for tracking this effort, and any other eventual tasks that need to be resolved before doing so.

It would be great if we could do this for aarch + cuda12 to start. But I think we should generally move the base image forward.

xref: https://github.com/conda-forge/pytorch-cpu-feedstock/blob/main/recipe/conda_build_config.yaml#L17

AFAIU the only remaining issue is the reduction of CDTs from cos7 to alma8; we should try to do a special "remove/replace CDTs" migration because breaking 100+ feedstocks is not really a good option, even if we provide a way to opt into the old images again.

Ah i see, the tk feedstock throws quite a thorn in the "rip out all the CDTs too".

Using alma8 images and using an up-to-date sysroot are two different problems. In order to change to alma8 images, we just need to check to see if all the requirements in recipe/yum_requirements.txt are available in the alma8 images.

It doesn't have to be an exhaustive check, but just a few feedstocks that use yum requirements to see if it really works.

Wonder if a smaller step would simply making it a bit easier for users to opt-in to using the newer images

Did a little exploration of this in PR: #6548

Likely needs more work, but maybe it is already useful for discussion/iteration at this stage

In order to change to alma8 images, we just need to check to see if all the requirements in recipe/yum_requirements.txt are available in the alma8 images.

So I took the content of all the yum_requirements.txt in conda-forge1. Many of them can be replaced (x11, mesa, alsa, various tool that we have packaged).

entries from
yum_reqirements.txt
is it still
necessary?
available
on alma8?
comment
alsa-lib โŒ โœ… use our alsa-lib
alsa-lib-devel โŒ โœ… use our alsa-lib
alsa-tools โ” โŒ
binutils โœ… โœ… used to bootstrap binutils
csh โ” โŒ there's tcsh in centos7/alma8, but I cannot find csh in either
chrpath โŒ โœ… used only on obsolete qt feedstock
dbus-devel โ” โœ…
dbus-libs โ” โœ…
dejavu-sans-mono-fonts โ” โœ… used only for pymor
ed โ” โœ… used only for bc
file โœ… โœ… used to bootstrap crosstool-ng
findutils โœ… โœ… used to bootstrap linux compilers and crosstool-ng
gcc-c++ โœ… โœ… used to bootstrap linux compilers and binutils
gcc-gfortran โœ… โœ… used to bootstrap linux compilers
gtk2 โŒ โœ… use our gtk2
gtk2-devel โŒ โœ… use our gtk2
gtk3 โŒ โœ… use our gtk3
gtk3-devel โŒ โœ… use our gtk3
gtkmm24 โ” โœ… use our gtkmm?
hatchling โŒ โŒ cannot find it in either centos7/alma8;
use our hatchling; only used for biosiglive
help2man โœ… โœ… used to bootstrap linux compilers
httpd-devel โ” โœ… only used for mod_wsgi
kernel-headers โŒ โœ… use our {{ cdt("kernel-headers") }}; only used for gdal
libglu1-mesa โŒ โœ… this is the Debian-style naming; RHEL-style has mesa-libGLU;
use our libglvnd{,-devel}
libglvnd-egl โŒ โœ… use our libglvnd{,-devel}
libglvnd-glx โŒ โœ… use our libglvnd{,-devel}
libglvnd-opengl โŒ โœ… use our libglvnd{,-devel}
libice โŒ โœ… use our xorg-libice
libice-devel โŒ โœ… use our xorg-libice
libselinux โœ… โœ…
libsm โŒ โœ… use our xorg-libsm
libsm-devel โŒ โœ… use our xorg-libsm
libudev โ” โŒ this is the Debian-style naming; we also have our own libudev
libudev-devel โ” โŒ this is the Debian-style naming; we also have our own libudev
libX11 โœ… โœ… use our xorg-libx11, but needed on python
libX11-devel โŒ โœ… use our xorg-libx11
libXau / libxau โœ… โœ… use our xorg-libxau, but needed on python
libXau-devel โŒ โœ… use our xorg-libxau
libxcb โœ… โœ… use our libxcb, but needed on python
libXcomposite โŒ โœ… use our xorg-libxcomposite
libXcomposite-devel โŒ โœ… use our xorg-libxcomposite
libXcursor โŒ โœ… use our xorg-libxcursor
libXcursor-devel โŒ โœ… use our xorg-libxcursor
libXdamage โŒ โœ… use our xorg-libxdamage
libXdmcp โŒ โœ… use our xorg-libxdmcp
libXdmcp-devel โŒ โœ… use our xorg-libxdmcp
libXext โŒ โœ… use our xorg-libxext
libXext-devel โŒ โœ… use our xorg-libxext
libXfixes โŒ โœ… use our xorg-libxfixes
libXi โŒ โœ… use our xorg-libxi
libXi-devel โŒ โœ… use our xorg-libxi
libXinerama โŒ โœ… use our xorg-libxinerama
libxkbcommon-x11 โŒ โœ… use our libxkbcommon
libXrandr โŒ โœ… use our xorg-libxrandr
libXrandr-devel โŒ โœ… use our xorg-libxrandr
libXrender โŒ โœ… use our xorg-libxrender
libXrender-devel โŒ โœ… use our xorg-libxrender
libXScrnSaver โŒ โœ… use our xorg-libxscrnsaver
libXScrnSaver-devel โŒ โœ… use our xorg-libxscrnsaver
libXt โŒ โœ… use our xorg-libxt
libXt-devel โŒ โœ… use our xorg-libxt
libXtst โŒ โœ… use our xorg-libxst
libXtst-devel โŒ โœ… use our xorg-libxst
libXxf86vm โŒ โœ… use our xorg-libxxf86vm
m4 โœ… โœ… used to bootstrap linux compilers
make โœ… โŒ there is make-latest / make43;
used to bootstrap our binutils and other infra
mesa-dri-drivers โŒ โœ… use our libglvnd{,-devel}
mesa-libEGL โŒ โœ… use our libglvnd{,-devel}
mesa-libEGL-devel โŒ โœ… use our libglvnd{,-devel}
mesa-libGL
mesa-libgl
โŒ โœ… use our libglvnd{,-devel}
mesa-libGL-devel โŒ โœ… use our libglvnd{,-devel}
mesa-libGLU โŒ โœ… use our libglvnd{,-devel}
mesa-libGLU-devel โŒ โœ… use our libglvnd{,-devel}
numactl โŒ โœ… use our numactl
numactl-devel โŒ โœ… use our numactl
patch โœ… โœ… used to bootstrap linux compilers
pciutils โ” โœ…
pciutils-devel โ” โœ…
pciutils-libs โ” โœ…
perl โŒ โœ… use our perl
pulseaudio-libs-devel โŒ โœ… use our pulseaudio; only used for pocketsphinx-python
python-docutils โŒ โŒ there's python3-docutils; but use our docutils;
only used for rdma-core
rsh โ” โŒ no idea what this is for
rsync โœ… โœ… used to bootstrap linux compilers
sed โœ… โœ… used to bootstrap linux compilers and crosstool-ng
systemd-devel โ” โœ… we have our own libsystemd
texinfo โœ… โœ… used to bootstrap our binutils
util-linux โŒ โœ… use our util-linux
wget โœ… โœ… used to bootstrap linux compilers
xauth โŒ โŒ doesn't exist on either centos7/alma8,
but xorg-x11-xauth exists in both; but use our xorg-xauth
xorg-x11-server-Xorg โ” โœ…
xorg-x11-server-Xvfb โ” โœ…

Footnotes

  1. probably. depends on whether the github search for that is truly exhaustive โ†ฉ

Thanks for pulling together this list Axel and going over it in today's call! ๐Ÿ™

Cleaned up the rdma-core case. It also uses systemd

What do we think about making a migrator? At least with X11, this seems essential given that gets pulled in all over the place. Though this may extend to other places

What do we think about making a migrator?

My understanding was that a migrator is not necessary. The yum_requirements will continue to work, and if CDTs end up missing they can be replaced with our own deps, or alternatively users set os_version: cos7 in their conda-forge.yml