Apptainer: Application containers for Linux

Overview

Apptainer

NOTE: The apptainer repo is currently working towards a v1.0.0 release and not ready for production in its current state. Until then, use the Singularity Repo for a production ready version.

CI

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.

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.

Comments
  • Segmentation fault with docker image with apptainer (on an image that did not segfault with singularity)

    Segmentation fault with docker image with apptainer (on an image that did not segfault with singularity)

    Version of Apptainer

    $ singularity --version
    apptainer version 1.0.2-1.el8
    

    I'm trying this command with the following image in docker hub, getting a Segmentation fault.

    $ SINGULARITY_CACHEDIR=/tmp APPTAINER_CACHEDIR=/tmp singularity exec docker://madminertool/madminer-workflow-ph:0.5.3beta16 echo hello
    <snip>
    INFO:    Using cached SIF image
    Segmentation fault
    

    Expected behavior

    The container should run and I display "hello"

    Actual behavior

    I get a Segmentation fault instead. Singularity 3.8.7 works though

    $ SINGULARITY_CACHEDIR=/tmp singularity exec docker://madminertool/madminer-workflow-ph:0.5.3beta16 echo hello
    INFO:    Creating SIF file...
    hello
    $ singularity --version
    singularity version 3.8.7-1.el7
    

    Steps to reproduce this behavior

    You can try the following command:

    $ SINGULARITY_CACHEDIR=/tmp APPTAINER_CACHEDIR=/tmp singularity exec docker://madminertool/madminer-workflow-ph:0.5.3beta16 echo hello
    

    What OS/distro are you running

    Red Hat Enterprise Linux release 8.6 (Ootpa)

    How did you install Apptainer

    RPM source

    Name         : apptainer
    Version      : 1.0.2
    Release      : 1.el8
    Architecture : x86_64
    Size         : 128 M
    Source       : apptainer-1.0.2-1.el8.src.rpm
    Repository   : @System
    From repo    : @commandline
    Summary      : Application and environment virtualization
    URL          : https://apptainer.org
    License      : BSD and LBNL BSD and ASL 2.0
    Description  : Apptainer provides functionality to make portable
                 : containers that can be used across host environments.
    
    opened by khurtado 22
  • Apptainer 1.1.0 doesn't work with lhcathome atlas unlike apptainer 1.0.3

    Apptainer 1.1.0 doesn't work with lhcathome atlas unlike apptainer 1.0.3

    Version of Apptainer

    What version of Apptainer (or Singularity) are you using? Run

    apptainer-1.1.0~rc.1-1

    Expected behavior

    Lhc@home atlas native works normally just like on apptainer version 1.0.3-1

    Новый файл1.txt

    Actual behavior

    Новый файл.txt

    Steps to reproduce this behavior

    Install apptainer-1.1.0~rc.1-1.el8.x86_64.rpm

    What OS/distro are you running

    VERSION="8.6 (Green Obsidian)"
    ID="rocky"
    ID_LIKE="rhel centos fedora"
    VERSION_ID="8.6"
    PLATFORM_ID="platform:el8"
    PRETTY_NAME="Rocky Linux 8.6 (Green Obsidian)"
    ANSI_COLOR="0;32"
    CPE_NAME="cpe:/o:rocky:rocky:8:GA"
    HOME_URL="https://rockylinux.org/"
    BUG_REPORT_URL="https://bugs.rockylinux.org/"
    ROCKY_SUPPORT_PRODUCT="Rocky Linux"
    ROCKY_SUPPORT_PRODUCT_VERSION="8"
    REDHAT_SUPPORT_PRODUCT="Rocky Linux"
    REDHAT_SUPPORT_PRODUCT_VERSION="8"
    
    
    

    How did you install Apptainer

    From EPEL Testing x86_64 https://centos.pkgs.org/8/epel-testing-x86_64/apptainer-1.1.0~rc.1-1.el8.x86_64.rpm.html

    opened by kotenok2000 21
  • Singularity pull image question

    Singularity pull image question

    Greetings the support team:

    This is referring back to an issue https://github.com/apptainer/singularity/issues/5792. I realize that ticket has been closed. I reviewed the posts and https://github.com/apptainer/singularity/issues/5329, my issue is different from @DrDaveD had. My command is a regular singularity pull "singularity pull docker://godlovedc/lolcow", tried on both singularity versions 3.5.2 and 3.7.0. They stuck on "Getting image source signatures". There are no informative message after this line.

    I have tried a few things. I thought the account used for pull a docker image is a service account, it does not have a docker authentication credential, there is no .docker inside $HOME. However, on the same system, I notice a regular user without .docker inside his $HOME, but can pull the image without a problem.

    I thought the account $HOME resides an NFS file system, i.e. /home/account is a symbolic link to an NFS file system, it might matter. However, I notice other regular user account has $HOME in an NFS file system, he can pull the image without a problem.

    I wonder if there is a similar ticket address this? Is there any other debugging approach to identify the problem? Thank you very much.

    opened by ryao-mdanderson 21
  • Fails to run unsquashfs

    Fails to run unsquashfs

    Version of Apptainer

    apptainer version 1.1.0
    

    Expected behavior

    $ apptainer exec --no-home docker://centos:7 echo "Hello world!"
    INFO:    Using cached SIF image
    INFO:    Converting SIF file to temporary sandbox...
    Hello world!
    INFO:    Cleaning up image...
    

    Actual behavior

    $ apptainer exec --no-home docker://centos:7 echo "Hello world!"
    INFO:    Using cached SIF image
    INFO:    squashfuse not found, will not be able to mount SIF
    INFO:    fuse2fs not found, will not be able to mount EXT3 filesystems
    INFO:    Converting SIF file to temporary sandbox...
    FATAL:   while extracting /home/cburr/.apptainer/cache/oci-tmp/c73f515d06b0fa07bb18d8202035e739a494ce760aa73129f60f4bf2bd22b407: root filesystem extraction failed: extract command failed: WARNING: passwd file doesn't exist in container, not updating
    WARNING: group file doesn't exist in container, not updating
    WARNING: Skipping mount /etc/hosts [binds]: /etc/hosts doesn't exist in container
    WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container
    WARNING: Skipping mount proc [kernel]: /proc doesn't exist in container
    WARNING: Skipping mount /tmp/tmp.fkKaxYs3K9/envs/test/var/apptainer/mnt/session/var/tmp [tmp]: /var/tmp doesn't exist in container
    WARNING: Skipping mount /tmp/tmp.fkKaxYs3K9/envs/test/var/apptainer/mnt/session/etc/resolv.conf [files]: /etc/resolv.conf doesn't exist in container
    /tmp/tmp.fkKaxYs3K9/envs/test/bin/unsquashfs: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
    : exit status 127
    

    Steps to reproduce this behavior

    I'm going to assume you're unfamilar with conda. In which case you can use the standalone micromamba binary to make an environment:

    # Create a micromamba installation in /tmp
    export MAMBA_ROOT_PREFIX=$(mktemp -d)
    cd $MAMBA_ROOT_PREFIX
    curl -Ls https://micro.mamba.pm/api/micromamba/linux-64/latest | tar -xvj bin/micromamba
    eval "$(./bin/micromamba shell hook -s posix)"
    
    # Install apptainer
    micromamba create --name test -c chrisburr/label/apptainer-issue -c conda-forge apptainer
    # Activate the environment
    micromamba activate test
    # Run the test
    apptainer exec --no-home docker://centos:7 echo "Hello world!"
    

    What OS/distro are you running

    It should be independent as everything is coming from conda-forge but just in case:

    $ cat /etc/os-release
    NAME="Arch Linux"
    PRETTY_NAME="Arch Linux"
    ID=arch
    BUILD_ID=rolling
    ANSI_COLOR="38;2;23;147;209"
    HOME_URL="https://archlinux.org/"
    DOCUMENTATION_URL="https://wiki.archlinux.org/"
    SUPPORT_URL="https://bbs.archlinux.org/"
    BUG_REPORT_URL="https://bugs.archlinux.org/"
    LOGO=archlinux-logo
    

    How did you install Apptainer

    I'm building apptainer for conda-forge: https://github.com/conda-forge/staged-recipes/pull/20641

    opened by chrisburr 18
  • Fail to find GPU driver

    Fail to find GPU driver

    Version of Apptainer

    What version of Apptainer (or Singularity) are you using? Run

    apptainer --version (or singularity --version). image

    Expected behavior

    image I can't find the Nvidia driver, while outside the container, I'm able to find it.

    What else configuration should I do except using --nv?

    opened by noc-turne 13
  • squashfuse Performance

    squashfuse Performance

    Version of Apptainer

    $ apptainer --version
    apptainer version 1.1.0~rc.2-1.el7
    

    Expected behavior

    When using SIF images with unprivileged Apptainer, execution time should be similar to unprivileged Singularity.

    Actual behavior

    Apptainer's move to squashfuse for unprivileged (user namespace) mounts of SIF images has significantly increased the execution time of some containers, compared to automatically unpacking SIF images to a temporary sandbox as unprivileged Singularity did. I believe this is primarily a concern for containers running multiple processes/threads, as it seems there is a single squashfuse process to handle all of the parallel I/O requests and decompression.

    Steps to reproduce this behavior

    apptainer run -i -c -e -B /tmp/atlasgen:/results -B /tmp docker://gitlab-registry.cern.ch/hep-benchmarks/hep-workloads/atlas-gen-bmk:v2.1 -W --threads 1 --events 200 This is an ATLAS event generation benchmark container that will run a process per logical core on the host. Execution times on a system with 2x AMD EPYC 7351 CPUs (64 logical cores total):
    Singularity with user namespaces (unpack to sandbox) Execution time: ~24 min

    Apptainer with setuid (squashfs privileged mount) Execution time: ~25 min

    Apptainer with user namespaces (squashfuse mount) Execution time: ~2 hours 50 minutes

    During execution, I see the squashfuse process using 100% of a single CPU core during most of the run.

    Ideally the default behavior would be to revert to automatically unpacking SIF images when used unprivileged.

    What OS/distro are you running

    Scientific Linux 7

    How did you install Apptainer

    RPM from EPEL testing repo.

    opened by hollowec 12
  • [SOLVED] Running a graphical Nvidia GPU accelerated program in a container gives GLIBC version mismatch error

    [SOLVED] Running a graphical Nvidia GPU accelerated program in a container gives GLIBC version mismatch error

    Version of Apptainer

    apptainer version 1.0.3-2.fc36

    Expected behavior

    1. A GUI window (glxgears) should pop up with host NVIDIA GPU-accelearted graphics.
    2. nvidia-smi command on the host should show glxgears as a process utilizing the GPU.

    Actual behavior

    I get the following errors

    /usr/bin/glxgears: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by /.singularity.d/libs/libGLX.so.0)
    /usr/bin/glxgears: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by /.singularity.d/libs/libGLdispatch.so.0)
    

    Steps to reproduce this behavior

    1. Create a Container Definition file
    cat << EOF >> glx_test.def
    Bootstrap: docker
    From: centos:centos7
    
    %post
        yum -y install xauth xeyes glx-utils mesa-dri-drivers
    
    %environment
        export LIBGL_DEBUG=verbose
        export LC_ALL=C
    EOF
    
    1. Build a container from the definition file apptainer build --fakeroot glxgears_test.sif glx_test.def

    2. Run glxgears in the container with GPU support apptainer exec --nv glxgears_test.sif glxgears

    What OS/distro are you running

    $ cat /etc/os-release
    NAME="Fedora Linux"
    VERSION="36 (Workstation Edition)"
    ID=fedora
    VERSION_ID=36
    VERSION_CODENAME=""
    PLATFORM_ID="platform:f36"
    PRETTY_NAME="Fedora Linux 36 (Workstation Edition)"
    ANSI_COLOR="0;38;2;60;110;180"
    LOGO=fedora-logo-icon
    CPE_NAME="cpe:/o:fedoraproject:fedora:36"
    HOME_URL="https://fedoraproject.org/"
    DOCUMENTATION_URL="https://docs.fedoraproject.org/en-US/fedora/f36/system-administrators-guide/"
    SUPPORT_URL="https://ask.fedoraproject.org/"
    BUG_REPORT_URL="https://bugzilla.redhat.com/"
    REDHAT_BUGZILLA_PRODUCT="Fedora"
    REDHAT_BUGZILLA_PRODUCT_VERSION=36
    REDHAT_SUPPORT_PRODUCT="Fedora"
    REDHAT_SUPPORT_PRODUCT_VERSION=36
    PRIVACY_POLICY_URL="https://fedoraproject.org/wiki/Legal:PrivacyPolicy"
    VARIANT="Workstation Edition"
    VARIANT_ID=workstation
    

    Nvidia drivers, CUDA, and Nvidia container toolkit are installed on the host The output of nvidia-smi on the host is

    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 515.57       Driver Version: 515.57       CUDA Version: 11.7     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 Off |                  N/A |
    | N/A   34C    P8    N/A /  N/A |      4MiB /  2048MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
                                                                                   
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    |    0   N/A  N/A      1858      G   /usr/libexec/Xorg                   2MiB |
    +-----------------------------------------------------------------------------+
    

    The output of nvidia-container-cli list on the host is

    /dev/nvidiactl
    /dev/nvidia-uvm
    /dev/nvidia-uvm-tools
    /dev/nvidia-modeset
    /dev/nvidia0
    /usr/bin/nvidia-smi
    /usr/bin/nvidia-debugdump
    /usr/bin/nvidia-persistenced
    /usr/bin/nvidia-cuda-mps-control
    /usr/bin/nvidia-cuda-mps-server
    /usr/lib64/libnvidia-ml.so.515.57
    /usr/lib64/libnvidia-cfg.so.515.57
    /usr/lib64/libcuda.so.515.57
    /usr/lib64/libnvidia-opencl.so.515.57
    /usr/lib64/libnvidia-ptxjitcompiler.so.515.57
    /usr/lib64/libnvidia-allocator.so.515.57
    /usr/lib64/libnvidia-compiler.so.515.57
    /usr/lib64/libnvidia-ngx.so.515.57
    /usr/lib64/libnvidia-encode.so.515.57
    /usr/lib64/libnvidia-opticalflow.so.515.57
    /usr/lib64/libnvcuvid.so.515.57
    /usr/lib64/libnvidia-eglcore.so.515.57
    /usr/lib64/libnvidia-glcore.so.515.57
    /usr/lib64/libnvidia-tls.so.515.57
    /usr/lib64/libnvidia-glsi.so.515.57
    /usr/lib64/libnvidia-fbc.so.515.57
    /usr/lib64/libnvidia-rtcore.so.515.57
    /usr/lib64/libnvoptix.so.515.57
    /usr/lib64/libGLX_nvidia.so.515.57
    /usr/lib64/libEGL_nvidia.so.515.57
    /usr/lib64/libGLESv2_nvidia.so.515.57
    /usr/lib64/libGLESv1_CM_nvidia.so.515.57
    /usr/lib64/libnvidia-glvkspirv.so.515.57
    /lib/firmware/nvidia/515.57/gsp.bin
    

    How did you install Apptainer

    I installed apptainer from the official repository using the following command sudo dnf install -y apptainer

    opened by amit112amit 12
  • fix: check valid path for --pwd

    fix: check valid path for --pwd

    Signed-off-by: Pablo Caderno [email protected]

    Description of the Pull Request (PR):

    Changed default behavior of switching to a different directory if os.Chdir(e.EngineConfig.OciConfig.Process.Cwd) fails when starting the container.

    Whilst this approach should fix the issue, it might be "too strict" for other cases.

    This fixes or addresses the following GitHub issues:

    • Fixes https://github.com/apptainer/singularity/issues/6086
    opened by kadern0 12
  • Allow unprivileged users to build images by default

    Allow unprivileged users to build images by default

    Description of the Pull Request (PR):

    ~This patch removes several Geteuid() != 0 checks and allow unprivileged users to build images by default.~ This patch introduces a new flag -N|--unprivileged, with which some Geteuid() != 0 will be skipped.

    Motivations

    • Nowadays, package managers such as Nix and Gentoo ebuild and a lot of projects manags don't require root privileges to work, while still benefits from / rely on the customized directory trees (not available in Appimages). As a mature container format, Apptainer serves as a reliable way to wrap the build result, making it portable and runnabe on network-based file systems where I/O of small files is terrably slow.

    • As a practice of the same privilege inside and outside philosophy of Apptainer, it is the user's responsibility to provide enough level privilege for their toolchain. This patch also enable users to build in restricted environment where there is no way to get root privilege and that no suid-ed executables are available.

    • A program should be given the minimum level of privilege needed from the security perspective, which is known as the Principle of Least Privilege. It makes the container building (especially the %startup and %files sections) much safer.

    Function parameter changes

    • runSectionScript(name string, script types.Script) -> runSectionScript(name string, script types.Script, unprivileged bool)

    • Full(ctx context.Context) -> Full(ctx context.Context, unprivileged bool)

    • Use b.Full(ctx, false) in ConvertOCIToSIF

    Status

    This patch is compiled and run locally, and it work as expected so far, but is still a draft considering the need of discussion, consensus reaching and documentation update.

    This fixes or addresses the following GitHub issues:

    • Fixes #215

    Before submitting a PR, make sure you have done the following:

    opened by ShamrockLee 12
  • symbol lookup error: singularity: undefined symbol: seccomp_notify_respond

    symbol lookup error: singularity: undefined symbol: seccomp_notify_respond

    Version of Apptainer

    What version of Apptainer (or Singularity) are you using? Run

    apptainer --version (or singularity --version).

    singularity: symbol lookup error: singularity: undefined symbol: seccomp_notify_respond
    

    Installed via EPEL: apptainer-1.1.0-1.el8.x86_64

    Expected behavior

    What did you expect to see when you do...?

    Expected version string to be printed.

    Actual behavior

    What actually happened? Why was it incorrect?

    apptainer threw an error about a missing symbol. No version string produced.

    Steps to reproduce this behavior

    How can others reproduce this issue/problem?

    Just do: apptainer --version

    What OS/distro are you running

    $ cat /etc/os-release
    NAME="Red Hat Enterprise Linux"
    VERSION="8.1 (Ootpa)"
    ID="rhel"
    ID_LIKE="fedora"
    VERSION_ID="8.1"
    PLATFORM_ID="platform:el8"
    PRETTY_NAME="Red Hat Enterprise Linux 8.1 (Ootpa)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:redhat:enterprise_linux:8.1:GA"
    HOME_URL="https://www.redhat.com/"
    BUG_REPORT_URL="https://bugzilla.redhat.com/"
    
    REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 8"
    REDHAT_BUGZILLA_PRODUCT_VERSION=8.1
    REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
    REDHAT_SUPPORT_PRODUCT_VERSION="8.1"
    
    

    How did you install Apptainer

    Write here how you installed Apptainer (or Singularity). Eg. RPM, source.

    RPM via EPEL: apptainer-1.1.0-1.el8.x86_64

    opened by prehensilecode 11
  • Prevent force overridden of PS1 if already set

    Prevent force overridden of PS1 if already set

    Description of the Pull Request (PR):

    When users explicitly set PS1 value in environment section, 99-base.sh force overridden of that PS1 value. This PR prevents force overridden of PS1. This make allow users to set their preferable PS1 value for their image.

    This fixes or addresses the following GitHub issues:

    • Fixes #925

    Before submitting a PR, make sure you have done the following:

    opened by panda1100 10
  • Latest apptainer RPM in EPEL 8 does not Provide: Singularity

    Latest apptainer RPM in EPEL 8 does not Provide: Singularity

    Version of Apptainer

    N/A

    Expected behavior

    On a fresh EL8 machine with EPEL enabled, I expect to be able to yum install singularity and get the apptainer or apptainer-suid package. Specifically, we had yum install singularity in a Dockerfile and tripped over this in one of our automatic builds.

    Actual behavior

    Instead installation fails:

    [root@bb6ee73afd77 /]# yum install singularity
    CentOS Stream 8 - AppStream                                                                                                                                                                                                                            145 kB/s |  27 MB     03:08    
    CentOS Stream 8 - BaseOS                                                                                                                                                                                                                               3.1 MB/s |  26 MB     00:08    
    CentOS Stream 8 - Extras                                                                                                                                                                                                                                56 kB/s |  18 kB     00:00    
    CentOS Stream 8 - Extras common packages                                                                                                                                                                                                               948  B/s | 5.2 kB     00:05    
    CentOS Stream 8 - PowerTools                                                                                                                                                                                                                           3.4 MB/s | 5.5 MB     00:01    
    Extra Packages for Enterprise Linux 8 - x86_64                                                                                                                                                                                                         7.8 MB/s |  13 MB     00:01    
    Extra Packages for Enterprise Linux Modular 8 - x86_64                                                                                                                                                                                                 861 kB/s | 733 kB     00:00    
    No match for argument: singularity
    Error: Unable to find a match: singularity
    
    [epel]
    name=Extra Packages for Enterprise Linux $releasever - $basearch
    # It is much more secure to use the metalink, but if you wish to use a local mirror
    # place it's address here.
    #baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch
    metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
    enabled=1
    gpgcheck=1
    countme=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
    
    [epel-debuginfo]
    name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug
    # It is much more secure to use the metalink, but if you wish to use a local mirror
    # place it's address here.
    #baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/debug
    metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
    gpgcheck=1
    
    [epel-source]
    name=Extra Packages for Enterprise Linux $releasever - $basearch - Source
    # It is much more secure to use the metalink, but if you wish to use a local mirror
    # place it's address here.
    #baseurl=https://download.example/pub/epel/$releasever/Everything/SRPMS
    metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir
    enabled=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
    gpgcheck=1
    

    Steps to reproduce this behavior

    1. Start an EL8 container, e.g. podman run quay.io/almalinux/almalinux:8
    2. Install epel-release in the container
    3. Run yum install singularity

    What OS/distro are you running

    [root@bb6ee73afd77 /]# cat /etc/os-release
    NAME="CentOS Stream"
    VERSION="8"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="8"
    PLATFORM_ID="platform:el8"
    PRETTY_NAME="CentOS Stream 8"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:8"
    HOME_URL="https://centos.org/"
    BUG_REPORT_URL="https://bugzilla.redhat.com/"
    REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 8"
    REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"
    [root@bb6ee73afd77 /]# cat /etc/yum.repos.d/epel.repo 
    

    How did you install Apptainer

    N/A

    opened by brianhlin 1
  • RFE: Templating Support for Definition File

    RFE: Templating Support for Definition File

    Description

    If we can pass values at build time to replace variables' value inside definition file, before actually process definition file to build image, that brings flexibility to how we interact with definition file. I called this feature, "Templateing".

    Usually OSS projects distribute not only source code but its binaries and also container images when they release these days. In the CI/CD era, creating binaries is written in the form of scripts that covers wide range of OS and variety of dependencies. That "recipe" can switch OS versions, library versions etc. Widely known examples in HPC are Spack recipes.

    If Apptainer definition file support "Templating" feature:

    • Less integration effort for OSS maintainers: They can reuse existing "recipe" scripts when they try to add Apptainer definition file to their release artifact.
    • It allows users to alter base image and/or version (This is not supported in Apptainer yet.)
    • It allows users to alter script "switch" (This is kind of supported through APPTAINERENV_VARS but this is not support every section in definition file.)
    • It allows users to alter variables at every section in consistent way (This is not supported in Apptainer yet.)

    This is inspired by Dockerfile ARG and --build-arg (--build-arg-file) option for build command.

    UI Changes

    Add --build-arg and --build-arg-file options to build command

    --build-arg

    apptainer build --build-arg OS_VER=8.7 --build-arg APP_VERSION=2206 app.sif app.def
    

    --build-arg-file

    apptainer build --build-arg-file build-args app.sif app.def
    

    build-args file

    OS_VER=8.7
    APP_VERSION=2206
    

    Internal Behavioural Changes

    When build-arg or build-arg-file option comes in:

    1. process build-args first
    2. fill template to create actual definition file
    3. process definition file

    How definition file looks like:

    Bootstrap: docker
    From: rockylinux:${OS_VER}
    
    %setup
        touch /${OS_VER}
        touch ${APPTAINER_ROOTFS}/file2
    
    %files
        /script-${OS_VER}.sh
        /dir-${OS_VER} /opt
    
    %environment
        export OS_VER=${OS_VER}
    
    %post
        /script-${OS_VER}.sh ${APP_VER}
    
    %runscript
        echo "Container was created $NOW"
        echo "Arguments received: $*"
        exec echo "$@"
    
    %startscript
        nc -lp ${LISTEN_PORT:-'8080'}
    
    %test
        grep -q NAME=\"Rocky\" /etc/os-release
        if [ $? -eq 0 ]; then
            echo "Container base is Rocky Linux as expected."
        else
            echo "Container base is not Rocky Linux."
            exit 1
        fi
    
    %labels
        Author ${AUTHER:-}
        Version ${VERSION:-}
    
    %help
        This is a ${DEMO:-} for templating definition file
    

    I am please to hear any comments and ideas from community here.

    opened by panda1100 0
  • better support for startscript.sh (feature request)

    better support for startscript.sh (feature request)

    Version of Apptainer

    $ apptainer --version
    apptainer version 1.1.3
    

    Expected behavior

    I'd like to run apptainer instance start docker://some/container or similar and get the entrypoint to run as the startscript.

    Actual behavior

    afaik, there is no good way to get the container to recognize the docker entrypoint as the startscript. Instead, apptainer shoves all of the entrypoint stuff into the runscript by default and if you run the container as an instance it does not execute the entrypoint.

    I've tried a few different workarounds, but so far nothing is ideal. One idea is to force the container to execute the runscript when the instance is started. I tried this by creating a wrapper script (on the host system) like so:

    echo "/bin/sh /.singularity.d/runscript" >startscript
    
    chmod 750 startscript
    

    Then bind mounting it into the metadata directory at runtime like so:

    export APPTAINER_BINDPATH=startscript:/.singularity.d/startscript
    

    This seems to work, but it is very brittle and there are potential side effects for running other containers.

    The second thing I tried was to rebuild the container with a def file of the following format.

    Bootstrap: docker                                                               
    From: some/container                                                
                                                                                       
    %post                                                                           
        cp /.singularity.d/runscript /.singularity.d/startscript
    

    This also works, but it produces an intermediate build artifact that may be unwanted.

    Solution?

    I think some discussion is needed about the correct way to approach this. Maybe the user could pass a flag to instance start command to let it know it should treat the runscript as the startscript. Or maybe Apptainer should intelligently copy the docker CMD and entrypoint stuff to the startscript instead of the runscript if the user is executing the container as an instance. This second option would probably be a sensible default, but it would also be a breaking change if folks are currently using instance start on OCI containers.

    What say the developers?

    opened by GodloveD 3
  • error: can't mount image /proc/self/fd/9: failed to mount squashfs filesystem

    error: can't mount image /proc/self/fd/9: failed to mount squashfs filesystem

    I am running on apptainer version 1.1.3-1.el7 in an HPC system.

    Expected behaviour

    I am currently running nextflow pipelines (https://github.com/nf-core/rnaseq) using singularity images, it pulls and mounts the images automatically (I have run pipelines successfully before).

    Actual behaviour

    However, when mounting one of the images (on the later steps of the pipeline, NFCORE_RNASEQ:RNASEQ:MARK_DUPLICATES_PICARD:PICARD_MARKDUPLICATES) I get the following error:

    Command error: 
               WARNING: DEPRECATED USAGE: Forwarding SINGULARITYENV_TMPDIR as environment variable will not be supported in the future, use APPTAINERENV_TMPDIR instead 
               WARNING: DEPRECATED USAGE: Forwarding SINGULARITYENV_NXF_DEBUG as environment variable will not be supported in the future, use APPTAINERENV_NXF_DEBUG instead 
               FATAL:   container creation failed: mount hook function failure: mount /proc/self/fd/9->/var/apptainer/mnt/session/rootfs error: while mounting image /proc/self/fd/9: squashfuse_ll exited with status 255: Something went wrong trying to read the squashfs image.
    

    I have seen this error in other issues on lower versions of singularity --> https://github.com/apptainer/singularity/issues/5408 I have also discarded lack space errors, running in different locations of the HPC cluster with more space.

    Steps to reproduce

    nextflow run nf-core/rnaseq -profile singularity -r 3.9 --input samplesheet_test.csv --outdir test_dir --aligner star_rsem --save_align_intermeds --genome hg38 --skip_trimming --skip_umi_extract

    I am sorry I can't give any files or better reproduction since the data is confidential.

    Machine I am working on

    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"
    
    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"
    

    Installing apptainer

    It was installed beforehand in the HPC system by the admins

    opened by laura-munatx 3
  • Ubuntu Focal Image: `/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found`

    Ubuntu Focal Image: `/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found`

    Version of Apptainer

    apptainer version 1.1.4

    Expected behavior

    EDIT: Updated to avoid pydrake (large dep), and instead use glxgears

    For example, in Apptainer with --nv and glxgears installed:

    $ glxgears
    # No error
    

    Actual behavior

    $ glxgears
    glxgears: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /.singularity.d/libs/libGLdispatch.so.0)
    glxgears: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /.singularity.d/libs/libGLX.so.0)
    

    Steps to reproduce this behavior

    See https://github.com/EricCousineau-TRI/repro/tree/f1ff2000abdc631a94a750cdb0c2d66d33ff4857/bug/apptainer_issue945

    Look at repro.sh; more notably:

    ${apptainer_bin} build --fakeroot --sandbox ./repro.sandbox ./repro.Apptainer
    
    # Succeeds.
    ${apptainer_bin} exec ./repro.sandbox ${test_script}
    
    # Fails.
    ${apptainer_bin} exec --nv ./repro.sandbox ${test_script}
    

    What OS/distro are you running

    $ cat /etc/os-release
    PRETTY_NAME="Ubuntu 22.04.1 LTS"
    NAME="Ubuntu"
    VERSION_ID="22.04"
    VERSION="22.04.1 LTS (Jammy Jellyfish)"
    VERSION_CODENAME=jammy
    ID=ubuntu
    ID_LIKE=debian
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    UBUNTU_CODENAME=jammy
    

    How did you install Apptainer

    From source, using this script: https://github.com/EricCousineau-TRI/repro/blob/f1ff2000abdc631a94a750cdb0c2d66d33ff4857/shell/apptainer_stuff/build_and_install_apptainer.sh

    opened by EricCousineau-TRI 6
  • e2e tests don't work with Ubuntu 22.04

    e2e tests don't work with Ubuntu 22.04

    In #901 the Ubuntu version used to run things in CI was updated from 20.04 to 22.04, but the e2e tests were left at 20.04 because it caused problems for the fakeroot command binds and for cgroup tests. Look into what can be done about those problems and upgrade the e2e tests to use 22.04.

    opened by DrDaveD 0
