From c3c063563a3806a23282aab12d4846cc577907e3 Mon Sep 17 00:00:00 2001 From: Federico Stagni Date: Wed, 5 Jun 2024 15:12:46 +0200 Subject: [PATCH] fix: use architectures from opencontainers initiative --- src/DIRAC/Core/Utilities/Os.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/DIRAC/Core/Utilities/Os.py b/src/DIRAC/Core/Utilities/Os.py index 72b1a453806..1fa6ac8c2eb 100755 --- a/src/DIRAC/Core/Utilities/Os.py +++ b/src/DIRAC/Core/Utilities/Os.py @@ -154,7 +154,7 @@ def which(executable): return shutil.which(executable) -def findImage(continer_root="container/apptainer/alma9/"): +def findImage(container_root="container/apptainer/alma9/"): """Finds the image for the current platform This looks into location "${CVMFS_locations}/${container_root}/${platform}/" @@ -170,18 +170,23 @@ def findImage(continer_root="container/apptainer/alma9/"): DIRAC.gLogger.info(f"Platform: {plat}") # NB: platform compatibility is more complex than the following simple identification. - # sources: + # + # Given that, on Linux, platform.machine() returns the same values as uname -m, + # and this is already "confusing", e.g. see # https://stackoverflow.com/questions/45125516/possible-values-for-uname-m # https://en.wikipedia.org/wiki/Uname - - if plat.lower() == "amd64": - plat = "x86_64" - if plat.lower().startswith("arm"): - plat = "aarch64" + # Since here we are using the architecture specification defined by opencontainers initiative: + # https://github.com/opencontainers/image-spec/blob/main/image-index.md#platform-variants + # we need to make some simple "conversions" to get the right values: + + if plat.lower() == "x86_64": + plat = "amd64" + if plat.lower().startswith("arm") or plat.lower() == "aarch64": + plat = "arm64" if plat.lower().startswith("ppc64"): plat = "ppc64le" - if plat not in ["x86_64", "aarch64", "ppc64le"]: + if plat not in ["amd64", "arm64", "ppc64le"]: DIRAC.gLogger.error(f"Platform {plat} not supported") return None @@ -192,7 +197,7 @@ def findImage(continer_root="container/apptainer/alma9/"): rootImage = None for candidate in CVMFS_locations: - rootImage = os.path.join(candidate, continer_root, plat) + rootImage = os.path.join(candidate, container_root, plat) DIRAC.gLogger.verbose(f"Checking {rootImage} existence") if safe_listdir(rootImage): break