Skip to content

Commit

Permalink
fix: use architectures from opencontainers initiative
Browse files Browse the repository at this point in the history
  • Loading branch information
fstagni committed Jul 15, 2024
1 parent 94d6fd8 commit b82fb28
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 32 deletions.
55 changes: 24 additions & 31 deletions src/DIRAC/Core/Utilities/Os.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,47 +154,40 @@ def which(executable):
return shutil.which(executable)


def findImage(continer_root="container/apptainer/alma9/"):
def findImage(container_root="/cvmfs/unpacked.cern.ch/"):
"""Finds the image for the current platform
This looks into location "${CVMFS_locations}/${container_root}/${platform}/"
and expects to find one of the following platforms:
- x86_64
- aarch64
- ppc64le
This looks into location "${container_root}"
and expects to find one of the following platforms:
- amd64
- arm64
- ppc64le
"""
from DIRAC.ConfigurationSystem.Client.Helpers.Operations import Operations

plat = DIRAC.gConfig.getValue("LocalSite/Platform", platform.machine())
DIRAC.gLogger.info(f"Platform: {plat}")

# NB: platform compatibility is more complex than the following simple identification.
# sources:

# NB: platform compatibility is more complex than the following simple identification.
#
# 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

CVMFS_locations = DIRAC.gConfig.getValue(
"LocalSite/CVMFS_locations", Operations().getValue("Pilot/CVMFS_locations", [])
)

rootImage = None

for candidate in CVMFS_locations:
rootImage = os.path.join(candidate, continer_root, plat)
DIRAC.gLogger.verbose(f"Checking {rootImage} existence")
if safe_listdir(rootImage):
break

return rootImage
rootImage = f"{container_root}:{plat}"
DIRAC.gLogger.verbose(f"Checking {rootImage} existence")
if safe_listdir(rootImage):
return rootImage
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@

import DIRAC
from DIRAC import S_ERROR, S_OK, gConfig, gLogger
from DIRAC.ConfigurationSystem.Client.Helpers import Operations
from DIRAC.Core.Utilities.Os import findImage
from DIRAC.Core.Utilities.Subprocess import systemCall
from DIRAC.ConfigurationSystem.Client.Helpers import Operations
from DIRAC.Core.Utilities.ThreadScheduler import gThreadScheduler
from DIRAC.Resources.Computing.ComputingElement import ComputingElement
from DIRAC.Resources.Storage.StorageElement import StorageElement
Expand Down

0 comments on commit b82fb28

Please sign in to comment.