From 12e45be2cabb4d53d5a348b906e66d059d373219 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Sun, 17 May 2026 15:47:36 +0000 Subject: [PATCH 1/4] nix-builder: switch to manylinux_2_28, dynamically link libstdc++ Before this change, we were ensuring manylinux_2_28 compliance by: * Building and linking against glibc 2.27 (there was no nixpkgs revision with 2.28). * Linking libstdc++ statically. Linking libstdc++ statically has turned out to be a pain point. If a kernel uses libstdc++ functionality that does some global initialization, the initialization of the dynamically-linked libstdc++ (e.g. through Torch) and the statically linked libstdc++ could conflict. One example is `std::regex`, which indirectly initializes some global code for locale handling. As an alternative, I explored just linking libstdc++ dynamically, which worked up to some point by avoiding certain C++ features. However gcc 13 moved the initialization of the standard stream objects into the shared library. As a result, library compiled with gcc 13 or later requires a libstdc++ that is newer than manylinux_2_28. The EL8 (RHEL, AlmaLinux, etc.) gcc toolset used in the manylinux_2_28 solves this by using EL8 libstdc++ and providing a static library that gets linked into a binary for newer C++ features. Since this is part of a fairly large patchset to gcc, it does not seem feasible to reproduce this easily in the Nix gcc derivations. So, instead, we repackage the gcc toolsets from AlmaLinux as Nix derivations in this change. This gives us a toolchain that is as close to the official manylinux_2_28 toolchain as possible. The packaged toolchains are exposed as a standard nixpkgs stdenv, so that they can be used with other Nix derivations (such as the Torch/tvm-ffi extensions). One exception is made in reproducing the toolchain and that is that we build glibc 2.28 ourselves. glibc carries the dynamic loader. The dynamic loader in AlmaLinux embeds FHS paths such as `/lib64`, which are not valid in Nix, and lead to linking errors since the library directory of e.g. `libc.so.6` cannot be found. By rebuilding glibc 2.28, we get a dynamic loader with the correct paths into the Nix store. --- .github/workflows/build_kernel.yaml | 1 + docs/source/_toctree.yml | 4 + docs/source/builder/design-nix-builder.md | 106 + examples/kernels/cpp20-symbols/build.toml | 16 + examples/kernels/cpp20-symbols/cpu/cpu.cpp | 18 + examples/kernels/cpp20-symbols/flake.nix | 17 + .../kernels/cpp20-symbols/tests/__init__.py | 0 .../cpp20-symbols/tests/test_cpp20_symbols.py | 17 + .../torch-ext/cpp20_symbols/__init__.py | 10 + .../cpp20-symbols/torch-ext/torch_binding.cpp | 13 + .../cpp20-symbols/torch-ext/torch_binding.h | 10 + examples/kernels/flake.nix | 7 +- .../templates/torch/torch-extension.cmake | 4 - .../templates/tvm_ffi/tvm-ffi-extension.cmake | 4 - .../src/pyproject/templates/utils.cmake | 6 +- nix-builder/lib/build.nix | 4 +- nix-builder/lib/cache.nix | 7 +- nix-builder/lib/deps.nix | 7 +- nix-builder/lib/extension/default.nix | 32 +- nix-builder/lib/extension/torch/arch.nix | 10 +- nix-builder/lib/extension/torch/no-arch.nix | 10 +- nix-builder/lib/extension/tvm-ffi/arch.nix | 10 +- nix-builder/overlay.nix | 35 +- nix-builder/pkgs/manylinux/components.nix | 10 + .../pkgs/manylinux/cuda-backend-stdenv.nix | 16 + nix-builder/pkgs/manylinux/default.nix | 40 + nix-builder/pkgs/manylinux/gcc-unwrapped.nix | 73 + nix-builder/pkgs/manylinux/generic.nix | 89 + .../glibc_2_28/allow-kernel-2.6.32.patch | 39 + .../pkgs/manylinux/glibc_2_28/common.nix | 272 ++ .../glibc_2_28/darwin-cross-build.patch | 103 + .../pkgs/manylinux/glibc_2_28/default.nix | 166 ++ .../dont-use-system-ld-so-cache.patch | 46 + .../dont-use-system-ld-so-preload.patch | 12 + .../fix-rpc-types-musl-conflicts.patch | 38 + .../manylinux/glibc_2_28/fix-x64-abi.patch | 35 + .../fix_path_attribute_in_getconf.patch | 6 + .../pkgs/manylinux/glibc_2_28/info.nix | 30 + .../manylinux/glibc_2_28/locales-builder.sh | 17 + .../pkgs/manylinux/glibc_2_28/locales.nix | 72 + .../pkgs/manylinux/glibc_2_28/multi.nix | 37 + .../glibc_2_28/nix-locale-archive.patch | 118 + .../manylinux/glibc_2_28/rpcgen-path.patch | 54 + .../manylinux-2.28-aarch64-metadata.json | 2390 ++++++++++++++++ .../manylinux-2.28-x86_64-metadata.json | 2455 +++++++++++++++++ nix-builder/pkgs/manylinux/overrides.nix | 226 ++ nix-builder/pkgs/manylinux/rhel2nix.py | 439 +++ nix-builder/pkgs/manylinux/stdenv.nix | 81 + .../pkgs/stdenv-glibc-2_27/default.nix | 81 - .../pkgs/xpu-packages/oneapi-torch-dev.nix | 10 +- nix-builder/pkgs/xpu-packages/sycl-tla.nix | 5 +- nix-builder/tests/Dockerfile.test-kernel | 4 +- nix-builder/tests/run-tests.sh | 5 + 53 files changed, 7180 insertions(+), 137 deletions(-) create mode 100644 docs/source/builder/design-nix-builder.md create mode 100644 examples/kernels/cpp20-symbols/build.toml create mode 100644 examples/kernels/cpp20-symbols/cpu/cpu.cpp create mode 100644 examples/kernels/cpp20-symbols/flake.nix create mode 100644 examples/kernels/cpp20-symbols/tests/__init__.py create mode 100644 examples/kernels/cpp20-symbols/tests/test_cpp20_symbols.py create mode 100644 examples/kernels/cpp20-symbols/torch-ext/cpp20_symbols/__init__.py create mode 100644 examples/kernels/cpp20-symbols/torch-ext/torch_binding.cpp create mode 100644 examples/kernels/cpp20-symbols/torch-ext/torch_binding.h create mode 100644 nix-builder/pkgs/manylinux/components.nix create mode 100644 nix-builder/pkgs/manylinux/cuda-backend-stdenv.nix create mode 100644 nix-builder/pkgs/manylinux/default.nix create mode 100644 nix-builder/pkgs/manylinux/gcc-unwrapped.nix create mode 100644 nix-builder/pkgs/manylinux/generic.nix create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/allow-kernel-2.6.32.patch create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/common.nix create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/darwin-cross-build.patch create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/default.nix create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/dont-use-system-ld-so-cache.patch create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/dont-use-system-ld-so-preload.patch create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/fix-rpc-types-musl-conflicts.patch create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/fix-x64-abi.patch create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/fix_path_attribute_in_getconf.patch create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/info.nix create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/locales-builder.sh create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/locales.nix create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/multi.nix create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/nix-locale-archive.patch create mode 100644 nix-builder/pkgs/manylinux/glibc_2_28/rpcgen-path.patch create mode 100644 nix-builder/pkgs/manylinux/manylinux-2.28-aarch64-metadata.json create mode 100644 nix-builder/pkgs/manylinux/manylinux-2.28-x86_64-metadata.json create mode 100644 nix-builder/pkgs/manylinux/overrides.nix create mode 100644 nix-builder/pkgs/manylinux/rhel2nix.py create mode 100644 nix-builder/pkgs/manylinux/stdenv.nix delete mode 100644 nix-builder/pkgs/stdenv-glibc-2_27/default.nix diff --git a/.github/workflows/build_kernel.yaml b/.github/workflows/build_kernel.yaml index da56ea91..2fdf30aa 100644 --- a/.github/workflows/build_kernel.yaml +++ b/.github/workflows/build_kernel.yaml @@ -50,6 +50,7 @@ jobs: name: built-kernels-${{ matrix.arch }} path: | activation-kernel + cpp20-symbols-kernel cutlass-gemm-kernel cutlass-gemm-tvm-ffi-kernel extra-data diff --git a/docs/source/_toctree.yml b/docs/source/_toctree.yml index bf506a67..00afadc3 100644 --- a/docs/source/_toctree.yml +++ b/docs/source/_toctree.yml @@ -66,3 +66,7 @@ - local: builder-cli title: Builder CLI Reference title: CLI Reference +- sections: + - local: builder/design-nix-builder + title: Nix Builder + title: Design diff --git a/docs/source/builder/design-nix-builder.md b/docs/source/builder/design-nix-builder.md new file mode 100644 index 00000000..3552adf4 --- /dev/null +++ b/docs/source/builder/design-nix-builder.md @@ -0,0 +1,106 @@ +# Nix Builder design + +## Introduction + +kernel-builder uses a Nix-based builder that orchestrates the build. The Nix +builder provides: + +- Reproducible evaluation. The same Nix builder version will always produce + the same derivations (build recipes). +- Largely reproducible builds by using a build sandbox that only has the + dependencies specified in a derivation. +- Seamless creation of different build environments (e.g. different Torch + and CUDA combinations). + +## Kernel build steps + +A kernel derivation builds a kernel in the following steps: + +1. Generate CMake files for the kernel using + `kernel-builder create-pyproject`. +2. Generate Ninja build files using CMake. +3. Build the kernel using Ninja. +4. Perform various checks on the compiled kernel, such as: + - Verify that the kernel only uses ABI3/`manylinux_2_28` symbols. + - Verify that the kernel can be loaded by the `kernels` Python package. +5. Strip runpaths (ELF-embedded library directories) from kernel binaries + to make the kernel distribution-independent. + +## manylinux_2_28 compatibility + +To achieve `manylinux_2_28` compatibility, kernels are built using a +toolchain similar to the `manylinux_2_28` Docker images. This toolchain +is based on the gcc toolsets from AlmaLinux 8. `manylinux_2_28` [uses +AlmaLinux 8 as its base](https://github.com/pypa/manylinux#manylinux_2_28-almalinux-8-based), +so we have to compile against the same glibc/libstdc++ versions to +ensure compatibility. + +We repackage the AlmaLinux 8 toolsets and libstdc++ as Nix derivations (see +the `nix-builder/packages/manylinux_2_28` source directory). Then we merge +various toolset packages to an unwrapped gcc that resembles unwrapped gcc in +nixpkgs. Finally, we wrap binutils and gcc to combine them into a stdenv. + +The stdenv does not reuse glibc from AlmaLinux, since its dynamic loader has +hardcoded FHS paths (`/lib64` etc.) that are not valid in Nix. Using this +dynamic loader results in linking errors, since the paths in the dynamic +loader are used as a last resort (to link glibc libraries). So, instead we +build our own glibc 2.28 package and use that. + +## The package set pattern + +We repackage various existing package sets as Nix derivations. For instance, +this is done for ROCm, XPU, and manylinux_2_28 packages. These package sets +all follow the same pattern: + +```nix +{ + lib, + callPackage, + newScope, + pkgs, +}: + +{ + packageMetadata, +}: + +let + inherit (lib.fixedPoints) extends composeManyExtensions; + + fixedPoint = final: { + inherit lib; + }; + composed = lib.composeManyExtensions [ + # Base package set. + (import ./components.nix { inherit packageMetadata; }) + + # Package-specific overrides. + (import ./overrides.nix) + + # Additional overlays that extend the package set. + (import ./some-overlay.nix) + ]; +in +lib.makeScope newScope (lib.extends composed fixedPoint) +``` + +We use a fixed point to build up the package set as a list of +[overlays](https://nixos.org/manual/nixpkgs/stable/#sec-overlays-definition). +This has various benefits. For instance, it allows us to refine the +package set incrementally and we can refer to the final versions of +packages in intermediate overlays. + +The package sets all use a similar list of overlays: + +- An initial overlay (`components.nix`) that applies a generic builder + to the package set metadata. The metadata typically comes from a Yum/DNF + repository that contains RPM packages.The generic builder will extract the + RPMs and move binaries, libraries, and headers to the right location. This + results in a set of Nix derivations that may or may not build. +- The next overlay (`overrides.nix`) fixes up derivations created by the + generic builder that do not build. Fixing the derivations typically consists + of adding missing dependencies and changing embedded FHS paths to Nix store + paths. +- Additional overlays with derivations that combine outputs from previous + overlays. One typical example are derivations that construct a full compiler + toolchain. diff --git a/examples/kernels/cpp20-symbols/build.toml b/examples/kernels/cpp20-symbols/build.toml new file mode 100644 index 00000000..515b47a2 --- /dev/null +++ b/examples/kernels/cpp20-symbols/build.toml @@ -0,0 +1,16 @@ +[general] +name = "cpp20-symbols" +version = 1 +license = "Apache-2.0" +backends = ["cpu"] + +[torch] +src = [ + "torch-ext/torch_binding.cpp", + "torch-ext/torch_binding.h", +] + +[kernel.cpp20_symbols_cpu] +backend = "cpu" +depends = ["torch"] +src = ["cpu/cpu.cpp"] diff --git a/examples/kernels/cpp20-symbols/cpu/cpu.cpp b/examples/kernels/cpp20-symbols/cpu/cpu.cpp new file mode 100644 index 00000000..cde2324f --- /dev/null +++ b/examples/kernels/cpp20-symbols/cpu/cpu.cpp @@ -0,0 +1,18 @@ +#include +#include +#include + +#include + +// std::to_chars(char*, char*, double) is a floating-point overload that +// requires GLIBCXX_3.4.29, introduced in GCC 11. We use this to verify +// that manylinux_2_28 kernels build correctly: the Red Hat toolset +// statically links the newer libstdc++ symbols that exceed the system +// GLIBCXX_3.4.25 ceiling of AlmaLinux 8 / RHEL 8. +torch::Tensor float_to_chars(torch::Tensor const &input) { + std::array buf; + auto [ptr, ec] = std::to_chars(buf.begin(), buf.end(), input.item()); + if (ec != std::errc{}) + throw std::runtime_error("to_chars failed"); + return input; +} diff --git a/examples/kernels/cpp20-symbols/flake.nix b/examples/kernels/cpp20-symbols/flake.nix new file mode 100644 index 00000000..ff0eb870 --- /dev/null +++ b/examples/kernels/cpp20-symbols/flake.nix @@ -0,0 +1,17 @@ +{ + description = "Flake for invalid-cpp-manylinux-symbols kernel"; + + inputs = { + kernel-builder.url = "path:../../.."; + }; + + outputs = + { + self, + kernel-builder, + }: + kernel-builder.lib.genKernelFlakeOutputs { + inherit self; + path = ./.; + }; +} diff --git a/examples/kernels/cpp20-symbols/tests/__init__.py b/examples/kernels/cpp20-symbols/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/examples/kernels/cpp20-symbols/tests/test_cpp20_symbols.py b/examples/kernels/cpp20-symbols/tests/test_cpp20_symbols.py new file mode 100644 index 00000000..c6b6ddca --- /dev/null +++ b/examples/kernels/cpp20-symbols/tests/test_cpp20_symbols.py @@ -0,0 +1,17 @@ +import cpp20_symbols +import pytest +import torch + + +@pytest.mark.kernels_ci +def test_float_to_chars_runs(): + x = torch.tensor([3.14], dtype=torch.float64) + out = cpp20_symbols.float_to_chars(x) + torch.testing.assert_close(out, x) + + +@pytest.mark.kernels_ci +def test_float_to_chars_float32(): + x = torch.tensor([2.71828], dtype=torch.float32) + out = cpp20_symbols.float_to_chars(x) + torch.testing.assert_close(out, x) diff --git a/examples/kernels/cpp20-symbols/torch-ext/cpp20_symbols/__init__.py b/examples/kernels/cpp20-symbols/torch-ext/cpp20_symbols/__init__.py new file mode 100644 index 00000000..17910de3 --- /dev/null +++ b/examples/kernels/cpp20-symbols/torch-ext/cpp20_symbols/__init__.py @@ -0,0 +1,10 @@ +import torch + +from ._ops import ops + + +def float_to_chars(input: torch.Tensor) -> torch.Tensor: + return ops.float_to_chars(input) + + +__all__ = ["float_to_chars"] diff --git a/examples/kernels/cpp20-symbols/torch-ext/torch_binding.cpp b/examples/kernels/cpp20-symbols/torch-ext/torch_binding.cpp new file mode 100644 index 00000000..86bcb2e9 --- /dev/null +++ b/examples/kernels/cpp20-symbols/torch-ext/torch_binding.cpp @@ -0,0 +1,13 @@ +#include + +#include "registration.h" +#include "torch_binding.h" + +TORCH_LIBRARY_EXPAND(TORCH_EXTENSION_NAME, ops) { + ops.def("float_to_chars(Tensor input) -> Tensor"); +#if defined(CPU_KERNEL) + ops.impl("float_to_chars", torch::kCPU, &float_to_chars); +#endif +} + +REGISTER_EXTENSION(TORCH_EXTENSION_NAME) diff --git a/examples/kernels/cpp20-symbols/torch-ext/torch_binding.h b/examples/kernels/cpp20-symbols/torch-ext/torch_binding.h new file mode 100644 index 00000000..d1c78d29 --- /dev/null +++ b/examples/kernels/cpp20-symbols/torch-ext/torch_binding.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +// Uses std::to_chars for floating-point, which requires GLIBCXX_3.4.29 +// (introduced in GCC 11). We use this to verify that manylinux_2_28 +// kernels build correctly: the Red Hat toolset statically links the newer +// libstdc++ symbols that exceed the system GLIBCXX_3.4.25 ceiling of +// AlmaLinux 8 / RHEL 8. +torch::Tensor float_to_chars(torch::Tensor const &input); diff --git a/examples/kernels/flake.nix b/examples/kernels/flake.nix index 3a3a204c..d84913d2 100644 --- a/examples/kernels/flake.nix +++ b/examples/kernels/flake.nix @@ -15,7 +15,7 @@ inherit (kernel-builder.inputs.nixpkgs) lib; cudaVersion = "cu126"; - torchVersion = "210"; + torchVersion = "211"; tvmFfiVersion = "01"; # All example kernels to build in CI. @@ -32,6 +32,11 @@ drv = sys: out: out.packages.${sys}.redistributable.${"torch${torchVersion}-cxx11-${cudaVersion}-${sys}"}; } + { + name = "cpp20-symbols-kernel"; + path = ./cpp20-symbols; + drv = sys: out: out.packages.${sys}.redistributable.${"torch${torchVersion}-cxx11-cpu-${sys}"}; + } { name = "relu-tvm-ffi-kernel"; path = ./relu-tvm-ffi; diff --git a/kernel-builder/src/pyproject/templates/torch/torch-extension.cmake b/kernel-builder/src/pyproject/templates/torch/torch-extension.cmake index 07682976..7e4be0f5 100644 --- a/kernel-builder/src/pyproject/templates/torch/torch-extension.cmake +++ b/kernel-builder/src/pyproject/templates/torch/torch-extension.cmake @@ -15,10 +15,6 @@ define_gpu_extension_target( USE_SABI 3 WITH_SOABI) -if(NOT (MSVC OR GPU_LANG STREQUAL "SYCL")) - target_link_options(${OPS_NAME} PRIVATE -static-libstdc++) -endif() - if(GPU_LANG STREQUAL "SYCL") target_link_options(${OPS_NAME} PRIVATE ${sycl_link_flags}) target_link_libraries(${OPS_NAME} PRIVATE dnnl) diff --git a/kernel-builder/src/pyproject/templates/tvm_ffi/tvm-ffi-extension.cmake b/kernel-builder/src/pyproject/templates/tvm_ffi/tvm-ffi-extension.cmake index d6290740..dbf96466 100644 --- a/kernel-builder/src/pyproject/templates/tvm_ffi/tvm-ffi-extension.cmake +++ b/kernel-builder/src/pyproject/templates/tvm_ffi/tvm-ffi-extension.cmake @@ -6,10 +6,6 @@ target_compile_definitions(${OPS_NAME} PRIVATE "-DTVM_FFI_EXTENSION_NAME=${OPS_NAME}") tvm_ffi_configure_target(${OPS_NAME}) -if(NOT (MSVC OR GPU_LANG STREQUAL "SYCL")) - target_link_options(${OPS_NAME} PRIVATE -static-libstdc++) -endif() - if(GPU_LANG STREQUAL "SYCL") target_link_options(${OPS_NAME} PRIVATE ${sycl_link_flags}) target_link_libraries(${OPS_NAME} PRIVATE dnnl) diff --git a/kernel-builder/src/pyproject/templates/utils.cmake b/kernel-builder/src/pyproject/templates/utils.cmake index 9a61a1d9..13e22005 100644 --- a/kernel-builder/src/pyproject/templates/utils.cmake +++ b/kernel-builder/src/pyproject/templates/utils.cmake @@ -612,7 +612,11 @@ function (define_gpu_extension_target GPU_MOD_NAME) endif() endif() - set_property(TARGET ${GPU_MOD_NAME} PROPERTY CXX_STANDARD 20) + if (TORCH_VERSION VERSION_LESS 2.12.0) + set_property(TARGET ${GPU_MOD_NAME} PROPERTY CXX_STANDARD 17) + else() + set_property(TARGET ${GPU_MOD_NAME} PROPERTY CXX_STANDARD 20) + endif() target_compile_options(${GPU_MOD_NAME} PRIVATE $<$:${GPU_COMPILE_FLAGS}>) diff --git a/nix-builder/lib/build.nix b/nix-builder/lib/build.nix index a5c73b69..2c4b9bfc 100644 --- a/nix-builder/lib/build.nix +++ b/nix-builder/lib/build.nix @@ -73,10 +73,9 @@ rec { ); extraDeps = let - inherit (import ./deps.nix { inherit lib pkgs torch; }) resolveCppDeps; kernelDeps = lib.unique (lib.flatten (lib.mapAttrsToList (_: kernel: kernel.depends) kernels)); in - resolveCppDeps kernelDeps; + extension.resolveCppDeps kernelDeps; # Use the mkSourceSet function to get the source src = mkSourceSet path; @@ -366,6 +365,7 @@ rec { ++ pythonCheckInputs ps ++ [ buildSet.torch + kernels pip pytest ] diff --git a/nix-builder/lib/cache.nix b/nix-builder/lib/cache.nix index 47bdf463..1888fc2a 100644 --- a/nix-builder/lib/cache.nix +++ b/nix-builder/lib/cache.nix @@ -16,6 +16,10 @@ buildSetOutputs = buildSet: with buildSet.pkgs; + let + isLinux = stdenv.hostPlatform.isLinux; + cudaSupport = config.cudaSupport; + in ( allOutputs buildSet.torch ++ lib.concatMap allOutputs buildSet.extension.extraBuildDeps @@ -27,7 +31,8 @@ ++ allOutputs python3.pkgs.kernels ++ allOutputs python3.pkgs.tvm-ffi ++ allOutputs ruff - ++ lib.optionals stdenv.hostPlatform.isLinux (allOutputs stdenvGlibc_2_27) + ++ lib.optionals (isLinux && cudaSupport) (allOutputs manylinux_2_28.cudaBackendStdenv) + ++ lib.optionals (isLinux && !config.cudaSupport) (allOutputs manylinux_2_28.stdenv) # Only works on recent CUDAs. ++ lib.optionals (!python3.pkgs.nvidia-cutlass-dsl.meta.broken) ( allOutputs python3.pkgs.nvidia-cutlass-dsl diff --git a/nix-builder/lib/deps.nix b/nix-builder/lib/deps.nix index ba003529..9ce7d373 100644 --- a/nix-builder/lib/deps.nix +++ b/nix-builder/lib/deps.nix @@ -1,6 +1,7 @@ { lib, pkgs, + stdenv, torch, }: @@ -27,9 +28,11 @@ let "torch" = [ torch ]; - "sycl_tla" = [ torch.xpuPackages.sycl-tla ]; + "sycl_tla" = [ + (torch.xpuPackages.sycl-tla.override { inherit stdenv; }) + ]; "metal-cpp" = [ - pkgs.metal-cpp.dev + (pkgs.metal-cpp.override { inherit stdenv; }).dev ]; }; diff --git a/nix-builder/lib/extension/default.nix b/nix-builder/lib/extension/default.nix index 02a9d884..286f6e02 100644 --- a/nix-builder/lib/extension/default.nix +++ b/nix-builder/lib/extension/default.nix @@ -1,12 +1,13 @@ { + cudaSupport ? torch.cudaSupport, rocmSupport ? torch.rocmSupport, xpuSupport ? torch.xpuSupport, pkgs, lib, callPackage, + manylinux_2_28, stdenv, - stdenvGlibc_2_27, cudaPackages, rocmPackages, writeScriptBin, @@ -16,7 +17,13 @@ }: let - effectiveStdenv = if stdenv.hostPlatform.isLinux then stdenvGlibc_2_27 else stdenv; + effectiveStdenv = + if stdenv.hostPlatform.isLinux && cudaSupport then + manylinux_2_28.cudaBackendStdenv + else if stdenv.hostPlatform.isLinux then + manylinux_2_28.stdenv + else + stdenv; # CLR that uses the provided stdenv, which can be different from the default # to support old glibc/libstdc++ versions. @@ -31,17 +38,7 @@ let ); cuda_nvcc = cudaPackages.cuda_nvcc.override { - backendStdenv = import ../../pkgs/cuda/backendStdenv { - inherit (pkgs) - _cuda - config - lib - pkgs - stdenvAdapters - ; - inherit (cudaPackages) cudaMajorMinorVersion; - stdenv = effectiveStdenv; - }; + backendStdenv = manylinux_2_28.cudaBackendStdenv; }; oneapi-torch-dev = xpuPackages.oneapi-torch-dev.override { stdenv = effectiveStdenv; }; @@ -49,6 +46,7 @@ let inherit oneapi-torch-dev; stdenv = effectiveStdenv; }; + in { extraBuildDeps = @@ -93,5 +91,13 @@ in mkTorchNoArchExtension = callPackage ./torch/no-arch.nix { inherit torch; }; + inherit + (import ../deps.nix { + inherit lib pkgs torch; + stdenv = effectiveStdenv; + }) + resolveCppDeps + ; + stdenv = effectiveStdenv; } diff --git a/nix-builder/lib/extension/torch/arch.nix b/nix-builder/lib/extension/torch/arch.nix index f7c64fac..cbc259ee 100644 --- a/nix-builder/lib/extension/torch/arch.nix +++ b/nix-builder/lib/extension/torch/arch.nix @@ -77,7 +77,15 @@ assert (buildConfig ? xpuVersion) -> xpuSupport; assert (buildConfig.metal or false) -> stdenv.hostPlatform.isDarwin; let - inherit (import ../../deps.nix { inherit lib pkgs torch; }) + inherit + (import ../../deps.nix { + inherit + lib + pkgs + stdenv + torch + ; + }) resolvePythonDeps resolveBackendPythonDeps ; diff --git a/nix-builder/lib/extension/torch/no-arch.nix b/nix-builder/lib/extension/torch/no-arch.nix index dfd5869d..2e58c8bd 100644 --- a/nix-builder/lib/extension/torch/no-arch.nix +++ b/nix-builder/lib/extension/torch/no-arch.nix @@ -48,7 +48,15 @@ assert (buildConfig ? xpuVersion) -> xpuSupport; assert (buildConfig.metal or false) -> stdenv.hostPlatform.isDarwin; let - inherit (import ../../deps.nix { inherit lib pkgs torch; }) + inherit + (import ../../deps.nix { + inherit + lib + pkgs + stdenv + torch + ; + }) resolvePythonDeps resolveBackendPythonDeps ; diff --git a/nix-builder/lib/extension/tvm-ffi/arch.nix b/nix-builder/lib/extension/tvm-ffi/arch.nix index 005fdd10..00eff3b8 100644 --- a/nix-builder/lib/extension/tvm-ffi/arch.nix +++ b/nix-builder/lib/extension/tvm-ffi/arch.nix @@ -77,7 +77,15 @@ assert (buildConfig ? xpuVersion) -> xpuSupport; assert (buildConfig.metal or false) -> stdenv.hostPlatform.isDarwin; let - inherit (import ../../deps.nix { inherit lib pkgs torch; }) + inherit + (import ../../deps.nix { + inherit + lib + pkgs + stdenv + torch + ; + }) resolvePythonDeps resolveBackendPythonDeps ; diff --git a/nix-builder/overlay.nix b/nix-builder/overlay.nix index a1a69755..389b1c7a 100644 --- a/nix-builder/overlay.nix +++ b/nix-builder/overlay.nix @@ -43,23 +43,6 @@ in } ); - stdenvGlibc_2_27 = import ./pkgs/stdenv-glibc-2_27 { - # Do not use callPackage, because we want overrides to apply to - # the stdenv itself and not this file. - inherit (final) - config - fetchFromGitHub - overrideCC - wrapBintoolsWith - wrapCCWith - gcc13Stdenv - stdenv - bintools-unwrapped - cudaPackages - libgcc - ; - }; - ucx = prev.ucx.overrideAttrs ( _: prevAttrs: { buildInputs = prevAttrs.buildInputs ++ [ final.cudaPackages.cuda_nvcc ]; @@ -229,6 +212,24 @@ in xpuPackages = final.xpuPackages_2025_3_1; } // (import ./pkgs/cutlass { pkgs = final; }) +// ( + let + flattenVersion = prev.lib.strings.replaceStrings [ "." ] [ "_" ]; + readPackageMetadata = path: (builtins.fromJSON (builtins.readFile path)); + versions = [ + "2.28" + ]; + newManyLinuxPackages = final.callPackage ./pkgs/manylinux { }; + in + builtins.listToAttrs ( + map (version: { + name = "manylinux_${flattenVersion (prev.lib.versions.majorMinor version)}"; + value = newManyLinuxPackages { + packageMetadata = readPackageMetadata ./pkgs/manylinux/manylinux-${version}-${prev.stdenv.hostPlatform.uname.processor}-metadata.json; + }; + }) versions + ) +) // ( let flattenVersion = prev.lib.strings.replaceStrings [ "." ] [ "_" ]; diff --git a/nix-builder/pkgs/manylinux/components.nix b/nix-builder/pkgs/manylinux/components.nix new file mode 100644 index 00000000..9b8288db --- /dev/null +++ b/nix-builder/pkgs/manylinux/components.nix @@ -0,0 +1,10 @@ +final: prev: + +prev.lib.mapAttrs ( + pname: metadata: + final.callPackage ./generic.nix { + inherit pname; + inherit (metadata) components deps version; + manylinuxPackages = final; + } +) prev.packageMetadata diff --git a/nix-builder/pkgs/manylinux/cuda-backend-stdenv.nix b/nix-builder/pkgs/manylinux/cuda-backend-stdenv.nix new file mode 100644 index 00000000..fe73161a --- /dev/null +++ b/nix-builder/pkgs/manylinux/cuda-backend-stdenv.nix @@ -0,0 +1,16 @@ +{ pkgs }: + +final: prev: { + cudaBackendStdenv = import ../cuda/backendStdenv { + inherit (pkgs) + _cuda + config + lib + stdenvAdapters + ; + inherit (pkgs.cudaPackages) cudaMajorMinorVersion; + # Allow auto-selection to use manylinux gcc versions. + pkgs = final; + stdenv = final.stdenv; + }; +} diff --git a/nix-builder/pkgs/manylinux/default.nix b/nix-builder/pkgs/manylinux/default.nix new file mode 100644 index 00000000..07aaa53b --- /dev/null +++ b/nix-builder/pkgs/manylinux/default.nix @@ -0,0 +1,40 @@ +{ + lib, + callPackage, + newScope, + pkgs, +}: + +{ + packageMetadata, +}: + +let + inherit (lib.fixedPoints) extends composeManyExtensions; + + fixedPoint = final: { + inherit lib packageMetadata; + }; + composed = lib.composeManyExtensions [ + # Base package set. + (import ./components.nix) + + # Package-specific overrides. + (import ./overrides.nix) + + # Unwrapped gcc (gcc13-unwrapped, gcc14-unwrapped, etc.) + (import ./gcc-unwrapped.nix) + + # stdenvs (gcc13Stdenv, gcc14Stdeng, etc.) + (import ./stdenv.nix { inherit pkgs; }) + + # Use the gcc14 stdenv by default. + (final: prev: { stdenv = final.gcc14Stdenv; }) + + # Create a CUDA stdenv that uses a gcc that is compatible with the + # CUDA version set as the default in nixpkgs. + (import ./cuda-backend-stdenv.nix { inherit pkgs; }) + + ]; +in +lib.makeScope newScope (lib.extends composed fixedPoint) diff --git a/nix-builder/pkgs/manylinux/gcc-unwrapped.nix b/nix-builder/pkgs/manylinux/gcc-unwrapped.nix new file mode 100644 index 00000000..f5685899 --- /dev/null +++ b/nix-builder/pkgs/manylinux/gcc-unwrapped.nix @@ -0,0 +1,73 @@ +final: prev: + +let + # Merge the AlmaLinux gcc packages into a single package that resembles + # a nixpkgs unwrapped gcc as much as possible. This allows us to use the + # standard gcc wrappers from nixpkgs. + mkGccUnwrapped = + { + lib, + stdenvNoCC, + + rsync, + + gcc-toolset-gcc, + gcc-toolset-gcc-cxx, + gcc-toolset-libstdcxx-devel, + glibc-headers, + kernel-headers, + libgcc, + libstdcxx, + }: + + let + gccMajor = lib.versions.major gcc-toolset-gcc.version; + in + + stdenvNoCC.mkDerivation { + pname = "gcc"; + version = gcc-toolset-gcc.version; + + nativeBuildInputs = [ rsync ]; + + dontUnpack = true; + + installPhase = '' + runHook preInstall + + mkdir $out + for path in ${gcc-toolset-gcc} ${gcc-toolset-gcc-cxx} ${gcc-toolset-libstdcxx-devel} ${glibc-headers} ${kernel-headers} ${libgcc} ${libstdcxx}; do + rsync --exclude=nix-support -a $path/ $out/ + done + + chmod -R u+w $out + + # Move around libraries to reflect what Nix expects for gccForLibs. + mv $out/lib/gcc/${stdenvNoCC.hostPlatform.uname.processor}-redhat-linux/${gccMajor}/{libstdc++*,libgcc_s*,libgomp*} $out/lib + + # Update linker script with Nix paths. + substituteInPlace $out/lib/libstdc++.so \ + --replace-fail "/usr/lib64/libstdc++.so.6" "$out/lib/libstdc++.so.6" + substituteInPlace $out/lib/libgcc_s.so \ + --replace-fail "/lib64/libgcc_s.so.1" "$out/lib/libgcc_s.so.1" + + runHook postInstall + ''; + }; +in + +builtins.listToAttrs ( + map + (version: { + name = "gcc${version}-unwrapped"; + value = final.callPackage mkGccUnwrapped { + gcc-toolset-gcc = final."gcc-toolset-${version}-gcc"; + gcc-toolset-gcc-cxx = final."gcc-toolset-${version}-gcc-cxx"; + gcc-toolset-libstdcxx-devel = final."gcc-toolset-${version}-libstdcxx-devel"; + }; + }) + [ + "13" + "14" + ] +) diff --git a/nix-builder/pkgs/manylinux/generic.nix b/nix-builder/pkgs/manylinux/generic.nix new file mode 100644 index 00000000..9ac6f60b --- /dev/null +++ b/nix-builder/pkgs/manylinux/generic.nix @@ -0,0 +1,89 @@ +{ + lib, + fetchurl, + rpmextract, + stdenvNoCC, + + autoPatchelfHook, + fakeroot, + + manylinuxPackages, + + pname, + version, + + # List of string-typed dependencies. + deps, + + # List of derivations that must be merged. + components, +}: + +let + srcs = map (component: fetchurl { inherit (component) url sha256; }) components; +in +stdenvNoCC.mkDerivation ( + finalAttrs: + let + filteredDeps = lib.filter (dep: !builtins.elem dep finalAttrs.passthru.filterDeps) deps; + in + { + inherit pname version srcs; + + nativeBuildInputs = [ + autoPatchelfHook + fakeroot + rpmextract + ]; + + buildInputs = map (dep: manylinuxPackages.${dep}) filteredDeps; + + # Extract RPM packages using rpmextract. The package set has some + # setuid/setgid binaries. Use fakeroot to avoid extraction errors. + unpackPhase = '' + for src in $srcs; do + fakeroot rpmextract "$src" + done + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out + + if [ -d opt/rh/gcc-toolset-13/root ]; then + root=opt/rh/gcc-toolset-13/root + elif [ -d opt/rh/gcc-toolset-14/root ]; then + root=opt/rh/gcc-toolset-14/root + else + root=. + fi + + for d in bin include lib lib64 libexec sbin usr/bin usr/include usr/lib usr/lib64 usr/libexec usr/sbin; do + if [ -d "$root/$d" -a ! -L "$root/$d" ]; then + cp -r $root/$d $out/ + fi + done + + rm -rf $out/lib/.build-id + + runHook postInstall + ''; + + dontStrip = true; + + passthru = { + # Dependencies to filter out, by their (string-typed) names. + filterDeps = [ "filesystem" ]; + }; + + meta = with lib; { + description = "AlmaLinux package for manylinux: ${pname}"; + homepage = "https://almalinux.org"; + platforms = platforms.linux; + sourceProvenance = with sourceTypes; [ + binaryNativeCode + ]; + }; + } +) diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/allow-kernel-2.6.32.patch b/nix-builder/pkgs/manylinux/glibc_2_28/allow-kernel-2.6.32.patch new file mode 100644 index 00000000..ce18b874 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/allow-kernel-2.6.32.patch @@ -0,0 +1,39 @@ +diff --git a/sysdeps/unix/sysv/linux/configure b/sysdeps/unix/sysv/linux/configure +index cace758c01..38fe7fe0b0 100644 +--- a/sysdeps/unix/sysv/linux/configure ++++ b/sysdeps/unix/sysv/linux/configure +@@ -69,7 +69,7 @@ fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for kernel header at least $minimum_kernel" >&5 + $as_echo_n "checking for kernel header at least $minimum_kernel... " >&6; } + decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`; +-abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`; ++abinum=`echo "2.6.32.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`; + cat confdefs.h - <<_ACEOF >conftest.$ac_ext + /* end confdefs.h. */ + #include +diff --git a/sysdeps/unix/sysv/linux/configure.ac b/sysdeps/unix/sysv/linux/configure.ac +index 13abda0a51..6abc12eaed 100644 +--- a/sysdeps/unix/sysv/linux/configure.ac ++++ b/sysdeps/unix/sysv/linux/configure.ac +@@ -50,7 +50,7 @@ fi + AC_MSG_CHECKING(for kernel header at least $minimum_kernel) + changequote(,)dnl + decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`; +-abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`; ++abinum=`echo "2.6.32.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`; + changequote([,])dnl + AC_TRY_COMPILE([#include + #if LINUX_VERSION_CODE < $decnum +diff --git a/sysdeps/unix/sysv/linux/dl-osinfo.h b/sysdeps/unix/sysv/linux/dl-osinfo.h +index 823cd8224d..482caaeeec 100644 +--- a/sysdeps/unix/sysv/linux/dl-osinfo.h ++++ b/sysdeps/unix/sysv/linux/dl-osinfo.h +@@ -39,7 +39,7 @@ + GLRO(dl_osversion) = version; \ + \ + /* Now we can test with the required version. */ \ +- if (__LINUX_KERNEL_VERSION > 0 && version < __LINUX_KERNEL_VERSION) \ ++ if (__LINUX_KERNEL_VERSION > 0 && version < __LINUX_KERNEL_VERSION && version != 0x020620) \ + /* Not sufficent. */ \ + FATAL ("FATAL: kernel too old\n"); \ + } \ diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/common.nix b/nix-builder/pkgs/manylinux/glibc_2_28/common.nix new file mode 100644 index 00000000..ef21db9f --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/common.nix @@ -0,0 +1,272 @@ +/* + Build configuration used to build glibc, Info files, and locale + information. + + Note that this derivation has multiple outputs and does not respect the + standard convention of putting the executables into the first output. The + first output is `lib` so that the libraries provided by this derivation + can be accessed directly, e.g. + + "${pkgs.glibc}/lib/ld-linux-x86_64.so.2" + + The executables are put into `bin` output and need to be referenced via + the `bin` attribute of the main package, e.g. + + "${pkgs.glibc.bin}/bin/ldd". + + The executables provided by glibc typically include `ldd`, `locale`, `iconv` + but the exact set depends on the library version and the configuration. +*/ + +{ + stdenv, + lib, + buildPackages, + fetchurl, + fetchpatch, + linuxHeaders ? null, + gd ? null, + libpng ? null, + bison, +}: + +{ + name, + withLinuxHeaders ? false, + profilingLibraries ? false, + withGd ? false, + meta, + ... +}@args: + +let + version = "2.28"; + patchSuffix = ""; + hash = "sha256-sZAAUa+tdvek9z5xQT30gm3OCF743beFqUW2bX1RMII="; +in + +assert withLinuxHeaders -> linuxHeaders != null; +assert withGd -> gd != null && libpng != null; + +stdenv.mkDerivation ( + { + inherit version; + linuxHeaders = if withLinuxHeaders then linuxHeaders else null; + + inherit (stdenv) is64bit; + + enableParallelBuilding = true; + + patches = [ + # Have rpcgen(1) look for cpp(1) in $PATH. + ./rpcgen-path.patch + + # Allow NixOS and Nix to handle the locale-archive. + ./nix-locale-archive.patch + + # Don't use /etc/ld.so.cache, for non-NixOS systems. + ./dont-use-system-ld-so-cache.patch + + # Don't use /etc/ld.so.preload, but /etc/ld-nix.so.preload. + ./dont-use-system-ld-so-preload.patch + + /* + The command "getconf CS_PATH" returns the default search path + "/bin:/usr/bin", which is inappropriate on NixOS machines. This + patch extends the search path by "/run/current-system/sw/bin". + */ + ./fix_path_attribute_in_getconf.patch + + /* + Allow running with RHEL 6 -like kernels. The patch adds an exception + for glibc to accept 2.6.32 and to tag the ELFs as 2.6.32-compatible + (otherwise the loader would refuse libc). + Note that glibc will fully work only on their heavily patched kernels + and we lose early mismatch detection on 2.6.32. + + On major glibc updates we should check that the patched kernel supports + all the required features. ATM it's verified up to glibc-2.26-131. + # HOWTO: check glibc sources for changes in kernel requirements + git log -p glibc-2.25.. sysdeps/unix/sysv/linux/x86_64/kernel-features.h sysdeps/unix/sysv/linux/kernel-features.h + # get kernel sources (update the URL) + mkdir tmp && cd tmp + curl http://vault.centos.org/6.9/os/Source/SPackages/kernel-2.6.32-696.el6.src.rpm | rpm2cpio - | cpio -idmv + tar xf linux-*.bz2 + # check syscall presence, for example + less linux-*?/arch/x86/kernel/syscall_table_32.S + */ + ./allow-kernel-2.6.32.patch + # Provide utf-8 locales by default, so we can use it in stdenv without depending on our large locale-archive. + (fetchurl { + url = "https://salsa.debian.org/glibc-team/glibc/raw/49767c9f7de4828220b691b29de0baf60d8a54ec/debian/patches/localedata/locale-C.diff"; + sha256 = "0irj60hs2i91ilwg5w7sqrxb695c93xg0ik7yhhq9irprd7fidn4"; + }) + ] + ++ lib.optionals stdenv.isx86_64 [ + ./fix-x64-abi.patch + ] + ++ lib.optional stdenv.hostPlatform.isMusl ./fix-rpc-types-musl-conflicts.patch + ++ lib.optional stdenv.buildPlatform.isDarwin ./darwin-cross-build.patch + + # Remove after upgrading to glibc 2.28+ + ++ + lib.optional (stdenv.hostPlatform != stdenv.buildPlatform || stdenv.hostPlatform.isMusl) + (fetchpatch { + url = "https://sourceware.org/git/?p=glibc.git;a=patch;h=780684eb04298977bc411ebca1eadeeba4877833"; + name = "correct-pwent-parsing-issue-and-resulting-build.patch"; + sha256 = "08fja894vzaj8phwfhsfik6jj2pbji7kypy3q8pgxvsd508zdv1q"; + excludes = [ "ChangeLog" ]; + }); + + postPatch = '' + # Needed for glibc to build with the gnumake 3.82 + # http://comments.gmane.org/gmane.linux.lfs.support/31227 + sed -i 's/ot \$/ot:\n\ttouch $@\n$/' manual/Makefile + + # nscd needs libgcc, and we don't want it dynamically linked + # because we don't want it to depend on bootstrap-tools libs. + echo "LDFLAGS-nscd += -static-libgcc" >> nscd/Makefile + ''; + + configureFlags = [ + "-C" + "--enable-add-ons" + "--enable-obsolete-nsl" + "--enable-obsolete-rpc" + "--sysconfdir=/etc" + "--enable-stackguard-randomization" + (lib.withFeatureAs withLinuxHeaders "headers" "${linuxHeaders}/include") + (lib.enableFeature profilingLibraries "profile") + ] + ++ lib.optionals withLinuxHeaders [ + "--enable-kernel=3.2.0" # can't get below with glibc >= 2.26 + ] + ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + (lib.flip lib.withFeature "fp" ( + stdenv.hostPlatform.platform.gcc.float or (stdenv.hostPlatform.parsed.abi.float or "hard") == "soft" + )) + "--with-__thread" + ] + ++ lib.optionals (stdenv.hostPlatform == stdenv.buildPlatform && stdenv.hostPlatform.isAarch32) [ + "--host=arm-linux-gnueabi" + "--build=arm-linux-gnueabi" + + # To avoid linking with -lgcc_s (dynamic link) + # so the glibc does not depend on its compiler store path + "libc_cv_as_needed=no" + ] + ++ lib.optional withGd "--with-gd"; + + installFlags = [ "sysconfdir=$(out)/etc" ]; + + outputs = [ + "out" + "bin" + "dev" + "static" + ]; + + depsBuildBuild = [ buildPackages.stdenv.cc ]; + nativeBuildInputs = [ bison ]; + buildInputs = [ + linuxHeaders + ] + ++ lib.optionals withGd [ + gd + libpng + ]; + + # Needed to install share/zoneinfo/zone.tab. Set to impure /bin/sh to + # prevent a retained dependency on the bootstrap tools in the stdenv-linux + # bootstrap. + BASH_SHELL = "/bin/sh"; + + passthru = { inherit version; }; + } + + // (removeAttrs args [ + "withLinuxHeaders" + "withGd" + ]) + // + + { + name = name + "-${version}${patchSuffix}"; + + src = fetchurl { + url = "mirror://gnu/glibc/glibc-${version}.tar.xz"; + inherit hash; + }; + + # Remove absolute paths from `configure' & co.; build out-of-tree. + preConfigure = '' + export PWD_P=$(type -tP pwd) + for i in configure io/ftwtest-sh; do + # Can't use substituteInPlace here because replace hasn't been + # built yet in the bootstrap. + sed -i "$i" -e "s^/bin/pwd^$PWD_P^g" + done + + mkdir ../build + cd ../build + + configureScript="`pwd`/../$sourceRoot/configure" + + ${lib.optionalString ( + stdenv.cc.libc != null + ) ''makeFlags="$makeFlags BUILD_LDFLAGS=-Wl,-rpath,${stdenv.cc.libc}/lib"''} + + + '' + + lib.optionalString (stdenv.hostPlatform != stdenv.buildPlatform) '' + sed -i s/-lgcc_eh//g "../$sourceRoot/Makeconfig" + + cat > config.cache << "EOF" + libc_cv_forced_unwind=yes + libc_cv_c_cleanup=yes + libc_cv_gnu89_inline=yes + EOF + ''; + + preBuild = lib.optionalString withGd "unset NIX_DONT_SET_RPATH"; + + # To avoid a dependency on the build system 'bash'. As can be seen + # below, this is normally only done when hostPlatform != buildPlatform, + # but since we only use glibc in stdenv we do not care about these + # utilities and it removes a dependency. + preFixup = '' + rm -f $bin/bin/{ldd,tzselect,catchsegv,xtrace,sotruss} + ''; + + doCheck = false; # fails + + meta = { + homepage = "https://www.gnu.org/software/libc/"; + description = "The GNU C Library"; + + longDescription = '' + Any Unix-like operating system needs a C library: the library which + defines the "system calls" and other basic facilities such as + open, malloc, printf, exit... + + The GNU C library is used as the C library in the GNU system and + most systems with the Linux kernel. + ''; + + license = lib.licenses.lgpl2Plus; + + maintainers = [ lib.maintainers.eelco ]; + platforms = lib.platforms.linux; + } + // meta; + } + + // lib.optionalAttrs (stdenv.hostPlatform != stdenv.buildPlatform) { + preInstall = null; # clobber the native hook + + # To avoid a dependency on the build system 'bash'. + preFixup = '' + rm -f $bin/bin/{ldd,tzselect,catchsegv,xtrace,sotruss} + ''; + } +) diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/darwin-cross-build.patch b/nix-builder/pkgs/manylinux/glibc_2_28/darwin-cross-build.patch new file mode 100644 index 00000000..7b224924 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/darwin-cross-build.patch @@ -0,0 +1,103 @@ +enable cross-compilation of glibc on Darwin (build=Darwin, host=Linux) +* increase ulimit for open files: macOS default of 256 is too low for glibc build system +* use host version of ar, which is given by environment variable +* build system uses stamp.os and stamp.oS files, which only differ in case; + this fails on macOS, so replace .oS with .o_S +* libintl.h does not exist (and is not needed) on macOS + +--- glibc-2.27/Makefile.in 2018-02-01 17:17:18.000000000 +0100 ++++ glibc-2.27/Makefile.in 2019-02-15 17:38:27.022965553 +0100 +@@ -6,9 +6,11 @@ + .PHONY: all install bench + + all .DEFAULT: +- $(MAKE) -r PARALLELMFLAGS="$(PARALLELMFLAGS)" -C $(srcdir) objdir=`pwd` $@ ++ ulimit -n 1024; \ ++ $(MAKE) -r AR=$$AR PARALLELMFLAGS="$(PARALLELMFLAGS)" -C $(srcdir) objdir=`pwd` $@ + + install: ++ ulimit -n 1024; \ + LC_ALL=C; export LC_ALL; \ + $(MAKE) -r PARALLELMFLAGS="$(PARALLELMFLAGS)" -C $(srcdir) objdir=`pwd` $@ + +--- glibc-2.27/Makerules 2018-02-01 17:17:18.000000000 +0100 ++++ glibc-2.27/Makerules 2019-02-15 17:43:11.196039000 +0100 +@@ -915,8 +915,8 @@ + ifndef objects + + # Create the stamp$o files to keep the parent makefile happy. +-subdir_lib: $(foreach o,$(object-suffixes-for-libc),$(objpfx)stamp$o) +-$(foreach o,$(object-suffixes-for-libc),$(objpfx)stamp$o): ++subdir_lib: $(foreach o,$(object-suffixes-for-libc),$(objpfx)stamp$(subst .oS,.o_S,$o)) ++$(foreach o,$(object-suffixes-for-libc),$(objpfx)stamp$(subst .oS,.o_S,$o)): + $(make-target-directory) + rm -f $@; > $@ + else +@@ -927,7 +927,7 @@ + # The parent will then actually add them all to the archive in the + # archive rule, below. + define o-iterator-doit +-$(objpfx)stamp$o: $(o-objects); $$(do-stamp) ++$(objpfx)stamp$(subst .oS,.o_S,$o): $(o-objects); $$(do-stamp) + endef + define do-stamp + $(make-target-directory) +@@ -943,14 +943,14 @@ + # on the stamp files built above. + define o-iterator-doit + $(common-objpfx)$(patsubst %,$(libtype$o),c): \ +- $(subdirs-stamp-o) $(common-objpfx)stamp$o; $$(do-makelib) ++ $(subdirs-stamp-o) $(common-objpfx)stamp$(subst .oS,.o_S,$o); $$(do-makelib) + endef + define do-makelib + cd $(common-objdir) && \ + $(AR) $(CREATE_ARFLAGS) $(@F) `cat $(patsubst $(common-objpfx)%,%,$^)` + endef + subdirs-stamps := $(foreach d,$(subdirs),$(common-objpfx)$d/stamp%) +-subdirs-stamp-o = $(subst %,$o,$(subdirs-stamps)) ++subdirs-stamp-o = $(subst %,$(subst .oS,.o_S,$o),$(subdirs-stamps)) + ifndef subdir + $(subdirs-stamps): subdir_lib; + endif +@@ -961,7 +961,7 @@ + # This makes all the object files. + .PHONY: objects objs libobjs extra-objs + objects objs: libobjs extra-objs +-libobjs: $(foreach o,$(object-suffixes-for-libc),$(objpfx)stamp$o) ++libobjs: $(foreach o,$(object-suffixes-for-libc),$(objpfx)stamp$(subst .oS,.o_S,$o)) + extra-objs: $(addprefix $(objpfx),$(extra-objs)) + + # Canned sequence for building an extra library archive. +@@ -1615,7 +1615,7 @@ + $(rmobjs) + define rmobjs + $(foreach o,$(object-suffixes-for-libc), +--rm -f $(objpfx)stamp$o $(o-objects)) ++-rm -f $(objpfx)stamp$(subst .oS,.o_S,$o) $(o-objects)) + endef + + # Also remove the dependencies and generated source files. +--- glibc-2.27/sunrpc/rpc_main.c 2019-02-15 17:32:43.710244513 +0100 ++++ glibc-2.27/sunrpc/rpc_main.c 2019-02-15 17:23:57.139617796 +0100 +@@ -38,7 +38,9 @@ + #include + #include + #include ++#ifndef __APPLE__ + #include ++#endif + #include + #include + #include +--- glibc-2.27/sunrpc/rpc_scan.c 2019-02-15 17:32:54.845490606 +0100 ++++ glibc-2.27/sunrpc/rpc_scan.c 2019-02-15 17:24:54.288066644 +0100 +@@ -37,7 +37,9 @@ + #include + #include + #include ++#ifndef __APPLE__ + #include ++#endif + #include "rpc_scan.h" + #include "rpc_parse.h" + #include "rpc_util.h" diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/default.nix b/nix-builder/pkgs/manylinux/glibc_2_28/default.nix new file mode 100644 index 00000000..e2bbd7b1 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/default.nix @@ -0,0 +1,166 @@ +{ + lib, + stdenv, + callPackage, + withLinuxHeaders ? true, + profilingLibraries ? false, + withGd ? false, + buildPackages, +}: + +let + gdCflags = [ + "-Wno-error=stringop-truncation" + "-Wno-error=missing-attributes" + "-Wno-error=array-bounds" + ]; +in + +callPackage ./common.nix { inherit stdenv; } { + name = "glibc" + lib.optionalString withGd "-gd"; + + inherit withLinuxHeaders profilingLibraries withGd; + + # Note: + # Things you write here override, and do not add to, + # the values in `common.nix`. + # (For example, if you define `patches = [...]` here, it will + # override the patches in `common.nix`.) + + NIX_NO_SELF_RPATH = true; + + postConfigure = '' + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + + export NIX_DONT_SET_RPATH=1 + unset CFLAGS + + # Apparently --bindir is not respected. + makeFlagsArray+=("bindir=$bin/bin" "sbindir=$bin/sbin" "rootsbindir=$bin/sbin") + ''; + + # The stackprotector and fortify hardening flags are autodetected by glibc + # and enabled by default if supported. Setting it for every gcc invocation + # does not work. + hardeningDisable = [ + "stackprotector" + "fortify" + ] + # XXX: Not actually musl-speciic but since only musl enables pie by default, + # limit rebuilds by only disabling pie w/musl + ++ lib.optional stdenv.hostPlatform.isMusl "pie"; + + NIX_CFLAGS_COMPILE = lib.concatStringsSep " " ( + builtins.concatLists [ + (lib.optionals withGd gdCflags) + # Fix -Werror build failure when building glibc with musl with GCC >= 8, see: + # https://github.com/NixOS/nixpkgs/pull/68244#issuecomment-544307798 + (lib.optional stdenv.hostPlatform.isMusl "-Wno-error=attribute-alias") + (lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ + # Ignore "error: '__EI___errno_location' specifies less restrictive attributes than its target '__errno_location'" + # New warning as of GCC 9 + "-Wno-error=missing-attributes" + ]) + ] + ); + + # When building glibc from bootstrap-tools, we need libgcc_s at RPATH for + # any program we run, because the gcc will have been placed at a new + # store path than that determined when built (as a source for the + # bootstrap-tools tarball) + # Building from a proper gcc staying in the path where it was installed, + # libgcc_s will not be at {gcc}/lib, and gcc's libgcc will be found without + # any special hack. + preInstall = '' + if [ -f ${stdenv.cc.cc}/lib/libgcc_s.so.1 ]; then + mkdir -p $out/lib + cp ${stdenv.cc.cc}/lib/libgcc_s.so.1 $out/lib/libgcc_s.so.1 + # the .so It used to be a symlink, but now it is a script + cp -a ${stdenv.cc.cc}/lib/libgcc_s.so $out/lib/libgcc_s.so + fi + ''; + + postInstall = + ( + if stdenv.hostPlatform == stdenv.buildPlatform then + '' + echo SUPPORTED-LOCALES=C.UTF-8/UTF-8 > ../glibc-2*/localedata/SUPPORTED + make -j''${NIX_BUILD_CORES:-1} -l''${NIX_BUILD_CORES:-1} localedata/install-locales + '' + else + lib.optionalString stdenv.buildPlatform.isLinux '' + # This is based on http://www.linuxfromscratch.org/lfs/view/development/chapter06/glibc.html + # Instead of using their patch to build a build-native localedef, + # we simply use the one from buildPackages + pushd ../glibc-2*/localedata + export I18NPATH=$PWD GCONV_PATH=$PWD/../iconvdata + mkdir -p $NIX_BUILD_TOP/${buildPackages.glibc}/lib/locale + ${lib.getBin buildPackages.glibc}/bin/localedef \ + --alias-file=../intl/locale.alias \ + -i locales/C \ + -f charmaps/UTF-8 \ + --prefix $NIX_BUILD_TOP \ + ${ + if stdenv.hostPlatform.parsed.cpu.significantByte.name == "littleEndian" then + "--little-endian" + else + "--big-endian" + } \ + C.UTF-8 + cp -r $NIX_BUILD_TOP/${buildPackages.glibc}/lib/locale $out/lib + popd + '' + ) + + '' + + test -f $out/etc/ld.so.cache && rm $out/etc/ld.so.cache + + if test -n "$linuxHeaders"; then + # Include the Linux kernel headers in Glibc, except the `scsi' + # subdirectory, which Glibc provides itself. + (cd $dev/include && \ + ln -sv $(ls -d $linuxHeaders/include/* | grep -v scsi\$) .) + fi + + # Fix for NIXOS-54 (ldd not working on x86_64). Make a symlink + # "lib64" to "lib". + if test -n "$is64bit"; then + ln -s lib $out/lib64 + fi + + # Get rid of more unnecessary stuff. + rm -rf $out/var $bin/bin/sln + '' + # For some reason these aren't stripped otherwise and retain reference + # to bootstrap-tools; on cross-arm this stripping would break objects. + + lib.optionalString (stdenv.hostPlatform == stdenv.buildPlatform) '' + + for i in "$out"/lib/*.a; do + [ "$i" = "$out/lib/libm.a" ] || $STRIP -S "$i" + done + '' + + '' + + # Put libraries for static linking in a separate output. Note + # that libc_nonshared.a and libpthread_nonshared.a are required + # for dynamically-linked applications. + mkdir -p $static/lib + mv $out/lib/*.a $static/lib + mv $static/lib/lib*_nonshared.a $out/lib + # Some of *.a files are linker scripts where moving broke the paths. + sed "/^GROUP/s|$out/lib/lib|$static/lib/lib|g" \ + -i "$static"/lib/*.a + + # Work around a Nix bug: hard links across outputs cause a build failure. + cp $bin/bin/getconf $bin/bin/getconf_ + mv $bin/bin/getconf_ $bin/bin/getconf + ''; + + separateDebugInfo = true; + + meta.description = "The GNU C Library"; +} diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/dont-use-system-ld-so-cache.patch b/nix-builder/pkgs/manylinux/glibc_2_28/dont-use-system-ld-so-cache.patch new file mode 100644 index 00000000..f84b1049 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/dont-use-system-ld-so-cache.patch @@ -0,0 +1,46 @@ +diff -Naur glibc-2.27-orig/elf/ldconfig.c glibc-2.27/elf/ldconfig.c +--- glibc-2.27-orig/elf/ldconfig.c 2018-02-01 11:17:18.000000000 -0500 ++++ glibc-2.27/elf/ldconfig.c 2018-02-17 22:43:17.232175182 -0500 +@@ -51,7 +51,7 @@ + #endif + + #ifndef LD_SO_CONF +-# define LD_SO_CONF SYSCONFDIR "/ld.so.conf" ++# define LD_SO_CONF PREFIX "/etc/ld.so.conf" + #endif + + /* Get libc version number. */ +diff -Naur glibc-2.27-orig/elf/Makefile glibc-2.27/elf/Makefile +--- glibc-2.27-orig/elf/Makefile 2018-02-01 11:17:18.000000000 -0500 ++++ glibc-2.27/elf/Makefile 2018-02-17 22:44:50.334006750 -0500 +@@ -559,13 +559,13 @@ + + $(objpfx)ldconfig: $(ldconfig-modules:%=$(objpfx)%.o) + +-SYSCONF-FLAGS := -D'SYSCONFDIR="$(sysconfdir)"' +-CFLAGS-ldconfig.c += $(SYSCONF-FLAGS) -D'LIBDIR="$(libdir)"' \ ++PREFIX-FLAGS := -D'PREFIX="$(prefix)"' ++CFLAGS-ldconfig.c += $(PREFIX-FLAGS) -D'LIBDIR="$(libdir)"' \ + -D'SLIBDIR="$(slibdir)"' + libof-ldconfig = ldconfig +-CFLAGS-dl-cache.c += $(SYSCONF-FLAGS) +-CFLAGS-cache.c += $(SYSCONF-FLAGS) +-CFLAGS-rtld.c += $(SYSCONF-FLAGS) ++CFLAGS-dl-cache.c += $(PREFIX-FLAGS) ++CFLAGS-cache.c += $(PREFIX-FLAGS) ++CFLAGS-rtld.c += $(PREFIX-FLAGS) + + cpp-srcs-left := $(all-rtld-routines:=.os) + lib := rtld +diff -Naur glibc-2.27-orig/sysdeps/generic/dl-cache.h glibc-2.27/sysdeps/generic/dl-cache.h +--- glibc-2.27-orig/sysdeps/generic/dl-cache.h 2018-02-01 11:17:18.000000000 -0500 ++++ glibc-2.27/sysdeps/generic/dl-cache.h 2018-02-17 22:45:20.471598816 -0500 +@@ -28,7 +28,7 @@ + #endif + + #ifndef LD_SO_CACHE +-# define LD_SO_CACHE SYSCONFDIR "/ld.so.cache" ++# define LD_SO_CACHE PREFIX "/etc/ld.so.cache" + #endif + + #ifndef add_system_dir diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/dont-use-system-ld-so-preload.patch b/nix-builder/pkgs/manylinux/glibc_2_28/dont-use-system-ld-so-preload.patch new file mode 100644 index 00000000..894e2a11 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/dont-use-system-ld-so-preload.patch @@ -0,0 +1,12 @@ +diff -ru glibc-2.20-orig/elf/rtld.c glibc-2.20/elf/rtld.c +--- glibc-2.20-orig/elf/rtld.c 2014-09-07 10:09:09.000000000 +0200 ++++ glibc-2.20/elf/rtld.c 2014-10-27 11:32:25.203043157 +0100 +@@ -1513,7 +1513,7 @@ + open(). So we do this first. If it succeeds we do almost twice + the work but this does not matter, since it is not for production + use. */ +- static const char preload_file[] = "/etc/ld.so.preload"; ++ static const char preload_file[] = "/etc/ld-nix.so.preload"; + if (__glibc_unlikely (__access (preload_file, R_OK) == 0)) + { + /* Read the contents of the file. */ diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/fix-rpc-types-musl-conflicts.patch b/nix-builder/pkgs/manylinux/glibc_2_28/fix-rpc-types-musl-conflicts.patch new file mode 100644 index 00000000..19f8bfc7 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/fix-rpc-types-musl-conflicts.patch @@ -0,0 +1,38 @@ +@@ -, +, @@ +--- + sunrpc/rpc/types.h | 22 ++++++---------------- + 1 file changed, 6 insertions(+), 16 deletions(-) +--- a/sunrpc/rpc/types.h ++++ a/sunrpc/rpc/types.h +@@ -69,24 +69,14 @@ typedef unsigned long rpcport_t; + #include + #endif + +-#if defined __APPLE_CC__ || defined __FreeBSD__ +-# define __u_char_defined +-# define __daddr_t_defined +-#endif +- +-#ifndef __u_char_defined +-typedef __u_char u_char; +-typedef __u_short u_short; +-typedef __u_int u_int; +-typedef __u_long u_long; +-typedef __quad_t quad_t; +-typedef __u_quad_t u_quad_t; +-typedef __fsid_t fsid_t; ++/* IMPORTANT NOTE: This has been modified to build against the musl C ++ * library and it probably now ONLY builds with the musl C library. ++ * ++ * See: https://sourceware.org/bugzilla/show_bug.cgi?id=21604 ++ */ + # define __u_char_defined +-#endif + #ifndef __daddr_t_defined +-typedef __daddr_t daddr_t; +-typedef __caddr_t caddr_t; ++typedef int daddr_t; + # define __daddr_t_defined + #endif + +-- diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/fix-x64-abi.patch b/nix-builder/pkgs/manylinux/glibc_2_28/fix-x64-abi.patch new file mode 100644 index 00000000..1d60dcd7 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/fix-x64-abi.patch @@ -0,0 +1,35 @@ +From 3288c6da64add3b4561b8c10fff522027caea01c Mon Sep 17 00:00:00 2001 +From: Nicholas Miell +Date: Sat, 17 Jun 2017 18:21:07 -0700 +Subject: [PATCH] Align the stack on entry to __tls_get_addr() + +Old versions of gcc (4 & 5) didn't align the stack according to the +AMD64 psABI when calling __tls_get_addr(). Apparently new versions of +gcc (7) got much more aggressive about vectorizing and generating MOVAPS +instructions, which means old binaries built with the buggy versions of +gcc are much more likely to crash when using versions of glibc built +using gcc 7. + +For example, a large number of Linux games built using the Unity game +engine and available for purchase on Steam. +--- + elf/dl-tls.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/elf/dl-tls.c b/elf/dl-tls.c +index 5aba33b3fa..3f3cb917de 100644 +--- a/elf/dl-tls.c ++++ b/elf/dl-tls.c +@@ -827,6 +827,10 @@ rtld_hidden_proto (__tls_get_addr) + rtld_hidden_def (__tls_get_addr) + #endif + ++#ifdef __x86_64__ ++/* Old versions of gcc didn't align the stack. */ ++__attribute__((force_align_arg_pointer)) ++#endif + /* The generic dynamic and local dynamic model cannot be used in + statically linked applications. */ + void * +-- +2.13.0 diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/fix_path_attribute_in_getconf.patch b/nix-builder/pkgs/manylinux/glibc_2_28/fix_path_attribute_in_getconf.patch new file mode 100644 index 00000000..714e49db --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/fix_path_attribute_in_getconf.patch @@ -0,0 +1,6 @@ +diff -ubr glibc-2.17-orig/sysdeps/unix/confstr.h glibc-2.17/sysdeps/unix/confstr.h +--- glibc-2.17-orig/sysdeps/unix/confstr.h 2013-06-03 22:01:44.829726968 +0200 ++++ glibc-2.17/sysdeps/unix/confstr.h 2013-06-03 22:04:39.469376740 +0200 +@@ -1 +1 @@ +-#define CS_PATH "/bin:/usr/bin" ++#define CS_PATH "/run/current-system/sw/bin:/bin:/usr/bin" diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/info.nix b/nix-builder/pkgs/manylinux/glibc_2_28/info.nix new file mode 100644 index 00000000..bf5fc6b0 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/info.nix @@ -0,0 +1,30 @@ +{ + callPackage, + texinfo, + perl, +}: + +callPackage ./common.nix { } { + name = "glibc-info"; + + outputs = [ "out" ]; + + configureFlags = [ "--enable-add-ons" ]; + + buildInputs = [ + texinfo + perl + ]; + + buildPhase = "make info"; + + # I don't know why the info is not generated in 'build' + # Somehow building the info still does not work, because the final + # libc.info hasn't a Top node. + installPhase = '' + mkdir -p "$out/share/info" + cp -v "manual/"*.info* "$out/share/info" + ''; + + meta.description = "GNU Info manual of the GNU C Library"; +} diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/locales-builder.sh b/nix-builder/pkgs/manylinux/glibc_2_28/locales-builder.sh new file mode 100644 index 00000000..d732e208 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/locales-builder.sh @@ -0,0 +1,17 @@ +# Glibc cannot have itself in its RPATH. +export NIX_NO_SELF_RPATH=1 + +source $stdenv/setup + +postConfigure() { + # Hack: get rid of the `-static' flag set by the bootstrap stdenv. + # This has to be done *after* `configure' because it builds some + # test binaries. + export NIX_CFLAGS_LINK= + export NIX_LDFLAGS_BEFORE= + + export NIX_DONT_SET_RPATH=1 + unset CFLAGS +} + +genericBuild diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/locales.nix b/nix-builder/pkgs/manylinux/glibc_2_28/locales.nix new file mode 100644 index 00000000..b91df026 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/locales.nix @@ -0,0 +1,72 @@ +/* + This function builds just the `lib/locale/locale-archive' file from + Glibc and nothing else. If `allLocales' is true, all supported + locales are included; otherwise, just the locales listed in + `locales'. See localedata/SUPPORTED in the Glibc source tree for + the list of all supported locales: + https://sourceware.org/git/?p=glibc.git;a=blob;f=localedata/SUPPORTED +*/ + +{ + stdenv, + buildPackages, + callPackage, + writeText, + allLocales ? true, + locales ? [ "en_US.UTF-8/UTF-8" ], +}: + +callPackage ./common.nix { inherit stdenv; } { + name = "glibc-locales"; + + builder = ./locales-builder.sh; + + outputs = [ "out" ]; + + # Awful hack: `localedef' doesn't allow the path to `locale-archive' + # to be overriden, but you *can* specify a prefix, i.e. it will use + # //lib/locale/locale-archive. So we use + # $TMPDIR as a prefix, meaning that the locale-archive is placed in + # $TMPDIR/nix/store/...-glibc-.../lib/locale/locale-archive. + buildPhase = '' + mkdir -p $TMPDIR/"${buildPackages.stdenv.cc.libc.out}/lib/locale" + + echo 'C.UTF-8/UTF-8 \' >> ../glibc-2*/localedata/SUPPORTED + + # Hack to allow building of the locales (needed since glibc-2.12) + sed -i -e 's,^$(rtld-prefix) $(common-objpfx)locale/localedef,localedef --prefix='$TMPDIR',' ../glibc-2*/localedata/Makefile + '' + + stdenv.lib.optionalString (!allLocales) '' + # Check that all locales to be built are supported + echo -n '${stdenv.lib.concatMapStrings (s: s + " \\\n") locales}' \ + | sort > locales-to-build.txt + cat ../glibc-2*/localedata/SUPPORTED | grep ' \\' \ + | sort > locales-supported.txt + comm -13 locales-supported.txt locales-to-build.txt \ + > locales-unsupported.txt + if [[ $(wc -c locales-unsupported.txt) != "0 locales-unsupported.txt" ]]; then + cat locales-supported.txt + echo "Error: unsupported locales detected:" + cat locales-unsupported.txt + echo "You should choose from the list above the error." + false + fi + + echo SUPPORTED-LOCALES='${toString locales}' > ../glibc-2*/localedata/SUPPORTED + '' + + '' + make localedata/install-locales \ + localedir=$out/lib/locale \ + ''; + + installPhase = '' + mkdir -p "$out/lib/locale" + cp -v "$TMPDIR/$NIX_STORE/"*"/lib/locale/locale-archive" "$out/lib/locale" + ''; + + setupHook = writeText "locales-setup-hook.sh" '' + export LOCALE_ARCHIVE=@out@/lib/locale/locale-archive + ''; + + meta.description = "Locale information for the GNU C Library"; +} diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/multi.nix b/nix-builder/pkgs/manylinux/glibc_2_28/multi.nix new file mode 100644 index 00000000..e30845d0 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/multi.nix @@ -0,0 +1,37 @@ +{ + runCommand, + glibc, + glibc32, +}: + +let + nameVersion = builtins.parseDrvName glibc.name; + glibc64 = glibc; +in +runCommand "${nameVersion.name}-multi-${nameVersion.version}" + { + outputs = [ + "bin" + "dev" + "out" + ]; + } # TODO: no static version here (yet) + '' + mkdir -p "$out/lib" + ln -s '${glibc64.out}'/lib/* "$out/lib" + ln -s '${glibc32.out}/lib' "$out/lib/32" + ln -s lib "$out/lib64" + + # fixing ldd RLTDLIST + mkdir -p "$bin/bin" + cp -s '${glibc64.bin}'/bin/* "$bin/bin/" + rm "$bin/bin/ldd" + sed -e "s|^RTLDLIST=.*$|RTLDLIST=\"$out/lib/ld-linux-x86-64.so.2 $out/lib/32/ld-linux.so.2\"|g" \ + '${glibc64.bin}/bin/ldd' > "$bin/bin/ldd" + chmod +x "$bin/bin/ldd" + + mkdir "$dev" + cp -rs '${glibc32.dev}'/include "$dev/" + chmod +w -R "$dev" + cp -rsf '${glibc64.dev}'/include "$dev/" + '' diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/nix-locale-archive.patch b/nix-builder/pkgs/manylinux/glibc_2_28/nix-locale-archive.patch new file mode 100644 index 00000000..39312951 --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/nix-locale-archive.patch @@ -0,0 +1,118 @@ +diff -Naur glibc-2.27-orig/locale/loadarchive.c glibc-2.27/locale/loadarchive.c +--- glibc-2.27-orig/locale/loadarchive.c 2018-02-01 11:17:18.000000000 -0500 ++++ glibc-2.27/locale/loadarchive.c 2018-02-17 22:32:25.680169462 -0500 +@@ -123,6 +123,23 @@ + return MAX (namehash_end, MAX (string_end, locrectab_end)); + } + ++static int ++open_locale_archive (void) ++{ ++ int fd = -1; ++ char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27"); ++ char *path = getenv ("LOCALE_ARCHIVE"); ++ if (versioned_path) ++ fd = __open_nocancel (versioned_path, O_RDONLY|O_LARGEFILE|O_CLOEXEC); ++ if (path && fd < 0) ++ fd = __open_nocancel (path, O_RDONLY|O_LARGEFILE|O_CLOEXEC); ++ if (fd < 0) ++ fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC); ++ if (fd < 0) ++ fd = __open_nocancel ("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE|O_CLOEXEC); ++ return fd; ++} ++ + + /* Find the locale *NAMEP in the locale archive, and return the + internalized data structure for its CATEGORY data. If this locale has +@@ -202,7 +219,7 @@ + archmapped = &headmap; + + /* The archive has never been opened. */ +- fd = __open_nocancel (archfname, O_RDONLY|O_LARGEFILE|O_CLOEXEC); ++ fd = open_locale_archive (); + if (fd < 0) + /* Cannot open the archive, for whatever reason. */ + return NULL; +@@ -397,8 +414,7 @@ + if (fd == -1) + { + struct stat64 st; +- fd = __open_nocancel (archfname, +- O_RDONLY|O_LARGEFILE|O_CLOEXEC); ++ fd = open_locale_archive (); + if (fd == -1) + /* Cannot open the archive, for whatever reason. */ + return NULL; +diff -Naur glibc-2.27-orig/locale/programs/locale.c glibc-2.27/locale/programs/locale.c +--- glibc-2.27-orig/locale/programs/locale.c 2018-02-01 11:17:18.000000000 -0500 ++++ glibc-2.27/locale/programs/locale.c 2018-02-17 22:36:39.726293213 -0500 +@@ -633,6 +633,24 @@ + + + static int ++open_locale_archive (void) ++{ ++ int fd = -1; ++ char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27"); ++ char *path = getenv ("LOCALE_ARCHIVE"); ++ if (versioned_path) ++ fd = open64 (versioned_path, O_RDONLY); ++ if (path && fd < 0) ++ fd = open64 (path, O_RDONLY); ++ if (fd < 0) ++ fd = open64 (ARCHIVE_NAME, O_RDONLY); ++ if (fd < 0) ++ fd = open64 ("/usr/lib/locale/locale-archive", O_RDONLY); ++ return fd; ++} ++ ++ ++static int + write_archive_locales (void **all_datap, char *linebuf) + { + struct stat64 st; +@@ -644,7 +662,7 @@ + int fd, ret = 0; + uint32_t cnt; + +- fd = open64 (ARCHIVE_NAME, O_RDONLY); ++ fd = open_locale_archive (); + if (fd < 0) + return 0; + +diff -Naur glibc-2.27-orig/locale/programs/locarchive.c glibc-2.27/locale/programs/locarchive.c +--- glibc-2.27-orig/locale/programs/locarchive.c 2018-02-01 11:17:18.000000000 -0500 ++++ glibc-2.27/locale/programs/locarchive.c 2018-02-17 22:40:51.245293975 -0500 +@@ -117,6 +117,22 @@ + } + + ++static int ++open_locale_archive (const char * archivefname, int flags) ++{ ++ int fd = -1; ++ char *versioned_path = getenv ("LOCALE_ARCHIVE_2_27"); ++ char *path = getenv ("LOCALE_ARCHIVE"); ++ if (versioned_path) ++ fd = open64 (versioned_path, flags); ++ if (path && fd < 0) ++ fd = open64 (path, flags); ++ if (fd < 0) ++ fd = open64 (archivefname, flags); ++ return fd; ++} ++ ++ + static void + create_archive (const char *archivefname, struct locarhandle *ah) + { +@@ -578,7 +594,7 @@ + while (1) + { + /* Open the archive. We must have exclusive write access. */ +- fd = open64 (archivefname, readonly ? O_RDONLY : O_RDWR); ++ fd = open_locale_archive (archivefname, readonly ? O_RDONLY : O_RDWR); + if (fd == -1) + { + /* Maybe the file does not yet exist? If we are opening diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/rpcgen-path.patch b/nix-builder/pkgs/manylinux/glibc_2_28/rpcgen-path.patch new file mode 100644 index 00000000..3349449d --- /dev/null +++ b/nix-builder/pkgs/manylinux/glibc_2_28/rpcgen-path.patch @@ -0,0 +1,54 @@ +diff -ru glibc-2.18-orig/sunrpc/rpc_main.c glibc-2.18/sunrpc/rpc_main.c +--- glibc-2.18-orig/sunrpc/rpc_main.c 2013-08-11 00:52:55.000000000 +0200 ++++ glibc-2.18/sunrpc/rpc_main.c 2013-11-15 12:04:48.041006977 +0100 +@@ -78,7 +78,7 @@ + + static const char *svcclosetime = "120"; + static int cppDefined; /* explicit path for C preprocessor */ +-static const char *CPP = "/lib/cpp"; ++static const char *CPP = "cpp"; + static const char CPPFLAGS[] = "-C"; + static char *pathbuf; + static int cpp_pid; +@@ -107,7 +107,6 @@ + static void open_output (const char *infile, const char *outfile); + static void add_warning (void); + static void clear_args (void); +-static void find_cpp (void); + static void open_input (const char *infile, const char *define); + static int check_nettype (const char *name, const char *list_to_check[]); + static void c_output (const char *infile, const char *define, +@@ -322,25 +321,6 @@ + argcount = FIXEDARGS; + } + +-/* make sure that a CPP exists */ +-static void +-find_cpp (void) +-{ +- struct stat64 buf; +- +- if (stat64 (CPP, &buf) == 0) +- return; +- +- if (cppDefined) /* user specified cpp but it does not exist */ +- { +- fprintf (stderr, _ ("cannot find C preprocessor: %s\n"), CPP); +- crash (); +- } +- +- /* fall back to system CPP */ +- CPP = "cpp"; +-} +- + /* + * Open input file with given define for C-preprocessor + */ +@@ -359,7 +339,6 @@ + switch (cpp_pid) + { + case 0: +- find_cpp (); + putarg (0, CPP); + putarg (1, CPPFLAGS); + addarg (define); diff --git a/nix-builder/pkgs/manylinux/manylinux-2.28-aarch64-metadata.json b/nix-builder/pkgs/manylinux/manylinux-2.28-aarch64-metadata.json new file mode 100644 index 00000000..fb7dca67 --- /dev/null +++ b/nix-builder/pkgs/manylinux/manylinux-2.28-aarch64-metadata.json @@ -0,0 +1,2390 @@ +{ + "almalinux-release": { + "deps": [], + "components": [ + { + "name": "almalinux-release", + "sha256": "f9dc9e3b3c950dbd216e8d1caf63afc46334ee3692b7e54f7a8479e1714483d9", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/almalinux-release-8.10-1.el8.aarch64.rpm", + "version": "8.10" + } + ], + "version": "8.10" + }, + "audit-libs": { + "deps": [ + "glibc", + "libcap-ng" + ], + "components": [ + { + "name": "audit-libs", + "sha256": "7f2419f1700cfb6d7e1f4e84d505c2fb629a3b5061e493684d220eeb76ceb09b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/audit-libs-3.1.2-1.el8_10.1.aarch64.rpm", + "version": "3.1.2" + } + ], + "version": "3.1.2" + }, + "basesystem": { + "deps": [ + "filesystem", + "setup" + ], + "components": [ + { + "name": "basesystem", + "sha256": "768adcb1b03491f8c8e1c283577130b51f5a3d6215eb6667605d8996219b85a0", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/basesystem-11-5.el8.noarch.rpm", + "version": "11" + } + ], + "version": "11" + }, + "bash": { + "deps": [ + "filesystem", + "glibc", + "ncurses-libs" + ], + "components": [ + { + "name": "bash", + "sha256": "2908df162b1ee06a8bed35ddc694361f9dc53359d094ad74ba269b0d8236dc32", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/bash-4.4.20-6.el8_10.aarch64.rpm", + "version": "4.4.20" + } + ], + "version": "4.4.20" + }, + "boost-regex": { + "deps": [ + "glibc", + "libgcc", + "libicu", + "libstdcxx" + ], + "components": [ + { + "name": "boost-regex", + "sha256": "3b492308f591ecedc2329e76e00490cf741834254363bcab51245590046dcfd9", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/boost-regex-1.66.0-13.el8.aarch64.rpm", + "version": "1.66.0" + } + ], + "version": "1.66.0" + }, + "bzip2-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "bzip2-libs", + "sha256": "0e2fcc2d3fbd68011453555e50d49fe8f4127c95f953fb9d76c4c3385c0cae26", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/bzip2-libs-1.0.6-28.el8_10.aarch64.rpm", + "version": "1.0.6" + } + ], + "version": "1.0.6" + }, + "ca-certificates": { + "deps": [ + "bash", + "coreutils", + "grep", + "p11-kit", + "p11-kit-trust", + "sed" + ], + "components": [ + { + "name": "ca-certificates", + "sha256": "517e00ad205d42f2c1f2aa8e9ab54024805e1cf3482c6a8821c8b92fa5198cc9", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/ca-certificates-2025.2.80_v9.0.304-80.2.el8_10.noarch.rpm", + "version": "2025.2.80_v9.0.304" + } + ], + "version": "2025.2.80_v9.0.304" + }, + "chkconfig": { + "deps": [ + "glibc", + "libselinux", + "libsepol", + "popt" + ], + "components": [ + { + "name": "chkconfig", + "sha256": "86f88f03b4ff48a0bdb211ce34408008f9ab6e7a317423f61b700a20ee17883f", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/chkconfig-1.19.2-1.el8.aarch64.rpm", + "version": "1.19.2" + } + ], + "version": "1.19.2" + }, + "coreutils": { + "deps": [ + "coreutils-common", + "glibc", + "gmp", + "libacl", + "libattr", + "libcap", + "libselinux", + "ncurses", + "openssl-libs" + ], + "components": [ + { + "name": "coreutils", + "sha256": "4c244be9759fd16a9dd41360baa34d2ef60a9134a7303b15f643c3259b1e0a85", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/coreutils-8.30-17.el8_10.aarch64.rpm", + "version": "8.30" + } + ], + "version": "8.30" + }, + "coreutils-common": { + "deps": [], + "components": [ + { + "name": "coreutils-common", + "sha256": "1dd9ca5e81b211ec002266cf954c6bed89bfe2797f26721478be79d007e31748", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/coreutils-common-8.30-17.el8_10.aarch64.rpm", + "version": "8.30" + } + ], + "version": "8.30" + }, + "cracklib": { + "deps": [ + "glibc", + "gzip", + "zlib" + ], + "components": [ + { + "name": "cracklib", + "sha256": "60504b2e43e02db403a70e0b8b41671ca213dfc0757acfc3e4e673205bbe55e8", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/cracklib-2.9.6-15.el8.aarch64.rpm", + "version": "2.9.6" + } + ], + "version": "2.9.6" + }, + "cracklib-dicts": { + "deps": [ + "cracklib" + ], + "components": [ + { + "name": "cracklib-dicts", + "sha256": "9d53e9a58fd53267c2551f3a048c89579554f49f8aa77c94c79d1b066f947e38", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/cracklib-dicts-2.9.6-15.el8.aarch64.rpm", + "version": "2.9.6" + } + ], + "version": "2.9.6" + }, + "crypto-policies": { + "deps": [], + "components": [ + { + "name": "crypto-policies", + "sha256": "92478e2a26b2318fd39880bfd95aedb6c7d63330b65bddd2571c59ed716d5ed4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/crypto-policies-20230731-1.git3177e06.el8.noarch.rpm", + "version": "20230731" + } + ], + "version": "20230731" + }, + "ctags": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "ctags", + "sha256": "512fa36aa59b350cd5a43c67de2595086f3730bacf988335aaca9891460ed551", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/ctags-5.8-23.el8.aarch64.rpm", + "version": "5.8" + } + ], + "version": "5.8" + }, + "curl": { + "deps": [ + "glibc", + "libcurl-minimal", + "openssl-libs", + "zlib" + ], + "components": [ + { + "name": "curl", + "sha256": "c6f9357e3e39de856f0b5ea97c18f41cdf4def33bc905878282a325101e679b8", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/curl-7.61.1-34.el8_10.11.aarch64.rpm", + "version": "7.61.1" + } + ], + "version": "7.61.1" + }, + "diffutils": { + "deps": [ + "glibc", + "info" + ], + "components": [ + { + "name": "diffutils", + "sha256": "1feb51d14511fe4db9782c0eb2b354b413b3f1ad3e233ea1ef3ba010ed638825", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/diffutils-3.6-6.el8.aarch64.rpm", + "version": "3.6" + } + ], + "version": "3.6" + }, + "elfutils-debuginfod-client": { + "deps": [ + "elfutils-libelf", + "elfutils-libs", + "glibc", + "libcurl-minimal" + ], + "components": [ + { + "name": "elfutils-debuginfod-client", + "sha256": "4fe5e47dbc5410ba95d31e420fe649e21b27daa210e67b0ee05384c4c9474333", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/elfutils-debuginfod-client-0.190-2.el8.alma.1.aarch64.rpm", + "version": "0.190" + } + ], + "version": "0.190" + }, + "elfutils-default-yama-scope": { + "deps": [], + "components": [ + { + "name": "elfutils-default-yama-scope", + "sha256": "f9e0bbe4614241fdbce4f2b9145cb7ec144b728859048dc611fd612d63f58058", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/elfutils-default-yama-scope-0.190-2.el8.alma.1.noarch.rpm", + "version": "0.190" + } + ], + "version": "0.190" + }, + "elfutils-libelf": { + "deps": [ + "bzip2-libs", + "glibc", + "libzstd", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "elfutils-libelf", + "sha256": "d6eb084a6c41bb61494df4b0989fca59ac62c19a287af38ad40b6f57355db33e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/elfutils-libelf-0.190-2.el8.alma.1.aarch64.rpm", + "version": "0.190" + } + ], + "version": "0.190" + }, + "elfutils-libs": { + "deps": [ + "bzip2-libs", + "elfutils-default-yama-scope", + "elfutils-libelf", + "glibc", + "libzstd", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "elfutils-libs", + "sha256": "9c3c9dd60d7679394938d05453ba1404ebaf289440736b2995831517f8686150", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/elfutils-libs-0.190-2.el8.alma.1.aarch64.rpm", + "version": "0.190" + } + ], + "version": "0.190" + }, + "expat": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "expat", + "sha256": "bdc919d3c0b755d9255ff0a00f59e44c067f126fb41d91a3552aa72f4e31e088", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/expat-2.5.0-1.el8_10.aarch64.rpm", + "version": "2.5.0" + } + ], + "version": "2.5.0" + }, + "filesystem": { + "deps": [ + "setup" + ], + "components": [ + { + "name": "filesystem", + "sha256": "e5462e011462c2fe6c499fca62b32bf550a7b936862a6288a121a315a47b0bd1", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/filesystem-3.8-6.el8.aarch64.rpm", + "version": "3.8" + } + ], + "version": "3.8" + }, + "gawk": { + "deps": [ + "filesystem", + "glibc", + "gmp", + "libsigsegv", + "mpfr", + "readline" + ], + "components": [ + { + "name": "gawk", + "sha256": "aa693915bed54918743555d701c41027ab45a9979937eeaa8f7a956b2461f7af", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/gawk-4.2.1-4.el8.aarch64.rpm", + "version": "4.2.1" + } + ], + "version": "4.2.1" + }, + "gc": { + "deps": [ + "glibc", + "libatomic_ops", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "gc", + "sha256": "6d9e6c6143074187bb623de7b5e2e78c64f34cf70808bd733e6b2d1db353ef4b", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gc-7.6.4-3.el8.aarch64.rpm", + "version": "7.6.4" + } + ], + "version": "7.6.4" + }, + "gcc-toolset-13": { + "deps": [ + "gcc-toolset-13-annobin-plugin-gcc", + "gcc-toolset-13-binutils", + "gcc-toolset-13-dwz", + "gcc-toolset-13-gcc", + "gcc-toolset-13-gcc-cxx", + "gcc-toolset-13-gcc-gfortran", + "gcc-toolset-13-gdb", + "gcc-toolset-13-runtime" + ], + "components": [ + { + "name": "gcc-toolset-13", + "sha256": "0769f3485ec068c25b0346263d62274bb4318218c1557cff0ef237556cee233a", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-13.0-2.el8.aarch64.rpm", + "version": "13.0" + } + ], + "version": "13.0" + }, + "gcc-toolset-13-annobin-docs": { + "deps": [ + "gcc-toolset-13-runtime" + ], + "components": [ + { + "name": "gcc-toolset-13-annobin-docs", + "sha256": "9382788cefa3df15656a744cbfcf48042b8bacaa5da2e694df1d5484f7f0c784", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-annobin-docs-12.92-1.el8_10.noarch.rpm", + "version": "12.92" + } + ], + "version": "12.92" + }, + "gcc-toolset-13-annobin-plugin-gcc": { + "deps": [ + "gcc-toolset-13-annobin-docs", + "gcc-toolset-13-runtime", + "glibc", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-13-annobin-plugin-gcc", + "sha256": "c1a8f8a95e054f0a7fb4352aa965d45f3a4fc5359a61d1bca43b596629d1d6fe", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-annobin-plugin-gcc-12.92-1.el8_10.aarch64.rpm", + "version": "12.92" + } + ], + "version": "12.92" + }, + "gcc-toolset-13-binutils": { + "deps": [ + "coreutils", + "elfutils-debuginfod-client", + "gcc-toolset-13-binutils-gold", + "gcc-toolset-13-runtime", + "glibc", + "jansson", + "libgcc", + "libstdcxx", + "policycoreutils" + ], + "components": [ + { + "name": "gcc-toolset-13-binutils", + "sha256": "df1b9483ab7cc3a248b7884603fcaa942a06cb70e1791f245f1ab9d8f44786b1", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-binutils-2.40-21.el8.aarch64.rpm", + "version": "2.40" + } + ], + "version": "2.40" + }, + "gcc-toolset-13-binutils-gold": { + "deps": [ + "gcc-toolset-13-binutils", + "gcc-toolset-13-runtime", + "glibc", + "jansson", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-13-binutils-gold", + "sha256": "241ab47a5a31d14a36f51913ff77be42b74480e8879b95da65fb1dd86cd27f8f", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-binutils-gold-2.40-21.el8.aarch64.rpm", + "version": "2.40" + } + ], + "version": "2.40" + }, + "gcc-toolset-13-dwz": { + "deps": [ + "elfutils-libelf", + "gcc-toolset-13-runtime", + "glibc" + ], + "components": [ + { + "name": "gcc-toolset-13-dwz", + "sha256": "5a67be60904dfe708c2d64209553f425f77be18feb0906752964e0cf70b39274", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-dwz-0.14-0.el8.aarch64.rpm", + "version": "0.14" + } + ], + "version": "0.14" + }, + "gcc-toolset-13-gcc": { + "deps": [ + "gcc-toolset-13-binutils", + "gcc-toolset-13-runtime", + "glibc", + "gmp", + "libgcc", + "libgomp", + "libmpc", + "libzstd", + "make", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-13-gcc", + "sha256": "cccf7f2f119861a1deb3977a60b34818c181d91b21738efbd0d5ee22202b5346", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-gcc-13.3.1-2.2.el8_10.aarch64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-gcc-cxx": { + "deps": [ + "gcc-toolset-13-gcc", + "gcc-toolset-13-libstdcxx-devel", + "gcc-toolset-13-runtime", + "glibc", + "gmp", + "libmpc", + "libstdcxx", + "libzstd", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-13-gcc-cxx", + "sha256": "6bc453fedb71e6ca6fe871b6ee98e2faf9f7d0d25e2aac4064c7a35f3c3f4744", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-gcc-c++-13.3.1-2.2.el8_10.aarch64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-gcc-gfortran": { + "deps": [ + "gcc-toolset-13-gcc", + "gcc-toolset-13-runtime", + "glibc", + "gmp", + "libgfortran", + "libmpc", + "libzstd", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-13-gcc-gfortran", + "sha256": "f7c607dd8b7fc24264aa02f7c3f0dd240a8e370d29c33eb539e8cbde3f8385f1", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-gcc-gfortran-13.3.1-2.2.el8_10.aarch64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-gdb": { + "deps": [ + "boost-regex", + "elfutils-debuginfod-client", + "expat", + "gcc-toolset-13-runtime", + "glibc", + "gmp", + "guile", + "libbabeltrace", + "libgcc", + "libstdcxx", + "mpfr", + "ncurses-libs", + "python3-libs", + "readline", + "source-highlight", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-13-gdb", + "sha256": "ac2882992d2c1e1e18831cbc21cde7bfb44d1acf351169869dcf576c291a3e3b", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-gdb-12.1-4.el8.aarch64.rpm", + "version": "12.1" + } + ], + "version": "12.1" + }, + "gcc-toolset-13-libstdcxx-devel": { + "deps": [ + "gcc-toolset-13-runtime", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-13-libstdcxx-devel", + "sha256": "661444eaa7fca5cc862dd2a36b28209d1cbfd713246893d5469c6819179d2482", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-libstdc++-devel-13.3.1-2.2.el8_10.aarch64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-runtime": { + "deps": [ + "scl-utils" + ], + "components": [ + { + "name": "gcc-toolset-13-runtime", + "sha256": "727c616e91f0070af03a16115905c37dce2d6f383a85554e886fa1d4de77750f", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-13-runtime-13.0-2.el8.aarch64.rpm", + "version": "13.0" + } + ], + "version": "13.0" + }, + "gcc-toolset-14": { + "deps": [ + "gcc-toolset-14-annobin-plugin-gcc", + "gcc-toolset-14-binutils", + "gcc-toolset-14-dwz", + "gcc-toolset-14-gcc", + "gcc-toolset-14-gcc-cxx", + "gcc-toolset-14-gcc-gfortran", + "gcc-toolset-14-gdb", + "gcc-toolset-14-runtime" + ], + "components": [ + { + "name": "gcc-toolset-14", + "sha256": "5eaa310897c67997db7e56d968d20f911e53cd421d3b3133caf1b1cbee449f5c", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-14.0-1.el8_10.aarch64.rpm", + "version": "14.0" + } + ], + "version": "14.0" + }, + "gcc-toolset-14-annobin-docs": { + "deps": [ + "gcc-toolset-14-runtime" + ], + "components": [ + { + "name": "gcc-toolset-14-annobin-docs", + "sha256": "24a3dab3dedb1cabbfaa077ff869d8388da737368c25a8b60e0fc25d3298033d", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-annobin-docs-12.88-1.el8_10.noarch.rpm", + "version": "12.88" + } + ], + "version": "12.88" + }, + "gcc-toolset-14-annobin-plugin-gcc": { + "deps": [ + "gcc-toolset-14-annobin-docs", + "gcc-toolset-14-gcc", + "gcc-toolset-14-runtime", + "glibc", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-14-annobin-plugin-gcc", + "sha256": "dcb0007d40ee8643b57a41b237c8204f82eb3f89b3f5182844e8dcdbe2a3138d", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-annobin-plugin-gcc-12.88-1.el8_10.aarch64.rpm", + "version": "12.88" + } + ], + "version": "12.88" + }, + "gcc-toolset-14-binutils": { + "deps": [ + "coreutils", + "elfutils-debuginfod-client", + "gcc-toolset-14-runtime", + "glibc", + "jansson", + "libgcc", + "libstdcxx", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-binutils", + "sha256": "e5a60c836477f712343f72849bd9e3aaeff66246ec4da8bc96067f7e7f6d198e", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-binutils-2.41-4.el8_10.1.aarch64.rpm", + "version": "2.41" + } + ], + "version": "2.41" + }, + "gcc-toolset-14-dwz": { + "deps": [ + "elfutils-libelf", + "gcc-toolset-14-runtime", + "glibc" + ], + "components": [ + { + "name": "gcc-toolset-14-dwz", + "sha256": "bed364e6d3d4de1d404ddd809ab7805084ef44248c7e7d56605f4cd4975e513c", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-dwz-0.14-0.el8_10.aarch64.rpm", + "version": "0.14" + } + ], + "version": "0.14" + }, + "gcc-toolset-14-gcc": { + "deps": [ + "gcc-toolset-14-binutils", + "gcc-toolset-14-runtime", + "glibc", + "gmp", + "libgcc", + "libgomp", + "libmpc", + "libzstd", + "make", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-gcc", + "sha256": "0974451fca454213bb209f906a9f44ebcbe4d3356622ab50c6749544cf68c1ec", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-gcc-14.2.1-11.el8_10.aarch64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-gcc-cxx": { + "deps": [ + "gcc-toolset-14-gcc", + "gcc-toolset-14-libstdcxx-devel", + "gcc-toolset-14-runtime", + "glibc", + "gmp", + "libmpc", + "libstdcxx", + "libzstd", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-gcc-cxx", + "sha256": "de1a2c04cd63f97d2dcd1e96f3737b258bbb19c42ffaceffe1b70b883dbf71d5", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-gcc-c++-14.2.1-11.el8_10.aarch64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-gcc-gfortran": { + "deps": [ + "gcc-toolset-14-gcc", + "gcc-toolset-14-runtime", + "glibc", + "gmp", + "libgfortran", + "libmpc", + "libzstd", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-gcc-gfortran", + "sha256": "62648cfaada3f2d1123f53e61c60e78b7542cc9de54e10ae705d23b6961499ff", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-gcc-gfortran-14.2.1-11.el8_10.aarch64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-gdb": { + "deps": [ + "boost-regex", + "elfutils-debuginfod-client", + "expat", + "gcc-toolset-14-runtime", + "glibc", + "gmp", + "guile", + "libbabeltrace", + "libgcc", + "libstdcxx", + "libzstd", + "mpfr", + "ncurses-libs", + "python3-libs", + "readline", + "source-highlight", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-gdb", + "sha256": "4ba50df3e864a6d4482b2461894e575437f5c0674d9f78ea8cbd1ec22eca8063", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-gdb-14.2-3.el8_10.aarch64.rpm", + "version": "14.2" + } + ], + "version": "14.2" + }, + "gcc-toolset-14-libstdcxx-devel": { + "deps": [ + "gcc-toolset-14-runtime", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-14-libstdcxx-devel", + "sha256": "c70b6f1a0c67d4798e488772ce55dbceef0268a5ea551da83829965bd5f5235f", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-libstdc++-devel-14.2.1-11.el8_10.aarch64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-runtime": { + "deps": [ + "scl-utils" + ], + "components": [ + { + "name": "gcc-toolset-14-runtime", + "sha256": "a41aa533e44c34e2893cbce78c2a0612b3e5ff3a2818b68bdfd784720fe616e4", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/gcc-toolset-14-runtime-14.0-1.el8_10.aarch64.rpm", + "version": "14.0" + } + ], + "version": "14.0" + }, + "gdbm": { + "deps": [ + "gdbm-libs", + "glibc", + "ncurses-libs", + "readline" + ], + "components": [ + { + "name": "gdbm", + "sha256": "ecf0854c0ad32c6d61038c6d5b03712379ca76fc6759bb3213928ff5eeabce78", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/gdbm-1.18-2.el8.aarch64.rpm", + "version": "1.18" + } + ], + "version": "1.18" + }, + "gdbm-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "gdbm-libs", + "sha256": "f58e3ef7ecd5b3cb43cc479461d055fa5ccdaf897cc247571cec0725ba440ddf", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/gdbm-libs-1.18-2.el8.aarch64.rpm", + "version": "1.18" + } + ], + "version": "1.18" + }, + "glib2": { + "deps": [ + "glibc", + "gnutls", + "libffi", + "libgcc", + "libmount", + "libselinux", + "pcre", + "zlib" + ], + "components": [ + { + "name": "glib2", + "sha256": "7a0c76b63e372c0d113325402c6d7a7183f633737fee4c80578c9c00f8a85d29", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/glib2-2.56.4-169.el8_10.aarch64.rpm", + "version": "2.56.4" + } + ], + "version": "2.56.4" + }, + "glibc": { + "deps": [ + "basesystem", + "glibc-common", + "glibc-headers", + "glibc-minimal-langpack", + "libgcc", + "libxcrypt" + ], + "components": [ + { + "name": "glibc", + "sha256": "d3dd44658b0b6c3cd384fd45c789a5502335369bdaec34d85c8c99574cb6586c", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/glibc-2.28-251.el8_10.34.aarch64.rpm", + "version": "2.28" + }, + { + "name": "glibc-devel", + "sha256": "97625b5715ef2350799d5da2891d387408238a9cdee7ac07312ab4f43149fbe5", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/glibc-devel-2.28-251.el8_10.34.aarch64.rpm", + "version": "2.28" + } + ], + "version": "2.28" + }, + "glibc-common": { + "deps": [ + "glibc", + "libselinux", + "tzdata" + ], + "components": [ + { + "name": "glibc-common", + "sha256": "a433ed144d320f31b97e8b8fbd0cd5f07c6ec9f462d463776ef3e59f0830e5e5", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/glibc-common-2.28-251.el8_10.34.aarch64.rpm", + "version": "2.28" + } + ], + "version": "2.28" + }, + "glibc-headers": { + "deps": [ + "glibc", + "kernel-headers" + ], + "components": [ + { + "name": "glibc-headers", + "sha256": "10240b611f97ca0156dddd68a936c35c402b9fb1ba59da57c6de22361f4000fa", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/glibc-headers-2.28-251.el8_10.34.aarch64.rpm", + "version": "2.28" + } + ], + "version": "2.28" + }, + "glibc-minimal-langpack": { + "deps": [ + "glibc", + "glibc-common" + ], + "components": [ + { + "name": "glibc-minimal-langpack", + "sha256": "4147157d293025890f0b08d624b018e29101c6140e7d18041242103c3f0eac66", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/glibc-minimal-langpack-2.28-251.el8_10.34.aarch64.rpm", + "version": "2.28" + } + ], + "version": "2.28" + }, + "gmp": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "gmp", + "sha256": "1cb75d2f6d0e565bfcd15c17b658a9386f7cc11932776e9d4e4875765232976b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/gmp-6.1.2-11.el8.aarch64.rpm", + "version": "6.1.2" + } + ], + "version": "6.1.2" + }, + "gnutls": { + "deps": [ + "crypto-policies", + "glibc", + "gmp", + "libidn2", + "libtasn1", + "libunistring", + "nettle", + "p11-kit", + "p11-kit-trust" + ], + "components": [ + { + "name": "gnutls", + "sha256": "6461ef905a3074fe8e3aabdf2fa84d3f50329658325d4af6aa3f75d651cb28c6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/gnutls-3.6.16-8.el8_10.5.aarch64.rpm", + "version": "3.6.16" + } + ], + "version": "3.6.16" + }, + "grep": { + "deps": [ + "glibc", + "pcre" + ], + "components": [ + { + "name": "grep", + "sha256": "f21cdd8306d6280eb1b5375ab396f58a69cf4d73f67211aa5ff6e760dae871c8", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/grep-3.1-6.el8.aarch64.rpm", + "version": "3.1" + } + ], + "version": "3.1" + }, + "guile": { + "deps": [ + "coreutils", + "gc", + "glibc", + "gmp", + "libffi", + "libtool-ltdl", + "libunistring", + "libxcrypt", + "ncurses-libs", + "readline" + ], + "components": [ + { + "name": "guile", + "sha256": "1a2eb367b79c2501fe980abfb0802f7a275c16ed54412eea0f97696019288ee6", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/guile-2.0.14-7.el8.aarch64.rpm", + "version": "2.0.14" + } + ], + "version": "2.0.14" + }, + "gzip": { + "deps": [ + "coreutils", + "glibc" + ], + "components": [ + { + "name": "gzip", + "sha256": "9532430d0258cbe171448e702780f667157d45456413358b61b529eb04c1dafc", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/gzip-1.9-13.el8_5.aarch64.rpm", + "version": "1.9" + } + ], + "version": "1.9" + }, + "info": { + "deps": [ + "glibc", + "ncurses-libs", + "zlib" + ], + "components": [ + { + "name": "info", + "sha256": "4830fcd7f8de88b22f4b53be7c548c374aea238470699d75e9a19f1a6a5137a2", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/info-6.5-7.el8.aarch64.rpm", + "version": "6.5" + } + ], + "version": "6.5" + }, + "jansson": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "jansson", + "sha256": "ec761cc8e14da663bf931f7f521fa020efb773b1da90dbfdf904efdb6824a7d9", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/jansson-2.14-1.el8.aarch64.rpm", + "version": "2.14" + } + ], + "version": "2.14" + }, + "kernel-headers": { + "deps": [], + "components": [ + { + "name": "kernel-headers", + "sha256": "53483dc2cd6c6feb0c643c0a7145e3052059483fb66ef4731b03fdda936021d5", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/kernel-headers-4.18.0-553.el8_10.aarch64.rpm", + "version": "4.18.0" + } + ], + "version": "4.18.0" + }, + "keyutils-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "keyutils-libs", + "sha256": "87e96ac645e1deb805d1314776cfb0bdd992e5c65c268b9ef65347f26094eba3", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/keyutils-libs-1.5.10-9.el8.aarch64.rpm", + "version": "1.5.10" + } + ], + "version": "1.5.10" + }, + "krb5-libs": { + "deps": [ + "coreutils", + "gawk", + "glibc", + "grep", + "keyutils-libs", + "libcom_err", + "libselinux", + "libverto", + "openssl-libs", + "sed" + ], + "components": [ + { + "name": "krb5-libs", + "sha256": "9cfd712944f933cf49f7012af6dbd37cd8e9992326a265d6ef928d06bb8e62f1", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/krb5-libs-1.18.2-34.el8_10.aarch64.rpm", + "version": "1.18.2" + } + ], + "version": "1.18.2" + }, + "libacl": { + "deps": [ + "glibc", + "libattr" + ], + "components": [ + { + "name": "libacl", + "sha256": "66aa8ca480a36e8ade94001f9dbdf4fee10e12a383e137a256fa646f710a8034", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libacl-2.2.53-3.el8.aarch64.rpm", + "version": "2.2.53" + } + ], + "version": "2.2.53" + }, + "libarchive": { + "deps": [ + "bzip2-libs", + "glibc", + "libacl", + "libxml2", + "libzstd", + "lz4-libs", + "openssl-libs", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "libarchive", + "sha256": "e5ecbd252a7a6bb94dd5ebcdbd3642213c45024054bdcf8415ae9165a7cf9e42", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libarchive-3.3.3-7.el8_10.aarch64.rpm", + "version": "3.3.3" + } + ], + "version": "3.3.3" + }, + "libatomic_ops": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libatomic_ops", + "sha256": "a8f85fda3933af3ec7f0d97f48c787bda1aa04afac9c456f2cd327b4d5f644a3", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/libatomic_ops-7.6.2-3.el8.aarch64.rpm", + "version": "7.6.2" + } + ], + "version": "7.6.2" + }, + "libattr": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libattr", + "sha256": "77a5293d04cc03364ffe3878ac9ddf8654c78da66cdf02b18779feb74cb72b33", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libattr-2.4.48-3.el8.aarch64.rpm", + "version": "2.4.48" + } + ], + "version": "2.4.48" + }, + "libbabeltrace": { + "deps": [ + "elfutils-libelf", + "elfutils-libs", + "glib2", + "glibc", + "libuuid", + "popt" + ], + "components": [ + { + "name": "libbabeltrace", + "sha256": "9c97c1c66dde58c3bceffbd89c0c1280b05d607dbac7bff39bb5d3557b7c536d", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libbabeltrace-1.5.4-4.el8.aarch64.rpm", + "version": "1.5.4" + } + ], + "version": "1.5.4" + }, + "libblkid": { + "deps": [ + "coreutils", + "glibc", + "libuuid" + ], + "components": [ + { + "name": "libblkid", + "sha256": "12536f6cec46007f0117bd6d0d3407d856ecfc8f1a46851764ad6b703ec5f1fd", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libblkid-2.32.1-48.el8_10.aarch64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libcap": { + "deps": [ + "glibc", + "libgcc" + ], + "components": [ + { + "name": "libcap", + "sha256": "f30ad2182e5846c6fcbdc9ae339d4cdda5a16c1028cecc582b679b898d40da7e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libcap-2.48-6.el8_10.1.aarch64.rpm", + "version": "2.48" + } + ], + "version": "2.48" + }, + "libcap-ng": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libcap-ng", + "sha256": "b06750c55648476fbf29ab71497d1a97aa91995c945711e2bb3360863534f60c", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libcap-ng-0.7.11-1.el8.aarch64.rpm", + "version": "0.7.11" + } + ], + "version": "0.7.11" + }, + "libcom_err": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libcom_err", + "sha256": "be7f7c2c75976f72aa4d0bb6995aeb6dc3da292ae53f6aad3bbec8c53edbe24f", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libcom_err-1.45.6-7.el8_10.aarch64.rpm", + "version": "1.45.6" + } + ], + "version": "1.45.6" + }, + "libcurl-minimal": { + "deps": [ + "glibc", + "krb5-libs", + "libcom_err", + "libnghttp2", + "openssl-libs", + "zlib" + ], + "components": [ + { + "name": "libcurl-minimal", + "sha256": "0edfb38ba56bfa6bf154e93b2f2e3a71c5db4cfcea30794f3943cefc798b3812", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libcurl-minimal-7.61.1-34.el8_10.11.aarch64.rpm", + "version": "7.61.1" + } + ], + "version": "7.61.1" + }, + "libdb": { + "deps": [ + "glibc", + "openssl-libs" + ], + "components": [ + { + "name": "libdb", + "sha256": "3eb919d973cdbfb40ae02e049b411e143a8214a600fb639877828d355a3c7ebc", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libdb-5.3.28-42.el8_4.aarch64.rpm", + "version": "5.3.28" + } + ], + "version": "5.3.28" + }, + "libfdisk": { + "deps": [ + "glibc", + "libblkid", + "libuuid" + ], + "components": [ + { + "name": "libfdisk", + "sha256": "5d4a1fefe39e6b94a9dd9b35b5242ec476a7236034d69f6cec8b2e0c27c914cf", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libfdisk-2.32.1-48.el8_10.aarch64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libffi": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libffi", + "sha256": "336298e8cf86b9fa2c191f0370b3715716cde8b2de6cc7b4cbe4dcc6fcc270e4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libffi-3.1-24.el8.aarch64.rpm", + "version": "3.1" + } + ], + "version": "3.1" + }, + "libgcc": { + "deps": [], + "components": [ + { + "name": "libgcc", + "sha256": "6978c6f3dc10c50fcd44d02c398e89a08b9eabb7fbf038f09249fb9368e9b073", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libgcc-8.5.0-28.el8_10.alma.1.aarch64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libgcrypt": { + "deps": [ + "glibc", + "libgpg-error" + ], + "components": [ + { + "name": "libgcrypt", + "sha256": "dd7baa83a1a02ac7f5e56592c57b8f7e516543c9db0c40c1500945adc4da3eb0", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libgcrypt-1.8.5-7.el8_6.aarch64.rpm", + "version": "1.8.5" + } + ], + "version": "1.8.5" + }, + "libgfortran": { + "deps": [ + "glibc", + "libgcc", + "zlib" + ], + "components": [ + { + "name": "libgfortran", + "sha256": "3f5398e86e1d919074f2b98db87c8f9b17d0698014775fba16bbab1387bb6f58", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libgfortran-8.5.0-28.el8_10.alma.1.aarch64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libgomp": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libgomp", + "sha256": "5e320bcdcba071ed4674c2d63acc303818e807ea38c0414ca09fd85fd45e05ef", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libgomp-8.5.0-28.el8_10.alma.1.aarch64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libgpg-error": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libgpg-error", + "sha256": "4fba81799ad2c5d7ae4cc11c3d6df8fb74b9f1dc579f0e77f5a0cecb799e332d", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libgpg-error-1.31-1.el8.aarch64.rpm", + "version": "1.31" + } + ], + "version": "1.31" + }, + "libicu": { + "deps": [ + "glibc", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "libicu", + "sha256": "78e299c77d5906965f6aaf0205b319626b60b6915b797228399467f3af6da98a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libicu-60.3-2.el8_1.aarch64.rpm", + "version": "60.3" + } + ], + "version": "60.3" + }, + "libidn2": { + "deps": [ + "glibc", + "libunistring" + ], + "components": [ + { + "name": "libidn2", + "sha256": "c8a6e99f743ad992163a73440a2dc549d908aea3cb83571916cf8d89fcf2a73f", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libidn2-2.2.0-1.el8.aarch64.rpm", + "version": "2.2.0" + } + ], + "version": "2.2.0" + }, + "libmount": { + "deps": [ + "glibc", + "libblkid", + "libselinux", + "libuuid" + ], + "components": [ + { + "name": "libmount", + "sha256": "473dd9184951b4793f6d3d4225bc4bb223c962c9469cdb61c1a3bd80e4438e6a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libmount-2.32.1-48.el8_10.aarch64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libmpc": { + "deps": [ + "glibc", + "gmp", + "mpfr" + ], + "components": [ + { + "name": "libmpc", + "sha256": "6a67bfe29accb315908212c5a34cce90cd402af0ded35b8cc11cae5ed4d38bff", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/libmpc-1.1.0-9.1.el8.aarch64.rpm", + "version": "1.1.0" + } + ], + "version": "1.1.0" + }, + "libnghttp2": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libnghttp2", + "sha256": "3e9fa25fa3aeb75485624f76e8002ebc8c7ce2d4572a672511ace29744e5bae6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libnghttp2-1.33.0-6.el8_10.2.aarch64.rpm", + "version": "1.33.0" + } + ], + "version": "1.33.0" + }, + "libnsl2": { + "deps": [ + "glibc", + "libtirpc" + ], + "components": [ + { + "name": "libnsl2", + "sha256": "a26bbde3174f75b4e85a9620a13ff8921c45ffc8e040098bacac890867b0e34f", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libnsl2-1.2.0-2.20180605git4a062cf.el8.aarch64.rpm", + "version": "1.2.0" + } + ], + "version": "1.2.0" + }, + "libpwquality": { + "deps": [ + "cracklib", + "cracklib-dicts", + "glibc", + "pam" + ], + "components": [ + { + "name": "libpwquality", + "sha256": "a9103aa12129a759bc6c965796b65c00a61bcde9ed4e8d7b2b1d2eeee4f7f433", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libpwquality-1.4.4-6.el8.aarch64.rpm", + "version": "1.4.4" + } + ], + "version": "1.4.4" + }, + "libselinux": { + "deps": [ + "glibc", + "libsepol", + "pcre2" + ], + "components": [ + { + "name": "libselinux", + "sha256": "14424d89f5a38204635d898251b5c1822664e583774c0da9468e086e4e99c207", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libselinux-2.9-11.el8_10.aarch64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "libselinux-utils": { + "deps": [ + "glibc", + "libselinux", + "libsepol", + "pcre2" + ], + "components": [ + { + "name": "libselinux-utils", + "sha256": "999134c9e2d4cdaf80b2732c4e3e270a70aa4a84074c8676b8fd4e99c5aaa6e6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libselinux-utils-2.9-11.el8_10.aarch64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "libsemanage": { + "deps": [ + "audit-libs", + "bzip2-libs", + "glibc", + "libselinux", + "libsepol" + ], + "components": [ + { + "name": "libsemanage", + "sha256": "81b55351760a5a6afbba4b504d8e0da8b7b90284cf2048bd683bef3ea50e5f10", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libsemanage-2.9-12.el8_10.aarch64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "libsepol": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libsepol", + "sha256": "fe4f2ec60ea667b93d4a8d4cd70370f98d52d3ef3983798d918a526104d258fb", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libsepol-2.9-3.el8.aarch64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "libsigsegv": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libsigsegv", + "sha256": "ea585f27522123f11d27ed7a13d6f9eb4223e6d7cb98e271c677983abc7c39cf", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libsigsegv-2.11-5.el8.aarch64.rpm", + "version": "2.11" + } + ], + "version": "2.11" + }, + "libsmartcols": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libsmartcols", + "sha256": "7821c1928589970ca68b806dc4ae5541bb853d56bfd994f5d737400f012cfc52", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libsmartcols-2.32.1-48.el8_10.aarch64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libstdcxx": { + "deps": [ + "glibc", + "libgcc" + ], + "components": [ + { + "name": "libstdcxx", + "sha256": "89b2b5f5b974055d7e9f8debfbf52114cc6f1eb4b7cc9a864f156d9bada33326", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libstdc++-8.5.0-28.el8_10.alma.1.aarch64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libtasn1": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libtasn1", + "sha256": "399a875618670009d0259f55e1eb2bbf6a0e28c3a528188ec50a08e6f7fd8a46", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libtasn1-4.13-5.el8_10.aarch64.rpm", + "version": "4.13" + } + ], + "version": "4.13" + }, + "libtirpc": { + "deps": [ + "glibc", + "krb5-libs", + "libcom_err" + ], + "components": [ + { + "name": "libtirpc", + "sha256": "1521d18c0fd7dd7322833ed54eed5c4cb274dd8e2be05748dba85f30168c5be8", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libtirpc-1.1.4-12.el8_10.aarch64.rpm", + "version": "1.1.4" + } + ], + "version": "1.1.4" + }, + "libtool-ltdl": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libtool-ltdl", + "sha256": "3e5b0981c4ae597f9230b79f8a6183cebc2b0fb8e535d1025850579685fab7c3", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libtool-ltdl-2.4.6-25.el8.aarch64.rpm", + "version": "2.4.6" + } + ], + "version": "2.4.6" + }, + "libunistring": { + "deps": [ + "glibc", + "info" + ], + "components": [ + { + "name": "libunistring", + "sha256": "71cecb0903b0ccbe4f7097354f5b0ce7842d31c4e0bb1267834885d7261bbab6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libunistring-0.9.9-3.el8.aarch64.rpm", + "version": "0.9.9" + } + ], + "version": "0.9.9" + }, + "libutempter": { + "deps": [ + "glibc", + "shadow-utils" + ], + "components": [ + { + "name": "libutempter", + "sha256": "9c8c133026bcb217ecd49fe067304471843a2b0c006f41de05268f3187424c1a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libutempter-1.1.6-14.el8.aarch64.rpm", + "version": "1.1.6" + } + ], + "version": "1.1.6" + }, + "libuuid": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libuuid", + "sha256": "0b14da144539e2c55b0ca17690935d37a6068a2717009bd042da54d7f56c8f9b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libuuid-2.32.1-48.el8_10.aarch64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libverto": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libverto", + "sha256": "fcdc951a3e0b3c998973f2abf8b29027e0e4b7d4554793b08e2ca07feade83e8", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libverto-0.3.2-2.el8.aarch64.rpm", + "version": "0.3.2" + } + ], + "version": "0.3.2" + }, + "libxcrypt": { + "deps": [ + "glibc", + "glibc-headers" + ], + "components": [ + { + "name": "libxcrypt", + "sha256": "b574668ace5378e9c18d278aa776e51c9e65961f1c796c4583783900c87d5bf7", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libxcrypt-4.1.1-6.el8.aarch64.rpm", + "version": "4.1.1" + }, + { + "name": "libxcrypt-devel", + "sha256": "fc5023f66f92382b9124e6ddf3f810a09ce6354f9e59414fa286c2c1e2ab2e24", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libxcrypt-devel-4.1.1-6.el8.aarch64.rpm", + "version": "4.1.1" + } + ], + "version": "4.1.1" + }, + "libxml2": { + "deps": [ + "glibc", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "libxml2", + "sha256": "182b1973ee404c422b8c409d54f20fde6dd1632a82e2f8873f6d96177eafcbc2", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libxml2-2.9.7-21.el8_10.4.aarch64.rpm", + "version": "2.9.7" + } + ], + "version": "2.9.7" + }, + "libzstd": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libzstd", + "sha256": "82ec82f44e4308a411672ed64cc16d288a1f85df2ad395219dc0ad719ff8128d", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/libzstd-1.4.4-1.el8.aarch64.rpm", + "version": "1.4.4" + } + ], + "version": "1.4.4" + }, + "lua-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "lua-libs", + "sha256": "c26cd5535001b7f0aab05be397283ba2820e4ac7563a1bae345537eaa6c8c71a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/lua-libs-5.3.4-12.el8.aarch64.rpm", + "version": "5.3.4" + } + ], + "version": "5.3.4" + }, + "lz4-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "lz4-libs", + "sha256": "776f4041820f19eb268c2e5636463456a7f4f9b8fcd82eb0d4d0ca3effb6a469", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/lz4-libs-1.8.3-5.el8_10.aarch64.rpm", + "version": "1.8.3" + } + ], + "version": "1.8.3" + }, + "make": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "make", + "sha256": "5597338f44dd2519c173d63c45c7b47a21ab2fdc7a69ae7d42793b65e7f45138", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/make-4.2.1-11.el8.aarch64.rpm", + "version": "4.2.1" + } + ], + "version": "4.2.1" + }, + "mpfr": { + "deps": [ + "glibc", + "gmp" + ], + "components": [ + { + "name": "mpfr", + "sha256": "7ecc0d92b62c24cc481f0c7f1b47c3848b85b94b13eba06f50f7f1dab4b9d355", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/mpfr-3.1.6-1.el8.aarch64.rpm", + "version": "3.1.6" + } + ], + "version": "3.1.6" + }, + "ncurses": { + "deps": [ + "glibc", + "ncurses-libs" + ], + "components": [ + { + "name": "ncurses", + "sha256": "cdd535775871dced5b2b9bc2cbac0d37e59d012852ee8b73df651c3909112a29", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/ncurses-6.1-10.20180224.el8.aarch64.rpm", + "version": "6.1" + } + ], + "version": "6.1" + }, + "ncurses-base": { + "deps": [], + "components": [ + { + "name": "ncurses-base", + "sha256": "56b30fb972189c8b0a0522616242d41ae872414c07d33401510340a5ef826114", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/ncurses-base-6.1-10.20180224.el8.noarch.rpm", + "version": "6.1" + } + ], + "version": "6.1" + }, + "ncurses-libs": { + "deps": [ + "glibc", + "ncurses-base" + ], + "components": [ + { + "name": "ncurses-libs", + "sha256": "fad94a1d732fbf21998fda1960dd4a36166d40f0ab1ada08f7adaa95066080d2", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/ncurses-libs-6.1-10.20180224.el8.aarch64.rpm", + "version": "6.1" + } + ], + "version": "6.1" + }, + "nettle": { + "deps": [ + "glibc", + "gmp", + "info" + ], + "components": [ + { + "name": "nettle", + "sha256": "cbdbfd1b9e97a628f2c2409f3c64883a86d7b25a4dbf7ea21ac3ca476098ab7b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/nettle-3.4.1-7.el8.aarch64.rpm", + "version": "3.4.1" + } + ], + "version": "3.4.1" + }, + "openssl-libs": { + "deps": [ + "ca-certificates", + "crypto-policies", + "glibc", + "zlib" + ], + "components": [ + { + "name": "openssl-libs", + "sha256": "7321104a08421b98a123f8e92a8d088d8ab6c6a4fded5772af1e6fbe4060b264", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/openssl-libs-1.1.1k-15.el8_6.aarch64.rpm", + "version": "1.1.1k" + } + ], + "version": "1.1.1k" + }, + "p11-kit": { + "deps": [ + "glibc", + "libffi" + ], + "components": [ + { + "name": "p11-kit", + "sha256": "282dff2840adca8f0d4c5e3495a5ac64dac5059bf16ee516dcdb0a46d523e292", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/p11-kit-0.23.22-2.el8.aarch64.rpm", + "version": "0.23.22" + } + ], + "version": "0.23.22" + }, + "p11-kit-trust": { + "deps": [ + "glibc", + "libtasn1", + "p11-kit" + ], + "components": [ + { + "name": "p11-kit-trust", + "sha256": "ea2a094c066d92c813ab91b62920e11278728a194410f3dc18805a764c13b96e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/p11-kit-trust-0.23.22-2.el8.aarch64.rpm", + "version": "0.23.22" + } + ], + "version": "0.23.22" + }, + "pam": { + "deps": [ + "audit-libs", + "coreutils", + "cracklib", + "glibc", + "libdb", + "libnsl2", + "libpwquality", + "libselinux", + "libtirpc", + "libxcrypt" + ], + "components": [ + { + "name": "pam", + "sha256": "534d201186cb937bd5c9cc46b7f26b771107cf087eb21b17668d628f2bb6dfc4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/pam-1.3.1-39.el8_10.aarch64.rpm", + "version": "1.3.1" + } + ], + "version": "1.3.1" + }, + "pcre": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "pcre", + "sha256": "4190bcd9a67dfa0ca28344ce887208fdd81023a0e52046509466d41b64581020", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/pcre-8.42-6.el8.aarch64.rpm", + "version": "8.42" + } + ], + "version": "8.42" + }, + "pcre2": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "pcre2", + "sha256": "0428a49605bb6b3c549cf8d58f1c336a902a48f875e0989de6ff62832f382930", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/pcre2-10.32-3.el8_6.aarch64.rpm", + "version": "10.32" + } + ], + "version": "10.32" + }, + "platform-python": { + "deps": [ + "chkconfig", + "glibc", + "openssl-libs", + "platform-python-setuptools", + "python3-libs", + "python3-pip-wheel", + "python3-setuptools-wheel" + ], + "components": [ + { + "name": "platform-python", + "sha256": "db1888738e25fb9c40e8f6fa9a969fa4aae72b5137ae1310f294eba06622f96e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/platform-python-3.6.8-76.el8_10.alma.1.aarch64.rpm", + "version": "3.6.8" + } + ], + "version": "3.6.8" + }, + "platform-python-setuptools": { + "deps": [ + "platform-python" + ], + "components": [ + { + "name": "platform-python-setuptools", + "sha256": "0ff89dd1d2d8c3f0fabda65ea9030bf773b3b785b1a39becaf15fe88c902cb9b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/platform-python-setuptools-39.2.0-9.el8_10.noarch.rpm", + "version": "39.2.0" + } + ], + "version": "39.2.0" + }, + "policycoreutils": { + "deps": [ + "audit-libs", + "coreutils", + "diffutils", + "gawk", + "glibc", + "grep", + "libselinux", + "libselinux-utils", + "libsemanage", + "libsepol", + "rpm", + "sed", + "util-linux" + ], + "components": [ + { + "name": "policycoreutils", + "sha256": "7ab59eb4c4ae0e907afc6e5ceb473e0d25af534a46ed6912413b8610e26bf9ff", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/policycoreutils-2.9-26.el8_10.aarch64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "popt": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "popt", + "sha256": "1fc8da9210c93564b66cd29e6a7ed58132c2305f4c801110a6a1b6a665fbb6ee", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/popt-1.18-1.el8.aarch64.rpm", + "version": "1.18" + } + ], + "version": "1.18" + }, + "python3-libs": { + "deps": [ + "bzip2-libs", + "chkconfig", + "expat", + "gdbm", + "gdbm-libs", + "glibc", + "libffi", + "libnsl2", + "libtirpc", + "libxcrypt", + "ncurses-libs", + "openssl-libs", + "platform-python", + "python3-pip-wheel", + "python3-setuptools-wheel", + "readline", + "sqlite-libs", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "python3-libs", + "sha256": "5ececda9ff4d596426752bbdcc089fa3a4c68252883bde8846e48bcdda0d208a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/python3-libs-3.6.8-76.el8_10.alma.1.aarch64.rpm", + "version": "3.6.8" + } + ], + "version": "3.6.8" + }, + "python3-pip-wheel": { + "deps": [], + "components": [ + { + "name": "python3-pip-wheel", + "sha256": "443f856c45bb2d2d617ebf0ec7f6310a248f3193ba9317accdeafa4d8c73597b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/python3-pip-wheel-9.0.3-24.el8.noarch.rpm", + "version": "9.0.3" + } + ], + "version": "9.0.3" + }, + "python3-setuptools-wheel": { + "deps": [], + "components": [ + { + "name": "python3-setuptools-wheel", + "sha256": "45ca7d7f9bcbdf2f214c188e223e149aadd91a5340a342842ddf8f038b680456", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/python3-setuptools-wheel-39.2.0-9.el8_10.noarch.rpm", + "version": "39.2.0" + } + ], + "version": "39.2.0" + }, + "readline": { + "deps": [ + "glibc", + "info", + "ncurses-libs" + ], + "components": [ + { + "name": "readline", + "sha256": "11d1b9cc69208d462b634c0cdb3c5f53cce2d4c4dd371dfeef1a6aae5e1f4831", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/readline-7.0-10.el8.aarch64.rpm", + "version": "7.0" + } + ], + "version": "7.0" + }, + "rpm": { + "deps": [ + "audit-libs", + "bzip2-libs", + "coreutils", + "curl", + "elfutils-libelf", + "glibc", + "libacl", + "libarchive", + "libcap", + "libdb", + "libzstd", + "lua-libs", + "openssl-libs", + "popt", + "rpm-libs", + "sqlite-libs", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "rpm", + "sha256": "117416e9b3cbac48c4dcd9df0395bf90376cf88c0868aedad17e8f7e50d25a6c", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/rpm-4.14.3-32.el8_10.aarch64.rpm", + "version": "4.14.3" + } + ], + "version": "4.14.3" + }, + "rpm-libs": { + "deps": [ + "audit-libs", + "bzip2-libs", + "elfutils-libelf", + "glibc", + "libacl", + "libcap", + "libdb", + "libzstd", + "lua-libs", + "openssl-libs", + "popt", + "rpm", + "sqlite-libs", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "rpm-libs", + "sha256": "2859e1186913cc74971aece90364227ec905a4c1a5affbe1976e7b4c2388e935", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/rpm-libs-4.14.3-32.el8_10.aarch64.rpm", + "version": "4.14.3" + } + ], + "version": "4.14.3" + }, + "scl-utils": { + "deps": [ + "glibc", + "rpm-libs" + ], + "components": [ + { + "name": "scl-utils", + "sha256": "c264312ddd6ee3afa718ee5e63c3333c5d039d39b6103ca3e95e16e40cef17fa", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/scl-utils-2.0.2-16.el8.aarch64.rpm", + "version": "2.0.2" + } + ], + "version": "2.0.2" + }, + "sed": { + "deps": [ + "glibc", + "libacl", + "libselinux" + ], + "components": [ + { + "name": "sed", + "sha256": "a06827f166b4fc778a8203b32ea9ed445740b8c7712cefc9863a332897b2663e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/sed-4.5-5.el8_10.aarch64.rpm", + "version": "4.5" + } + ], + "version": "4.5" + }, + "setup": { + "deps": [ + "almalinux-release" + ], + "components": [ + { + "name": "setup", + "sha256": "6cd3f1697e9fdc4e148b54a3b53803ce42e66687d3e0bea66fd7bdef4065c1c6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/setup-2.12.2-9.el8.noarch.rpm", + "version": "2.12.2" + } + ], + "version": "2.12.2" + }, + "shadow-utils": { + "deps": [ + "audit-libs", + "coreutils", + "glibc", + "libacl", + "libattr", + "libselinux", + "libsemanage", + "libxcrypt", + "setup" + ], + "components": [ + { + "name": "shadow-utils", + "sha256": "3537b95f7bd81ae4e96cbbe7e61057ffe3487959a471682f93f7f9b1b0382ae4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/shadow-utils-4.6-23.el8_10.aarch64.rpm", + "version": "4.6" + } + ], + "version": "4.6" + }, + "source-highlight": { + "deps": [ + "boost-regex", + "ctags", + "glibc", + "info", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "source-highlight", + "sha256": "acb710b6cd0193dc815aadfe827a7fa3015f7cda52122f99b4fd2cb0e2725f9f", + "url": "http://mirror.transip.net/almalinux/8/AppStream/aarch64/os/Packages/source-highlight-3.1.8-18.el8_10.aarch64.rpm", + "version": "3.1.8" + } + ], + "version": "3.1.8" + }, + "sqlite-libs": { + "deps": [ + "glibc", + "zlib" + ], + "components": [ + { + "name": "sqlite-libs", + "sha256": "f7d5a32721fe5948a713a128f50f9b06eb09fe22fae720e35ad66574c9c510ea", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/sqlite-libs-3.26.0-20.el8_10.aarch64.rpm", + "version": "3.26.0" + } + ], + "version": "3.26.0" + }, + "systemd-libs": { + "deps": [ + "coreutils", + "glibc", + "grep", + "libcap", + "libgcc", + "libgcrypt", + "libmount", + "lz4-libs", + "sed", + "xz-libs" + ], + "components": [ + { + "name": "systemd-libs", + "sha256": "0ddbd589eb51bd711834548c90e9cd755a2ae1f051c452962b268d1e718ddd39", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/systemd-libs-239-82.el8_10.16.aarch64.rpm", + "version": "239" + } + ], + "version": "239" + }, + "tzdata": { + "deps": [], + "components": [ + { + "name": "tzdata", + "sha256": "c2e125c696d08c2cba6fc8c5a13fbc5b9813dee001d78f94c4e421ebaa6e3d28", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/tzdata-2026a-1.el8.noarch.rpm", + "version": "2026a" + } + ], + "version": "2026a" + }, + "util-linux": { + "deps": [ + "audit-libs", + "coreutils", + "glibc", + "libblkid", + "libcap-ng", + "libfdisk", + "libmount", + "libselinux", + "libsmartcols", + "libutempter", + "libuuid", + "libxcrypt", + "ncurses-libs", + "pam", + "systemd-libs", + "zlib" + ], + "components": [ + { + "name": "util-linux", + "sha256": "3887997be439c7866cc972bcd74fc1a79062dc24fea5a3804614bbcea1d76970", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/util-linux-2.32.1-48.el8_10.aarch64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "xz-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "xz-libs", + "sha256": "eb1bf61e0b1635d73c0f8abda8a892d3facb8112fa5dbeb0865a7bdfacb4298a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/xz-libs-5.2.4-4.el8_6.aarch64.rpm", + "version": "5.2.4" + } + ], + "version": "5.2.4" + }, + "zlib": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "zlib", + "sha256": "2822e566148dd0d50844f53830f24864bfb0e68a9f2bb7cb741e78da99bfd0ed", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/aarch64/os/Packages/zlib-1.2.11-25.el8.aarch64.rpm", + "version": "1.2.11" + } + ], + "version": "1.2.11" + } +} diff --git a/nix-builder/pkgs/manylinux/manylinux-2.28-x86_64-metadata.json b/nix-builder/pkgs/manylinux/manylinux-2.28-x86_64-metadata.json new file mode 100644 index 00000000..0d112086 --- /dev/null +++ b/nix-builder/pkgs/manylinux/manylinux-2.28-x86_64-metadata.json @@ -0,0 +1,2455 @@ +{ + "almalinux-release": { + "deps": [], + "components": [ + { + "name": "almalinux-release", + "sha256": "9ce3ce272a37dfabfa37d8aa4da897bd6dc01f76ef34760963d44dd3847afa2c", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/almalinux-release-8.10-1.el8.x86_64.rpm", + "version": "8.10" + } + ], + "version": "8.10" + }, + "audit-libs": { + "deps": [ + "glibc", + "libcap-ng" + ], + "components": [ + { + "name": "audit-libs", + "sha256": "9b4c830690bed3bc9f27439617a9b806e55617f2a3e2ab7cf6f28118adeffd41", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/audit-libs-3.1.2-1.el8_10.1.x86_64.rpm", + "version": "3.1.2" + } + ], + "version": "3.1.2" + }, + "basesystem": { + "deps": [ + "filesystem", + "setup" + ], + "components": [ + { + "name": "basesystem", + "sha256": "768adcb1b03491f8c8e1c283577130b51f5a3d6215eb6667605d8996219b85a0", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/basesystem-11-5.el8.noarch.rpm", + "version": "11" + } + ], + "version": "11" + }, + "bash": { + "deps": [ + "filesystem", + "glibc", + "ncurses-libs" + ], + "components": [ + { + "name": "bash", + "sha256": "609b514fd9cb1321505861dd34e70e1967b8539244fee1130e0a85a2fe9f5768", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/bash-4.4.20-6.el8_10.x86_64.rpm", + "version": "4.4.20" + } + ], + "version": "4.4.20" + }, + "boost-regex": { + "deps": [ + "glibc", + "libgcc", + "libicu", + "libstdcxx" + ], + "components": [ + { + "name": "boost-regex", + "sha256": "8c42c506b94c74fa722cf92203637c0830952f0e839981bd5ede936cbb1a33fd", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/boost-regex-1.66.0-13.el8.x86_64.rpm", + "version": "1.66.0" + } + ], + "version": "1.66.0" + }, + "bzip2-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "bzip2-libs", + "sha256": "e59bd9d2773dcd2410166e3bcdb7376f0b2eff58e75109a73120e725ae0b5c75", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/bzip2-libs-1.0.6-28.el8_10.x86_64.rpm", + "version": "1.0.6" + } + ], + "version": "1.0.6" + }, + "ca-certificates": { + "deps": [ + "bash", + "coreutils", + "grep", + "p11-kit", + "p11-kit-trust", + "sed" + ], + "components": [ + { + "name": "ca-certificates", + "sha256": "517e00ad205d42f2c1f2aa8e9ab54024805e1cf3482c6a8821c8b92fa5198cc9", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/ca-certificates-2025.2.80_v9.0.304-80.2.el8_10.noarch.rpm", + "version": "2025.2.80_v9.0.304" + } + ], + "version": "2025.2.80_v9.0.304" + }, + "chkconfig": { + "deps": [ + "glibc", + "libselinux", + "libsepol", + "popt" + ], + "components": [ + { + "name": "chkconfig", + "sha256": "c43235896f9a3685362d8cbaf6dd3237bdbf7dcc104d1127a8f83c5436bb4e1e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/chkconfig-1.19.2-1.el8.x86_64.rpm", + "version": "1.19.2" + } + ], + "version": "1.19.2" + }, + "coreutils": { + "deps": [ + "coreutils-common", + "glibc", + "gmp", + "libacl", + "libattr", + "libcap", + "libselinux", + "ncurses", + "openssl-libs" + ], + "components": [ + { + "name": "coreutils", + "sha256": "be3875b4493e06b66466c5daf7e3c48e46337304f40f8293682fdcb48b94537e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/coreutils-8.30-17.el8_10.x86_64.rpm", + "version": "8.30" + } + ], + "version": "8.30" + }, + "coreutils-common": { + "deps": [], + "components": [ + { + "name": "coreutils-common", + "sha256": "17e5813bbf4df9852d07b673de945b5d002e7e4c05b00bbdb6d970bd94118f29", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/coreutils-common-8.30-17.el8_10.x86_64.rpm", + "version": "8.30" + } + ], + "version": "8.30" + }, + "cracklib": { + "deps": [ + "glibc", + "gzip", + "zlib" + ], + "components": [ + { + "name": "cracklib", + "sha256": "5d0b69be590d57a28c7fa26b05ac801ab4325b94933c9b0c077616bc4dac8df2", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/cracklib-2.9.6-15.el8.x86_64.rpm", + "version": "2.9.6" + } + ], + "version": "2.9.6" + }, + "cracklib-dicts": { + "deps": [ + "cracklib" + ], + "components": [ + { + "name": "cracklib-dicts", + "sha256": "3d37b903be1d431e3d5fca1bc476f6122a8dddba5f0882a5a1f1517630333cd2", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/cracklib-dicts-2.9.6-15.el8.x86_64.rpm", + "version": "2.9.6" + } + ], + "version": "2.9.6" + }, + "crypto-policies": { + "deps": [], + "components": [ + { + "name": "crypto-policies", + "sha256": "92478e2a26b2318fd39880bfd95aedb6c7d63330b65bddd2571c59ed716d5ed4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/crypto-policies-20230731-1.git3177e06.el8.noarch.rpm", + "version": "20230731" + } + ], + "version": "20230731" + }, + "ctags": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "ctags", + "sha256": "4867499ecc7cdf0656dd6b2abaf8e615a0bd233b419311a86a4fe1781b2e738a", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/ctags-5.8-23.el8.x86_64.rpm", + "version": "5.8" + } + ], + "version": "5.8" + }, + "curl": { + "deps": [ + "glibc", + "libcurl-minimal", + "openssl-libs", + "zlib" + ], + "components": [ + { + "name": "curl", + "sha256": "466915c5434852f7027c2a61ad90f08a3118f5f0ce14d121edd577c45b9a4572", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/curl-7.61.1-34.el8_10.11.x86_64.rpm", + "version": "7.61.1" + } + ], + "version": "7.61.1" + }, + "diffutils": { + "deps": [ + "glibc", + "info" + ], + "components": [ + { + "name": "diffutils", + "sha256": "6a4a315f5dbfedfa5d8483552019acfb9dd904b93e8dd0e8a4436905a00a7d3b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/diffutils-3.6-6.el8.x86_64.rpm", + "version": "3.6" + } + ], + "version": "3.6" + }, + "elfutils-debuginfod-client": { + "deps": [ + "elfutils-libelf", + "elfutils-libs", + "glibc", + "libcurl-minimal" + ], + "components": [ + { + "name": "elfutils-debuginfod-client", + "sha256": "5ce6e3b29c9f072ee7a7e94d5804883e699e2e6629adf4bcf11342e68777c527", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/elfutils-debuginfod-client-0.190-2.el8.alma.1.x86_64.rpm", + "version": "0.190" + } + ], + "version": "0.190" + }, + "elfutils-default-yama-scope": { + "deps": [], + "components": [ + { + "name": "elfutils-default-yama-scope", + "sha256": "f9e0bbe4614241fdbce4f2b9145cb7ec144b728859048dc611fd612d63f58058", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/elfutils-default-yama-scope-0.190-2.el8.alma.1.noarch.rpm", + "version": "0.190" + } + ], + "version": "0.190" + }, + "elfutils-libelf": { + "deps": [ + "bzip2-libs", + "glibc", + "libzstd", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "elfutils-libelf", + "sha256": "7b1d2ed47b2cc304eb086e1da22361558d08ab3d11d95905ca3a03ed403afd9a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/elfutils-libelf-0.190-2.el8.alma.1.x86_64.rpm", + "version": "0.190" + } + ], + "version": "0.190" + }, + "elfutils-libs": { + "deps": [ + "bzip2-libs", + "elfutils-default-yama-scope", + "elfutils-libelf", + "glibc", + "libzstd", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "elfutils-libs", + "sha256": "3ced452c3209ed34c850ece3045777f725c92341343d3b4d4919c77a826bf229", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/elfutils-libs-0.190-2.el8.alma.1.x86_64.rpm", + "version": "0.190" + } + ], + "version": "0.190" + }, + "expat": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "expat", + "sha256": "597882911bee2e95b11f72157088f376890f8894386992d558f7c2d0f0f30ece", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/expat-2.5.0-1.el8_10.x86_64.rpm", + "version": "2.5.0" + } + ], + "version": "2.5.0" + }, + "filesystem": { + "deps": [ + "setup" + ], + "components": [ + { + "name": "filesystem", + "sha256": "33ec199b7ef8565770427e4ead345e75b5d8e96ffbe33f0235ae088ee4726361", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/filesystem-3.8-6.el8.x86_64.rpm", + "version": "3.8" + } + ], + "version": "3.8" + }, + "gawk": { + "deps": [ + "filesystem", + "glibc", + "gmp", + "libsigsegv", + "mpfr", + "readline" + ], + "components": [ + { + "name": "gawk", + "sha256": "144535cb8d02b969d694d6a01754d98656f841aec5f2342037a0e35723784776", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/gawk-4.2.1-4.el8.x86_64.rpm", + "version": "4.2.1" + } + ], + "version": "4.2.1" + }, + "gc": { + "deps": [ + "glibc", + "libatomic_ops", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "gc", + "sha256": "d92d65317d42de76860dc55f9f33d66eb3f82aee5a5b7e43d4a832169bcf2768", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gc-7.6.4-3.el8.x86_64.rpm", + "version": "7.6.4" + } + ], + "version": "7.6.4" + }, + "gcc-toolset-13": { + "deps": [ + "gcc-toolset-13-annobin-plugin-gcc", + "gcc-toolset-13-binutils", + "gcc-toolset-13-dwz", + "gcc-toolset-13-gcc", + "gcc-toolset-13-gcc-cxx", + "gcc-toolset-13-gcc-gfortran", + "gcc-toolset-13-gdb", + "gcc-toolset-13-runtime" + ], + "components": [ + { + "name": "gcc-toolset-13", + "sha256": "642034c87aa1c862f2f5c08f98371adf6f66c3b0ad9ff788699af54814bf92bb", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-13.0-2.el8.x86_64.rpm", + "version": "13.0" + } + ], + "version": "13.0" + }, + "gcc-toolset-13-annobin-docs": { + "deps": [ + "gcc-toolset-13-runtime" + ], + "components": [ + { + "name": "gcc-toolset-13-annobin-docs", + "sha256": "9382788cefa3df15656a744cbfcf48042b8bacaa5da2e694df1d5484f7f0c784", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-annobin-docs-12.92-1.el8_10.noarch.rpm", + "version": "12.92" + } + ], + "version": "12.92" + }, + "gcc-toolset-13-annobin-plugin-gcc": { + "deps": [ + "gcc-toolset-13-annobin-docs", + "gcc-toolset-13-runtime", + "glibc", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-13-annobin-plugin-gcc", + "sha256": "948a6974078c86f4ba61afa55b309bc1f102afd6b46625479cf1897d0b6defb5", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-annobin-plugin-gcc-12.92-1.el8_10.x86_64.rpm", + "version": "12.92" + } + ], + "version": "12.92" + }, + "gcc-toolset-13-binutils": { + "deps": [ + "coreutils", + "elfutils-debuginfod-client", + "gcc-toolset-13-binutils-gold", + "gcc-toolset-13-runtime", + "glibc", + "jansson", + "libgcc", + "libstdcxx", + "policycoreutils" + ], + "components": [ + { + "name": "gcc-toolset-13-binutils", + "sha256": "cad37a92c03fb7876fc2c36e34c77c3159447f32c294e6e2a842374e9011c5e7", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-binutils-2.40-21.el8.x86_64.rpm", + "version": "2.40" + } + ], + "version": "2.40" + }, + "gcc-toolset-13-binutils-gold": { + "deps": [ + "gcc-toolset-13-binutils", + "gcc-toolset-13-runtime", + "glibc", + "jansson", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-13-binutils-gold", + "sha256": "34f7fcaeb5490edfc9968c19aa60fb515b8da5b32eb81e2b523604c4c3f81c1a", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-binutils-gold-2.40-21.el8.x86_64.rpm", + "version": "2.40" + } + ], + "version": "2.40" + }, + "gcc-toolset-13-dwz": { + "deps": [ + "elfutils-libelf", + "gcc-toolset-13-runtime", + "glibc" + ], + "components": [ + { + "name": "gcc-toolset-13-dwz", + "sha256": "8e19a2c6d5a719cd5332bf2d22e95bdd14d86bf2d7e1e798435bac56e79ad4e2", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-dwz-0.14-0.el8.x86_64.rpm", + "version": "0.14" + } + ], + "version": "0.14" + }, + "gcc-toolset-13-gcc": { + "deps": [ + "gcc-toolset-13-binutils", + "gcc-toolset-13-runtime", + "glibc", + "gmp", + "libgcc", + "libgomp", + "libmpc", + "libzstd", + "make", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-13-gcc", + "sha256": "b6680896f26484930f5195af66539746196e32fdc3eb1e9c343c82be40fd3b36", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-gcc-13.3.1-2.2.el8_10.x86_64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-gcc-cxx": { + "deps": [ + "gcc-toolset-13-gcc", + "gcc-toolset-13-libstdcxx-devel", + "gcc-toolset-13-runtime", + "glibc", + "gmp", + "libmpc", + "libstdcxx", + "libzstd", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-13-gcc-cxx", + "sha256": "cba19230d63e1c6f220ab9b61f941ab20dfd2c9e81aed82545961cbe83ecf523", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-gcc-c++-13.3.1-2.2.el8_10.x86_64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-gcc-gfortran": { + "deps": [ + "gcc-toolset-13-gcc", + "gcc-toolset-13-libquadmath-devel", + "gcc-toolset-13-runtime", + "glibc", + "gmp", + "libgfortran", + "libmpc", + "libzstd", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-13-gcc-gfortran", + "sha256": "a7edd6dff8e951ef521f510eb6cb6590dfb38f6bfcce1b043c3ff8cd97dafea3", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-gcc-gfortran-13.3.1-2.2.el8_10.x86_64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-gdb": { + "deps": [ + "boost-regex", + "elfutils-debuginfod-client", + "expat", + "gcc-toolset-13-runtime", + "glibc", + "gmp", + "guile", + "libbabeltrace", + "libgcc", + "libipt", + "libstdcxx", + "mpfr", + "ncurses-libs", + "python3-libs", + "readline", + "source-highlight", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-13-gdb", + "sha256": "139e168f7154554af6f1df69139c594fd52f631dc4a4c319b2cc56f72dff519d", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-gdb-12.1-4.el8.x86_64.rpm", + "version": "12.1" + } + ], + "version": "12.1" + }, + "gcc-toolset-13-libquadmath-devel": { + "deps": [ + "gcc-toolset-13-gcc", + "gcc-toolset-13-runtime", + "libquadmath" + ], + "components": [ + { + "name": "gcc-toolset-13-libquadmath-devel", + "sha256": "db6941bda4b3944e479d04dee0e5b343437aa8ce40a4ea12f1e6da4740565afa", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-libquadmath-devel-13.3.1-2.2.el8_10.x86_64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-libstdcxx-devel": { + "deps": [ + "gcc-toolset-13-runtime", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-13-libstdcxx-devel", + "sha256": "5d0a8e7231f2d970943b6faf44c64cb1130af1f041e85966a3d9e383c6c3943f", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-libstdc++-devel-13.3.1-2.2.el8_10.x86_64.rpm", + "version": "13.3.1" + } + ], + "version": "13.3.1" + }, + "gcc-toolset-13-runtime": { + "deps": [ + "scl-utils" + ], + "components": [ + { + "name": "gcc-toolset-13-runtime", + "sha256": "763b3a9001290630be2bee2a35d36e87bea6a60d15d817a8ce1338d6402fdbc0", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-13-runtime-13.0-2.el8.x86_64.rpm", + "version": "13.0" + } + ], + "version": "13.0" + }, + "gcc-toolset-14": { + "deps": [ + "gcc-toolset-14-annobin-plugin-gcc", + "gcc-toolset-14-binutils", + "gcc-toolset-14-dwz", + "gcc-toolset-14-gcc", + "gcc-toolset-14-gcc-cxx", + "gcc-toolset-14-gcc-gfortran", + "gcc-toolset-14-gdb", + "gcc-toolset-14-runtime" + ], + "components": [ + { + "name": "gcc-toolset-14", + "sha256": "6cde8ed8504b36b0d7ce223d1b94bf497a55c77f20776a9252b1725adfe9f66d", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-14.0-1.el8_10.x86_64.rpm", + "version": "14.0" + } + ], + "version": "14.0" + }, + "gcc-toolset-14-annobin-docs": { + "deps": [ + "gcc-toolset-14-runtime" + ], + "components": [ + { + "name": "gcc-toolset-14-annobin-docs", + "sha256": "24a3dab3dedb1cabbfaa077ff869d8388da737368c25a8b60e0fc25d3298033d", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-annobin-docs-12.88-1.el8_10.noarch.rpm", + "version": "12.88" + } + ], + "version": "12.88" + }, + "gcc-toolset-14-annobin-plugin-gcc": { + "deps": [ + "gcc-toolset-14-annobin-docs", + "gcc-toolset-14-gcc", + "gcc-toolset-14-runtime", + "glibc", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-14-annobin-plugin-gcc", + "sha256": "1c8b6c5d7b0333f5a0782c1cadaee676149484b0d169eb45cae3e9e2e175dbe3", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-annobin-plugin-gcc-12.88-1.el8_10.x86_64.rpm", + "version": "12.88" + } + ], + "version": "12.88" + }, + "gcc-toolset-14-binutils": { + "deps": [ + "coreutils", + "elfutils-debuginfod-client", + "gcc-toolset-14-runtime", + "glibc", + "jansson", + "libgcc", + "libstdcxx", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-binutils", + "sha256": "d9db391079c211af684948eead9b2d8232a5fc7f9e7432af89b81e6e8884e2de", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-binutils-2.41-4.el8_10.1.x86_64.rpm", + "version": "2.41" + } + ], + "version": "2.41" + }, + "gcc-toolset-14-dwz": { + "deps": [ + "elfutils-libelf", + "gcc-toolset-14-runtime", + "glibc" + ], + "components": [ + { + "name": "gcc-toolset-14-dwz", + "sha256": "6cc7b25f235476769f8d1f9a3f601eee34e6092e39a4038f9bba98b985e188e4", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-dwz-0.14-0.el8_10.x86_64.rpm", + "version": "0.14" + } + ], + "version": "0.14" + }, + "gcc-toolset-14-gcc": { + "deps": [ + "gcc-toolset-14-binutils", + "gcc-toolset-14-runtime", + "glibc", + "gmp", + "libgcc", + "libgomp", + "libmpc", + "libzstd", + "make", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-gcc", + "sha256": "336def96706bc74cfacb9866a9f7d8dbafc479983ff261cba745800ad4216a58", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-gcc-14.2.1-11.el8_10.x86_64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-gcc-cxx": { + "deps": [ + "gcc-toolset-14-gcc", + "gcc-toolset-14-libstdcxx-devel", + "gcc-toolset-14-runtime", + "glibc", + "gmp", + "libmpc", + "libstdcxx", + "libzstd", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-gcc-cxx", + "sha256": "b611732d623d43ab780e6f70ee5300b94f68dbcd490f687b6b407cfaf2ffe8bf", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-gcc-c++-14.2.1-11.el8_10.x86_64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-gcc-gfortran": { + "deps": [ + "gcc-toolset-14-gcc", + "gcc-toolset-14-libquadmath-devel", + "gcc-toolset-14-runtime", + "glibc", + "gmp", + "libgfortran", + "libmpc", + "libzstd", + "mpfr", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-gcc-gfortran", + "sha256": "72309da01a3f22e82b2158ff2b61018f2708018ca3d5ffbfa2d6da6754b9f863", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-gcc-gfortran-14.2.1-11.el8_10.x86_64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-gdb": { + "deps": [ + "boost-regex", + "elfutils-debuginfod-client", + "expat", + "gcc-toolset-14-runtime", + "glibc", + "gmp", + "guile", + "libbabeltrace", + "libgcc", + "libipt", + "libstdcxx", + "libzstd", + "mpfr", + "ncurses-libs", + "python3-libs", + "readline", + "source-highlight", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "gcc-toolset-14-gdb", + "sha256": "a70969abc20474c4920264e2da93a1dd1cccd18f097daea8b12ce426635c4c28", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-gdb-14.2-3.el8_10.x86_64.rpm", + "version": "14.2" + } + ], + "version": "14.2" + }, + "gcc-toolset-14-libquadmath-devel": { + "deps": [ + "gcc-toolset-14-gcc", + "gcc-toolset-14-runtime", + "libquadmath" + ], + "components": [ + { + "name": "gcc-toolset-14-libquadmath-devel", + "sha256": "75214ae7d32e5dc0606eca94135bbd86d0e3cd16d7b6d8b3b7b617ded31eb1ea", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-libquadmath-devel-14.2.1-11.el8_10.x86_64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-libstdcxx-devel": { + "deps": [ + "gcc-toolset-14-runtime", + "libstdcxx" + ], + "components": [ + { + "name": "gcc-toolset-14-libstdcxx-devel", + "sha256": "a5306cbaa5f3223de9320374aeac00dbddee817e11bab3c8217e33a131eca0a1", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-libstdc++-devel-14.2.1-11.el8_10.x86_64.rpm", + "version": "14.2.1" + } + ], + "version": "14.2.1" + }, + "gcc-toolset-14-runtime": { + "deps": [ + "scl-utils" + ], + "components": [ + { + "name": "gcc-toolset-14-runtime", + "sha256": "e66f892c1b74ac3848ce8b2b8b70f3d3b69fad90e67025c2399aba37e5bc2afa", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/gcc-toolset-14-runtime-14.0-1.el8_10.x86_64.rpm", + "version": "14.0" + } + ], + "version": "14.0" + }, + "gdbm": { + "deps": [ + "gdbm-libs", + "glibc", + "ncurses-libs", + "readline" + ], + "components": [ + { + "name": "gdbm", + "sha256": "affe0fe625de1fd2b206dac25d55e791b357968f05b3d413a090ea58c07d64f4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/gdbm-1.18-2.el8.x86_64.rpm", + "version": "1.18" + } + ], + "version": "1.18" + }, + "gdbm-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "gdbm-libs", + "sha256": "eb4f65b534d3fc117c6a77ec5079deee12061e1721b13dbc748a1d8785436b4b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/gdbm-libs-1.18-2.el8.x86_64.rpm", + "version": "1.18" + } + ], + "version": "1.18" + }, + "glib2": { + "deps": [ + "glibc", + "gnutls", + "libffi", + "libgcc", + "libmount", + "libselinux", + "pcre", + "zlib" + ], + "components": [ + { + "name": "glib2", + "sha256": "2316d3b9b9de67471cd86eba4797ce6d5d25f92b3cdab74abf9ec2c7e057a6c5", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/glib2-2.56.4-169.el8_10.x86_64.rpm", + "version": "2.56.4" + } + ], + "version": "2.56.4" + }, + "glibc": { + "deps": [ + "basesystem", + "glibc-common", + "glibc-headers", + "glibc-minimal-langpack", + "libgcc", + "libxcrypt" + ], + "components": [ + { + "name": "glibc", + "sha256": "216787755575c64bab0c777b99941853e95d22f62d3da94ea686de16067a2d8b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/glibc-2.28-251.el8_10.34.x86_64.rpm", + "version": "2.28" + }, + { + "name": "glibc-devel", + "sha256": "afa940d003f3817abdbae6a5df49aa197233719f32b4811e3021b5717daf3819", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/glibc-devel-2.28-251.el8_10.34.x86_64.rpm", + "version": "2.28" + } + ], + "version": "2.28" + }, + "glibc-common": { + "deps": [ + "glibc", + "libselinux", + "tzdata" + ], + "components": [ + { + "name": "glibc-common", + "sha256": "c36be8adcc6221d6f29cc660218e9c7eb984d54c097aa22ed1594d7eb4fb0120", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/glibc-common-2.28-251.el8_10.34.x86_64.rpm", + "version": "2.28" + } + ], + "version": "2.28" + }, + "glibc-headers": { + "deps": [ + "glibc", + "kernel-headers" + ], + "components": [ + { + "name": "glibc-headers", + "sha256": "965efca837a45b5496cdc3d3aadc5750e2694cdafe2e652d5e8131ff9f1ef182", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/glibc-headers-2.28-251.el8_10.34.x86_64.rpm", + "version": "2.28" + } + ], + "version": "2.28" + }, + "glibc-minimal-langpack": { + "deps": [ + "glibc", + "glibc-common" + ], + "components": [ + { + "name": "glibc-minimal-langpack", + "sha256": "dfe4f2321bd83de4f7f702e71df4457bdef324c6666a01c8ea53526564faa6f8", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/glibc-minimal-langpack-2.28-251.el8_10.34.x86_64.rpm", + "version": "2.28" + } + ], + "version": "2.28" + }, + "gmp": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "gmp", + "sha256": "472a114e6d62e63c5c0dc82773d38b37e532602662d809560d46baf55816e56c", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/gmp-6.1.2-11.el8.x86_64.rpm", + "version": "6.1.2" + } + ], + "version": "6.1.2" + }, + "gnutls": { + "deps": [ + "crypto-policies", + "glibc", + "gmp", + "libidn2", + "libtasn1", + "libunistring", + "nettle", + "p11-kit", + "p11-kit-trust" + ], + "components": [ + { + "name": "gnutls", + "sha256": "8d645481b1de4eaaea8289996b5d9331a3560a127f53d3ca646cc03677ab9bc3", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/gnutls-3.6.16-8.el8_10.5.x86_64.rpm", + "version": "3.6.16" + } + ], + "version": "3.6.16" + }, + "grep": { + "deps": [ + "glibc", + "pcre" + ], + "components": [ + { + "name": "grep", + "sha256": "8b6a87ddd82473d4549bfed0e4070e898a3cf1d842e55af19edf86f79013d98b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/grep-3.1-6.el8.x86_64.rpm", + "version": "3.1" + } + ], + "version": "3.1" + }, + "guile": { + "deps": [ + "coreutils", + "gc", + "glibc", + "gmp", + "libffi", + "libtool-ltdl", + "libunistring", + "libxcrypt", + "ncurses-libs", + "readline" + ], + "components": [ + { + "name": "guile", + "sha256": "8edc3f76bbb51388e523595e77daf80c129e6b5b5a81ddf626e885bdc5836371", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/guile-2.0.14-7.el8.x86_64.rpm", + "version": "2.0.14" + } + ], + "version": "2.0.14" + }, + "gzip": { + "deps": [ + "coreutils", + "glibc" + ], + "components": [ + { + "name": "gzip", + "sha256": "e4ece722b559e9e1c70697376006130e5293d1ae10ca9f0b2dbb763ee1b4684e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/gzip-1.9-13.el8_5.x86_64.rpm", + "version": "1.9" + } + ], + "version": "1.9" + }, + "info": { + "deps": [ + "glibc", + "ncurses-libs", + "zlib" + ], + "components": [ + { + "name": "info", + "sha256": "6a8d057a8ad1e42b2c0dd17c9ea882a9d9946540fd479e32086551dfdf4b3bc4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/info-6.5-7.el8.x86_64.rpm", + "version": "6.5" + } + ], + "version": "6.5" + }, + "jansson": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "jansson", + "sha256": "43473522bff88d30d1adc8776cb26b9bd1b3bf4ecd1a00ae9f659c7c0e68f81d", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/jansson-2.14-1.el8.x86_64.rpm", + "version": "2.14" + } + ], + "version": "2.14" + }, + "kernel-headers": { + "deps": [], + "components": [ + { + "name": "kernel-headers", + "sha256": "3d3bd2db39d447edc70f6b64a61830024a4ebb7e2d851fb827ea7ddbac2550e6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/kernel-headers-4.18.0-553.el8_10.x86_64.rpm", + "version": "4.18.0" + } + ], + "version": "4.18.0" + }, + "keyutils-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "keyutils-libs", + "sha256": "a4ea8367bcedc758a3d0978f4ec53315847ac0397fe578efdd0e52ab4ad985f5", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/keyutils-libs-1.5.10-9.el8.x86_64.rpm", + "version": "1.5.10" + } + ], + "version": "1.5.10" + }, + "krb5-libs": { + "deps": [ + "coreutils", + "gawk", + "glibc", + "grep", + "keyutils-libs", + "libcom_err", + "libselinux", + "libverto", + "openssl-libs", + "sed" + ], + "components": [ + { + "name": "krb5-libs", + "sha256": "fccdb0b269912b7a8e43c8eb2a33fa64bc10d2976efeaaa7702aa4462d901c2d", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/krb5-libs-1.18.2-34.el8_10.x86_64.rpm", + "version": "1.18.2" + } + ], + "version": "1.18.2" + }, + "libacl": { + "deps": [ + "glibc", + "libattr" + ], + "components": [ + { + "name": "libacl", + "sha256": "627d74ecef2469fbad239c5d8c3efa61c641e1a5f036dac59d59ef39bc90da96", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libacl-2.2.53-3.el8.x86_64.rpm", + "version": "2.2.53" + } + ], + "version": "2.2.53" + }, + "libarchive": { + "deps": [ + "bzip2-libs", + "glibc", + "libacl", + "libxml2", + "libzstd", + "lz4-libs", + "openssl-libs", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "libarchive", + "sha256": "031ea6c9f9af8a18bc79d48dacdfdb38103bd942ef2996837f57326791b1bbcf", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libarchive-3.3.3-7.el8_10.x86_64.rpm", + "version": "3.3.3" + } + ], + "version": "3.3.3" + }, + "libatomic_ops": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libatomic_ops", + "sha256": "bf4d8314f13614eb18bfe82eb580d1b7c1b308c7b0b2f591246b1c99ba40d473", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/libatomic_ops-7.6.2-3.el8.x86_64.rpm", + "version": "7.6.2" + } + ], + "version": "7.6.2" + }, + "libattr": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libattr", + "sha256": "c42cd6fc0ab1b6807487f76e7af37994a43b93e51a32bd85a8d75f898dea6a27", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libattr-2.4.48-3.el8.x86_64.rpm", + "version": "2.4.48" + } + ], + "version": "2.4.48" + }, + "libbabeltrace": { + "deps": [ + "elfutils-libelf", + "elfutils-libs", + "glib2", + "glibc", + "libuuid", + "popt" + ], + "components": [ + { + "name": "libbabeltrace", + "sha256": "4be1dea481b13debfb97bd3f146e1778fd448315b400b9583b1ee7f40b9eb48d", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libbabeltrace-1.5.4-4.el8.x86_64.rpm", + "version": "1.5.4" + } + ], + "version": "1.5.4" + }, + "libblkid": { + "deps": [ + "coreutils", + "glibc", + "libuuid" + ], + "components": [ + { + "name": "libblkid", + "sha256": "23ff222f6433aa621f762faf867e24e274aa66ef9c9d650dfe4655ced68a7c69", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libblkid-2.32.1-48.el8_10.x86_64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libcap": { + "deps": [ + "glibc", + "libgcc" + ], + "components": [ + { + "name": "libcap", + "sha256": "4f50fe58deae1286da3f4d86192257149cd4502afcb7f485bf2918c44e6c2afd", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libcap-2.48-6.el8_10.1.x86_64.rpm", + "version": "2.48" + } + ], + "version": "2.48" + }, + "libcap-ng": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libcap-ng", + "sha256": "b2043b033c16f932960e778b871c5899f4a99eb9194ac0588696fc0f64e3ba35", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libcap-ng-0.7.11-1.el8.x86_64.rpm", + "version": "0.7.11" + } + ], + "version": "0.7.11" + }, + "libcom_err": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libcom_err", + "sha256": "07d47ada3925fbbe765d1f1190464e4d04acd89541f92f54ab03a14d4e23d904", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libcom_err-1.45.6-7.el8_10.x86_64.rpm", + "version": "1.45.6" + } + ], + "version": "1.45.6" + }, + "libcurl-minimal": { + "deps": [ + "glibc", + "krb5-libs", + "libcom_err", + "libnghttp2", + "openssl-libs", + "zlib" + ], + "components": [ + { + "name": "libcurl-minimal", + "sha256": "0181af36efa88e30b4f076a2068dbc088deece6e39f41923a21eafe2ed605234", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libcurl-minimal-7.61.1-34.el8_10.11.x86_64.rpm", + "version": "7.61.1" + } + ], + "version": "7.61.1" + }, + "libdb": { + "deps": [ + "glibc", + "openssl-libs" + ], + "components": [ + { + "name": "libdb", + "sha256": "da390da03d4d2038e845b603f107699e6616c38462c80df8f012cd5d3eb78186", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libdb-5.3.28-42.el8_4.x86_64.rpm", + "version": "5.3.28" + } + ], + "version": "5.3.28" + }, + "libfdisk": { + "deps": [ + "glibc", + "libblkid", + "libuuid" + ], + "components": [ + { + "name": "libfdisk", + "sha256": "06ea29f4748eb1fb49191389d4aa871390b5a30702f7b003fb4405154a3c9192", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libfdisk-2.32.1-48.el8_10.x86_64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libffi": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libffi", + "sha256": "baa22d471c0ab0d17ab1ba372a262df3c50d6430af4259a4065dfccf0529324a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libffi-3.1-24.el8.x86_64.rpm", + "version": "3.1" + } + ], + "version": "3.1" + }, + "libgcc": { + "deps": [], + "components": [ + { + "name": "libgcc", + "sha256": "629a08266f7c1397c00d7c32c0ac6d110fe56e993dcf94024559aa28a570f18d", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libgcc-8.5.0-28.el8_10.alma.1.x86_64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libgcrypt": { + "deps": [ + "glibc", + "libgpg-error" + ], + "components": [ + { + "name": "libgcrypt", + "sha256": "dcfe1f4d19c8ade6902d188949e902971a5b0807643e1c37f0419340ac890a64", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libgcrypt-1.8.5-7.el8_6.x86_64.rpm", + "version": "1.8.5" + } + ], + "version": "1.8.5" + }, + "libgfortran": { + "deps": [ + "glibc", + "libgcc", + "libquadmath", + "zlib" + ], + "components": [ + { + "name": "libgfortran", + "sha256": "9a32e0f526dff21a2cc891d0bbc174ce6f1c70d6e232f806e962907ae575aba5", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libgfortran-8.5.0-28.el8_10.alma.1.x86_64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libgomp": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libgomp", + "sha256": "fba0574d69f6a946696c031e834312f428fe585a4a7842906fc4353ca317b6f0", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libgomp-8.5.0-28.el8_10.alma.1.x86_64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libgpg-error": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libgpg-error", + "sha256": "33d01156d568b36a34c79e7723494f6ecc66e3551a09927c9c01018fb92c524f", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libgpg-error-1.31-1.el8.x86_64.rpm", + "version": "1.31" + } + ], + "version": "1.31" + }, + "libicu": { + "deps": [ + "glibc", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "libicu", + "sha256": "9eabd1f776e3128b674e34055505bc37dc1b8d10acecdfc22d4b991bda385095", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libicu-60.3-2.el8_1.x86_64.rpm", + "version": "60.3" + } + ], + "version": "60.3" + }, + "libidn2": { + "deps": [ + "glibc", + "libunistring" + ], + "components": [ + { + "name": "libidn2", + "sha256": "d4f112cb5782ecbc4873cdc4256badcbcdeef94928b3c7930c9e4b10134bd4a6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libidn2-2.2.0-1.el8.x86_64.rpm", + "version": "2.2.0" + } + ], + "version": "2.2.0" + }, + "libipt": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libipt", + "sha256": "e34665518d8db7b4e2bc0fd25e36f3f619e8091d689cc1dd22aff10fcdc2b1c5", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/libipt-1.6.1-8.el8.x86_64.rpm", + "version": "1.6.1" + } + ], + "version": "1.6.1" + }, + "libmount": { + "deps": [ + "glibc", + "libblkid", + "libselinux", + "libuuid" + ], + "components": [ + { + "name": "libmount", + "sha256": "cc1de94d10800a6220090e22c72245833b51e46ee77644598a1aeebfb1d3bdb2", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libmount-2.32.1-48.el8_10.x86_64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libmpc": { + "deps": [ + "glibc", + "gmp", + "mpfr" + ], + "components": [ + { + "name": "libmpc", + "sha256": "792b9e61af52cbbf5018114edb2a131590b5909e916920afb7a07374dbee95f7", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/libmpc-1.1.0-9.1.el8.x86_64.rpm", + "version": "1.1.0" + } + ], + "version": "1.1.0" + }, + "libnghttp2": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libnghttp2", + "sha256": "3ec51c266f7a2c989b8b00c02fa57c19c82a0187584b8a60b628f50dca142c31", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libnghttp2-1.33.0-6.el8_10.2.x86_64.rpm", + "version": "1.33.0" + } + ], + "version": "1.33.0" + }, + "libnsl2": { + "deps": [ + "glibc", + "libtirpc" + ], + "components": [ + { + "name": "libnsl2", + "sha256": "6052742d3fe86bd60782214dc6ae9900460160c4c8748c5608e4f59a7eefd1ec", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libnsl2-1.2.0-2.20180605git4a062cf.el8.x86_64.rpm", + "version": "1.2.0" + } + ], + "version": "1.2.0" + }, + "libpwquality": { + "deps": [ + "cracklib", + "cracklib-dicts", + "glibc", + "pam" + ], + "components": [ + { + "name": "libpwquality", + "sha256": "7adadce43bd50d322cce20cd62e4856f147de863fc967d72189d3810b8c2475e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libpwquality-1.4.4-6.el8.x86_64.rpm", + "version": "1.4.4" + } + ], + "version": "1.4.4" + }, + "libquadmath": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libquadmath", + "sha256": "e50ce3215fc8c5fcabb60664fe4933dc84db9f7b27d304e3168fafacb6016a9e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libquadmath-8.5.0-28.el8_10.alma.1.x86_64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libselinux": { + "deps": [ + "glibc", + "libsepol", + "pcre2" + ], + "components": [ + { + "name": "libselinux", + "sha256": "7ccf8f7e950ee28d9843370d3e23790cbcd6ca86780a39f33bfbfd9d12fac4ba", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libselinux-2.9-11.el8_10.x86_64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "libselinux-utils": { + "deps": [ + "glibc", + "libselinux", + "libsepol", + "pcre2" + ], + "components": [ + { + "name": "libselinux-utils", + "sha256": "76028a39b22dd751329ecfd7488746f3237f00c2ca7e99e0dad1b97d2360bc8e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libselinux-utils-2.9-11.el8_10.x86_64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "libsemanage": { + "deps": [ + "audit-libs", + "bzip2-libs", + "glibc", + "libselinux", + "libsepol" + ], + "components": [ + { + "name": "libsemanage", + "sha256": "522c60f6171166989e91a8120a0da1b85fbe100cd4ecdf84a4668309704b8e28", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libsemanage-2.9-12.el8_10.x86_64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "libsepol": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libsepol", + "sha256": "55bfbf557e668657b3d8e9b7389c9ec89944c9c21957eecb5e311a9d50a7708d", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libsepol-2.9-3.el8.x86_64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "libsigsegv": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libsigsegv", + "sha256": "c3c04d5086931a6af519bcbce8a27498edb99f48faa400d4c9a8fefe89d52f68", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libsigsegv-2.11-5.el8.x86_64.rpm", + "version": "2.11" + } + ], + "version": "2.11" + }, + "libsmartcols": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libsmartcols", + "sha256": "b37070e72bf6c0b67448c2f773ab71292086a26394c58faef5a52586a45a56e3", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libsmartcols-2.32.1-48.el8_10.x86_64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libstdcxx": { + "deps": [ + "glibc", + "libgcc" + ], + "components": [ + { + "name": "libstdcxx", + "sha256": "0302b9006d719a31dd51aeaf31fec03d70aad5c318674537bd80c49f9174b066", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libstdc++-8.5.0-28.el8_10.alma.1.x86_64.rpm", + "version": "8.5.0" + } + ], + "version": "8.5.0" + }, + "libtasn1": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libtasn1", + "sha256": "c330f169a59688231b214571bb52d7db5a266c9b5fb256da126b142f995a198f", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libtasn1-4.13-5.el8_10.x86_64.rpm", + "version": "4.13" + } + ], + "version": "4.13" + }, + "libtirpc": { + "deps": [ + "glibc", + "krb5-libs", + "libcom_err" + ], + "components": [ + { + "name": "libtirpc", + "sha256": "e768d79833e604ec5d8dae3173a2a91872a18128050f5b7c0ba29b5f45dccc1f", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libtirpc-1.1.4-12.el8_10.x86_64.rpm", + "version": "1.1.4" + } + ], + "version": "1.1.4" + }, + "libtool-ltdl": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libtool-ltdl", + "sha256": "d010f5c40d6f3ea51f2f36fa8c8c85406e98536e4c3bb7d06a2cf3f4ed81cac3", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libtool-ltdl-2.4.6-25.el8.x86_64.rpm", + "version": "2.4.6" + } + ], + "version": "2.4.6" + }, + "libunistring": { + "deps": [ + "glibc", + "info" + ], + "components": [ + { + "name": "libunistring", + "sha256": "0d1d497fe2b0eb54c88093c2aca92292fb4e94e6e1437af3bdefbb0f5adeb06b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libunistring-0.9.9-3.el8.x86_64.rpm", + "version": "0.9.9" + } + ], + "version": "0.9.9" + }, + "libutempter": { + "deps": [ + "glibc", + "shadow-utils" + ], + "components": [ + { + "name": "libutempter", + "sha256": "584243ae908563ba3186cc142a31083ea4a2ecdb740be2dc421f3e89d81b2e16", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libutempter-1.1.6-14.el8.x86_64.rpm", + "version": "1.1.6" + } + ], + "version": "1.1.6" + }, + "libuuid": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libuuid", + "sha256": "a7d0fdf6467654dc4c512635d1309238d582e9ea6420df73692b2cee64c8f415", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libuuid-2.32.1-48.el8_10.x86_64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "libverto": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libverto", + "sha256": "cca258084dfb37287271ca92cb796dde3c507203b4e5f1ffafcf8449eed7eee3", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libverto-0.3.2-2.el8.x86_64.rpm", + "version": "0.3.2" + } + ], + "version": "0.3.2" + }, + "libxcrypt": { + "deps": [ + "glibc", + "glibc-headers" + ], + "components": [ + { + "name": "libxcrypt", + "sha256": "d47f375a7902f3059a8690edc5949bbfd4708d53762c53414ff8747b7b409809", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libxcrypt-4.1.1-6.el8.x86_64.rpm", + "version": "4.1.1" + }, + { + "name": "libxcrypt-devel", + "sha256": "c370e6338926c45830f0451be2666da2a2aafca18468d2a30304fc8f20736798", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libxcrypt-devel-4.1.1-6.el8.x86_64.rpm", + "version": "4.1.1" + } + ], + "version": "4.1.1" + }, + "libxml2": { + "deps": [ + "glibc", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "libxml2", + "sha256": "052372fa8cdb81769fec505dfcf36ce9ea7f290016a4b351bb793fc8cccd9073", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libxml2-2.9.7-21.el8_10.4.x86_64.rpm", + "version": "2.9.7" + } + ], + "version": "2.9.7" + }, + "libzstd": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "libzstd", + "sha256": "d18b0c7ee8d94ab7d800bf21485073fc474ed61753e3cd96c981e1e89dc235de", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/libzstd-1.4.4-1.el8.x86_64.rpm", + "version": "1.4.4" + } + ], + "version": "1.4.4" + }, + "lua-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "lua-libs", + "sha256": "7088352944a1ce3fcc943a7f3deac47715aef01f2888423780905343118b29ed", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/lua-libs-5.3.4-12.el8.x86_64.rpm", + "version": "5.3.4" + } + ], + "version": "5.3.4" + }, + "lz4-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "lz4-libs", + "sha256": "8a32e133982ffaf85b727a1f9a1e88c3a28b70d02345c03a412d2124cb9f99ca", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/lz4-libs-1.8.3-5.el8_10.x86_64.rpm", + "version": "1.8.3" + } + ], + "version": "1.8.3" + }, + "make": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "make", + "sha256": "d6105876c33a4e02637ccaa95c10cc5bac769833ef00e6ddbb2ea942a87491ab", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/make-4.2.1-11.el8.x86_64.rpm", + "version": "4.2.1" + } + ], + "version": "4.2.1" + }, + "mpfr": { + "deps": [ + "glibc", + "gmp" + ], + "components": [ + { + "name": "mpfr", + "sha256": "d1eff9daef4ccbd399303ec893ebe4575900661b45d7c1a9113a18836f6472f4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/mpfr-3.1.6-1.el8.x86_64.rpm", + "version": "3.1.6" + } + ], + "version": "3.1.6" + }, + "ncurses": { + "deps": [ + "glibc", + "ncurses-libs" + ], + "components": [ + { + "name": "ncurses", + "sha256": "7f590108b77d33a67f79d88201edbba049e67876f8d31171d61db6bf3fc6caf2", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/ncurses-6.1-10.20180224.el8.x86_64.rpm", + "version": "6.1" + } + ], + "version": "6.1" + }, + "ncurses-base": { + "deps": [], + "components": [ + { + "name": "ncurses-base", + "sha256": "56b30fb972189c8b0a0522616242d41ae872414c07d33401510340a5ef826114", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/ncurses-base-6.1-10.20180224.el8.noarch.rpm", + "version": "6.1" + } + ], + "version": "6.1" + }, + "ncurses-libs": { + "deps": [ + "glibc", + "ncurses-base" + ], + "components": [ + { + "name": "ncurses-libs", + "sha256": "0928372c4b0327c454ce4df970a5eae1a5db667ed360902513b2e9366a442292", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/ncurses-libs-6.1-10.20180224.el8.x86_64.rpm", + "version": "6.1" + } + ], + "version": "6.1" + }, + "nettle": { + "deps": [ + "glibc", + "gmp", + "info" + ], + "components": [ + { + "name": "nettle", + "sha256": "fb4aaa22b2e2f2fc0c451b87ac464e8746d240397d64e79f6bfd38f4e9128a5a", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/nettle-3.4.1-7.el8.x86_64.rpm", + "version": "3.4.1" + } + ], + "version": "3.4.1" + }, + "openssl-libs": { + "deps": [ + "ca-certificates", + "crypto-policies", + "glibc", + "zlib" + ], + "components": [ + { + "name": "openssl-libs", + "sha256": "7ea2e7670924e6977da90eae922171c16b717f86aa4ca0926f3f3a59d03a3da4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/openssl-libs-1.1.1k-15.el8_6.x86_64.rpm", + "version": "1.1.1k" + } + ], + "version": "1.1.1k" + }, + "p11-kit": { + "deps": [ + "glibc", + "libffi" + ], + "components": [ + { + "name": "p11-kit", + "sha256": "954dd788311886cc0d6e961ea1a23d01a5df067b211b0515f9a8dc67a80d81c7", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/p11-kit-0.23.22-2.el8.x86_64.rpm", + "version": "0.23.22" + } + ], + "version": "0.23.22" + }, + "p11-kit-trust": { + "deps": [ + "glibc", + "libtasn1", + "p11-kit" + ], + "components": [ + { + "name": "p11-kit-trust", + "sha256": "be692240b4f7b8447d3102fa3d7213c760f19d89c325337863e1bef3dfbc0e35", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/p11-kit-trust-0.23.22-2.el8.x86_64.rpm", + "version": "0.23.22" + } + ], + "version": "0.23.22" + }, + "pam": { + "deps": [ + "audit-libs", + "coreutils", + "cracklib", + "glibc", + "libdb", + "libnsl2", + "libpwquality", + "libselinux", + "libtirpc", + "libxcrypt" + ], + "components": [ + { + "name": "pam", + "sha256": "797a514f9cb9ff1b8fb03e09b89db64b752934abcf644835ff479b7ee84a24bf", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/pam-1.3.1-39.el8_10.x86_64.rpm", + "version": "1.3.1" + } + ], + "version": "1.3.1" + }, + "pcre": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "pcre", + "sha256": "4be4dd7c2b6080dece762109d55a05d1683701e5d4d09fe2f54a4a303e5933f6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/pcre-8.42-6.el8.x86_64.rpm", + "version": "8.42" + } + ], + "version": "8.42" + }, + "pcre2": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "pcre2", + "sha256": "434eed2458f5a004ef6db886afe79cd5241c12cc4de402ded4dd51a3c98ed262", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/pcre2-10.32-3.el8_6.x86_64.rpm", + "version": "10.32" + } + ], + "version": "10.32" + }, + "platform-python": { + "deps": [ + "chkconfig", + "glibc", + "openssl-libs", + "platform-python-setuptools", + "python3-libs", + "python3-pip-wheel", + "python3-setuptools-wheel" + ], + "components": [ + { + "name": "platform-python", + "sha256": "47668c160620cbe1ad874d750ae1e93bebcd065ad8d066b24cfae789fab75906", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/platform-python-3.6.8-76.el8_10.alma.1.x86_64.rpm", + "version": "3.6.8" + } + ], + "version": "3.6.8" + }, + "platform-python-setuptools": { + "deps": [ + "platform-python" + ], + "components": [ + { + "name": "platform-python-setuptools", + "sha256": "0ff89dd1d2d8c3f0fabda65ea9030bf773b3b785b1a39becaf15fe88c902cb9b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/platform-python-setuptools-39.2.0-9.el8_10.noarch.rpm", + "version": "39.2.0" + } + ], + "version": "39.2.0" + }, + "policycoreutils": { + "deps": [ + "audit-libs", + "coreutils", + "diffutils", + "gawk", + "glibc", + "grep", + "libselinux", + "libselinux-utils", + "libsemanage", + "libsepol", + "rpm", + "sed", + "util-linux" + ], + "components": [ + { + "name": "policycoreutils", + "sha256": "8589a7577169e8c6644e3eaea8f170f0610471c1248a6e1a5c656a3fc49c59bf", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/policycoreutils-2.9-26.el8_10.x86_64.rpm", + "version": "2.9" + } + ], + "version": "2.9" + }, + "popt": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "popt", + "sha256": "c57eae4eea62c47ff97fa51621e52ecf6cc2421eea648a7275d65bd571233dac", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/popt-1.18-1.el8.x86_64.rpm", + "version": "1.18" + } + ], + "version": "1.18" + }, + "python3-libs": { + "deps": [ + "bzip2-libs", + "chkconfig", + "expat", + "gdbm", + "gdbm-libs", + "glibc", + "libffi", + "libnsl2", + "libtirpc", + "libxcrypt", + "ncurses-libs", + "openssl-libs", + "platform-python", + "python3-pip-wheel", + "python3-setuptools-wheel", + "readline", + "sqlite-libs", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "python3-libs", + "sha256": "c9de4424c21397995542f80ce1cc28e72b7115c692ee52420af7a8d74d9c16bf", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/python3-libs-3.6.8-76.el8_10.alma.1.x86_64.rpm", + "version": "3.6.8" + } + ], + "version": "3.6.8" + }, + "python3-pip-wheel": { + "deps": [], + "components": [ + { + "name": "python3-pip-wheel", + "sha256": "443f856c45bb2d2d617ebf0ec7f6310a248f3193ba9317accdeafa4d8c73597b", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/python3-pip-wheel-9.0.3-24.el8.noarch.rpm", + "version": "9.0.3" + } + ], + "version": "9.0.3" + }, + "python3-setuptools-wheel": { + "deps": [], + "components": [ + { + "name": "python3-setuptools-wheel", + "sha256": "45ca7d7f9bcbdf2f214c188e223e149aadd91a5340a342842ddf8f038b680456", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/python3-setuptools-wheel-39.2.0-9.el8_10.noarch.rpm", + "version": "39.2.0" + } + ], + "version": "39.2.0" + }, + "readline": { + "deps": [ + "glibc", + "info", + "ncurses-libs" + ], + "components": [ + { + "name": "readline", + "sha256": "0ff2ab7993712caf241360d9e595b3ec539a8dedbf930050e93c21984528b159", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/readline-7.0-10.el8.x86_64.rpm", + "version": "7.0" + } + ], + "version": "7.0" + }, + "rpm": { + "deps": [ + "audit-libs", + "bzip2-libs", + "coreutils", + "curl", + "elfutils-libelf", + "glibc", + "libacl", + "libarchive", + "libcap", + "libdb", + "libzstd", + "lua-libs", + "openssl-libs", + "popt", + "rpm-libs", + "sqlite-libs", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "rpm", + "sha256": "c0f5322dab5fca6c1a7fe65e8513b8a8a7fd11f5a3ce68cc14b0540e5a07b5a2", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/rpm-4.14.3-32.el8_10.x86_64.rpm", + "version": "4.14.3" + } + ], + "version": "4.14.3" + }, + "rpm-libs": { + "deps": [ + "audit-libs", + "bzip2-libs", + "elfutils-libelf", + "glibc", + "libacl", + "libcap", + "libdb", + "libzstd", + "lua-libs", + "openssl-libs", + "popt", + "rpm", + "sqlite-libs", + "xz-libs", + "zlib" + ], + "components": [ + { + "name": "rpm-libs", + "sha256": "dcb352b0c120f76a44ef6e2e5d29966c100f64bad09dc4b4616d8c269a530d72", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/rpm-libs-4.14.3-32.el8_10.x86_64.rpm", + "version": "4.14.3" + } + ], + "version": "4.14.3" + }, + "scl-utils": { + "deps": [ + "glibc", + "rpm-libs" + ], + "components": [ + { + "name": "scl-utils", + "sha256": "daff50f588f5dfe5150f7f4f91d8aa8732aff3f808f306a312cdb8e4ba5c5c98", + "url": "http://mirror.transip.net/almalinux/8/AppStream/x86_64/os/Packages/scl-utils-2.0.2-16.el8.x86_64.rpm", + "version": "2.0.2" + } + ], + "version": "2.0.2" + }, + "sed": { + "deps": [ + "glibc", + "libacl", + "libselinux" + ], + "components": [ + { + "name": "sed", + "sha256": "f1ae0b323ac5a580378867336cff3e88c07e18b9eb6626616cc66c008433870f", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/sed-4.5-5.el8_10.x86_64.rpm", + "version": "4.5" + } + ], + "version": "4.5" + }, + "setup": { + "deps": [ + "almalinux-release" + ], + "components": [ + { + "name": "setup", + "sha256": "6cd3f1697e9fdc4e148b54a3b53803ce42e66687d3e0bea66fd7bdef4065c1c6", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/setup-2.12.2-9.el8.noarch.rpm", + "version": "2.12.2" + } + ], + "version": "2.12.2" + }, + "shadow-utils": { + "deps": [ + "audit-libs", + "coreutils", + "glibc", + "libacl", + "libattr", + "libselinux", + "libsemanage", + "libxcrypt", + "setup" + ], + "components": [ + { + "name": "shadow-utils", + "sha256": "af9d214739735c6ba91e5dcdccd7545441e38870014853bc1d96c9063815c9e0", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/shadow-utils-4.6-23.el8_10.x86_64.rpm", + "version": "4.6" + } + ], + "version": "4.6" + }, + "source-highlight": { + "deps": [ + "boost-regex", + "ctags", + "glibc", + "info", + "libgcc", + "libstdcxx" + ], + "components": [ + { + "name": "source-highlight", + "sha256": "b15f0c3110d9c4754ef3c16e52f9356b4671643565b9ddf31006c945fe487370", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/source-highlight-3.1.8-18.el8_10.x86_64.rpm", + "version": "3.1.8" + } + ], + "version": "3.1.8" + }, + "sqlite-libs": { + "deps": [ + "glibc", + "zlib" + ], + "components": [ + { + "name": "sqlite-libs", + "sha256": "8508587c38ca6354ae236f66c40aa0ba5316d7406c6022cac47208769faee8f4", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/sqlite-libs-3.26.0-20.el8_10.x86_64.rpm", + "version": "3.26.0" + } + ], + "version": "3.26.0" + }, + "systemd-libs": { + "deps": [ + "coreutils", + "glibc", + "grep", + "libcap", + "libgcc", + "libgcrypt", + "libmount", + "lz4-libs", + "sed", + "xz-libs" + ], + "components": [ + { + "name": "systemd-libs", + "sha256": "66e15119529799c96d118e684e2db7d64fd69b94988a5aec93482c4b7b716660", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/systemd-libs-239-82.el8_10.16.x86_64.rpm", + "version": "239" + } + ], + "version": "239" + }, + "tzdata": { + "deps": [], + "components": [ + { + "name": "tzdata", + "sha256": "c2e125c696d08c2cba6fc8c5a13fbc5b9813dee001d78f94c4e421ebaa6e3d28", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/tzdata-2026a-1.el8.noarch.rpm", + "version": "2026a" + } + ], + "version": "2026a" + }, + "util-linux": { + "deps": [ + "audit-libs", + "coreutils", + "glibc", + "libblkid", + "libcap-ng", + "libfdisk", + "libmount", + "libselinux", + "libsmartcols", + "libutempter", + "libuuid", + "libxcrypt", + "ncurses-libs", + "pam", + "systemd-libs", + "zlib" + ], + "components": [ + { + "name": "util-linux", + "sha256": "ce7d92b3f31d653bf0ed3cd67fc5ed8ac9af71e0f581b082a4261020c0cee3c9", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/util-linux-2.32.1-48.el8_10.x86_64.rpm", + "version": "2.32.1" + } + ], + "version": "2.32.1" + }, + "xz-libs": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "xz-libs", + "sha256": "eab633cd7e81de007792509bfbea6cbd48dec90e4c0f18a4c1c337cb9c06ee51", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/xz-libs-5.2.4-4.el8_6.x86_64.rpm", + "version": "5.2.4" + } + ], + "version": "5.2.4" + }, + "zlib": { + "deps": [ + "glibc" + ], + "components": [ + { + "name": "zlib", + "sha256": "ab40e85f180a6d38ce0291408b7ef5c422250f53cb26c44399ef1a4e8622778e", + "url": "http://mirror.transip.net/almalinux/8/BaseOS/x86_64/os/Packages/zlib-1.2.11-25.el8.x86_64.rpm", + "version": "1.2.11" + } + ], + "version": "1.2.11" + } +} diff --git a/nix-builder/pkgs/manylinux/overrides.nix b/nix-builder/pkgs/manylinux/overrides.nix new file mode 100644 index 00000000..32c13b6c --- /dev/null +++ b/nix-builder/pkgs/manylinux/overrides.nix @@ -0,0 +1,226 @@ +let + applyOverrides = + overrides: final: prev: + prev.lib.mapAttrs (name: value: prev.${name}.overrideAttrs (final.callPackage value { })) overrides; +in +applyOverrides { + ca-certificates = + { }: + prevAttrs: { + # Clear dependencies. + buildInputs = [ ]; + }; + + chkconfig = + { }: + prevAttrs: { + postInstall = '' + # Invalid symlink, but we don't need it anyway. + rm -f $out/lib/systemd/systemd-sysv-install + ''; + }; + + cracklib-dicts = + { }: + prevAttrs: { + postInstall = '' + cp -r usr/share $out + ln -sf $out/share/cracklib/pw_dict.hwm $out/lib64/cracklib_dict.hwm + ln -sf $out/share/cracklib/pw_dict.pwd $out/lib64/cracklib_dict.pwd + ln -sf $out/share/cracklib/pw_dict.pwi $out/lib64/cracklib_dict.pwi + rm -rf $out/sbin + ''; + }; + + gcc-toolset-13-binutils-gold = + { }: + prevAttrs: { + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ "gcc-toolset-13-binutils" ]; + }; + + gcc-toolset-13-gcc = + { + gcc-toolset-13-binutils, + libgcc, + stdenv, + }: + prevAttrs: { + postInstall = '' + # We don't care about compiling for 32-bit, so yank files to avoid + # dealing with broken symlinks. + rm -rf $out/lib/gcc/x86_64-redhat-linux/13/32 + + # Remove binutils symlinks to force gcc to use a wrapped binutils + # from the environment. Without using a wrapper, no rpaths will + # be set, etc. + for l in $(find $out/libexec -type l); do + if [ -f ${gcc-toolset-13-binutils}/bin/$(basename $l) ]; then + rm -f $l + fi + done + + # Not sure yet if we need this. + find $out -name 'ld.gold' -type l -delete + ''; + }; + + gcc-toolset-14-gcc = + { + gcc-toolset-14-binutils, + libgcc, + stdenv, + }: + prevAttrs: { + postInstall = '' + # We don't care about compiling for 32-bit, so yank files to avoid + # dealing with broken symlinks. + rm -rf $out/lib/gcc/x86_64-redhat-linux/14/32 + + # Remove binutils symlinks to force gcc to use a wrapped binutils + # from the environment. Without using a wrapper, no rpaths will + # be set, etc. + for l in $(find $out/libexec -type l); do + if [ -f ${gcc-toolset-14-binutils}/bin/$(basename $l) ]; then + rm -f $l + fi + done + + # Not sure yet if we need this. + find $out -name 'ld.gold' -type l -delete + ''; + }; + + gcc-toolset-13-gcc-cxx = + { stdenv }: + prevAttrs: { + postInstall = '' + # We don't care about compiling for 32-bit, so yank files to avoid + # dealing with broken symlinks. + rm -rf $out/lib/gcc/x86_64-redhat-linux/13/32 + ''; + }; + + gcc-toolset-14-gcc-cxx = + { stdenv }: + prevAttrs: { + postInstall = '' + # We don't care about compiling for 32-bit, so yank files to avoid + # dealing with broken symlinks. + rm -rf $out/lib/gcc/x86_64-redhat-linux/14/32 + ''; + }; + + gcc-toolset-14-gcc-gfortran = + { }: + prevAttrs: { + postInstall = '' + # We don't care about compiling for 32-bit, so yank files to avoid + # dealing with broken symlinks. + rm -rf $out/lib/gcc/x86_64-redhat-linux/14/32 + ''; + }; + + glibc = + { lib, stdenv }: + prevAttrs: { + postInstall = + let + ldLinuxPath = + if stdenv.hostPlatform.isx86_64 then + { + alma = "/lib64/ld-linux-x86-64.so.2"; + nix = "$out/lib/ld-linux-x86-64.so.2"; + } + else if stdenv.hostPlatform.isAarch64 then + { + alma = "/lib/ld-linux-aarch64.so.1"; + nix = "$out/lib/ld-linux-aarch64.so.1"; + } + else + throw "Unsupported processor: ${stdenv.hostPlatform.uname.processor}"; + in + '' + # Update linker script with Nix paths. + substituteInPlace $out/lib64/libc.so \ + --replace-fail "/lib64/libc.so.6" "$out/lib/libc.so.6" \ + --replace-fail "/usr/lib64/libc_nonshared.a" "$out/lib/libc_nonshared.a" \ + --replace-fail "${ldLinuxPath.alma}" "${ldLinuxPath.nix}" + '' + + lib.optionalString stdenv.hostPlatform.isAarch64 '' + # move-lib64 fixup hook only moves top-level lib64 files, but aarch64 has some + # directories as well. + mv $out/lib64/* $out/lib + '' + + lib.optionalString stdenv.hostPlatform.isx86_64 '' + substituteInPlace $out/lib64/libm.so \ + --replace-fail "/lib64/libm.so.6" "$out/lib/libm.so.6" \ + --replace-fail "/lib64/libmvec.so.1" "$out/lib/libmvec.so.1" \ + --replace-fail "/usr/lib64/libmvec_nonshared.a" "$out/lib/libmvec_nonshared.a" + ''; + + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ + "glibc-common" + "libxcrypt" + ]; + }; + + glibc-common = + { }: + prevAttrs: { + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ + "glibc" + "libselinux" + ]; + }; + + glibc-headers = + { }: + prevAttrs: { + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ "glibc" ]; + }; + + glibc-minimal-langpack = + { }: + prevAttrs: { + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ + "glibc" + "glibc-common" + ]; + }; + + pam = + { }: + prevAttrs: { + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ "libpwquality" ]; + }; + + platform-python-setuptools = + { }: + prevAttrs: { + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ "platform-python" ]; + }; + + policycoreutils = + { }: + prevAttrs: { + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ "rpm" ]; + }; + + python3-libs = + { }: + prevAttrs: { + postInstall = '' + mkdir -p $out/lib + cp -r $out/lib64/python* $out/lib + rm -rf $out/lib64/python* + ''; + + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ "platform-python" ]; + }; + + rpm-libs = + { }: + prevAttrs: { + passthru.filterDeps = prevAttrs.passthru.filterDeps ++ [ "rpm" ]; + }; +} diff --git a/nix-builder/pkgs/manylinux/rhel2nix.py b/nix-builder/pkgs/manylinux/rhel2nix.py new file mode 100644 index 00000000..730ec207 --- /dev/null +++ b/nix-builder/pkgs/manylinux/rhel2nix.py @@ -0,0 +1,439 @@ +#!/usr/bin/env python3 + +import argparse +import gzip +import json +import re +import sys +import xml.etree.ElementTree as ET +from typing import Dict, List, Set +from urllib.parse import urljoin +from urllib.request import urlopen + +REPO_URL_TEMPLATES = [ + "http://mirror.transip.net/almalinux/{version}/AppStream/{arch}/os/", + "http://mirror.transip.net/almalinux/{version}/BaseOS/{arch}/os/", +] + +# XML namespaces used in RPM repo metadata +RPM_NAMESPACES = { + "common": "http://linux.duke.edu/metadata/common", + "rpm": "http://linux.duke.edu/metadata/rpm", +} + +REPOMD_NAMESPACES = {"repo": "http://linux.duke.edu/metadata/repo"} + +VERSION_SUFFIX_RE = re.compile(r"-(\d+\.\d+(\.\d+)?)$") + + +def _rpm_sort_key(s: str) -> str: + """Zero-pad all digit runs so lexicographic order equals numeric order. + + Works for both RPM version (ver) and release (rel) strings, including + non-PEP-440 values like '1.0.2o' or '3.el8_10.1'. + + e.g. '1.0.2o' -> '00000000000000000001.00000000000000000000.00000000000000000002o' + '3.el8_10.1' -> '00000000000000000003.el00000000000000000008_00000000000000000010.00000000000000000001' + """ + return re.sub(r"(\d+)", lambda m: m.group(1).zfill(20), s) + + +parser = argparse.ArgumentParser(description="Parse AlmaLinux repository") +parser.add_argument("--version", default="8", help="AlmaLinux version (default: 8)") +parser.add_argument( + "--arch", default="x86_64", help="Target architecture (default: x86_64)" +) + +TARGET_PACKAGE_NAMES = [ + "gcc-toolset-13", + "gcc-toolset-14", +] + + +class Package: + def __init__(self, package_elem, base_url: str): + self._elem = package_elem + self._base_url = base_url + + # Parse package metadata. + name_elem = self._elem.find("common:name", RPM_NAMESPACES) + self._name = name_elem.text if name_elem is not None else "" + + version_elem = self._elem.find("common:version", RPM_NAMESPACES) + self._version = version_elem.get("ver", "") if version_elem is not None else "" + self._release = version_elem.get("rel", "") if version_elem is not None else "" + + arch_elem = self._elem.find("common:arch", RPM_NAMESPACES) + self._arch = arch_elem.text if arch_elem is not None else "" + + checksum_elem = self._elem.find("common:checksum", RPM_NAMESPACES) + self._checksum = checksum_elem.text if checksum_elem is not None else "" + + location_elem = self._elem.find("common:location", RPM_NAMESPACES) + self._location = ( + location_elem.get("href", "") if location_elem is not None else "" + ) + + def __str__(self): + return f"{self._name} {self._version}" + + def depends(self) -> Set[str]: + """Extract required capabilities for this package.""" + deps = set() + + # Find requires entries in RPM format + format_elem = self._elem.find("common:format", RPM_NAMESPACES) + if format_elem is not None: + requires_elem = format_elem.find("rpm:requires", RPM_NAMESPACES) + if requires_elem is not None: + for entry in requires_elem.findall("rpm:entry", RPM_NAMESPACES): + dep_name = entry.get("name", "") + # Filter out system dependencies and focus on package names + if ( + dep_name + and not dep_name.startswith("/") + and not dep_name.startswith("rpmlib(") + ): + deps.add(dep_name) + + return deps + + def provides(self) -> Set[str]: + """Extract the capabilities/names this package provides.""" + provided = set() + + format_elem = self._elem.find("common:format", RPM_NAMESPACES) + if format_elem is not None: + provides_elem = format_elem.find("rpm:provides", RPM_NAMESPACES) + if provides_elem is not None: + for entry in provides_elem.findall("rpm:entry", RPM_NAMESPACES): + cap = entry.get("name", "") + if cap: + provided.add(cap) + + return provided + + @property + def name(self) -> str: + return self._name + + @property + def arch(self) -> str: + return self._arch + + @property + def release(self) -> str: + return self._release + + @property + def sha256(self) -> str: + return self._checksum + + @property + def version(self) -> str: + version = self._version + return version + + @property + def filename(self) -> str: + return f"{self._name}-{self._version}-{self._release}.{self._arch}.rpm" + + @property + def url(self) -> str: + return urljoin(self._base_url, self._location) + + +def fetch_and_parse_repodata(repo_url: str): + """Fetch and parse repository metadata""" + repomd_url = urljoin(repo_url, "repodata/repomd.xml") + + try: + print(f"Fetching repository metadata from {repomd_url}...", file=sys.stderr) + with urlopen(repomd_url) as response: + repomd_content = response.read() + + # Parse repo metadata. From this file we can get the paths to the + # other metadata files. + repomd_root = ET.fromstring(repomd_content) + + # Find the primary package metadata. + primary_location = None + for data in repomd_root.findall( + './/repo:data[@type="primary"]', REPOMD_NAMESPACES + ): + location_elem = data.find(".//repo:location", REPOMD_NAMESPACES) + if location_elem is not None: + primary_location = location_elem.get("href") + break + + if not primary_location: + raise Exception("Could not find primary metadata in repomd.xml") + + primary_url = urljoin(repo_url, primary_location) + print(f"Fetching primary metadata from {primary_url}...", file=sys.stderr) + + with urlopen(primary_url) as response: + metadata = response.read() + + if primary_location.endswith(".gz"): + metadata = gzip.decompress(metadata) + + return ET.fromstring(metadata) + + except Exception as e: + print(f"Error fetching repository metadata: {e}", file=sys.stderr) + sys.exit(1) + + +def get_all_packages(arch: str, version: str) -> Dict[str, Package]: + """Get all packages from the repository""" + all_packages = {} + + repo_urls = [ + template.format(version=version, arch=arch) for template in REPO_URL_TEMPLATES + ] + for repo_url in repo_urls: + metadata = fetch_and_parse_repodata(repo_url) + + for package_elem in metadata.findall( + './/common:package[@type="rpm"]', RPM_NAMESPACES + ): + package = Package(package_elem, repo_url) + + # Skip packages that don't match the requested architecture. + # "noarch" packages are architecture-independent and are always included. + if package.arch not in (arch, "noarch"): + continue + + # The repo metadata contains multiple versions of the same package. Get + # them all and then get the latest. + + all_packages.setdefault(package.name, []).append( + ((package.version, package.release), package) + ) + + packages = {} + for name, versions in all_packages.items(): + versions.sort(key=lambda x: (_rpm_sort_key(x[0][0]), _rpm_sort_key(x[0][1]))) + packages[name] = versions[-1][1] + + # Build a reverse map from provided capability -> package so that + # dependencies expressed as .so names or virtual provides can be resolved. + # When multiple packages provide the same capability, last-write wins; + # in practice this is rare and the exact provider doesn't matter much. + provides_map: Dict[str, Package] = {} + for pkg in packages.values(): + for cap in pkg.provides(): + provides_map[cap] = pkg + + return packages, provides_map + + +def find_target_packages(all_packages: Dict[str, Package]) -> List[Package]: + """Find all target packages defined in TARGET_PACKAGE_NAMES.""" + found = [] + for target in TARGET_PACKAGE_NAMES: + pkg = all_packages.get(target) + if pkg is not None: + print(f"Found target package: {pkg.name} {pkg.version}", file=sys.stderr) + found.append(pkg) + else: + raise Exception(f"Could not find target package '{target}' in repository") + return found + + +def resolve_dependencies_recursively( + target_package: Package, + all_packages: Dict[str, Package], + provides_map: Dict[str, Package], + resolved_packages: Dict[str, Package] = None, +) -> Dict[str, Package]: + """Recursively resolve all dependencies starting from target package""" + + if resolved_packages is None: + resolved_packages = {} + + # Add the target package if not already added + if target_package.name not in resolved_packages: + resolved_packages[target_package.name] = target_package + print(f"Added package: {target_package.name}", file=sys.stderr) + + # Get dependencies of the current package + deps = target_package.depends() + + for dep_name in deps: + # Skip if dependency is already resolved + if dep_name in resolved_packages: + continue + + # Find the dependency package in all_packages, falling back to the + # provides map for virtual deps like .so names or capability strings. + dep_package = all_packages.get(dep_name) or provides_map.get(dep_name) + if dep_package is not None: + # dep_name may be a capability (e.g. 'libxcrypt-devel(x86-64)') that + # resolves to a package already recorded under its real name. Check + # the real name too so we don't recurse into an already-resolved + # package and spin forever on a dependency cycle. + if dep_package.name in resolved_packages: + continue + + print( + f"Resolving dependency: {dep_name} for {target_package.name}", + file=sys.stderr, + ) + + # Recursively resolve this dependency + resolve_dependencies_recursively( + dep_package, all_packages, provides_map, resolved_packages + ) + else: + print( + f"Warning: Dependency {dep_name} not found in repository", + file=sys.stderr, + ) + + return resolved_packages + + +def main(): + args = parser.parse_args() + + print("Fetching all packages from AlmaLinux repository...", file=sys.stderr) + + # Step 1: Get all packages from repository + all_packages, provides_map = get_all_packages(args.arch, args.version) + print(f"Found {len(all_packages)} total packages in repository", file=sys.stderr) + + # Step 2: Find all target packages + try: + target_packages = find_target_packages(all_packages) + except Exception as e: + print(f"Error: {e}", file=sys.stderr) + sys.exit(1) + + # Step 3: Recursively resolve all dependencies, accumulating into one dict + # so shared dependencies are only included once. + print("Resolving dependencies recursively...", file=sys.stderr) + required_packages: Dict[str, Package] = {} + for target_package in target_packages: + resolve_dependencies_recursively( + target_package, all_packages, provides_map, required_packages + ) + + print(f"Total required packages: {len(required_packages)}", file=sys.stderr) + + # Step 4: Filter dupes like hip-devel vs. hip-devel6.4.1 + filtered_packages = {} + for name, info in required_packages.items(): + if name.endswith(args.version): + name_without_version = name[: -len(args.version)] + if name_without_version not in required_packages: + filtered_packages[name_without_version] = info + else: + filtered_packages[name] = info + + packages = filtered_packages + print(f"After filtering duplicates: {len(packages)} packages", file=sys.stderr) + + # Step 5: Find -devel packages that should be merged. + dev_to_merge = {} + for name in packages.keys(): + base_name = VERSION_SUFFIX_RE.sub("", name) + if not base_name.endswith("-devel"): + continue + + match = VERSION_SUFFIX_RE.search(name) + if match is None: + if base_name[:-6] in packages: + dev_to_merge[name] = base_name[:-6] + else: + version = match.group(1) + non_devel_name = f"{base_name[:-6]}-{version}" + if non_devel_name in packages: + dev_to_merge[name] = non_devel_name + + print(f"Found {len(dev_to_merge)} packages to merge", file=sys.stderr) + + # Step 6: Generate metadata and merge -devel packages. + metadata = {} + + # sorted will put -devel after non-devel packages. + for name in sorted(packages.keys()): + info = packages[name] + deps = set() + for dep in info.depends(): + if dep in packages: + deps.add(dev_to_merge.get(dep, dep)) + elif dep in provides_map: + # dep is a capability (e.g. 'libmpc.so.3()(64bit)'); use the + # name of the package that provides it instead. + resolved = provides_map[dep].name + deps.add(dev_to_merge.get(resolved, resolved)) + + pkg_metadata = { + "name": name, + "sha256": info.sha256, + "url": info.url, + "version": info.version, + } + + if name in dev_to_merge: + target_pkg = dev_to_merge[name] + if target_pkg not in metadata: + metadata[target_pkg] = { + "deps": set(), + "components": [], + "version": info.version, + } + metadata[target_pkg]["components"].append(pkg_metadata) + metadata[target_pkg]["deps"].update(deps) + else: + metadata[name] = { + "deps": deps, + "components": [pkg_metadata], + "version": info.version, + } + + # Remove self-references and convert dependencies to list. + for name, pkg_metadata in metadata.items(): + deps = pkg_metadata["deps"] + deps -= {name, f"{name}-devel"} + pkg_metadata["deps"] = list(sorted(deps)) + + # Step 7: Filter out unwanted packages by prefix + unwanted_prefixes = ("intel-oneapi-dpcpp-debugger",) + + filtered_metadata = { + name: pkg + for name, pkg in metadata.items() + if not any(name.startswith(prefix) for prefix in unwanted_prefixes) + } + + # Step 8: remove version suffixes from package names. + filtered_metadata = { + VERSION_SUFFIX_RE.sub("", name): pkg for name, pkg in filtered_metadata.items() + } + for pkg in filtered_metadata.values(): + pkg["deps"] = [VERSION_SUFFIX_RE.sub("", dep) for dep in pkg["deps"]] + + # Step 9: Rename any occurrence of 'c++' -> 'cxx' in package names so they + # are valid Nix attribute names (++ is an operator in the Nix expression + # language). This covers e.g. libstdc++ -> libstdcxx, gcc-c++ -> gcc-cxx. + def _cxx(s: str) -> str: + return s.replace("c++", "cxx") + + filtered_metadata = { + _cxx(name): { + **pkg, + "deps": [_cxx(d) for d in pkg["deps"]], + "components": [{**c, "name": _cxx(c["name"])} for c in pkg["components"]], + } + for name, pkg in filtered_metadata.items() + } + + print(f"Generated metadata for {len(filtered_metadata)} packages", file=sys.stderr) + print(json.dumps(filtered_metadata, indent=2)) + + +if __name__ == "__main__": + main() diff --git a/nix-builder/pkgs/manylinux/stdenv.nix b/nix-builder/pkgs/manylinux/stdenv.nix new file mode 100644 index 00000000..4bf46d07 --- /dev/null +++ b/nix-builder/pkgs/manylinux/stdenv.nix @@ -0,0 +1,81 @@ +{ pkgs }: + +final: prev: + +let + nixpkgs_20191230 = import (pkgs.fetchFromGitHub { + owner = "NixOS"; + repo = "nixpkgs"; + rev = "a9eb3eed170fa916e0a8364e5227ee661af76fde"; + hash = "sha256-1ycrr9HMrGA3ZDM8qmKcZICBupE5UShnIIhPRWdvAzA="; + }) { inherit (pkgs.stdenv.hostPlatform) system; }; + + # Fails to build with current gcc versions, so build with an + # old gcc from around the time glibc 2.28 was released. + glibc_2_28 = nixpkgs_20191230.callPackage ./glibc_2_28 { }; + + mkBinutilsWrapped = + { binutils, glibc }: + pkgs.wrapBintoolsWith { + bintools = binutils; + libc = glibc; + }; + mkGccWrapped = + { + binutils, + coreutils, + gcc-unwrapped, + glibc, + wrapCCWith, + }: + wrapCCWith { + bintools = mkBinutilsWrapped { + inherit binutils glibc; + }; + coreutils = coreutils; + cc = gcc-unwrapped; + gccForLibs = gcc-unwrapped; + libc = glibc; + isGNU = true; + useCcForLibs = true; + }; + mkStdenv = + { + binutils, + coreutils, + gcc-unwrapped, + glibc, + overrideCC, + stdenv, + wrapCCWith, + }: + overrideCC stdenv (mkGccWrapped { + inherit + binutils + coreutils + gcc-unwrapped + glibc + wrapCCWith + ; + }); +in + +builtins.listToAttrs ( + map + (version: { + name = "gcc${version}Stdenv"; + value = pkgs.overrideCC pkgs.stdenv (mkGccWrapped { + inherit (pkgs) wrapCCWith; + binutils = final."gcc-toolset-${version}-binutils"; + coreutils = final.coreutils; + gcc-unwrapped = final."gcc${version}-unwrapped"; + # We are using our own glibc 2.28, since the Red Hat version has + # the wrong glibc paths baked into the dynamic loader. + glibc = glibc_2_28; + }); + }) + [ + "13" + "14" + ] +) diff --git a/nix-builder/pkgs/stdenv-glibc-2_27/default.nix b/nix-builder/pkgs/stdenv-glibc-2_27/default.nix deleted file mode 100644 index b2978c57..00000000 --- a/nix-builder/pkgs/stdenv-glibc-2_27/default.nix +++ /dev/null @@ -1,81 +0,0 @@ -{ - config, - cudaSupport ? config.cudaSupport, - fetchFromGitHub, - overrideCC, - wrapBintoolsWith, - wrapCCWith, - gcc13Stdenv, - stdenv, - bintools-unwrapped, - cudaPackages, - libgcc, -}: - -let - nixpkgs_20191230 = import (fetchFromGitHub { - owner = "NixOS"; - repo = "nixpkgs"; - rev = "a9eb3eed170fa916e0a8364e5227ee661af76fde"; - hash = "sha256-1ycrr9HMrGA3ZDM8qmKcZICBupE5UShnIIhPRWdvAzA="; - }) { inherit (stdenv.hostPlatform) system; }; - - glibc_2_27 = nixpkgs_20191230.glibc.overrideAttrs (prevAttrs: { - # Slight adjustments for compatibility with modern nixpkgs: - # - # - pname is required - # - an additional getent output - # - passthru libgcc - - pname = "glibc"; - - outputs = prevAttrs.outputs ++ [ "getent" ]; - - postInstall = prevAttrs.postInstall + '' - install -Dm755 $bin/bin/getent -t $getent/bin - - # libgcc_s.so is normally a linker script that adds -lgcc for static - # functions. However due to bootstrapping requirements, libgcc_s is - # also added to the glibc library directory. Unfortunately, here it - # is a symlink to libgcc_s.so.1. This breaks linkage with g++, since - # the static library is not used. Newer glibc versions allow fixing - # this easily by setting up the libgcc as a user-trusted directory. - # We'll fix it here by replacing libgcc_s.so by a linker script. - rm -f $out/lib/libgcc_s.so - echo "GROUP ( libgcc_s.so.1 -lgcc )" > $out/lib/libgcc_s.so - ''; - - passthru = prevAttrs.passthru // { - # Should be stdenv's gcc, but we don't have access to it. - libgcc = stdenv.cc.cc.libgcc; - }; - }); - - stdenvWith = - newGlibc: newGcc: stdenv: - let - # We need gcc to have a libgcc/libstdc++ that is compatible with - # glibc. We do this in three steps to avoid an infinite recursion: - # (1) we create an stdenv with gcc and glibc; (2) we rebuild gcc using - # this stdenv, so that we have a libgcc/libstdc++ that is compatible - # with glibc; (3) we create the final stdenv that contains the compatible - # gcc + glibc. - onlyGlibc = overrideCC stdenv (wrapCCWith { - cc = newGcc; - bintools = wrapBintoolsWith { - bintools = bintools-unwrapped; - libc = newGlibc; - }; - }); - compilerWrapped = wrapCCWith rec { - cc = newGcc.override { stdenv = onlyGlibc; }; - bintools = wrapBintoolsWith { - bintools = bintools-unwrapped; - libc = newGlibc; - }; - }; - in - overrideCC stdenv compilerWrapped; - -in -stdenvWith glibc_2_27 (if cudaSupport then cudaPackages.backendStdenv else gcc13Stdenv).cc.cc stdenv diff --git a/nix-builder/pkgs/xpu-packages/oneapi-torch-dev.nix b/nix-builder/pkgs/xpu-packages/oneapi-torch-dev.nix index 2bca9265..a5b4ed22 100644 --- a/nix-builder/pkgs/xpu-packages/oneapi-torch-dev.nix +++ b/nix-builder/pkgs/xpu-packages/oneapi-torch-dev.nix @@ -85,17 +85,17 @@ stdenv.mkDerivation { installPhase = let + gccMajor = lib.versions.major stdenv.cc.cc.version; wrapperArgs = [ "--add-flags -B${stdenv.cc.libc}/lib" "--add-flags -B${placeholder "out"}/lib/crt" - "--add-flags -B${stdenv.cc.cc}/lib/gcc/${stdenv.hostPlatform.uname.processor}-unknown-linux-gnu/${stdenv.cc.cc.version}" + "--add-flags -B${stdenv.cc.cc}/lib/gcc/${stdenv.hostPlatform.uname.processor}-redhat-linux/${gccMajor}" "--add-flags '-isysroot ${stdenv.cc.libc_dev}'" "--add-flags '-isystem ${stdenv.cc.libc_dev}/include'" - "--add-flags -I${stdenv.cc.cc}/include/c++/${stdenv.cc.version}" - "--add-flags -I${stdenv.cc.cc}/include/c++/${stdenv.cc.version}/x86_64-unknown-linux-gnu" + "--add-flags -I${stdenv.cc.cc}/include/c++/${gccMajor}" + "--add-flags -I${stdenv.cc.cc}/include/c++/${gccMajor}/x86_64-redhat-linux" "--add-flags -L${stdenv.cc.cc}/lib" - "--add-flags -L${stdenv.cc.cc}/lib/gcc/${stdenv.hostPlatform.uname.processor}-unknown-linux-gnu/${stdenv.cc.version}" - "--add-flags -L${stdenv.cc.cc.libgcc}/lib" + "--add-flags -L${stdenv.cc.cc}/lib/gcc/${stdenv.hostPlatform.uname.processor}-redhat-linux/${gccMajor}" ]; in '' diff --git a/nix-builder/pkgs/xpu-packages/sycl-tla.nix b/nix-builder/pkgs/xpu-packages/sycl-tla.nix index 4fa7e7d8..ef903374 100644 --- a/nix-builder/pkgs/xpu-packages/sycl-tla.nix +++ b/nix-builder/pkgs/xpu-packages/sycl-tla.nix @@ -11,7 +11,8 @@ }: let - dpcppVersion = oneapi-torch-dev.version; + effective-oneapi-torch-dev = oneapi-torch-dev.override { inherit stdenv; }; + dpcppVersion = effective-oneapi-torch-dev.version; syclTlaVersions = { "2025.3" = { version = "0.8"; @@ -43,9 +44,9 @@ stdenv.mkDerivation rec { nativeBuildInputs = [ cmake + effective-oneapi-torch-dev ninja setupXpuHook - oneapi-torch-dev python3 ocloc ]; diff --git a/nix-builder/tests/Dockerfile.test-kernel b/nix-builder/tests/Dockerfile.test-kernel index 92b8c485..580994bf 100644 --- a/nix-builder/tests/Dockerfile.test-kernel +++ b/nix-builder/tests/Dockerfile.test-kernel @@ -3,7 +3,7 @@ ARG PYTHON_VERSION=3.10 # Test with the oldest CUDA version supported by the latest PyTorch. ARG CUDA_VERSION=12.6.0 ARG UBI_VERSION=8 -ARG TORCH_VERSION=2.10.0 +ARG TORCH_VERSION=2.11.0 FROM nvidia/cuda:${CUDA_VERSION}-devel-ubi${UBI_VERSION} as base @@ -68,11 +68,13 @@ COPY cutlass-gemm-kernel ./cutlass-gemm-kernel COPY cutlass-gemm-tvm-ffi-kernel ./cutlass-gemm-tvm-ffi-kernel COPY silu-and-mul-kernel ./silu-and-mul-kernel COPY extra-data ./extra-data +COPY cpp20-symbols-kernel ./cpp20-symbols-kernel COPY examples/kernels/extra-data/tests ./extra_data_tests COPY examples/kernels/relu/tests ./relu_tests COPY examples/kernels/relu-tvm-ffi/tests ./relu_tvm_ffi_tests COPY examples/kernels/cutlass-gemm/tests ./cutlass_gemm_tests COPY examples/kernels/cutlass-gemm-tvm-ffi/tests ./cutlass_gemm_tvm_ffi_tests +COPY examples/kernels/cpp20-symbols/tests ./cpp20_symbols_tests # Run tests ADD nix-builder/tests/run-tests.sh ./run-tests.sh diff --git a/nix-builder/tests/run-tests.sh b/nix-builder/tests/run-tests.sh index 968a5df7..f4e7428d 100644 --- a/nix-builder/tests/run-tests.sh +++ b/nix-builder/tests/run-tests.sh @@ -9,6 +9,7 @@ CUTLASS_PATH=$(echo cutlass-gemm-kernel/torch*) CUTLASS_TVM_FFI_PATH=$(echo cutlass-gemm-tvm-ffi-kernel/tvm-ffi*) SILU_MUL_PATH=$(echo silu-and-mul-kernel/torch*) RELU_CPU_PATH=$(echo relu-kernel-cpu/torch*) +CPP20_SYMBOLS_PATH=$(echo cpp20-symbols-kernel/torch*) PYTHONPATH="$EXTRA_DATA_PATH:$RELU_PATH:$RELU_TVM_FFI_PATH:$CUTLASS_PATH:$CUTLASS_TVM_FFI_PATH" \ .venv/bin/pytest extra_data_tests relu_tests relu_tvm_ffi_tests cutlass_gemm_tests cutlass_gemm_tvm_ffi_tests @@ -20,3 +21,7 @@ PYTHONPATH="$SILU_MUL_PATH" \ PYTHONPATH="$RELU_CPU_PATH" \ CUDA_VISIBLE_DEVICES="" \ .venv/bin/pytest relu_tests + +PYTHONPATH="$CPP20_SYMBOLS_PATH" \ + CUDA_VISIBLE_DEVICES="" \ + .venv/bin/pytest cpp20_symbols_tests From abe6603cffd3d001efc9ba0d37304cb43aa11bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Sun, 17 May 2026 16:12:49 +0000 Subject: [PATCH 2/4] Two small fixes --- nix-builder/pkgs/manylinux/default.nix | 2 +- nix-builder/pkgs/manylinux/glibc_2_28/default.nix | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/nix-builder/pkgs/manylinux/default.nix b/nix-builder/pkgs/manylinux/default.nix index 07aaa53b..4e5d1b17 100644 --- a/nix-builder/pkgs/manylinux/default.nix +++ b/nix-builder/pkgs/manylinux/default.nix @@ -25,7 +25,7 @@ let # Unwrapped gcc (gcc13-unwrapped, gcc14-unwrapped, etc.) (import ./gcc-unwrapped.nix) - # stdenvs (gcc13Stdenv, gcc14Stdeng, etc.) + # stdenvs (gcc13Stdenv, gcc14Stdenv, etc.) (import ./stdenv.nix { inherit pkgs; }) # Use the gcc14 stdenv by default. diff --git a/nix-builder/pkgs/manylinux/glibc_2_28/default.nix b/nix-builder/pkgs/manylinux/glibc_2_28/default.nix index e2bbd7b1..9f943ca7 100644 --- a/nix-builder/pkgs/manylinux/glibc_2_28/default.nix +++ b/nix-builder/pkgs/manylinux/glibc_2_28/default.nix @@ -1,3 +1,9 @@ +# Note: this glibc derivation is vendored from nixpkgs. Changes: +# +# - Bump version to 2.28. +# - Unconditionally enable preFixup phase to remove stray dependency +# on another glibc for bash. + { lib, stdenv, From 252f7e8ac5573469f776f087bec43ef51a3f923b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Sun, 17 May 2026 16:15:08 +0000 Subject: [PATCH 3/4] Make passing of package metadata more explicit --- nix-builder/pkgs/manylinux/components.nix | 4 +++- nix-builder/pkgs/manylinux/default.nix | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/nix-builder/pkgs/manylinux/components.nix b/nix-builder/pkgs/manylinux/components.nix index 9b8288db..d1a77dcc 100644 --- a/nix-builder/pkgs/manylinux/components.nix +++ b/nix-builder/pkgs/manylinux/components.nix @@ -1,3 +1,5 @@ +{ packageMetadata }: + final: prev: prev.lib.mapAttrs ( @@ -7,4 +9,4 @@ prev.lib.mapAttrs ( inherit (metadata) components deps version; manylinuxPackages = final; } -) prev.packageMetadata +) packageMetadata diff --git a/nix-builder/pkgs/manylinux/default.nix b/nix-builder/pkgs/manylinux/default.nix index 4e5d1b17..0ca6ad6e 100644 --- a/nix-builder/pkgs/manylinux/default.nix +++ b/nix-builder/pkgs/manylinux/default.nix @@ -13,11 +13,11 @@ let inherit (lib.fixedPoints) extends composeManyExtensions; fixedPoint = final: { - inherit lib packageMetadata; + inherit lib; }; composed = lib.composeManyExtensions [ # Base package set. - (import ./components.nix) + (import ./components.nix { inherit packageMetadata; }) # Package-specific overrides. (import ./overrides.nix) From 02882122b0d7c5719bff4c1e46a0cb7289534a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=C3=ABl=20de=20Kok?= Date: Mon, 18 May 2026 15:25:22 +0000 Subject: [PATCH 4/4] doc: fixes and clarifications --- docs/source/builder/design-nix-builder.md | 25 +++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/docs/source/builder/design-nix-builder.md b/docs/source/builder/design-nix-builder.md index 3552adf4..037a05ac 100644 --- a/docs/source/builder/design-nix-builder.md +++ b/docs/source/builder/design-nix-builder.md @@ -44,13 +44,22 @@ The stdenv does not reuse glibc from AlmaLinux, since its dynamic loader has hardcoded FHS paths (`/lib64` etc.) that are not valid in Nix. Using this dynamic loader results in linking errors, since the paths in the dynamic loader are used as a last resort (to link glibc libraries). So, instead we -build our own glibc 2.28 package and use that. +build our own glibc 2.28 package +(see `nix-builder/pkgs/manylinux_2_28/stdenv.nix`) and use that. ## The package set pattern We repackage various existing package sets as Nix derivations. For instance, -this is done for ROCm, XPU, and manylinux_2_28 packages. These package sets -all follow the same pattern: +this is done for ROCm, XPU, and manylinux_2_28 packages. We do this because +we want these libraries to be as close as what the user would install. This +avoids compatibility issues between the kernels and the official vendor +packages. For instance, suppose that we built a ROCm library as a shared +library and ROCm provides the same library as a static library, then compiled +kernels could use symbols that cannot be resolved when installing the official +ROCm packages. Similarly, using the official packages allows us to test +against the official upstram packages. + +These package sets all follow the same pattern: ```nix { @@ -97,10 +106,10 @@ The package sets all use a similar list of overlays: repository that contains RPM packages.The generic builder will extract the RPMs and move binaries, libraries, and headers to the right location. This results in a set of Nix derivations that may or may not build. -- The next overlay (`overrides.nix`) fixes up derivations created by the - generic builder that do not build. Fixing the derivations typically consists - of adding missing dependencies and changing embedded FHS paths to Nix store - paths. +- The next overlay (`overrides.nix`) fixes up derivations generated by the + generic builder in the previous overlay that do not build. Fixing the + derivations typically consists of adding missing dependencies and changing + embedded FHS paths to Nix store paths. - Additional overlays with derivations that combine outputs from previous overlays. One typical example are derivations that construct a full compiler - toolchain. + toolchain (e.g. `nix-builder/pkgs/manylinux_2_28/gcc-unwrapped.nix`).