Files
apptainerce_build/README.md
2023-12-14 20:01:43 +08:00

162 lines
7.7 KiB
Markdown
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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封装原则
- 数据库,容器分离原则,降低耦合度,复用数据库。
- 编译和封装分离原则,软件编译可以在容器内也可以在容器外,编译完再安装到全新的基础镜像。
- 尽量使用编译型语言写脚本,可以减小容器体积,**PythonPerl** 等解释器也会占不少体积。
- 保持版本记录,每个镜像文件都匹配一个**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 v23debian12 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
```