Releases(v1.1.4)
  • v1.1.4(Dec 13, 2022)

    v1.1.4 - [2022-12-12]

    • Added tools/install-unprivileged.sh to download and install apptainer binaries and all dependencies into a directory of the user's choice. Works on all currently active el, fedora, debian, and ubuntu versions except ubuntu 18.04, with all architectures supported by epel and fedora. Defaults to the latest version released in epel and fedora. Other apptainer versions can be selected but it only works with apptainer 1.1.4 and later.
    • Make the binaries built in the unprivileged apptainer package relocatable. When moving the binaries to a new location, the /usr at the top of some of the paths needs to be removed. Relocation is disallowed when the starter-suid is present, for security reasons.
    • Change the warning when an overlay image is not writable, introduced in v1.1.3, back into a (more informative) fatal error because it doesn't actually enter the container environment.
    • Set the --net flag if --network or --network-args is set rather than silently ignoring them if --net was not set.
    • Do not hang on pull from http(s) source that doesn't provide a content-length.
    • Avoid hang on fakeroot cleanup under high load seen on some distributions / kernels.
    • Remove obsolete pacstrap -d in Arch packer.
    • Adjust warning message for deprecated environment variables usage.
    • Enable the --security uid:N and --security gid:N options to work when run in non-suid mode. In non-suid mode they work with any user, not just root. Unlike with root and suid mode, however, only one gid may be set in non-suid mode.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.1.4-1.src.rpm(12.32 MB)
    apptainer-1.1.4-1.x86_64.rpm(33.61 MB)
    apptainer-1.1.4.tar.gz(12.32 MB)
    apptainer-dbgsym_1.1.4_amd64.deb(28.64 MB)
    apptainer-debuginfo-1.1.4-1.x86_64.rpm(40.48 MB)
    apptainer-suid-1.1.4-1.x86_64.rpm(5.11 MB)
    apptainer-suid-dbgsym_1.1.4_amd64.deb(3.62 MB)
    apptainer-suid_1.1.4_amd64.deb(4.23 MB)
    apptainer_1.1.4_amd64.deb(21.50 MB)
    sha256sums(965 bytes)
    squashfuse-0.1.105.tar.gz(64.10 KB)
  • v1.1.3(Oct 25, 2022)

    v1.1.3 - [2022-10-25]

    • Prefer the fakeroot-sysv command over the fakeroot command because the latter can be linked to either fakeroot-sysv or fakeroot-tcp, but fakeroot-sysv is much faster.
    • Update the included squashfuse_ll to have -o uid=N and -o gid=N options and changed the corresponding image driver to use them when available. This makes files inside sif files appear to be owned by the user instead of by the nobody id 65534 when running in non-setuid mode.
    • Fix the locating of shared libraries when running unsquashfs from a non-standard location.
    • Properly clean up temporary files if unsquashfs fails.
    • Fix the creation of missing bind points when using image binding with underlay.
    • Change the error when an overlay image is not writable into a warning that suggests adding :ro to make it read only or using --fakeroot.
    • Avoid permission denied errors during unprivileged builds without /etc/subuid-based fakeroot when /var/lib/containers/sigstore is readable only by root.
    • Avoid failures with --writable-tmpfs in non-setuid mode when using fuse-overlayfs versions 1.8 or greater by adding the fuse-overlayfs noacl mount option to disable support for POSIX Access Control Lists.
    • Fix the --rocm flag in combination with -c / -C by forwarding all /dri/render* devices into the container.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.1.3-1.src.rpm(12.29 MB)
    apptainer-1.1.3-1.x86_64.rpm(34.22 MB)
    apptainer-1.1.3.tar.gz(12.29 MB)
    apptainer-dbgsym_1.1.3_amd64.deb(28.78 MB)
    apptainer-debuginfo-1.1.3-1.x86_64.rpm(38.93 MB)
    apptainer-suid-1.1.3-1.x86_64.rpm(5.14 MB)
    apptainer-suid-dbgsym_1.1.3_amd64.deb(3.62 MB)
    apptainer-suid_1.1.3_amd64.deb(4.23 MB)
    apptainer_1.1.3_amd64.deb(21.49 MB)
    sha256sums(965 bytes)
    squashfuse-0.1.105.tar.gz(64.10 KB)
  • v1.1.2(Oct 6, 2022)

    Changes in this release

    • CVE-2022-39237: The sif dependency included in Apptainer before this release does not verify that the hash algorithm(s) used are cryptographically secure when verifying digital signatures. This release updates to sif v2.8.1 which corrects this issue. See the linked advisory for references and a workaround.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.1.2-1.src.rpm(12.29 MB)
    apptainer-1.1.2-1.x86_64.rpm(34.22 MB)
    apptainer-1.1.2.tar.gz(12.29 MB)
    apptainer-dbgsym_1.1.2_amd64.deb(28.70 MB)
    apptainer-debuginfo-1.1.2-1.x86_64.rpm(38.93 MB)
    apptainer-suid-1.1.2-1.x86_64.rpm(5.14 MB)
    apptainer-suid-dbgsym_1.1.2_amd64.deb(3.62 MB)
    apptainer-suid_1.1.2_amd64.deb(4.22 MB)
    apptainer_1.1.2_amd64.deb(21.48 MB)
    sha256sums(965 bytes)
    squashfuse-0.1.105.tar.gz(64.10 KB)
  • v1.1.0(Sep 27, 2022)

    Changed defaults / behaviours

    • The most significant change is that Apptainer no longer installs a setuid-root portion by default. This is now reasonable to do because most operations can be done with only unprivileged user namespaces (see additional changes below). If installing from rpm or debian packages, the setuid portion can be included by installing the apptainer-suid package, or if installing from source it can be included by compiling with the mconfig --with-suid option. For those that are concerned about kernel vulnerabilities with user namespaces, we recommend disabling network namespaces if you can. See the discussion in the admin guide.
    • Added a squashfuse image driver that enables mounting SIF files without using setuid-root. Uses either a squashfuse_ll command or a squashfuse command and requires unprivileged user namespaces. For better parallel performance, a patched multithreaded version of squashfuse_ll is included in rpm and debian packaging in ${prefix}/libexec/apptainer/bin.
    • Added an --unsquash action flag to temporarily convert a SIF file to a sandbox before running. In previous versions this was the default when running a SIF file without setuid or with fakeroot, but now the default is to mount with squashfuse_ll or squashfuse.
    • Added a fuse2fs image driver that enables mounting EXT3 files and EXT3 SIF overlay partitions without using setuid-root. Requires the fuse2fs command and unprivileged user namespaces.
    • Added the ability to use persistent overlay (--overlay) and --writable-tmpfs without using setuid-root. This requires unprivileged user namespaces and either a new enough kernel (>= 5.11) or the fuse-overlayfs command. Persistent overlay works when the overlay path points to a regular filesystem (known as "sandbox" mode, which is not allowed when in setuid mode), or when it points to an EXT3 image.
    • Extended the --fakeroot option to be useful when /etc/subuid and /etc/subgid mappings have not been set up. If they have not been set up, a root-mapped unprivileged user namespace (the equivalent of unshare -r) and/or the fakeroot command from the host will be tried. Together they emulate the mappings pretty well but they are simpler to administer. This feature is especially useful with the --overlay and --writable-tmpfs options and for building containers unprivileged, because they allow installing packages that assume they're running as root. A limitation on using it with --overlay and --writable-tmpfs however is that when only the fakeroot command can be used (because there are no user namespaces available, in suid mode) then the base image has to be a sandbox. This feature works nested inside of an apptainer container, where another apptainer command will also be in the fakeroot environment without requesting the --fakeroot option again, or it can be used inside an apptainer container that was not started with --fakeroot. However, the fakeroot command uses LD_PRELOAD and so needs to be bound into the container which requires a compatible libc. For that reason it doesn't work when the host and container operating systems are of very different vintages. If that's a problem and you want to use only an unprivileged root-mapped namespace even when the fakeroot command is installed, just run apptainer with unshare -r.
    • Made the --fakeroot option be implied when an unprivileged user builds a container from a definition file. When /etc/subuid and /etc/subgid mappings are not available, all scriptlets are run in a root-mapped unprivileged namespace (when possible) and the %post scriptlet is additionally run with the fakeroot command. When unprivileged user namespaces are not available, such that only the fakeroot command can be used, the --fix-perms option is implied to allow writing into directories.
    • Added additional hidden options to action and build commands for testing different fakeroot modes: --ignore-subuid, --ignore-fakeroot-command, and --ignore-userns. Also added --userns to the build command to ignore setuid-root mode like action commands do.
    • Added a --fakeroot option to the apptainer overlay create command to make an overlay EXT3 image file that works with the fakeroot that comes from unprivileged root-mapped namespaces. This is not needed with the fakeroot that comes with /etc/sub[ug]id mappings nor with the fakeroot that comes with only the fakeroot command in suid flow.
    • Added a --sparse flag to overlay create command to allow generation of a sparse EXT3 overlay image.
    • Added a binary path configuration variable as the default path to use when searching for helper executables. May contain $PATH: which gets substituted with the user's PATH except when running a program that may be run with elevated privileges in the suid flow. Defaults to $PATH: followed by standard system paths. ${prefix}/libexec/apptainer/bin is also implied as the first component, either as the first directory of $PATH if present or simply as the first directory if $PATH is not included. Configuration variables for paths to individual programs that were in apptainer.conf (cryptsetup, go, ldconfig, msquashfs, unsquashfs, and nvidia-container-cli) have been removed.
    • The --nvccli option now works without --fakeroot. In that case the option can be used with --writable-tmpfs instead of --writable, and --writable-tmpfs is implied if neither option is given. Note that also /usr/bin has to be writable by the user, so without --fakeroot that probably requires a sandbox image that was built with --fix-perms.
    • The --nvccli option now implies --nv.
    • $HOME is now used to find the user's configuration and cache by default. If that is not set it will fall back to the previous behavior of looking up the home directory in the password file. The value of $HOME inside the container still defaults to the home directory in the password file and can still be overridden by the --home option.
    • When starting a container, if the user has specified the cwd by using the --pwd flag, if there is a problem an error is returned instead of defaulting to a different directory.
    • Nesting of bind mounts now works even when a --bind option specified a different source and destination with a colon between them. Now the APPTAINER_BIND environment variable makes sure the bind source is from the bind destination so it will be succesfully re-bound into a nested apptainer container.
    • The warning about more than 50 bind mounts required for an underlay bind has been changed to an info message.
    • oci mount sets Process.Terminal: true when creating an OCI config.json, so that oci run provides expected interactive behavior by default.
    • The default hostname for oci mount containers is now apptainer instead of mrsdalloway.
    • systemd is now supported and used as the default cgroups manager. Set systemd cgroups = no in apptainer.conf to manage cgroups directly via the cgroupfs.
    • Plugins must be compiled from inside the Apptainer source directory, and will use the main Apptainer go.mod file. Required for Go 1.18 support.
    • Apptainer now requires squashfs-tools >=4.3, which is satisfied by current EL / Ubuntu / Debian and other distributions.
    • Added a new action flag --no-eval which:
      • Prevents shell evaluation of APPTAINERENV_ / --env / --env-file environment variables as they are injected in the container, to match OCI behavior. Applies to all containers.
      • Prevents shell evaluation of the values of CMD / ENTRYPOINT and command line arguments for containers run or built directly from an OCI/Docker source. Applies to newly built containers only, use apptainer inspect to check version that container was built with.
    • Added --no-eval to the list of flags set by the OCI/Docker --compat mode.
    • sinit process has been renamed to appinit.
    • Added --keysdir to key command to provide an alternative way of setting local keyring path. The existing reading of the keyring path from environment variable 'APPTAINER_KEYSDIR' is untouched.
    • apptainer key push will output the key server's response if included in order to help guide users through any identity verification the server may require.
    • ECL no longer requires verification for all signatures, but only when signature verification would alter the expected behavior of the list:
      • At least one matching signature included in a whitelist must be validated, but other unvalidated signatures do not cause ECL to fail.
      • All matching signatures included in a whitestrict must be validated, but unvalidated signatures not in the whitestrict do not cause ECL to fail.
      • Signature verification is not checked for a blacklist; unvalidated signatures can still block execution via ECL, and unvalidated signatures not in the blacklist do not cause ECL to fail.
    • Improved wildcard matching in the %files directive of build definition files by replacing usage of sh with the mvdan.cc library.

    New features / functionalities

    • Non-root users can now use --apply-cgroups with run/shell/exec to limit container resource usage on a system using cgroups v2 and the systemd cgroups manager.
    • Native cgroups v2 resource limits can be specified using the [unified] key in a cgroups toml file applied via --apply-cgroups.
    • Added --cpu*, --blkio*, --memory*, --pids-limit flags to apply cgroups resource limits to a container directly.
    • Added instance stats command.
    • Added support for a custom hashbang in the %test section of an Apptainer recipe (akin to the runscript and start sections).
    • The --no-mount flag & APPTAINER_NO_MOUNT env var can now be used to disable a bind path entry from apptainer.conf by specifying the absolute path to the destination of the bind.
    • Apptainer now supports the riscv64 architecture.
    • remote add --insecure may now be used to configure endpoints that are only accessible via http. Alternatively the environment variable APPTAINER_ADD_INSECURE can be set to true to allow http remotes to be added wihtout the --insecure flag. Specifying https in the remote URI overrules both --insecure and APPTAINER_ADD_INSECURE.
    • Gpu flags --nv and --rocm can now be used from an apptainer nested inside another apptainer container.
    • Added --public, --secret, and --both flags to the key remove command to support removing secret keys from the apptainer keyring.
    • Debug output can now be enabled by setting the APPTAINER_DEBUG env var.
    • Debug output is now shown for nested apptainer calls, in wrapped unsquashfs image extraction, and build stages.
    • Added EL9 package builds to CI for GitHub releases.
    • Added confURL & Include parameters to the Arch packer for alternate pacman.conf URL and alternate installed (meta)package.

    Bug fixes

    • Remove warning message about SINGULARITY and APPTAINER variables having different values when the SINGULARITY variable is not set.
    • Fixed longstanding bug in the underlay logic when there are nested bind points separated by more than one path level, for example /var and /var/lib/yum, and the path didn't exist in the container image. The bug only caused an error when there was a directory in the container image that didn't exist on the host.
    • Add specific error for unreadable image / overlay file.
    • Pass through a literal \n in host environment variables to the container.
    • Allow newgidmap / newuidmap that use capabilities instead of setuid root.
    • Fix compilation on mipsel.
    • Fix test code that implied %test -c <shell> was supported - it is not.
    • Fix loop device creation with loop-control when running inside docker containers.
    • Fix the issue that the oras protocol would ignore the --no-https/--nohttps flag.
    • Fix oras image push to registries with authorization servers not supporting multiple scope query parameter.
    • Improved error handling of unsupported password protected PEM files with encrypted containers.
    • Ensure bootstrap_history directory is populated with previous definition files, present in source containers used in a build.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.1.0-1.src.rpm(12.16 MB)
    apptainer-1.1.0-1.x86_64.rpm(33.95 MB)
    apptainer-1.1.0.tar.gz(12.17 MB)
    apptainer-dbgsym_1.1.0_amd64.deb(28.58 MB)
    apptainer-debuginfo-1.1.0-1.x86_64.rpm(38.72 MB)
    apptainer-suid-1.1.0-1.x86_64.rpm(5.01 MB)
    apptainer-suid-dbgsym_1.1.0_amd64.deb(3.55 MB)
    apptainer-suid_1.1.0_amd64.deb(4.11 MB)
    apptainer_1.1.0_amd64.deb(21.22 MB)
    sha256sums(965 bytes)
    squashfuse-0.1.105.tar.gz(64.10 KB)
  • v1.1.0-rc.3(Sep 6, 2022)

    Changes since last release candidate:

    • Imply adding ${prefix}/libexec/apptainer/bin to the binary path in apptainer.conf, which is used for searching for helper executables. It is implied as the first directory of $PATH if present (which is at the beginning of binary path by default) or just as the first directory if $PATH is not included in binary path.
    • Change squash mounts to prefer to use squashfuse_ll instead of squashfuse, if available, for improved performance. squashfuse_ll is available on RHEL-based systems but not Debian as part of the squashfuse package. Also, for even better parallel performance, include a patched multithreaded version of squashfuse_ll in rpm and debian packaging in ${prefix}/libexec/apptainer/bin.
    • Add --unsquash action flag to temporarily convert a SIF file to a sandbox before running. In previous versions this was the default when running a SIF file without setuid or with fakeroot, but now the default is to instead mount with squashfuse.
    • Add --sparse flag to overlay create command to allow generation of a sparse ext3 overlay image.
    • Support for a custom hashbang in the %test section of an Apptainer recipe (akin to the runscript and start sections).
    • When using fakeroot in setuid mode, have the image drivers first enter the the container's user namespace to avoid write errors with overlays.
    • Skip trying to use kernel overlayfs when using writable overlay and the lower layer is FUSE, because of a kernel bug introduced in kernel 5.15.
    • Add additional hidden options to the action command for testing different fakeroot modes with --fakeroot: --ignore-subuid, --ignore-fakeroot-command, and --ignore-userns.
    • Fix github release rpm to be installable on EL8 & EL9 by not requiring the fuse2fs package which doesn't exist there. Instead, on EL7 cause an install failure if /usr/*bin/fuse2fs is not installed with a message explaining how to fix it. The EPEL build won't have this issue; there EPEL7 will require the fuse2fs package.
    • Fix ORAS image push to registries with authorization servers not supporting multiple scope query parameter.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.1.0-rc.3.tar.gz(12.17 MB)
    apptainer-1.1.0.rc.3-1.src.rpm(12.17 MB)
    apptainer-1.1.0.rc.3-1.x86_64.rpm(33.96 MB)
    apptainer-dbgsym_1.1.0-rc.3_amd64.deb(28.64 MB)
    apptainer-debuginfo-1.1.0.rc.3-1.x86_64.rpm(38.72 MB)
    apptainer-suid-1.1.0.rc.3-1.x86_64.rpm(5.01 MB)
    apptainer-suid-dbgsym_1.1.0-rc.3_amd64.deb(3.55 MB)
    apptainer-suid_1.1.0-rc.3_amd64.deb(4.11 MB)
    apptainer_1.1.0-rc.3_amd64.deb(21.22 MB)
    sha256sums(1010 bytes)
    squashfuse-0.1.105.tar.gz(64.10 KB)
  • v1.1.0-rc.2(Aug 17, 2022)

    Changed defaults / behaviours

    • Fixed longstanding bug in the underlay logic when there are nested bind points separated by more than one path level, for example /var and /var/lib/yum, and the path didn't exist in the container image. The bug only caused an error when there was a directory in the container image that didn't exist on the host. Improved wildcard matching in the %files directive of build definition files by replacing usage of sh with the mvdan.cc library.
    • Replaced checks for compatible filesystem types when using fuse-overlayfs with an INFO message when an incompatible filesystem type causes it to be unwritable by a fakeroot user.
    • Mount the user's home directory at /root when using --fakeroot in the setuid flow (fixes a regression introduced in 1.1.0-rc.1 which didn't impact non-setuid flow).
    • The --nvccli option now works without --fakeroot. In that case the option can be used with --writable-tmpfs instead of --writable, and --writable-tmpfs is implied if neither option is given. Note that also /usr/bin has to be writable by the user, so without --fakeroot that probably requires a sandbox image that was built with --fix-perms.
    • The --nvccli option implies --nv.
    • Configure squashfuse to always show files to be owned by the current user. That's especially important for fakeroot to prevent most of the files from looking like they are owned by user 65534.
    • The fakeroot command can now be used even if $PATH is empty in the environment of the apptainer command.
    • Allow the newuidmap command to be missing if the current user is not listed in /etc/subuid.
    • Require the uidmap package in Debian packaging.
    • Improved error handling of unsupported pass protected PEM files with encrypted containers.
    • Require fuse2fs in RPM packaging. In EPEL7 the package is called fuse2fs, otherwise it is in e2fsprogs.
    • Require the fuse-overlayfs package for all RPM packages instead of just on el7 because it is sometimes useful even with kernel support for unprivileged overlayfs.
    • Ensure bootstrap_history directory is populated with previous definition files, present in source containers used in a build.
    • Add additional options to the build command for testing different fakeroot modes: --userns like the action flag and hidden options --ignore-subuid, --ignore-fakeroot-command, and --ignore-userns.
    • Require root user early when building an encrypted container.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.1.0-rc.2.tar.gz(12.16 MB)
    apptainer-1.1.0.rc.2-1.src.rpm(12.08 MB)
    apptainer-1.1.0.rc.2-1.x86_64.rpm(33.90 MB)
    apptainer-dbgsym_1.1.0-rc.2_amd64.deb(28.45 MB)
    apptainer-debuginfo-1.1.0.rc.2-1.x86_64.rpm(38.60 MB)
    apptainer-suid-1.1.0.rc.2-1.x86_64.rpm(4.99 MB)
    apptainer-suid-dbgsym_1.1.0-rc.2_amd64.deb(3.54 MB)
    apptainer-suid_1.1.0-rc.2_amd64.deb(4.10 MB)
    apptainer_1.1.0-rc.2_amd64.deb(21.17 MB)
    sha256sums(918 bytes)
  • v1.1.0-rc.1(Aug 1, 2022)

    Changed defaults / behaviours

    • The most significant change is that Apptainer no longer installs a setuid-root portion by default. This is now reasonable to do because most operations can be done with only unprivileged user namespaces (see additional changes below). If installing from rpm or debian packages, the setuid portion can be included by installing the apptainer-suid package, or if installing from source it can be included by compiling with the mconfig --with-suid option. For those that are concerned about kernel vulnerabilities with user namespaces, we recommend disabling network namespaces if you can. See the discussion in the admin guide.
    • Added a squashfuse image driver that enables mounting SIF files without using setuid-root. Requires the squashfuse command and unprivileged user namespaces.
    • Added a fuse2fs image driver that enables mounting EXT3 files and EXT3 SIF overlay partitions without using setuid-root. Requires the fuse2fs command and unprivileged user namespaces.
    • Added the ability to use persistent overlay (--overlay) and --writable-tmpfs without using setuid-root. This requires unprivileged user namespaces and either a new enough kernel (>= 5.11) or the fuse-overlayfs command. Persistent overlay works when the overlay path points to a regular filesystem (known as "sandbox" mode, which is not allowed when in setuid mode), or when it points to an EXT3 image. Does not work with a SIF partition because that requires privileges to mount as an ext3 image.
    • Extended the --fakeroot option to be useful when /etc/subuid and /etc/subgid mappings have not been set up. If they have not been set up, a root-mapped unprivileged user namespace (the equivalent of unshare -r) and/or the fakeroot command from the host will be tried. Together they emulate the mappings pretty well but they are simpler to administer. This feature is especially useful with the --overlay and --writable-tmpfs options and for building containers unprivileged, because they allow installing packages that assume they're running as root. A limitation on using it with --overlay and --writable-tmpfs however is that when only the fakeroot command can be used (because there are no user namespaces available, in suid mode) then the base image has to be a sandbox. This feature works nested inside of an apptainer container, where another apptainer command will also be in the fakeroot environment without requesting the --fakeroot option again, or it can be used inside an apptainer container that was not started with --fakeroot. However, the fakeroot command uses LD_PRELOAD and so needs to be bound into the container which requires a compatible libc. For that reason it doesn't work when the host and container operating systems are of very different vintages. If that's a problem and you want to use only an unprivileged root-mapped namespace even when the fakeroot command is installed, just run apptainer with unshare -r.
    • Made the --fakeroot option be implied when an unprivileged user builds a container from a definition file. When /etc/subuid and /etc/subgid mappings are not available, all scriptlets are run in a root-mapped unprivileged namespace (when possible) and the %post scriptlet is additionally run with the fakeroot command. When unprivileged user namespaces are not available, such that only the fakeroot command can be used, the --fix-perms option is implied to allow writing into directories.
    • Added a --fakeroot option to the apptainer overlay create command to make an overlay EXT3 image file that works with the fakeroot that comes from unprivileged root-mapped namespaces. This is not needed with the fakeroot that comes with /etc/sub[ug]id mappings nor with the fakeroot that comes with only the fakeroot command in suid flow.
    • Added a binary path configuration variable as the default path to use when searching for helper executables. May contain $PATH: which gets substituted with the user's PATH except when running a program that may be run with elevated privileges in the suid flow. Defaults to $PATH: followed by standard system paths. Configuration variables for paths to individual programs that were in apptainer.conf (cryptsetup, go, ldconfig, msquashfs, unsquashfs, and nvidia-container-cli) have been removed.
    • $HOME is now used to find the user's configuration and cache by default. If that is not set it will fall back to the previous behavior of looking up the home directory in the password file. The value of $HOME inside the container still defaults to the home directory in the password file and can still be overridden by the --home option.
    • When starting a container, if the user has specified the cwd by using the --pwd flag, if there is a problem an error is returned instead of defaulting to a different directory.
    • Nesting of bind mounts now works even when a --bind option specified a different source and destination with a colon between them. Now the APPTAINER_BIND environment variable makes sure the bind source is from the bind destination so it will be succesfully re-bound into a nested apptainer container.
    • The warning about more than 50 bind mounts required for an underlay bind has been changed to an info message.
    • oci mount sets Process.Terminal: true when creating an OCI config.json, so that oci run provides expected interactive behavior by default.
    • The default hostname for oci mount containers is now apptainer instead of mrsdalloway.
    • systemd is now supported and used as the default cgroups manager. Set systemd cgroups = no in apptainer.conf to manage cgroups directly via the cgroupfs.
    • Plugins must be compiled from inside the Apptainer source directory, and will use the main Apptainer go.mod file. Required for Go 1.18 support.
    • Apptainer now requires squashfs-tools >=4.3, which is satisfied by current EL / Ubuntu / Debian and other distributions.
    • Added a new action flag --no-eval which:
      • Prevents shell evaluation of APPTAINERENV_ / --env / --env-file environment variables as they are injected in the container, to match OCI behavior. Applies to all containers.
      • Prevents shell evaluation of the values of CMD / ENTRYPOINT and command line arguments for containers run or built directly from an OCI/Docker source. Applies to newly built containers only, use apptainer inspect to check version that container was built with.
    • Added --no-eval to the list of flags set by the OCI/Docker --compat mode.
    • sinit process has been renamed to appinit.
    • Added --keysdir to key command to provide an alternative way of setting local keyring path. The existing reading of the keyring path from environment variable 'APPTAINER_KEYSDIR' is untouched.
    • apptainer key push will output the key server's response if included in order to help guide users through any identity verification the server may require.
    • ECL no longer requires verification for all signatures, but only when signature verification would alter the expected behavior of the list:
      • At least one matching signature included in a whitelist must be validated, but other unvalidated signatures do not cause ECL to fail.
      • All matching signatures included in a whitestrict must be validated, but unvalidated signatures not in the whitestrict do not cause ECL to fail.
      • Signature verification is not checked for a blacklist; unvalidated signatures can still block execution via ECL, and unvalidated signatures not in the blacklist do not cause ECL to fail.

    New features / functionalities

    • Non-root users can now use --apply-cgroups with run/shell/exec to limit container resource usage on a system using cgroups v2 and the systemd cgroups manager.
    • Native cgroups v2 resource limits can be specified using the [unified] key in a cgroups toml file applied via --apply-cgroups.
    • Added --cpu*, --blkio*, --memory*, --pids-limit flags to apply cgroups resource limits to a container directly.
    • Added instance stats command.
    • The --no-mount flag & APPTAINER_NO_MOUNT env var can now be used to disable a bind path entry from apptainer.conf by specifying the absolute path to the destination of the bind.
    • Apptainer now supports the riscv64 architecture.
    • remote add --insecure may now be used to configure endpoints that are only accessible via http. Alternatively the environment variable APPTAINER_ADD_INSECURE can be set to true to allow http remotes to be added wihtout the --insecure flag. Specifying https in the remote URI overrules both --insecure and APPTAINER_ADD_INSECURE.
    • Gpu flags --nv and --rocm can now be used from an apptainer nested inside another apptainer container.
    • Added --public, --secret, and --both flags to the key remove command to support removing secret keys from the apptainer keyring.
    • Debug output can now be enabled by setting the APPTAINER_DEBUG env var.
    • Debug output is now shown for nested apptainer calls, in wrapped unsquashfs image extraction, and build stages.
    • Added EL9 package builds to CI for GitHub releases.
    • Added confURL & Include parameters to the Arch packer for alternate pacman.conf URL and alternate installed (meta)package.

    Bug fixes

    • Remove warning message about SINGULARITY and APPTAINER variables having different values when the SINGULARITY variable is not set.
    • Add specific error for unreadable image / overlay file.
    • Pass through a literal \n in host environment variables to the container.
    • Allow newgidmap / newuidmap that use capabilities instead of setuid root.
    • Fix compilation on mipsel.
    • Fix test code that implied %test -c <shell> was supported - it is not.
    • Fix loop device creation with loop-control when running inside docker containers.
    • Fix the issue that the oras protocol would ignore the --no-https/--nohttps flag.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.1.0-rc.1.tar.gz(12.17 MB)
    apptainer-1.1.0.rc.1-1.src.rpm(12.09 MB)
    apptainer-1.1.0.rc.1-1.x86_64.rpm(33.90 MB)
    apptainer-dbgsym_1.1.0-rc.1_amd64.deb(28.51 MB)
    apptainer-debuginfo-1.1.0.rc.1-1.x86_64.rpm(38.59 MB)
    apptainer-suid-1.1.0.rc.1-1.x86_64.rpm(4.98 MB)
    apptainer-suid-dbgsym_1.1.0-rc.1_amd64.deb(3.54 MB)
    apptainer-suid_1.1.0-rc.1_amd64.deb(4.10 MB)
    apptainer_1.1.0-rc.1_amd64.deb(21.19 MB)
    sha256sums(918 bytes)
  • v1.0.3(Jul 6, 2022)

    v1.0.3 - [2022-07-06]

    Bug fixes

    • Process redirects that can come from sregistry with a library:// URL.
    • Fix inspect --deffile and inspect --all to correctly show definition files in sandbox container images instead of empty output. This has a side effect of also fixing the storing of definition files in the metadata of sif files built by Apptainer, because that metadata is constructed by doing inspect --all.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.0.3-1.src.rpm(11.34 MB)
    apptainer-1.0.3-1.x86_64.rpm(37.89 MB)
    apptainer-1.0.3.tar.gz(11.41 MB)
    apptainer-dbgsym_1.0.3_amd64.deb(31.07 MB)
    apptainer-debuginfo-1.0.3-1.x86_64.rpm(37.13 MB)
    apptainer_1.0.3_amd64.deb(26.41 MB)
    sha256sums(572 bytes)
  • v1.0.2(May 10, 2022)

    v1.0.2 - [2022-05-09]

    Bug fixes

    • Fixed FATAL error thrown by user configuration migration code that caused users with inaccessible home directories to be unable to use apptainer commands.
    • The Debian package now conflicts with the singularity-container package.
    • Do not truncate environment variables with commas.
    • Use HEAD request when checking digest of remote OCI image sources, with GET as a fall-back. Greatly reduces Apptainer's impact on Docker Hub API limits.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.0.2-1.src.rpm(11.35 MB)
    apptainer-1.0.2-1.x86_64.rpm(38.65 MB)
    apptainer-1.0.2.tar.gz(11.42 MB)
    apptainer-dbgsym_1.0.2_amd64.deb(31.22 MB)
    apptainer-debuginfo-1.0.2-1.x86_64.rpm(35.42 MB)
    apptainer_1.0.2_amd64.deb(26.42 MB)
    sha256sums(572 bytes)
  • v1.0.1(Mar 16, 2022)

    v1.0.1 - [2022-03-15]

    Bug fixes

    • Don't prompt for y/n to overwrite an existing file when build is called from a non-interactive environment. Fail with an error.
    • Preload NSS libraries prior to mountspace name creation to avoid circumstances that can cause loading those libraries from the container image instead of the host, for example in the startup environment.
    • Fix race condition where newly created loop devices can sometimes not be opened.
    • Support nvidia-container-cli v1.8.0 and above, via fix to capability set.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.0.1-1.src.rpm(11.35 MB)
    apptainer-1.0.1-1.x86_64.rpm(38.64 MB)
    apptainer-1.0.1.tar.gz(11.42 MB)
    apptainer-dbgsym_1.0.1_amd64.deb(31.23 MB)
    apptainer-debuginfo-1.0.1-1.x86_64.rpm(35.42 MB)
    apptainer_1.0.1_amd64.deb(26.42 MB)
    sha256sums(572 bytes)
  • v1.0.0(Mar 3, 2022)

    v1.0.0 - [2022-03-02]

    Comparison to SingularityCE

    This release has most of the new features, bug fixes, and changes that went into SingularityCE up through their version 3.9.5, except where the maintainers of Apptainer disagreed with what went into SingularityCE since the project fork. The biggest difference is that Apptainer does not support the --nvccli option in privileged mode. This release also has the additional major feature of instance checkpointing which isn't in SingularityCE. Other differences due to re-branding are in the next section.

    Changes due to the project re-branding

    • The primary executable has been changed from singularity to apptainer. However, a singularity command symlink alias has been created pointing to the apptainer command. The contents of containers are unchanged and continue to use the singularity name for startup scripts, etc.
    • The configuration directory has changed from /etc/singularity to /etc/apptainer within packages, and the primary configuration file name has changed from singularity.conf to apptainer.conf. As long as a singularity directory still exists next to an apptainer directory, running the apptainer command will print a warning saying that migration is not complete. If no changes had been made to the configuration then an rpm package upgrade should automatically remove the old directory, otherwise the system administrator needs to take care of migrating the configuration and removing the old directory. Old configuration can be removed for a Debian package with apt-get purge singularity or dpkg -P singularity.
    • The per-user configuration directory has changed from ~/.singularity to ~/.apptainer. The first time the apptainer command accesses the user configuration directory, relevant configuration is automatically imported from the old directory to the new one.
    • Environment variables have all been changed to have an APPTAINER prefix instead of a SINGULARITY prefix. However, SINGULARITY prefix variables are still recognized. If only a SINGULARITY prefix variable exists, a warning will be printed about deprecated usage and then the value will be used. If both prefixes exist and the value is the same, no warning is printed; this is the recommended method to set environment variables for those who need to support both apptainer and singularity. If both prefixes exist for the same variable and the value is different then a warning is also printed.
    • The default SylabsCloud remote endpoint has been removed and replaced by one called DefaultRemote which has no defined server for the library:// URI. The previous default can be restored by following the directions in the documentation.
    • The DefaultRemote's key server is https://keys.openpgp.org instead of the Sylabs key server.
    • The apptainer build --remote option has been removed because there is no standard protocol or non-commercial service that supports it.

    Other changed defaults / behaviours since Singularity 3.8.x

    • Auto-generate release assets including the distribution tarball and rpm (built on CentOS 7) and deb (built on Debian 11) x86_64 packages.
    • LABELs from Docker/OCI images are now inherited. This fixes a longstanding regression from Singularity 2.x. Note that you will now need to use --force in a build to override a label that already exists in the source Docker/OCI container.
    • Removed --nonet flag, which was intended to disable networking for in-VM execution, but has no effect.
    • --nohttps flag has been deprecated in favour of --no-https. The old flag is still accepted, but will display a deprecation warning.
    • Paths for cryptsetup, go, ldconfig, mksquashfs, nvidia-container-cli, unsquashfs are now found at build time by mconfig and written into apptainer.conf. The path to these executables can be overridden by changing the value in apptainer.conf.
    • When calling ldconfig to find GPU libraries, apptainer will not fall back to /sbin/ldconfig if the configured ldconfig errors. If installing in a Guix/Nix on environment on top of a standard host distribution you must set ldconfig path = /sbin/ldconfig to use the host distribution ldconfig to find GPU libraries.
    • --nv will not call nvidia-container-cli to find host libraries, unless the new experimental GPU setup flow that employs nvidia-container-cli for all GPU related operations is enabled (see more below).
    • If a container is run with --nvccli and --contain, only GPU devices specified via the NVIDIA_VISIBLE_DEVICES environment variable will be exposed within the container. Use NVIDIA_VISIBLE_DEVICES=all to access all GPUs inside a container run with --nvccli. See more on --nvccli under New features below.
    • Example log-plugin rewritten as a CLI callback that can log all commands executed, instead of only container execution, and has access to command arguments.
    • The bundled reference CNI plugins are updated to v1.0.1. The flannel plugin is no longer included, as it is maintained as a separate plugin at: https://github.com/flannel-io/cni-plugin. If you use the flannel CNI plugin you should install it from this repository.
    • Instances are no longer created with an IPC namespace by default. An IPC namespace can be specified with the -i|--ipc flag.
    • The behaviour of the allow container directives in apptainer.conf has been modified, to support more intuitive limitations on the usage of SIF and non-SIF container images. If you use these directives, you may need to make changes to apptainer.conf to preserve behaviour.
      • A new allow container sif directive permits or denies usage of unencrypted SIF images, irrespective of the filesystem(s) inside the SIF.
      • The allow container encrypted directive permits or denies usage of SIF images with an encrypted root filesystem.
      • The allow container squashfs/extfs directives in apptainer.conf permit or deny usage of bare SquashFS and EXT image files only.
      • The effect of the allow container dir directive is unchanged.
    • --bind, --nv and --rocm options for build command can't be set through environment variables APPTAINER_BIND, APPTAINER_BINDPATH, APPTAINER_NV, APPTAINER_ROCM anymore due to side effects reported by users in this issue, they must be explicitely requested via command line.
    • Build --bind option allows to set multiple bind mounts without specifying the --bind option for each bindings.
    • Honor image binds and user binds in the order they're given instead of always doing image binds first.
    • Remove subshell overhead when processing large environments on container startup.
    • make install now installs man pages. A separate make man is not required. As a consequence, man pages are now included in deb packages.

    New features / functionalities

    • Experimental support for checkpointing of instances using DMTCP has been added. Additional flags --dmtcp-launch and --dmtcp-restart has been added to the apptainer instance start command, and a checkpoint command group has been added to manage the checkpoint state. A new /etc/apptainer/dmtcp-conf.yaml configuration file is also added. Limitations are that it can only work with dynamically linked applications and the container has to be based on glibc.
    • --writable-tmpfs can be used with apptainer build to run the %test section of the build with a ephemeral tmpfs overlay, permitting tests that write to the container filesystem.
    • The --compat flag for actions is a new short-hand to enable a number of options that increase OCI/Docker compatibility. Infers --containall, --no-init, --no-umask, --writable-tmpfs. Does not use user, uts, or network namespaces as these may not be supported on many installations.
    • The experimental --nvccli flag will use nvidia-container-cli to setup the container for Nvidia GPU operation. Apptainer will not bind GPU libraries itself. Environment variables that are used with Nvidia's docker-nvidia runtime to configure GPU visibility / driver capabilities & requirements are parsed by the --nvccli flag from the environment of the calling user. By default, the compute and utility GPU capabilities are configured. The use nvidia-container-cli option in apptainer.conf can be set to yes to always use nvidia-container-cli when supported. --nvccli is not supported in the setuid workflow, and it requires being used in combination with --writable in user namespace mode. Please see documentation for more details.
    • The --apply-cgroups flag can be used to apply cgroups resource and device restrictions on a system using the v2 unified cgroups hierarchy. The resource restrictions must still be specified in the v1 / OCI format, which will be translated into v2 cgroups resource restrictions, and eBPF device restrictions.
    • A new --mount flag and APPTAINER_MOUNT environment variable can be used to specify bind mounts in type=bind,source=<src>,destination=<dst>[,options...] format. This improves CLI compatibility with other runtimes, and allows binding paths containin : and , characters (using CSV style escaping).
    • Perform concurrent multi-part downloads for library:// URIs. Uses 3 concurrent downloads by default, and is configurable in apptainer.conf or via environment variables.

    Bug fixes

    • The oci commands will operate on systems that use the v2 unified cgroups hierarchy.
    • Ensure invalid values passed to config global --set cannot lead to an empty configuration file being written.
    • --no-https now applies to connections made to library services specified in library://<hostname>/... URIs.
    • Ensure gengodep in build uses vendor dir when present.
    • Correct documentation for sign command r.e. source of key index.
    • Restructure loop device discovery to address EAGAIN issue.
    • Ensure a local build does not fail unnecessarily if a keyserver config cannot be retrieved from the remote endpoint.
    • Update dependency to correctly unset variables in container startup environment processing. Fixes regression introduced in singularity-3.8.5.
    • Correct library bindings for unsquashfs containment. Fixes errors where resolved library filename does not match library filename in binary (e.g. EL8, POWER9 with glibc-hwcaps).
    • Remove python as a dependency of the debian package.
    • Increase the TLS Handshake Timeout for the busybox bootstrap agent in build definition files to 60 seconds.
    • Add binutils-gold to the build requirements on SUSE rpm builds.

    Changes for Testing / Development

    • E2E_DOCKER_MIRROR and E2E_DOCKER_MIRROR_INSECURE were added to allow to use a registry mirror (or a pull through cache).
    • A tools source directory was added with a Dockerfile for doing local e2e testing.
    Source code(tar.gz)
    Source code(zip)
    apptainer-1.0.0-1.src.rpm(11.35 MB)
    apptainer-1.0.0-1.x86_64.rpm(38.64 MB)
    apptainer-1.0.0.tar.gz(11.42 MB)
    apptainer-dbgsym_1.0.0_amd64.deb(31.16 MB)
    apptainer-debuginfo-1.0.0-1.x86_64.rpm(35.42 MB)
    apptainer_1.0.0_amd64.deb(26.40 MB)
    sha256sums(572 bytes)
  • v1.0.0-rc.1(Jan 19, 2022)

  • v0.1.0(Dec 10, 2021)

    What's Changed

    • Update readme.md with apptainer information by @ikaneshiro in https://github.com/apptainer/apptainer/pull/2
    • Missed a markdown reference by @ikaneshiro in https://github.com/apptainer/apptainer/pull/4
    • Apptainer copyright by @PaulCharlton in https://github.com/apptainer/apptainer/pull/1
    • begin new changelog for Apptainer by @PaulCharlton in https://github.com/apptainer/apptainer/pull/5
    • Add Developer Ceritificate of Origin by @DrDaveD in https://github.com/apptainer/apptainer/pull/6

    Full Changelog: https://github.com/apptainer/apptainer/commits/v0.1.0

    Source code(tar.gz)
    Source code(zip)
    alpine-docker-save.tar(5.58 MB)
    alpine-oci-archive.tar(2.67 MB)
