4. 使用包管理器安装 Singularity
包管理器安装,是部署 Singularity 最省心的路径。你不需要操心依赖树,不用自己编译,出问题了还能一键回滚。个人习惯是:开发环境首选 apt (Debian/Ubuntu) 或 yum/dnf (RHEL/CentOS),生产环境也推荐这么做——除非你要定制底层。
这一章我们就来走一遍完整的包管理器安装流程。我会把常见的坑、版本选择的经验、还有验证步骤都放在里面。你跟着跑一遍,基本不会有意外。
4.1 为什么选包管理器?
说白了就是省事。Singularity 依赖的 Go 版本、libuuid、squashfs-tools,包管理器都会帮你搞定。我曾经在 CentOS 7 上手动编译,结果 Go 版本太老,折腾了两天。后来切回 yum 安装,十分钟完事。
包管理器安装的优势:
- 依赖自动解决:Go、libuuid、squashfs-tools 一键拉齐
- 版本锁定:可以固定到某个小版本,避免意外升级
- 卸载干净:
apt remove或yum remove一键清理 - 安全更新:发行版安全通告会覆盖 Singularity 包
- 少踩坑:编译环境不一致导致的段错误、链接错误都消失了
4.2 主流包管理器对比
目前社区支持的包管理器集中在 apt 和 yum/dnf 两大阵营。下面这张表能帮你快速选择:
| 发行版 | 包管理器 | 默认仓库版本 | 官方仓库覆盖 |
|---|---|---|---|
| Ubuntu 20.04/22.04 | apt | 3.7.x ~ 3.9.x | ✅ universe 仓库 |
| Debian 11/12 | apt | 3.7.x ~ 3.10.x | ✅ main 仓库 |
| CentOS 7 | yum | 3.5.x | ⚠️ EPEL 额外仓库 |
| RHEL 8/9 | dnf | 3.8.x ~ 3.10.x | ✅ EPEL + 官方 |
| Rocky Linux 8/9 | dnf | 3.8.x ~ 3.10.x | ✅ EPEL + 官方 |
4.3 apt 安装(Debian/Ubuntu)
这是最常用的路径。Ubuntu 20.04/22.04 和 Debian 11/12 我都跑过,流程几乎一样。
4.3.1 更新仓库索引
sudo apt update
4.3.2 安装 Singularity
sudo apt install -y singularity-container
注意包名是 singularity-container,不是 singularity。我曾经在 Ubuntu 上打 apt install singularity,结果装了一个毫不相关的科学计算工具。
安装成功标志:singularity version 能正常输出版本号。
4.3.3 验证安装
singularity version
singularity help
一般来说,输出类似 3.9.5 或 3.10.2 就对了。如果你看到报错说命令找不到,检查一下是否 sudo 成功了,或者是否装到了非 root 用户的空间里。
4.3.4 如果默认版本太旧?
Ubuntu 20.04 默认仓库可能只提供 3.7.x。如果你想用更新版本,可以添加 Sylabs 官方仓库:
# 添加 Sylabs 的 GPG 密钥
curl -s https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x06B9363851C3CEB4 | sudo apt-key add -
# 添加 Sylabs 仓库(以 Ubuntu 22.04 为例)
echo "deb https://ppa.launchpadcontent.net/singularityware/singularity-container/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/singularity.list
sudo apt update
sudo apt install -y singularity-container
apt upgrade 可能会自动升级 Singularity。如果你在生产环境,记得用 apt-mark hold singularity-container 锁定版本。
4.4 yum/dnf 安装(RHEL/CentOS/Rocky)
RHEL 系的安装稍微复杂一点,因为默认仓库里没有 Singularity,需要启用 EPEL 仓库。
4.4.1 启用 EPEL 仓库
# CentOS/Rocky
sudo yum install -y epel-release
# RHEL 需要先订阅 EPEL
sudo subscription-manager repos --enable codeready-builder-for-rhel-9-x86_64-rpms
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
4.4.2 安装 Singularity
sudo yum install -y singularity-container
或者用 dnf:
sudo dnf install -y singularity-container
包名和 apt 一样,都是 singularity-container。
4.4.3 验证安装
singularity version
singularity run help
在 CentOS 7 上,默认版本可能是 3.5.x。这个版本依然可用,但如果你需要 OCI 支持或新的 --compat 标志,建议升级到 3.8+。
4.4.4 安装特定版本(可选)
如果你想安装指定版本,可以从 Sylabs 官网下载 RPM:
# 以 CentOS 7 安装 3.10.2 为例
sudo yum install -y https://github.com/sylabs/singularity/releases/download/v3.10.2/singularity-ce-3.10.2-1.el7.x86_64.rpm
4.5 安装后的必要检查
装好了别急着用,先跑一遍基本测试,确认环境没问题。
- 检查版本:
singularity version - 检查可执行文件路径:
which singularity - 测试最基本操作:
singularity exec docker://alpine echo "Hello Singularity" - 查看帮助:
singularity --help
如果第三步报错说"docker://" 协议不支持,说明你装的是旧版本(3.5.x 或更早),需要添加 --disable-cache 或者升级。
4.6 避坑指南
- 我曾经在 Ubuntu 18.04 上直接
apt install singularity-container,结果版本是 3.1.x。那个版本存在已知的 squashfs 兼容性问题。后来我手动添加到 Sylabs 仓库才解决。 - 我曾经在 CentOS 7 上安装后,运行容器报错 "failed to mount squashfs"。原因是系统缺少 squashfs-tools。执行
sudo yum install -y squashfs-tools后正常。 - 包冲突:如果系统里之前手动编译过 Singularity,卸干净再装包管理器版。
sudo apt remove singularity-container不会自动删除手动编译的文件,需要手动rm -rf /usr/local/libexec/singularity等目录。
4.7 本章知识结构图
下面这张 SVG 图总结了包管理器安装的核心脉络:
4.8 总结
用包管理器安装 Singularity,核心就三步:选择对应发行版的包管理器 → 确认仓库源(必要时启用 EPEL 或 Sylabs 仓库)→ 安装并验证。我个人推荐优先用系统默认仓库,避免版本冲突和生产环境不稳定。如果非要追新,再考虑添加第三方仓库或 RPM 直装。
这里再提一句:安装完成后,别急着跑大任务。先跑一条 singularity exec docker://alpine echo hello,确认网络和镜像拉取都通。这一步能排除 90% 的装后问题。