Apptainer 1.4.5 在 Linux 的安装与功能验收

Apptainer 面向科学计算和共享计算环境,让用户把应用及其用户空间依赖打包成容器。安装是否可用,除了软件包版本,还取决于内核、用户命名空间和存储位置。本文依据 Apptainer 1.4 管理员文档整理 Linux 正式发行包的安装路径,并把“命令存在”“能运行容器”和“具备特定功能”分开检查。

版本与范围:原页明确使用 1.4.5。本篇保留这个版本作为可核对的文档基线;仓库、EPEL 和 PPA 的当前候选版本可能不同。本文未执行安装、拉取镜像或测试套件,不把文档示例输出当成本次实测。源码编译、main 分支一键脚本、Windows/macOS 和 Docker 嵌套运行不在本篇范围内。

Apptainer 安装流程:检查 Linux 内核与本地存储,选择非 setuid 或经评估的 setuid 正式软件包,再分别检查版本、容器运行和构建路径。
Linux 安装与验收的三个层次。示意图:未完纪整理绘制,不是运行截图。

先确认内核条件,避免装好以后才发现功能受限

文档给出的已安装空间约为 200 MiB,运行时没有统一的 CPU 或内存下限;“至少 2 GB 内存”是源码构建建议,不能据此估算实际工作负载的内存需求。完整功能需要以下内核能力:

能力 作用与边界
FUSE 用于挂载 SIF、部分 OverlayFS 回退和 ext3 overlay。Apptainer 不使用 fusermount,但捆绑的 FUSE 程序使用 fuse3 库;setuid 模式要求该库至少为 3.3.0。
非特权用户命名空间 不借助 root 或 setuid 运行容器的基础。内核最低为 3.8,文档建议至少 4.18,以支持非特权 FUSE 挂载。发行版或管理员的安全策略仍可能禁用这项能力。
OverlayFS 用于可写 overlay 和创建缺失的绑定挂载点。内核最低为 3.18,建议至少 5.11;后者支持非特权 overlay。内核驱动不适用时,Apptainer 会回退到 fuse-overlayfs。

这些版本是原文列出的功能条件,不是建议安装旧内核。还应按发行版支持周期、补丁状态和站点策略核验主机。选择 setuid 安装前,应一并阅读官方的 用户命名空间说明;“多装一个包”会改变提权边界。

临时目录、缓存与网络文件系统各管不同的事

优先把 TMPDIR 或 APPTAINER_TMPDIR 放在容量足够的本地文件系统,把 Apptainer 安装到每个节点的本地盘。若程序必须装在共享位置,挂载会话使用的 LOCALSTATEDIR、SESSIONDIR 仍应处于本地、非共享存储;源码构建时可用 --localstatedir 调整。该目录用于构造运行时挂载视图,原文说明占用空间很小,但其中的会话目录必须事先存在。

OverlayFS 的 lowerdir 是容器基础层,upperdir 是覆盖在其上的可写层。文件系统支持“能读 SIF”不等于支持“能把目录当可写 overlay”。NFS 上的 SIF 可正常使用,但 NFS 不能作为可写目录 overlay 的 upperdir;构建或使用带 UID/GID 映射的 fakeroot 时,不要把临时目录或 sandbox 放在 NFS。Lustre、GPFS、PanFS 的目录 overlay 会遇到内核驱动限制,相关路径可能使用 fuse-overlayfs;这些网络文件系统的 fakeroot 映射同样需要特别检查。可先用 SIF,避免把 sandbox 的额外限制误判成安装失败。

默认缓存位于 $HOME/.apptainer/cache,可以通过 APPTAINER_CACHEDIR 改位置。缓存应每用户独立、空间充足,并尽量支持原子重命名;不要让多个用户共用一个缓存。网络文件系统的原子性未必跨客户端成立。无法确认时,先用 apptainer pull 生成本地 SIF,再在并行作业中使用它;--disable-cache 也能避开共享缓存问题,但会使每个实例单独下载。

选择适合发行版的正式软件包

以下命令供管理员在已核验的 Linux 主机上参考,均未实际执行。安装会修改系统软件包;本文去掉了原文的自动确认 -y,让依赖和变更列表可见。默认先考虑非 setuid 包,只有功能需求和安全策略明确时再选择 setuid。

RHEL 系及 Fedora

RHEL 衍生系统先启用 EPEL,然后安装包;Fedora 不需要照搬启用 EPEL 的步骤:

# 仅用于需要启用 EPEL 的 RHEL 衍生系统
sudo dnf install epel-release

# 非 setuid 安装
sudo dnf install apptainer

发行版仓库支持多种架构,但候选版本取决于仓库。如果需要重现文档中的 1.4.5,原文还提供 GitHub release 的 x86_64 RPM:

sudo dnf install https://github.com/apptainer/apptainer/releases/download/v1.4.5/apptainer-1.4.5-1.x86_64.rpm

