第2章:Singularity安装——从系统准备到版本校验
说到在Linux上装Singularity,我早期踩过的坑真不少。最典型的,你以为是网络问题,结果发现是内核版本太老,老老实实升级内核后才跑通。这一章,咱们就把系统要求、安装过程和版本验证这三步一次性搞定。
安装流程一览
下面这张图概括了本章的核心逻辑,建议你先扫一眼,再逐节深挖。
2.1 系统要求
Singularity对Linux系统的要求其实不算高,但有几个硬门槛。我在项目中遇到过有人直接下源码编译,结果make到一半报错,一查内核版本才3.8。说白了,内核版本必须≥3.10,否则OverlayFS支持不了。
- 内核版本:建议 ≥3.10,推荐4.x以上
- 容器支持:OverlayFS(默认)或AUFS/其他
- 架构:x86_64, ARM64(aarch64)
- 依赖:golang(编译时)、squashfs-tools、libseccomp
uname -r 看一眼,别急着装。
2.2 安装方式对比
Singularity的安装方法主要有两种:直接装和从源码编译。我自己习惯编译安装,这样版本和特性都能自己掌控。下面这个表格可以帮你快速决策。
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 直接安装(rpm/deb) | 快速、接口统一 | 版本滞后、缺少编译开关 | 快速验证、个人学习 |
| 源码编译 | 定制化强、获取最新特性 | 耗时稍长、需安装golang | 生产环境、集群部署 |
2.3 直接安装(以Ubuntu为例)
直接安装是最快的,但有个前提——你得确认你的包管理器里有Singularity。不过我得提个醒,直接安装虽然省事,但容易遇到版本太老的问题。下面是基本的操作。
# 更新包索引
sudo apt update
# 安装Singularity(如果仓库里有)
sudo apt install singularity-container
装完之后可以马上跑一下版本校验。如果仓库里没有,你可以自己添加源,不过我个人不建议这么做——添加第三方的源往往还要解决额外的依赖问题,不如直接编译。
2.4 从源代码编译安装
这才是正经的生产环境玩法。Singularity是用Go语言写的,所以你得先装好Go环境。我个人习惯把版本控制在官方推荐的范围内,避免不必要的编译错误。
第一步:安装依赖
# Ubuntu/Debian
sudo apt install -y build-essential libssl-dev uuid-dev libgpgme-dev squashfs-tools libseccomp-dev wget pkg-config git cryptsetup
# CentOS/RHEL
sudo yum install -y epel-release
sudo yum install -y golang libseccomp-devel squashfs-tools git wget
第二步:下载并编译
# 克隆代码仓库
git clone https://github.com/sylabs/singularity.git
cd singularity
# 切换到稳定版本(比如v4.0.1)
git checkout v4.0.1
# 配置并编译(我习惯把安装目录放到/usr/local)
./mconfig --prefix=/usr/local
make -C ./builddir
sudo make -C ./builddir install
编译的时候注意观察终端输出,特别是golang的版本。如果机器上golang太老,会直接报版本不兼容。我记得有一次编译花了将近十分钟,结果因为Go版本不对,白编译了——从那之后我每次都先跑 go version 检查一下。
2.5 版本验证
装完之后第一件事就是看有没有正确安装。命令很简单:
singularity version
如果输出类似于 4.0.1,恭喜,你装对了。但如果出现 command not found,别急,可能是环境变量没设置好。可以检查一下:
which singularity # 看看是不是在PATH里
echo $PATH # 检查/usr/local/bin有没有在PATH中
我建议在安装前提前确认你的PATH包含 /usr/local/bin,不然编译装进去了但调不了,白费劲。
还有一个容易忽略的点:版本验证时,Singularity会输出自身的版本号和构建信息。你最好拿输出的版本号和官方GitHub上的标签核对一下,防止包校验和不对。我在生产环境里遇到过两次二进制不完整的情况,后来就养成了校验GPG签名或比对外部托管的checksum的习惯。
2.6 常见问题与避坑
- 内核不支持OverlayFS:Singularity默认用OverlayFS来做容器分层。如果内核太老,可以用
--overlay参数切换成其他后端,但我建议直接升级内核。 - Go版本不满足条件:Singularity要求Go ≥1.16。如果系统自带的老版本,可以考虑用
g或者snap安装新版Go。 - 用户权限不够:Singularity在编译时需要用root权限来安装二进制文件和squashfs工具。如果你是普通用户,建议用
sudo或者在root环境下操作。
2.7 安装方式总结
| 方式 | 命令/步骤 | 快速确认 |
|---|---|---|
| 直接安装 | apt install singularity-container |
singularity version |
| 源码编译 | ./mconfig && make -C builddir && sudo make install |
singularity version |
好了,到这里Singularity的安装和版本验证就完成了。你手头应该已经有了一个可用的Singularity环境。下一阶段就可以开始制作容器了,不过在那之前,你想想看,是不是还有个很重要的东西没配?对,就是用户权限和缓存目录的设置,这些细节会在后面的章节细讲。
/opt/singularity),这样多节点可以直接调用。离开这一步,后面的Visium环境配置可能会卡在路径不一致上。我曾在多个集群上部署,踩够了路径不一致的坑,后来就统一用环境模块(environment modules)来管理了。