From 454ca0ab72dafe092bb22c0db275f53eee264dbf Mon Sep 17 00:00:00 2001 From: Omar Awile Date: Thu, 3 May 2018 14:44:57 +0200 Subject: [PATCH 1/3] Added setgid option for likwid This feature is needed because msr and PCI devices need elevated privileges. Using the setgid trick described here: https://github.com/RRZE-HPC/likwid/wiki/likwid-accessD we can accomplish this securely. --- var/spack/repos/builtin/packages/likwid/package.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/var/spack/repos/builtin/packages/likwid/package.py b/var/spack/repos/builtin/packages/likwid/package.py index 8e3492ef1ce97e..5bfdcc2ae330ab 100644 --- a/var/spack/repos/builtin/packages/likwid/package.py +++ b/var/spack/repos/builtin/packages/likwid/package.py @@ -53,6 +53,12 @@ class Likwid(Package): depends_on('perl', type=('build', 'run')) + variant('setgid', default=False, description='enable setgid flag ' + + 'for likwid-accessD and change its group to likwid. ' + + 'Note: this requires the likwid group to already exist.') + + conflicts('+setgid', when='@:4.0.1') # accessD was added in 4.1 + supported_compilers = {'clang': 'CLANG', 'gcc': 'GCC', 'intel': 'ICC'} def patch(self): @@ -109,3 +115,9 @@ def install(self, spec, prefix): env['PWD'] = os.getcwd() make() make('install') + if spec.satisfies('+setgid'): + accessD = os.path.join(prefix,'sbin','likwid-accessD') + chgrp = which('chgrp') + chmod = which('chmod') + chgrp('likwid', accessD) + chmod('g+s', accessD) From 10d2684f92c10d13187af7e3c52d521a93e896ba Mon Sep 17 00:00:00 2001 From: Omar Awile Date: Thu, 3 May 2018 16:08:34 +0200 Subject: [PATCH 2/3] slightly cleaned up setgid patch --- .../repos/builtin/packages/likwid/package.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/var/spack/repos/builtin/packages/likwid/package.py b/var/spack/repos/builtin/packages/likwid/package.py index 5bfdcc2ae330ab..4e082a1379e909 100644 --- a/var/spack/repos/builtin/packages/likwid/package.py +++ b/var/spack/repos/builtin/packages/likwid/package.py @@ -115,9 +115,12 @@ def install(self, spec, prefix): env['PWD'] = os.getcwd() make() make('install') - if spec.satisfies('+setgid'): - accessD = os.path.join(prefix,'sbin','likwid-accessD') - chgrp = which('chgrp') - chmod = which('chmod') - chgrp('likwid', accessD) - chmod('g+s', accessD) + + @run_after('install') + def change_group(self): + accessD = join_path(self.prefix.sbin, 'likwid-accessD') + if self.spec.satisfies('+setgid'): + chgrp = which('chgrp') + chmod = which('chmod') + chgrp('likwid', accessD) + chmod('g+s', accessD) From 7f745431fca1f0e24e175f132983dd46b82e1f29 Mon Sep 17 00:00:00 2001 From: Pramod Kumbhar Date: Thu, 3 May 2018 16:31:17 +0200 Subject: [PATCH 3/3] add LIKWID_GROUP env variable --- var/spack/repos/builtin/packages/likwid/package.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/var/spack/repos/builtin/packages/likwid/package.py b/var/spack/repos/builtin/packages/likwid/package.py index 4e082a1379e909..a6f0e7caef01de 100644 --- a/var/spack/repos/builtin/packages/likwid/package.py +++ b/var/spack/repos/builtin/packages/likwid/package.py @@ -54,8 +54,8 @@ class Likwid(Package): depends_on('perl', type=('build', 'run')) variant('setgid', default=False, description='enable setgid flag ' - + 'for likwid-accessD and change its group to likwid. ' - + 'Note: this requires the likwid group to already exist.') + + 'for likwid-accessD and change its group to LIWKID_GROUP. ' + + 'Note: set LIWKID_GROUP env variable') conflicts('+setgid', when='@:4.0.1') # accessD was added in 4.1 @@ -120,7 +120,10 @@ def install(self, spec, prefix): def change_group(self): accessD = join_path(self.prefix.sbin, 'likwid-accessD') if self.spec.satisfies('+setgid'): + likwid_group = 'likwid' + if 'LIKWID_GROUP' in os.environ: + likwid_group = os.environ['LIKWID_GROUP'] chgrp = which('chgrp') chmod = which('chmod') - chgrp('likwid', accessD) + chgrp(likwid_group, accessD) chmod('g+s', accessD)