需要 setuid 时,仓库路径使用 apptainer-suid;release RPM 路径是在主包安装后另装 apptainer-suid-1.4.5-1.x86_64.rpm。不要为了让一条验收命令通过而盲目增加 setuid 权限。下载地址指向固定版本,但 HTTPS 和固定文件名不能代替对发布者、发行包签名或可用校验信息的检查。

Debian 11/12 与 Debian 13

原文的 Debian 预构建包仅提供 amd64。11/12 使用普通后缀,13 使用 trixie+ 后缀,不能混装。下面把原文共享 /tmp 改为新建的私有临时目录,减少文件同名覆盖和替换风险:

sudo apt update
sudo apt install wget
work_dir="$(mktemp -d)"
chmod 700 "$work_dir"
cd "$work_dir"

# Debian 11 或 12;不要同时执行下面的 Debian 13 分支
wget https://github.com/apptainer/apptainer/releases/download/v1.4.5/apptainer_1.4.5_amd64.deb
sudo apt install ./apptainer_1.4.5_amd64.deb

Debian 13 在同样的准备步骤后,改用这一组:

wget https://github.com/apptainer/apptainer/releases/download/v1.4.5/apptainer_1.4.5-trixie+_amd64.deb
sudo apt install ./apptainer_1.4.5-trixie+_amd64.deb

setuid 的附加包名称相应为 apptainer-suid_1.4.5_amd64.deb 或 apptainer-suid_1.4.5-trixie+_amd64.deb,仍须先安装匹配的主包。原文为附加包使用 sudo dpkg -i;它不会像 apt 那样自动解决所有依赖,遇到问题先检查包版本与依赖,不要通过放宽文件权限解决。

Ubuntu

原页提供 Apptainer PPA,列出的架构为 amd64 和 arm64。Ubuntu 容器若缺少 add-apt-repository,先安装 software-properties-common;桌面或服务器安装通常可以跳过这项准备。

sudo add-apt-repository ppa:apptainer/ppa
sudo apt update
sudo apt install apptainer

添加 PPA 是增加软件供应链信任关系。先确认目标 Ubuntu 版本仍受支持,并查看实际候选版本;这组命令没有锁定 1.4.5。原文的 setuid 分支将最后一个包名改为 apptainer-suid。

把功能验收拆成三步

第一步检查实际版本,不依赖文件名猜测:

apptainer --version
apptainer buildcfg

buildcfg 用于核对构建配置和路径。重点看 PACKAGE_VERSION、APPTAINER_CONFDIR、APPTAINER_CONF_FILE、LOCALSTATEDIR、SESSIONDIR 及 APPTAINER_SUID_INSTALL。发行包的路径可能不同于原文源码安装输出的 /usr/local,不能把文档中的个人构建目录复制到配置中。

第二步,在隔离验收环境运行简单容器。原文命令如下,它会访问远程镜像源并执行容器中的程序:

apptainer exec docker://alpine cat /etc/alpine-release

原文展示的 3.9.2 是历史示例,不是今天应期待的结果;alpine 未固定标签和摘要,内容会变化。正式验收应使用团队已核验并固定摘要的镜像,记录解析后的镜像身份、返回码与实际输出。容器可能看到绑定进来的主机路径,因此本步骤应在不含个人文件、凭证和生产挂载的专用环境完成。本次没有执行它。

第三步,针对实际用途分别验收:例如共享文件系统上的读写、overlay、fakeroot 或 GPU。最简单的 Alpine 命令通过,只说明该路径下的一次基础执行成功,不能推出所有功能均可用。Nix/Guix 与系统 GPU 库混用时,还要检查 apptainer.conf 的 binary path,使主机 ldconfig 的目录排在替代工具和用户 PATH 之前。

测试套件不是生产环境的验收捷径

源码目录的 make check、make unit-test、make integration-test 和 make e2e-test 分别覆盖静态检查、单元、集成及端到端场景。完整套件需要 Docker、nc、setuid 安装和 sudo 权限;官方明确要求在隔离开发或构建环境运行,不能在生产主机上直接跑。本篇只核对这些要求,没有声称任何测试通过。

安装完成的可靠记录应包括:软件包及版本、来源、主机内核与用户命名空间状态、缓存和临时目录位置、是否启用 setuid、所用镜像摘要,以及每项实际执行的结果。这样以后迁移节点或升级时,才知道需要重验哪些条件。

来源与署名

本文为 Installing Apptainer 中 Linux 正式软件包及验收部分的中文整理。原文维护方:Apptainer project contributors;页脚同时保留“© Contributors to the Apptainer project, established as Apptainer a Series of LF Projects LLC”及“© 2017–2022, Sylabs Inc”。未确认单篇个人作者。本文未把软件许可推定为网页独立许可;示意图为本次新绘。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容