0%

使用Singuarity制作Samtools容器

  Samtools是一套用于处理高通量测序数据的程序集,是生信分析中的重要软件。下面将介绍如何使用Singularity制作一个Samtools容器,方便跨系统、跨用户使用Samtools,保证生信分析环境的一致性。

本文 Singularity 基础环境为 Ubuntu 22.04 LTS。另外,Singularity 虽然可以使用 yml 文件或 def 文件直接构建新容器,不过我更喜欢的是使用沙盒模式制作新容器。沙盒模式可操作性更强,也方便解决安装过程中的各种问题。而且沙盒模式下安装软件与在Linux中安装软件的过程一致,减少了不必要的学习成本。因此沙盒模式对于偶尔制作新容器的用户会是一个更具有性价比的选择。
  1. 首先下载一个Singularity基础容器,或者去官网下载一个你喜欢的基础容器:

    1
    2
    # 拉取基础Ubuntu容器
    singularity pull library://library/default/ubuntu
    下载好的基础容器建议直接存起来,方便以后使用。

  2. 使用基础容器生成沙盒:

    1
    2
    # 构建沙盒容器
    singularity build --sandbox samtools/ ubuntu_latest.sif

  3. 制作一个Samtools的安装文件,这里命名为SamtoolsInstall.sh。本文使用了编译安装方法,另外还可以使用Conda直接安装Samtools:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    set -e
    # 更新apt
    apt update

    # 安装samtools依赖项
    apt-get install -y zlib1g-dev
    apt-get install -y libbz2-dev
    apt install -y liblzma-dev
    apt-get install -y libncurses5-dev

    # 安装工具
    apt install -y wget
    apt install -y bzip2
    apt-get install -y gcc
    apt-get install -y make

    # 下载samtools
    wget https://github.com/samtools/samtools/releases/download/1.19/samtools-1.19.tar.bz2
    # 解压samtools到/opt,/opt文件夹中可以存放第三方软件
    tar -jxvf samtools-1.19.tar.bz2 -C /opt
    # 进入samtools文件夹
    cd /opt/samtools-1.19
    # 生成Makefile。configure命令会检查系统的库、头文件、依赖关系和其他必要的信息,然后生成一个Makefile
    ./configure --prefix=/opt/samtools-1.19
    # 编译
    make
    # 安装
    make install
    # 添加环境变量到singularity容器
    echo 'export PATH="/opt/samtools-1.19/bin:$PATH"' >> /.singularity.d/env/10-docker2singularity.sh

    # 删除不必要的软件和缓存文件,精简singularity容器大小
    apt remove -y wget
    apt remove -y bzip2
    apt-get remove -y gcc
    apt-get remove -y make
    apt-get autoremove -y
    rm -rf /var/lib/apt/lists/*
    对于使用Conda的用户,Conda安装Samtools会是一个更好的选择。这里由于要制作Singularity容器,为了尽量减少最终容器的体积,才会选择编译安装。上述命令对于在Ubuntu上编译安装Samtools也是完全适用的,不过最后的删除软件和缓存文件的命令就不要执行了。另外,添加Samtools到环境变量的方法也需要调整为常规Ubuntu方法。

  4. 调用沙盒执行SantoolsInstall.sh:

    1
    2
    3
    4
    # 在沙盒内安装Samtools
    singularity exec --writable samtools/ sh SamtoolsInstall.sh
    # 测试Samtools
    singularity exec samtools/ samtools --help
    还可以采用shell方式调用沙盒,这样就可以像操作Linux一样在沙盒内操作:
    1
    2
    # 进入沙盒
    singularity shell --writable samtools/

  5. 将沙盒打包为静态SIF文件:

    1
    2
    3
    4
    # 生成静态SIF文件
    singularity build samtools.sif samtools/
    # 测试Samtools
    singularity exec samtools.sif samtools --help

至此,Samtools容器就已经制作好啦,可以使用静态SIF文件执行Samtools,也可以将静态SIF分享到需要的地方。

参考文档:

  1. 转录组学习之samtools软件[学习笔记通俗易懂版]
  2. SAMtools-为什么它是生物信息学必备工具?
  3. Linux configure命令精通
  4. Linux 将conda虚拟环境打包并集成到singularity镜像中