likwid: add a permission fixing script a la singularity (#33503)
This commit is contained in:
parent
194f9a9ca9
commit
7950311767
@ -6,6 +6,8 @@
|
|||||||
import glob
|
import glob
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
import llnl.util.tty as tty
|
||||||
|
|
||||||
from spack.package import *
|
from spack.package import *
|
||||||
|
|
||||||
|
|
||||||
@ -64,6 +66,13 @@ class Likwid(Package):
|
|||||||
variant("fortran", default=True, description="with fortran interface")
|
variant("fortran", default=True, description="with fortran interface")
|
||||||
variant("cuda", default=False, description="with Nvidia GPU profiling support")
|
variant("cuda", default=False, description="with Nvidia GPU profiling support")
|
||||||
|
|
||||||
|
variant(
|
||||||
|
"accessmode",
|
||||||
|
default="perf_event",
|
||||||
|
values=("perf_event", "accessdaemon"),
|
||||||
|
description="the default mode for MSR access",
|
||||||
|
)
|
||||||
|
|
||||||
# NOTE: There is no way to use an externally provided hwloc with Likwid.
|
# NOTE: There is no way to use an externally provided hwloc with Likwid.
|
||||||
# The reason is that the internal hwloc is patched to contain extra
|
# The reason is that the internal hwloc is patched to contain extra
|
||||||
# functionality and functions are prefixed with "likwid_".
|
# functionality and functions are prefixed with "likwid_".
|
||||||
@ -126,11 +135,17 @@ def install(self, spec, prefix):
|
|||||||
)
|
)
|
||||||
filter_file("^PREFIX .*", "PREFIX = " + prefix, "config.mk")
|
filter_file("^PREFIX .*", "PREFIX = " + prefix, "config.mk")
|
||||||
|
|
||||||
# FIXME: once https://github.com/spack/spack/issues/4432 is
|
filter_file(
|
||||||
# resolved, install as root by default and remove this
|
"^ACCESSMODE .*",
|
||||||
filter_file("^ACCESSMODE .*", "ACCESSMODE = perf_event", "config.mk")
|
"ACCESSMODE = {}".format(spec.variants["accessmode"].value),
|
||||||
filter_file("^BUILDFREQ .*", "BUILDFREQ = false", "config.mk")
|
"config.mk",
|
||||||
filter_file("^BUILDDAEMON .*", "BUILDDAEMON = false", "config.mk")
|
)
|
||||||
|
if "accessmode=accessdaemon" in spec:
|
||||||
|
# Disable the chown, see the `spack_perms_fix` template and script
|
||||||
|
filter_file("^INSTALL_CHOWN .*", "INSTALL_CHOWN =", "config.mk")
|
||||||
|
else:
|
||||||
|
filter_file("^BUILDFREQ .*", "BUILDFREQ = false", "config.mk")
|
||||||
|
filter_file("^BUILDDAEMON .*", "BUILDDAEMON = false", "config.mk")
|
||||||
|
|
||||||
if "+fortran" in self.spec:
|
if "+fortran" in self.spec:
|
||||||
filter_file("^FORTRAN_INTERFACE .*", "FORTRAN_INTERFACE = true", "config.mk")
|
filter_file("^FORTRAN_INTERFACE .*", "FORTRAN_INTERFACE = true", "config.mk")
|
||||||
@ -187,3 +202,33 @@ def install(self, spec, prefix):
|
|||||||
env["PWD"] = os.getcwd()
|
env["PWD"] = os.getcwd()
|
||||||
make()
|
make()
|
||||||
make("install")
|
make("install")
|
||||||
|
|
||||||
|
# Until tty output works better from build steps, this ends up in
|
||||||
|
# the build log. See https://github.com/spack/spack/pull/10412.
|
||||||
|
@run_after("install")
|
||||||
|
def caveats(self):
|
||||||
|
if "accessmode=accessdaemon" in self.spec:
|
||||||
|
perm_script = "spack_perms_fix.sh"
|
||||||
|
perm_script_path = join_path(self.spec.prefix, perm_script)
|
||||||
|
daemons = glob.glob(join_path(self.spec.prefix, "sbin", "*"))
|
||||||
|
with open(perm_script_path, "w") as f:
|
||||||
|
env = spack.tengine.make_environment(dirs=self.package_dir)
|
||||||
|
t = env.get_template(perm_script + ".j2")
|
||||||
|
f.write(
|
||||||
|
t.render({"prefix": self.spec.prefix, "chowns": daemons, "chmods": daemons})
|
||||||
|
)
|
||||||
|
tty.warn(
|
||||||
|
"""
|
||||||
|
For full functionality, you'll need to chown and chmod some files
|
||||||
|
after installing the package. This has security implications.
|
||||||
|
|
||||||
|
We've installed a script that will make the necessary changes;
|
||||||
|
read through it and then execute it as root (e.g. via sudo).
|
||||||
|
|
||||||
|
The script is named:
|
||||||
|
|
||||||
|
{0}
|
||||||
|
""".format(
|
||||||
|
perm_script_path
|
||||||
|
)
|
||||||
|
)
|
||||||
|
11
var/spack/repos/builtin/packages/likwid/spack_perms_fix.sh.j2
Executable file
11
var/spack/repos/builtin/packages/likwid/spack_perms_fix.sh.j2
Executable file
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh -eu
|
||||||
|
|
||||||
|
{% for cf in chowns %}
|
||||||
|
chown root:root {{ prefix }}/{{ cf }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for sf in chmods %}
|
||||||
|
chmod 4755 {{ prefix }}/{{ sf }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
# end
|
Loading…
Reference in New Issue
Block a user