Owner
The Apptainer Container Project
The Apptainer Container Project
Podman: A tool for managing OCI containers and pods

Podman: A tool for managing OCI containers and pods Podman (the POD MANager) is a tool for managing containers and images, volumes mounted into those

Containers 16.4k Jan 1, 2023
Experimental code execution microservice based on Docker containers.

ranna ランナー - Experimental code runner microservice based on Docker containers. ⚠ PLEASE READ BEFORE USE First of all, this project is currently work i

ranna 31 Dec 9, 2022
a tool for getting metrics in containers

read metrics in container if environment is container, the cpu ,memory is relative to container, else the metrics is relative to host. juejing link :

null 6 Oct 13, 2022
An application that is developed to generate application by API specification

GO boilerplate is an application that is developed to generate application by API specification and Database schema with the collaboration with opn-generator.

Rafi Mahmud 0 Oct 14, 2021
Record CS knowlegement with XMind, version 2.0. 使用 XMind 记录 Linux 操作系统,网络,C++,Golang 以及数据库的一些设计

Psyduck 另一个用 XMind 记录 CS 基础问题的地方,同样提供了 .xmind 源文件以及导出的 .pdf 文件,XMind 版本为「XMind 2020」。 在 2020 年时,曾花了约 2 个月的时间整理了第一份 XMind 知识库: ZeroMind。 之所以额外创建一个 Repo

