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