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 fromyum_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
-
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