SmartKeyerror 4.3k Dec 30, 2022
Lima launches Linux virtual machines on macOS, with automatic file sharing, port forwarding, and containerd.

Lima: Linux-on-Mac ("macOS subsystem for Linux", "containerd for Mac")

Akihiro Suda 10.3k Jan 8, 2023
IBus Engine for GoVarnam. An easy way to type Indian languages on GNU/Linux systems.

IBus Engine For GoVarnam An easy way to type Indian languages on GNU/Linux systems. goibus - golang implementation of libibus Thanks to sarim and haun

Varnamproject 10 Feb 10, 2022
Nintendo Switch Joycon keyboard mapper for Linux

joygo Nintendo Switch Joycon keyboard mapper for Linux First, build with -> chmod +x build && ./build Then pair your Joycons to your computer via Blue

SM177Y 1 Nov 13, 2021
Linux namespace with golang

Linux namespace with golang

null 0 Nov 10, 2021
Testing the use of a golang wrapper around UserMode Linux for making stdin

This code is for testing the use of a golang wrapper around UserMode Linux for making stdin, stdout and stderr available to attach, detach and reattach to from the host using Unix sockets.

null 0 Dec 24, 2021
Script that sets your nzxt kraken temps based on cpu temps on linux

liquidctl-cpu-temp Script that monitors cpu temps and sets cpu cooler temps according to entered fan/pump curves. Only tested on NZXT kraken z63 requi

