162 lines
7.7 KiB
Markdown
Executable File
162 lines
7.7 KiB
Markdown
Executable File
# apptainerce_build
|
||
|
||
为了创建一个模块化、易于维护的 Shell 脚本来自动安装 Apptainer (SingularityCE 的社区版本),我们可以将脚本分为几个部分:安装依赖、安装 Go、下载和编译 Apptainer,以及卸载功能。同时,我们将使用变量来控制版本号和下载链接,使得维护和更新更加方便。
|
||
|
||
## [singularityCE](https://github.com/sylabs/singularity)
|
||
|
||
SingularityCE is the Community Edition of Singularity, an open source container platform designed to be simple, fast, and secure.
|
||
|
||
## [Apptainer](https://github.com/apptainer/apptainer)
|
||
|
||
Singularity和Apptainer是同一款软件的不同版本。Singularity是一款流行的容器技术,专为高性能计算(HPC)和数据密集型应用设计。它允许用户在单个文件中打包软件应用程序和所有相关的依赖项,以便在其他系统上无缝运行。
|
||
|
||
然而,Singularity的开发和维护是由Sylabs进行的,这是一家商业公司。在2021年,Sylabs决定将Singularity的开发转向更商业化的方向,这引发了社区的一些争议。
|
||
|
||
为了保持Singularity的开源和社区驱动的本质,Singularity的原始开发者和社区成员决定创建一个新的项目,名为Apptainer。Apptainer是Singularity的一个分支,其目标是继续开发和维护一个完全开源和社区驱动的容器技术。
|
||
|
||
总的来说,Singularity和Apptainer都是相同的容器技术,只是由于开发和维护的策略差异,导致了两个不同的项目。
|
||
|
||
## [Singularity](https://github.com/sylabs/singularity)和[Apptainer](https://github.com/apptainer/apptainer) 区别
|
||
|
||
SingularityCE (Community Edition): 这是 Singularity 的社区版,由社区维护和开发。
|
||
|
||
Apptainer: 原名 Singularity,现在作为 Linux Foundation 的一部分进行维护。Apptainer 是 Singularity 的新名字,标志着项目的新开始。
|
||
|
||
### 许可证
|
||
|
||
两者都使用 3-clause BSD license。这意味着两个项目在许可证方面是相同的,都提供了广泛的自由度和灵活性,同时要求保留版权声明和免责声明。
|
||
|
||
### 功能和设计
|
||
|
||
根据您提供的描述,SingularityCE 和 Apptainer 在功能和设计上没有显著区别。它们都强调:
|
||
|
||
不可变的单文件容器镜像格式,支持加密签名和加密。
|
||
|
||
默认实现集成而非隔离,方便在集群或服务器上使用 GPU、高速网络和并行文件系统。
|
||
|
||
计算的可移植性,单文件 SIF 容器格式便于传输和共享。
|
||
|
||
简单有效的安全模型,容器内外用户身份一致,不会默认获得主机系统上的额外权限。
|
||
|
||
### 性能和源码差异
|
||
|
||
性能:由于两者在设计和功能上非常接近,预期在性能方面不会有显著差异。它们都针对高性能计算 (HPC) 环境进行优化。
|
||
|
||
源码差异:虽然基本功能相似,但随着时间的推移,Apptainer 可能会引入新的特性或优化,这可能会导致源码上的一些差异。详细的源码差异需要通过对比两个项目的代码库来具体分析。
|
||
|
||
### 结论
|
||
SingularityCE 和 Apptainer 本质上是同一个项目的不同阶段和名称。Apptainer 作为项目的最新形态,可能会包含最新的特性和修复。
|
||
|
||
如果您需要最新的更新和社区支持,建议使用 Apptainer。如果您依赖于 Singularity 的特定历史版本,或者需要与旧项目保持兼容性,可能需要参考 SingularityCE。
|
||
|
||
在实际使用中,您可能不会感受到显著的性能差异,但最好关注 Apptainer 的更新和变更,以了解任何新引入的功能或改进。
|
||
|
||
### Apptainer封装原则
|
||
|
||
- 数据库,容器分离原则,降低耦合度,复用数据库。
|
||
|
||
- 编译和封装分离原则,软件编译可以在容器内也可以在容器外,编译完再安装到全新的基础镜像。
|
||
|
||
- 尽量使用编译型语言写脚本,可以减小容器体积,**Python,Perl** 等解释器也会占不少体积。
|
||
|
||
- 保持版本记录,每个镜像文件都匹配一个**Definition**文件,里面能标注准确标注版本号就尽量标注。
|
||
|
||
- 如果需要使用 **conda**,选择 **micromamba。**
|
||
|
||
首先,生物信息数据分析属于 **HPC** 计算范畴,很适合集群环境,容器可以隔离每个软件的运行环境,让不同软件拥有独立的依赖关系,其实 Conda 也可以做到环境的隔离,但是 **conda** 有其自身的问题,这里不讨论。可以选择 **Docker**(https://www.docker.com/) 或者 **Apptainer**(https://apptainer.org/,先前叫 Singularity ), 根据文章标题可以看出,最后推荐 **Apptainer**,几点好处:
|
||
|
||
- 可以生成单一的 **sif** 文件,方便直接以文件的形式部署和分享,在服务集群上各个节点可以直接调用容器。
|
||
|
||
- 可以直接使用 **DockerHub** 的 镜像生成 **sif** 文件
|
||
|
||
- 使用 **alpine** 直接使用编译后的文件,可以将镜像文件做的很小,接近 **2M** 左右。
|
||
|
||
- 创建和使用容器不再需要管理员权限。
|
||
|
||
|
||
几点心得:
|
||
|
||
- 尽量使用国内镜像。
|
||
|
||
- 构建本地的 **HTTP** 服务器,保证构建镜像构建过程稳定。
|
||
|
||
- 非通用的数据库,数据库可以考虑和容器打包放在一起,版本也好控制。
|
||
|
||
- 一些软件可能不无法在 **alpine** 基础进行安装成功,比如 **BLAST**
|
||
|
||
- 推荐 **Rocky Linux 9.2** 基础镜像,体积大约 **60M**
|
||
|
||
- 如果封装 **R** 程序, 可以使用 **r-base** 基础镜像库,体积比较小。
|
||
|
||
- 能用编译型编程语言写程序尽量不用解释型语言写,安装额外的语言执行环境会让容器体积变大。
|
||
|
||
- 学会自己构建镜像,**Github** 上提供的 **Dockerfile** 不一定会真的工作。
|
||
|
||
# 使用Apptainer本地镜像文件构建容器
|
||
|
||
使用本地镜像文件会出现:
|
||
|
||
1. 网络稳定性问题
|
||
2. 镜像文件太大,导致传输失败
|
||
|
||
### 基础镜像
|
||
|
||
```text
|
||
alpine https://hub.docker.com/_/alpine,体积只有 **3M**
|
||
|
||
RockyLinux https://hub.docker.com/_/rockyinux
|
||
|
||
Ubuntu https://hub.docker.com/_/ubuntu
|
||
|
||
CentOS https://hub.docker.com/_/centos
|
||
|
||
R-base https://hub.docker.com/_/r-base
|
||
```
|
||
|
||
使用 **Docker Hub** 的基础镜像无法正常构建容器,应该是 **DNS** 问题导致,这类网络导致的问题其实挺麻烦,解决的问题的最佳方案就是本地化基础镜像库。
|
||
|
||
## deepin 伪装 debian12
|
||
|
||
```shell
|
||
|
||
|
||
sudo sed -i -e 's/^ID=.*$/ID=debian/' -e 's/^VERSION_CODENAME=.*$/VERSION_CODENAME=bookworm/' /etc/os-release
|
||
|
||
# CasaOS安装成功之后,要记得还原配置文件
|
||
restore_os_release() {
|
||
sudo cp /etc/os-release.backup /etc/os-release
|
||
Show 0 "配置文件已还原"
|
||
}
|
||
|
||
```
|
||
|
||
## deepin v23(debian12 bookworm) 安装 squashfs-tools-ng
|
||
|
||
编译安装apptainer需要这个依赖但是deepin没有
|
||
|
||
[下载][https://packages.debian.org/bookworm/squashfs-tools-ng] [URL](https://packages.debian.org/bookworm/amd64/squashfs-tools-ng/download)
|
||
|
||
http://ftp.hk.debian.org/debian/pool/main/s/squashfs-tools-ng/squashfs-tools-ng_1.2.0-1_amd64.deb
|
||
http://ftp.hk.debian.org/debian/pool/main/s/squashfs-tools-ng/libsquashfs1_1.2.0-1_amd64.deb
|
||
|
||
|
||
```shell
|
||
sudo dpkg -i ./libsquashfs1_1.2.0-1_amd64.deb
|
||
sudo dpkg -i ./squashfs-tools-ng_1.2.0-1_amd64.deb
|
||
```
|
||
|
||
## apptainer build
|
||
|
||
构建前需要设置一块较大的临时目录,并赋予相关权限
|
||
|
||
```shell
|
||
export SINGULARITY_TMPDIR=/media/lingyuzeng/6567754c-15a4-4b60-9689-c8156da94524/tmp
|
||
mkdir -p /media/lingyuzeng/6567754c-15a4-4b60-9689-c8156da94524/tmp
|
||
sudo chown -R user:user /media/lingyuzeng/6567754c-15a4-4b60-9689-c8156da94524/tmp
|
||
```
|
||
|
||
构建镜像
|
||
|
||
```shell
|
||
singularity build --fakeroot ./singularity/tcrmodel2.sif ./singularity/tcrmodel2_singularity.def
|
||
``` |