Giter VIP home page Giter VIP logo

apptainer's Introduction

Apptainer

CI Go Reference

What is Apptainer?

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. It features:

  • An immutable single-file container image format, supporting cryptographic signatures and encryption.
  • Integration over isolation by default. Easily make use of GPUs, high speed networks, parallel filesystems on a cluster or server.
  • Mobility of compute. The single file SIF container format is easy to transport and share.
  • A simple, effective security model. You are the same user inside a container as outside, and cannot gain additional privilege on the host system by default.

Apptainer is open source software, distributed under the BSD License.

Apptainer was formerly known as Singularity and is now a part of the Linux Foundation. When migrating from Singularity see the admin migration documentation and user compatibility documentation.

Check out talks about Apptainer and some use cases of Apptainer on our website.

Getting Started with Apptainer

To install Apptainer from source, see the installation instructions. For other installation options, see our guide.

System administrators can learn how to configure Apptainer, and get an overview of its architecture and security features in the administrator guide.

For users, see the user guide for details on how to run and build containers with Apptainer.

Contributing to Apptainer

Community contributions are always greatly appreciated. To start developing Apptainer, check out the guidelines for contributing.

Please note we have a code of conduct. Please follow it in all your interactions with the project members and users.

Our roadmap, other documents, and user/developer meeting information can be found in the apptainer community page.

We also welcome contributions to our user guide and admin guide.

Support

To get help with Apptainer, check out the Apptainer Help web page.

Go Version Compatibility

Apptainer aims to maintain support for the two most recent stable versions of Go. This corresponds to the Go Release Maintenance Policy and Security Policy, ensuring critical bug fixes and security patches are available for all supported language versions.

Citing Apptainer

Apptainer can be cited using its former name Singularity.

The Singularity software may be cited using our Zenodo DOI 10.5281/zenodo.1310023:

Singularity Developers (2021) Singularity. 10.5281/zenodo.1310023 https://doi.org/10.5281/zenodo.1310023

This is an 'all versions' DOI for referencing Singularity in a manner that is not version-specific. You may wish to reference the particular version of Singularity used in your work. Zenodo creates a unique DOI for each release, and these can be found in the 'Versions' sidebar on the Zenodo record page.

Please also consider citing the original publication describing Singularity:

Kurtzer GM, Sochat V, Bauer MW (2017) Singularity: Scientific containers for mobility of compute. PLoS ONE 12(5): e0177459. https://doi.org/10.1371/journal.pone.0177459

License

Unless otherwise noted, this project is licensed under a 3-clause BSD license found in the license file.

apptainer's People

Contributors

aduffy19 avatar arangogutierrez avatar bauerm97 avatar bbockelm avatar cclerget avatar ctmadison avatar dependabot-preview[bot] avatar dependabot[bot] avatar drdaved avatar dtrudg avatar edytuk avatar emmeff avatar gmkurtzer avatar godloved avatar gvallee avatar ikaneshiro avatar ilmagico avatar jasonyangshadow avatar jmstover avatar jscook2345 avatar kmuriki avatar mem avatar paulcharlton avatar phphavok avatar pisarukv avatar sashayakovtseva avatar satra avatar tri-adam avatar vsoch avatar yhcote avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

apptainer's Issues

side by side package install

side by side package install

e2e tests need to be updated to verify correctness of this for various supported platforms

see example on PR #3

dist/rpm/apptainer.spec.in
%attr(4755, root, root) %{_libexecdir}/singularity/bin/starter-suid
%{_bindir}/singularity
%attr(4755, root, root) %{_libexecdir}/apptainer/bin/starter-suid
%{_bindir}/apptainer
  
Contributor
@DrDaveD DrDaveD 14 hours ago
Need a %{_bindir}/singularity as well as %{_bindir}/apptainer.

===

noting: need some indications of administrator intent when "Singularity" is installed on top of Apptainer, or Apptainer is installed over Singularity

support running of various apptainer test suites locally on a variety of hosts

where we are at

current test suites need to run as privileged user, with mixed privileges between root and sudo access
to drivers and other resources on an Ubuntu Host in the GitHub CI process.

desired state

developers need to be able to run each element of the test suite locally, regardless of their host OS, and
preferably without managing their own guest OS via virtualization

add formal barrier for parallel e2e tests

add formal barrier for parallel e2e tests

  1. allow a test to request "Wait for previous test[by_name] to complete"
  2. if previous test[by_name] has a good result, execute
  3. otherwise, do not execute and report precedent failed

need to ensure that the barriers form a di-graph for execution (no cycles)

execute action scripts in canonical order

current code executes container's actions scripts with globbing, as follows:

for __script__ in /.singularity.d/env/*.sh; do

The order of script execution is dependent on how the shell glob operator scans the underlying directory.

Make the sort order strictly numeric, and independent of locale and default collation on the filesystem by using:

for __script__ in $(ls /.singularity.d/env/*.sh |sort -n); do

retain backward compatibility for environment variables

The legacy singularity supports environment variables named "SINGULARITY_" and "SINGULARITYENV_"

Apptainer supports environment variables named "APPTAINER_" and "APPTAINERENV_"

Proposed:

  1. When the inherited environment has APPTAINER variable of same name suffix as a set SINGULARITY environment variable, the APPTAINER value shall have precedence.

  2. When a SINGULARITY environment variable is set, and the APPTAINER environment with the same suffix is not set, copy the value of the SINGULARITY environment variable to a newly created APPTAINER variable with same name suffix.

  3. When creating the environment for a child process, enumerate all APPTAINER variable values from (1, 2) above, and create a new set of SINGULARITY environment variables with the same value and name suffix as the APPTAINER variable.

Document risk of non-reproducibility with default options

This claim is made on the apptainer site.

It is designed to execute applications at bare-metal performance while being secure, portable, and 100% reproducible.

Singularity had some very annoying default behaviors that destroyed any hope of reproducibility:

  • Mount the $HOME directory of the user. Because every user has their own .config files that set application behavior, this means that application behavior is not guaranteed to be reproducible.
  • Import the user's environment. I don't have to explain this one: it is a reproducibility atrocity.

As a result we have been using singularity with the --containall flag all the time. Because it is the only viable way to run singularity in a reproducible manner.

I hope that apptainer sets this by default. Requiring explicit user interference if non-reproducible liabilities are introduced.

Deal with moving ~/.singularity to ~/.apptainer

Code in #3 changed ~/.singularity and $HOME/.singularity to ~/.apptainer and $HOME/.apptainer. If that's going to stay that way, provide some kind of migration path or error exit if ~/.singularity exists but ~/.apptainer does not.

Remove PACKAGE_BUGREPORT

I noticed there's a PACKAGE_BUGREPORT defined pointing to sylabs.io in builddir/config.h. It doesn't appear to be used anywhere, but should be removed.

Apptainer compatibility requirements for SIF containers

Apptainer v1.0.0 must build able to build SIF containers which are runnable via legacy Singularity.

Unresolved: should this be default, or enabled by command line switch.

Need: deprecation warnings when legacy features are used

Add E2E tests for validation

Scope of compatibility includes internal filesystem naming structure and the names of injected environment variables

move embedded shell scripts out of golang strings into separate files

moving embedded shell scripts out of golang strings into separate shell script files.

This will allow CI listing of all of the shell scripts, as well as allow easier maintenance of copyright and other attribution in those shell scripts.

The separate files can be interpolated into the golang sources via various golang preprocessors

Fix remaining problems seen with pr #3

Fix these problems noticed in pr #3:

  1. References to apptainer with versions 3.x should either be singularity 3.x if referring to a specific older version or apptainer 1.x if referring to a future or example version. Likewise apptainer 2.x should be singularity 2.x. Search for regexp [Aa]pptainer.*[23].
  2. Fix URLs with sylabs.io/apptainer and github.com/sylabs/apptainer to be singularity instead of apptainer.
  3. Fix Apptainer Image Format to be Singularity Image Format.

create new container images for CI process

The CI process currently uses container images hosted by sylab on AWS S3 and Docker Hub.

To avoid shifting costs and responsibilities to a third party, build those container images and host them on sites paid for by the appropriate Linux Foundation entity.

the following containers need to be built and hosted in an OCI compatible registry (or not, as appropriate for negative tests)

the following containers need to be built and hosted in an OCI compatible registry (or not, as appropriate for negative tests) as they are used in both unit tests and e2e tests

library://alpine
library://alpine:3.11.5
library://alpine:3.11.5 /bin/true
library://alpine:latest
library://alpine:sha256.03883ca565b32e58fa0a496316d69de35741f2ef34b5b4658a6fec04ed8149a8
library://busybox
library://busybox:1.31.1
library://centos cat /etc/os-release`
library://collection/image
library://debian:latest
library://image
library://library.example.com/test/default/test:v0.0.3
library://library.sylabs.io/library/default/busybox:1.31.1
library://lolcow
library://notlibrary.sylabs.io/library/default/busybox:1.31.1
library://sylabs/tests/does_not_exist:0
library://sylabs/tests/signed:1.0.0
library://sylabs/tests/unsigned:1.0.0
library://sylabs/tests/verify_corrupted:1.0.1
library://sylabs/tests/verify_success:1.0.2
library://test/default/test:v0.0.3
library://user/collection/container[:tag]
library://user/collection/my.sif:latest
library://username/project/image:1.0`
library://valid_uri_but_not_real_image

_Originally posted by @PaulCharlton in https://github.com/apptainer/apptainer/issues/53#issuecomment-990586842_

Add local keyserver to e2e tests

Version of Apptainer:

We currently reach out to https://keys.sylabs.io in the e2e tests for pulling public keys dynamically, we should consider spawning and using a local keyserver just like we do with a local registry.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.