null 1 Nov 16, 2021
An experimental vulkan 3d engine for linux (raspberry 4)

protomatter an experimental vulkan 3d engine for linux (raspberry 4).

Torben Schinke 0 Nov 14, 2021
Graphical small-internet client for windows, linux, MacOS X and BSDs. Supports gemini, http, https, gopher, finger.

Graphical small-internet client for windows, linux, MacOS X and BSDs. Supports gemini, http, https, gopher, finger.

Felix Queißner 570 Jan 1, 2023
Linux UDisks2 (dbus) easy access from Go

udisks udisks gives you high level access to Linux system drives and block devices wrapping the udisk2 interfaces. An example command line udisks clie

Sergio Rubio 3 Apr 25, 2022
Monitor usb hotplug events (Linux)

USBMon Thin udev wrapper to simplify usb device add/remove monitoring. // monitor USB hotplug events package main import ( "context" "fmt" "githu

Sergio Rubio 19 Aug 1, 2022
Simple application to manage basic deployments

Simple application to manage basic deployments Usage You need to create a deployment yaml file (sample). then run the binary file with --config flag t

Arash Rasoulzadeh 12 Aug 29, 2021
Person is a simple CRUD application written in go which exposes API endpoint to create the person.

Person Person is a simple CRUD application written in go which exposes API endpoint to create the person. Installation Install docker in your local sy

null 0 Oct 18, 2021
An example event-driven application using Atmo and NATS

Atmo + NATS Example Project This repo is an example of using Atmo with NATS as a streaming messaging layer. In this example, Atmo connects to NATS and

Connor Hicks 2 Oct 27, 2021
A golang application to mock the billing system

mock-billing-cli A golang application to mock the billing system in super markets Features View all items & items with filter Refill items with admin

Ramya D 0 Jan 13, 2022