221 lines
7.5 KiB
Python
221 lines
7.5 KiB
Python
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
|
|
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
|
|
import re
|
|
|
|
from spack.package import *
|
|
|
|
|
|
class Slurm(AutotoolsPackage):
|
|
"""Slurm is an open source, fault-tolerant, and highly scalable cluster
|
|
management and job scheduling system for large and small Linux clusters.
|
|
|
|
Slurm requires no kernel modifications for its operation and is relatively
|
|
self-contained. As a cluster workload manager, Slurm has three key
|
|
functions. First, it allocates exclusive and/or non-exclusive access to
|
|
resources (compute nodes) to users for some duration of time so they can
|
|
perform work. Second, it provides a framework for starting, executing,
|
|
and monitoring work (normally a parallel job) on the set of allocated
|
|
nodes. Finally, it arbitrates contention for resources by managing a
|
|
queue of pending work.
|
|
"""
|
|
|
|
homepage = "https://slurm.schedmd.com"
|
|
url = "https://github.com/SchedMD/slurm/archive/slurm-21-08-8-2.tar.gz"
|
|
|
|
version("23-02-1-1", sha256="d827553496ee9158bbf6a862b563cfd48566e6d815ad2f8349950fe6f04934da")
|
|
version("22-05-8-1", sha256="8c8f6a26a5d51e6c63773f2e02653eb724540ee8b360125c8d7732314ce737d6")
|
|
version("22-05-7-1", sha256="2ad7e8a415d54d45977ab64b4e73c891154d2f41a04505fedf6f8d3df385acb1")
|
|
version("21-08-8-2", sha256="876d7dfa716990d7e579cfb9c6ffc123258e03a1450e993ade596d2ee90afcdd")
|
|
version("21-08-8-1", sha256="47d4dd2f391abcb856ecfddb51145c86ead89554f24efb586c59f0e38491ff36")
|
|
version("20-11-9-1", sha256="98d36f3487e95af610db305a3ee1c1a7d370a3e1efef9fabee8b0edb98a6604b")
|
|
# Due to CVE 2022-29500, CVE 2022-29501, and CVE 2022-29502, prior to 21.08.8 and
|
|
# 20.11.9 are deprecated
|
|
version(
|
|
"21-08-1-1",
|
|
sha256="23321719101762b055a6b1da6ff4261f5e6c469bce038c6c23549840453862e7",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"21-08-0-1",
|
|
sha256="c8caf9b5f715c02b6f9e55e9737ee7b99f93c5efc8dcc34c2ce40bed0aea5402",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"20-11-8-1",
|
|
sha256="1cafed56ae9d90387a5dc6092090c174e144a6e5a31330f748d1fd3a616ae92f",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"20-11-7-1",
|
|
sha256="7d92babd97d0b8750b8c25eced4507323aff32a9d85af3a644c1acedbddb9d2f",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"20-02-7-1",
|
|
sha256="060acf966af53e75c7eaae83c4f42abdcc60702838c2dcd35cb01468b45a68a1",
|
|
deprecated=True,
|
|
)
|
|
# Due to CVE-2021-31215, all versions prior to 20.11.7 or 20.02.7 are deprecated.
|
|
version(
|
|
"20-11-5-1",
|
|
sha256="d0634c6c6cc79bde38d19f0ef0de0de3b07907830f5e45be6f4a9ca4259f8f67",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"20-11-4-1",
|
|
sha256="06c5333e85f531730bf1c6eb48a8d48a551d9090540ce37b78181024273fb6bd",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"20-11-0-1",
|
|
sha256="404f72c287c5aad887a5b141304e4962548c12f79b04fc9c88550bc024604228",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"20-02-4-1",
|
|
sha256="d32a39df20a99430973de6692870269f38443d8b963c32b4d6475c9d5e92cd73",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"19-05-6-1",
|
|
sha256="1b83bce4260af06d644253b1f2ec2979b80b4418c631e9c9f48c2729ae2c95ba",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"19-05-5-1",
|
|
sha256="e53e67bd0bb4c37a9c481998764a746467a96bc41d6527569080514f36452c07",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"18-08-9-1",
|
|
sha256="32eb0b612ca18ade1e35c3c9d3b4d71aba2b857446841606a9e54d0a417c3b03",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"18-08-0-1",
|
|
sha256="62129d0f2949bc8a68ef86fe6f12e0715cbbf42f05b8da6ef7c3e7e7240b50d9",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"17-11-9-2",
|
|
sha256="6e34328ed68262e776f524f59cca79ac75bcd18030951d45ea545a7ba4c45906",
|
|
deprecated=True,
|
|
)
|
|
version(
|
|
"17-02-6-1",
|
|
sha256="97b3a3639106bd6d44988ed018e2657f3d640a3d5c105413d05b4721bc8ee25e",
|
|
deprecated=True,
|
|
)
|
|
|
|
variant("gtk", default=False, description="Enable GTK+ support")
|
|
variant("mariadb", default=False, description="Use MariaDB instead of MySQL")
|
|
|
|
variant("hwloc", default=False, description="Enable hwloc support")
|
|
variant("hdf5", default=False, description="Enable hdf5 support")
|
|
variant("readline", default=True, description="Enable readline support")
|
|
variant("pmix", default=False, description="Enable PMIx support")
|
|
variant(
|
|
"sysconfdir",
|
|
default="PREFIX/etc",
|
|
values=any,
|
|
description="Set system configuration path (possibly /etc/slurm)",
|
|
)
|
|
variant("restd", default=False, description="Enable the slurmrestd server")
|
|
|
|
# TODO: add variant for BG/Q and Cray support
|
|
|
|
# TODO: add support for checkpoint/restart (BLCR)
|
|
|
|
# TODO: add support for lua
|
|
|
|
depends_on("curl")
|
|
depends_on("glib")
|
|
depends_on("json-c")
|
|
depends_on("lz4")
|
|
depends_on("munge")
|
|
depends_on("openssl")
|
|
depends_on("pkgconfig", type="build")
|
|
depends_on("readline", when="+readline")
|
|
depends_on("zlib")
|
|
|
|
depends_on("gtkplus", when="+gtk")
|
|
depends_on("hdf5", when="+hdf5")
|
|
depends_on("hwloc", when="+hwloc")
|
|
depends_on("mariadb", when="+mariadb")
|
|
depends_on("pmix", when="+pmix")
|
|
|
|
depends_on("http-parser", when="+restd")
|
|
depends_on("libyaml", when="+restd")
|
|
depends_on("libjwt", when="+restd")
|
|
|
|
executables = ["^srun$", "^salloc$"]
|
|
|
|
@classmethod
|
|
def determine_version(cls, exe):
|
|
output = Executable(exe)("--version", output=str).rstrip()
|
|
match = re.search(r"slurm\s*([0-9.]+)", output)
|
|
return match.group(1) if match else None
|
|
|
|
def flag_handler(self, name, flags):
|
|
wrapper_flags = None
|
|
|
|
if name == "cflags":
|
|
if self.spec.satisfies("@:20-02-1 %gcc@10:"):
|
|
wrapper_flags = ["-fcommon"]
|
|
|
|
return (wrapper_flags, None, flags)
|
|
|
|
def configure_args(self):
|
|
spec = self.spec
|
|
|
|
args = [
|
|
"--with-libcurl={0}".format(spec["curl"].prefix),
|
|
"--with-json={0}".format(spec["json-c"].prefix),
|
|
"--with-lz4={0}".format(spec["lz4"].prefix),
|
|
"--with-munge={0}".format(spec["munge"].prefix),
|
|
"--with-ssl={0}".format(spec["openssl"].prefix),
|
|
"--with-zlib={0}".format(spec["zlib"].prefix),
|
|
]
|
|
|
|
if "~gtk" in spec:
|
|
args.append("--disable-gtktest")
|
|
|
|
if "~readline" in spec:
|
|
args.append("--without-readline")
|
|
|
|
if "+hdf5" in spec:
|
|
args.append("--with-hdf5={0}".format(spec["hdf5"].prefix.bin.h5cc))
|
|
else:
|
|
args.append("--without-hdf5")
|
|
|
|
if "+restd" in spec:
|
|
args.append("--enable-slurmrestd")
|
|
args.append("--with-http-parser={0}".format(spec["http-parser"].prefix))
|
|
args.append("--with-jwt={0}".format(spec["libjwt"].prefix))
|
|
else:
|
|
args.append("--disable-slurmrestd")
|
|
|
|
if "+hwloc" in spec:
|
|
args.append("--with-hwloc={0}".format(spec["hwloc"].prefix))
|
|
else:
|
|
args.append("--without-hwloc")
|
|
|
|
if "+pmix" in spec:
|
|
args.append("--with-pmix={0}".format(spec["pmix"].prefix))
|
|
else:
|
|
args.append("--without-pmix")
|
|
|
|
sysconfdir = spec.variants["sysconfdir"].value
|
|
if sysconfdir != "PREFIX/etc":
|
|
args.append("--sysconfdir={0}".format(sysconfdir))
|
|
|
|
return args
|
|
|
|
def install(self, spec, prefix):
|
|
make("install")
|
|
make("-C", "contribs/pmi2", "install")
|