什么是Apptainer?如何在Ubuntu服务器上安装?

Apptainer/Singularity包已成为高性能计算(HPC)中使用最广泛的容器部署系统之一。该容器系统旨在以裸金属性能执行应用程序,同时保持高度的安全性、可移植性和再现性。

Apptainer是一个开源项目,社区不断壮大,用户基础不断扩大。功能集如下所示:

——支持信任的公钥/私钥签名。

——与Docker和开放式容器倡议的兼容性。

——加密。

——可移植性。

——容器无根运行以禁止权限提升。

——利用GPU、FPGA、高速网络和文件系统。

——易于使用。

——提供商业支持。

虽然Apptainer的安装远不如Docker那么容易,但如果你想在容器中寻找更高的安全性,这可能就是你想要的部署系统。

以下是其安装过程。

要求

Apptainer可以安装在RHEL和基于Ubuntu的Linux发行版上。笔者将用Ubuntu server 22.04进行演示,因此你需要一个该操作系统的运行实例和一个具有sudo权限的用户。

安装必要的依赖关系

首先要做的是安装必要的依赖关系。登录到Ubuntu实例并发出命令:

sudo apt-get install-y\

    build-essential\

    libseccomp-dev\

    pkg-config\

    uidmap\

    squashfs-tools\

    squashfuse\

    fuse2fs\

    fuse-overlayfs\

    fakeroot\

    cryptsetup\

    curl wget git

对于那些可能不熟悉Linux的人来说,上面是一个使用\字符分成步骤的命令。该命令的单行版本如下:

sudo apt-get install build-essential libseccomp-dev pkg-config uidmap squashfs-tools\n

squashfuse fuse2fs fuse-overlayfs fakeroot cryptsetup curl wget git-y

请注意,如果你使用的是基于RHEL的发行版,依赖关系的安装会稍微复杂一些。首先,必须使用以下工具安装开发工具:

sudo yum groupinstall -y ‘Development Tools’

接下来,添加EPEL存储库:

sudo yum install -y epel-release

最后,你可以使用以下组件安装依赖关系:

sudo yum install-y\

    libseccomp-devel\

    squashfs-tools\

    squashfuse\

    fuse-overlayfs\

    fakeroot\

    /usr/*bin/fuse2fs\

    cryptsetup\

    wget git

接下来,我们必须安装Go。首先,使用以下内容设置版本和架构:

export GOVERSION=1.19.1 OS=linux ARCH=amd64

下载必要的文件:

wget-O/tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz \n

https://dl.google.com/go/go${GOVERSION}.${OS}-${ARCH}.tar.gz

使用以下工具解压缩并移动下载的文件:

sudotar-C/usr/local-xzf/tmp/go${GOVERSION}.${OS}-${ARCH}.tar.gz

使用以下两个命令将Go可执行文件添加到用户的PATH:

echo’export PATH=$PATH:/usr/local/go/bin’>>~/.bashrc

source~/.bashrc

我们现在需要安装golangcli lint工具:

curl-sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \n

|sh-s—b$(go env GOPATH)/bin v1.43.0

使用以下命令将此添加到PATH:

echo’export PATH=$PATH:$(go env GOPATH)/bin’>>~/.bashrc

source~/.bashrc

克隆Apptainer Repo并安装

搞定了依赖关系,我们现在可以克隆Apptainer存储库并安装软件。

使用以下内容克隆存储库:

git clone https://github.com/apptainer/apptainer.git

使用以下命令切换到新创建的目录:

cd apptainer

使用以下工具查看最新版本:

git checkout v1.1.0-rc.3

请查看发布页面,以确保使用的是最新版本。

使用以下命令运行配置脚本:

1./mconfig

切换到生成目录:

cd ./builddir

使用以下命令编译Apptainer:

make

完成上述命令需要相当长的时间(最多10分钟)。在某种程度上,你可能认为它已经停滞不前了。不要着急,远离[Ctrl]+[C]键盘快捷键,以便完成安装。

make命令完成后,使用以下命令安装Apptainer:

sudo make install

安装过程完成后,你可以使用以下命令查看Apptainer版本,以验证一切是否按计划进行:

apptainer –version

你应该在输出中看到类似以下内容:

apptainer version 1.1.0-rc.3

Apptainer已安装并准备就绪。

如何使用Apptainer部署容器

现在,让我们用Apptainer部署Hello World容器。为此,我们将使用以下命令从Singularity hub下拉hello-world应用程序:

1singularity pull shub://singularityhub/hello-world

然后,你应该会在该目录中看到一个新文件,名为:

1hello-world_latest.sif

要运行应用程序,请发出以下命令:

./hello-world_latest.sif

应用程序将输出:

Tacotacotaco

你还可以使用以下命令运行容器:

apptainer run hello-world_latest.sif

如果你想使用Ubuntu 20.04作为容器,可以用:

apptainer pull docker://ubuntu:latest

拉取后,你可以从容器内运行命令,如下所示:

apptainer exec ubuntu_latest.sif cat /etc/os-release

你应该在输出中看到以下内容:

NAME=”Ubuntu”

VERSION=”20.04.5 LTS (Focal Fossa)”

ID=ubuntu

ID_LIKE=debian

PRETTY_NAME=”Ubuntu 20.04.5 LTS”

VERSION_ID=”20.04″

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”

VERSION_CODENAME=focal

UBUNTU_CODENAME=focal

这就是如何开始使用Apptainer容器部署系统。对于任何希望从部署中获得更多安全性的容器管理员来说,这是一个很好的选择。

© 版权声明
THE END