apptainer: new package (#30745)
This commit is contained in:
parent
c5297523af
commit
557845cccc
37
var/spack/repos/builtin/packages/apptainer/package.py
Normal file
37
var/spack/repos/builtin/packages/apptainer/package.py
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
# Copyright 2013-2022 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)
|
||||||
|
|
||||||
|
|
||||||
|
from spack import *
|
||||||
|
from spack.pkg.builtin.singularityce import SingularityBase
|
||||||
|
|
||||||
|
|
||||||
|
# Apptainer is the new name of Singularity, piggy-back on the original package
|
||||||
|
class Apptainer(SingularityBase):
|
||||||
|
'''Apptainer is an open source container platform designed to be simple, fast, and
|
||||||
|
secure. Many container platforms are available, but Apptainer is designed for
|
||||||
|
ease-of-use on shared systems and in high performance computing (HPC)
|
||||||
|
environments.
|
||||||
|
|
||||||
|
Needs post-install chmod/chown steps to enable full functionality.
|
||||||
|
See package definition or `spack-build-out.txt` build log for details,
|
||||||
|
e.g.::
|
||||||
|
|
||||||
|
tail -15 $(spack location -i apptainer)/.spack/spack-build-out.txt
|
||||||
|
'''
|
||||||
|
|
||||||
|
homepage = "https://apptainer.org"
|
||||||
|
url = "https://github.com/apptainer/apptainer/releases/download/v1.0.2/apptainer-1.0.2.tar.gz"
|
||||||
|
git = "https://github.com/apptainer/apptainer.git"
|
||||||
|
|
||||||
|
version('main', branch='main')
|
||||||
|
version('1.0.2', sha256='2d7a9d0a76d5574459d249c3415e21423980d9154ce85e8c34b0600782a7dfd3')
|
||||||
|
|
||||||
|
singularity_org = 'apptainer'
|
||||||
|
singularity_name = 'apptainer'
|
||||||
|
singularity_security_urls = (
|
||||||
|
"https://apptainer.org/docs/admin/main/security.html",
|
||||||
|
"https://apptainer.org/docs/admin/main/admin_quickstart.html#apptainer-security",
|
||||||
|
)
|
@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/sh -eu
|
||||||
|
|
||||||
|
{% for cf in chown_files %}
|
||||||
|
chown root {{ prefix }}/{{ cf }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for sf in setuid_files %}
|
||||||
|
chmod 4555 {{ prefix }}/{{ sf }}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
# end
|
@ -27,6 +27,14 @@ class SingularityBase(MakefilePackage):
|
|||||||
|
|
||||||
conflicts('platform=darwin', msg='singularity requires a Linux VM on Windows & Mac')
|
conflicts('platform=darwin', msg='singularity requires a Linux VM on Windows & Mac')
|
||||||
|
|
||||||
|
# Use these properties to buffer the renaming to Apptainer
|
||||||
|
singularity_org = 'sylabs'
|
||||||
|
singularity_name = 'singularity'
|
||||||
|
singularity_security_urls = (
|
||||||
|
"https://sylabs.io/guides/2.6/admin-guide/security.html",
|
||||||
|
"https://sylabs.io/guides/3.2/admin-guide/admin_quickstart.html#singularity-security",
|
||||||
|
)
|
||||||
|
|
||||||
# Go has novel ideas about how projects should be organized.
|
# Go has novel ideas about how projects should be organized.
|
||||||
# We'll point GOPATH at the stage dir, and move the unpacked src
|
# We'll point GOPATH at the stage dir, and move the unpacked src
|
||||||
# tree into the proper subdir in our overridden do_stage below.
|
# tree into the proper subdir in our overridden do_stage below.
|
||||||
@ -34,13 +42,10 @@ class SingularityBase(MakefilePackage):
|
|||||||
def gopath(self):
|
def gopath(self):
|
||||||
return self.stage.path
|
return self.stage.path
|
||||||
|
|
||||||
@property
|
|
||||||
def sylabs_gopath_dir(self):
|
|
||||||
return join_path(self.gopath, 'src/github.com/sylabs/')
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def singularity_gopath_dir(self):
|
def singularity_gopath_dir(self):
|
||||||
return join_path(self.sylabs_gopath_dir, 'singularity')
|
return join_path(self.gopath, 'src', 'github.com',
|
||||||
|
self.singularity_org, self.singularity_name)
|
||||||
|
|
||||||
# Unpack the tarball as usual, then move the src dir into
|
# Unpack the tarball as usual, then move the src dir into
|
||||||
# its home within GOPATH.
|
# its home within GOPATH.
|
||||||
@ -90,7 +95,9 @@ def fix_mksquashfs_path(self):
|
|||||||
squash_path = join_path(self.spec['squashfs'].prefix.bin, 'mksquashfs')
|
squash_path = join_path(self.spec['squashfs'].prefix.bin, 'mksquashfs')
|
||||||
filter_file(r'^# mksquashfs path =',
|
filter_file(r'^# mksquashfs path =',
|
||||||
'mksquashfs path = {0}'.format(squash_path),
|
'mksquashfs path = {0}'.format(squash_path),
|
||||||
join_path(prefix.etc, 'singularity', 'singularity.conf'))
|
join_path(prefix.etc,
|
||||||
|
self.singularity_name,
|
||||||
|
self.singularity_name + '.conf'))
|
||||||
|
|
||||||
#
|
#
|
||||||
# Assemble a script that fixes the ownership and permissions of several
|
# Assemble a script that fixes the ownership and permissions of several
|
||||||
@ -116,11 +123,18 @@ def _build_script(self, filename, variable_data):
|
|||||||
def build_perms_script(self):
|
def build_perms_script(self):
|
||||||
if self.spec.satisfies('+suid'):
|
if self.spec.satisfies('+suid'):
|
||||||
script = self.perm_script_path()
|
script = self.perm_script_path()
|
||||||
chown_files = ['libexec/singularity/bin/starter-suid',
|
chown_files = [
|
||||||
'etc/singularity/singularity.conf',
|
fn.format(self.singularity_name)
|
||||||
'etc/singularity/capability.json',
|
for fn in ['libexec/{0}/bin/starter-suid',
|
||||||
'etc/singularity/ecl.toml']
|
'etc/{0}/{0}.conf',
|
||||||
setuid_files = ['libexec/singularity/bin/starter-suid']
|
'etc/{0}/capability.json',
|
||||||
|
'etc/{0}/ecl.toml']
|
||||||
|
]
|
||||||
|
setuid_files = [
|
||||||
|
'libexec/{0}/bin/starter-suid'.format(
|
||||||
|
self.singularity_name
|
||||||
|
)
|
||||||
|
]
|
||||||
self._build_script(script, {'prefix': self.spec.prefix,
|
self._build_script(script, {'prefix': self.spec.prefix,
|
||||||
'chown_files': chown_files,
|
'chown_files': chown_files,
|
||||||
'setuid_files': setuid_files})
|
'setuid_files': setuid_files})
|
||||||
@ -136,8 +150,8 @@ def caveats(self):
|
|||||||
For full functionality, you'll need to chown and chmod some files
|
For full functionality, you'll need to chown and chmod some files
|
||||||
after installing the package. This has security implications.
|
after installing the package. This has security implications.
|
||||||
For details, see:
|
For details, see:
|
||||||
https://sylabs.io/guides/2.6/admin-guide/security.html
|
{1}
|
||||||
https://sylabs.io/guides/3.2/admin-guide/admin_quickstart.html#singularity-security
|
{2}
|
||||||
|
|
||||||
We've installed a script that will make the necessary changes;
|
We've installed a script that will make the necessary changes;
|
||||||
read through it and then execute it as root (e.g. via sudo).
|
read through it and then execute it as root (e.g. via sudo).
|
||||||
@ -145,7 +159,8 @@ def caveats(self):
|
|||||||
The script is named:
|
The script is named:
|
||||||
|
|
||||||
{0}
|
{0}
|
||||||
""".format(self.perm_script_path()))
|
""".format(self.perm_script_path(),
|
||||||
|
*self.singularity_security_urls))
|
||||||
|
|
||||||
|
|
||||||
class Singularityce(SingularityBase):
|
class Singularityce(SingularityBase):
|
||||||
|
Loading…
Reference in New Issue
Block a user