用singularity来管理软件

作者: Bioinfor生信云 | 来源:发表于2023-01-07 19:19 被阅读0次

    背景

    生物信息中的分析流程往往需要消耗很大的内存,读写以TB计算的数据,属于典型的高性能计算(HPC)应用。生信分析流程中要调用大量的分析程序以及内部开发脚本,环境的配置与管理极为复杂,可重复性低,导致流程的升级、管理、迁移成为大难题。

    现有的IT技术中其实有解决以上问题的方法,如Docker。然而生信分析集群和普通的IT服务器又有很大区别,如开发人员无root权限,分析任务需要进行资源管理(内存,CPU)。这些问题都让Docker技术在HPC环境的应用受限,Singularity因此应运而生。

    容器技术是一种以应用软件为中心的虚拟化技术。以应用软件为单元,将软件及所有的依赖打包成容器镜像,打包后的容器镜像可直接拷贝到不同的Linux主机上运行。通过容器技术,可以很好的解决安装软件时,依赖库的安装问题、软件环境的隔离以及软件环境的移植问题。

    singularity的安装和使用

    安装

    安装依赖

    sudo apt-get update && sudo apt-get install -y \
    build-essential \ 
    uuid-dev \ 
    libgpgme-dev \ 
    squashfs-tools \ 
    libseccomp-dev \ 
    wget \
    pkg-config \ 
    git \ 
    cryptsetup-bin
    

    安装GO语言

    下载地址:https://golang.org/dl/

    wget https://golang.org/dl/go1.14.12.linux-amd64.tar.gz #下载
    tar -C /pub/software -xzvf go1.14.12.linux-amd64.tar.gz #解压
    rm go1.14.12.linux-amd64.tar.gz #删除安装包
    

    添加到环境变量

    echo 'export PATH=/pub/software/go/bin(你的路径):$PATH' >> ~/.bashrc
    

    下载singularity

    下载地址:https://github.com/hpcng/singularity/releases

    wget https://github.com/hpcng/singularity/releases/download/v3.7.2/singularity-3.7.2.tar.gz
    tar -xzf singularity-3.7.2.tar.gz #解压
    cd singularity
    

    安装singularity

    ./mconfig
    cd builddir
    make
    sudo make install
    

    记得添加到环境变量
    没有出现报错信息就不用管提示

    快速上手

    下载镜像

    可以从 Container Library(https://cloud.sylabs.io/library

    例如:singularity pull library://cenat/default/blast.sif:latest
    

    or Docker Hub(https://hub.docker.com/)下载images。

    例如:singularity pull docker://ncbi/blast
    
    singularity pull --arch amd64 library://library/default/ubuntu:20.04
    

    创建沙箱

    刚下载下来的ubuntu_20.04.sif 只是一个纯净的系统,我们需要创建一个沙箱,给里面装软件。

    singularity build --sandbox blast ubuntu_20.04.sif
    

    进入容器

    默认会自动挂载HOME,PWD , /tmp , /proc , /sys , /dev 目录。

    singularity shell --writable --fakeroot blast
    

    在容器中安装软件,建议不要使用anaconda 安装,而是手动安装,我们要尽量保持容器轻量。

    添加环境变量

    退出容器后, 在blast/environment 中添加PATH

    vi blast/environment
    #!/bin/sh
    # Custom environment shell code should follow 
    export PATH=/opt/ncbi-blast-2.10.1+/bin:$PATH
    

    打包

    软件全部安装完成之后将容器打包

    singularity build blast.sif blast
    

    运行程序

    singularity exec blast.sif  blasp XXX 后面接软件的用法
    

    运行容器

    交互式运行

    singularity shell blast.sif bash
    

    直接运行

    singularity exec blast.sif blastp
    

    用户和权限

    使用容器不得不考虑安全性,安全性来自两个方面,一个是使用了不被信任的容器,这个就像你在电脑上安装了不被信任的软件一样,Singularity提供了签名机制来验证;另一方面是容器会不会越权对Host 做一些不该做的事情,这个是需要考虑的。

    singularity 的解决办法是会在容器内动态创建一个用户,该用户与Host里的用户名、组名、权限等都保持一致。这样你在Host 中做不了的事情,在容器里也干不了。

    欢迎关注Bioinfor生信云!

    相关文章

      网友评论

        本文标题:用singularity来管理软件

        本文链接:https://www.haomeiwen.com/subject/lvjjcdtx.html