module
Module 介绍¶
传统上,我们在服务器上安装软件分为两步:
- 下载软件并将其安装在服务器上;
- 在
~/.bashrc
中写入相应的环境变量,例如$PATH
,$LD_LIBRAPRY_PATH
等。
软件数量较少时可能并不会出现什么问题,但当使用的软件很多,很多软件又依赖大量的库,并且依赖库的版本不同时,如果还是用传统的方法在~/.bashrc
中写入这些变量,可能不同的库之间会产生严重的干扰导致软件不能使用,这时可能需要我们把~/.bashrc
中的内容一项项注释掉,直到我们需要的软件能正常运行(平台用户碰到过这种情况较多)。
这里推荐一个很好用的集群应用软件环境管理工具Module,它可以动态地更改$PATH
, $LD_LIBRARY
等环境变量,每次只引入我们需要的库文件、应用软件的相关环境变量。
module基本使用¶
使用之前我们需要知道Module中一个比较重要的文件modulefile
文件,每个软件都需要有对应的modulefile
文件,里面定义了该软件所需要的所有环境变量、软件说明、依赖的其他软件和库文件等,需要使用该软件时,我们用相关命令载入该modulefile文件,即可载入该软件的所有环境变量、依赖软件和库文件等。下面是module常用的一些命令:
module available
odule av
简写来代替,同时module av
支持模糊搜索,例如module av m
会列出所有以m开头的软件 module load modulefile
module unload modulefile
module purge
module list
module show modulefile
module swith|swap [modulefile_old][modulefile_new]
在实验室集群中使用module¶
我在software帐号下预装了一些常用的软件,大家可以在自己的~/.bashrc
内写入基本的配置,即可使用module来引用预装好的各种软件。
- 将下面高亮为黄色部分的代码写在所有其它用户自己写入的变量之前,注意要在那3行系统自带
if
语句之后,否则会有异常;
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
export LD_LIBRARY_PATH=""
export LIBRARY_PATH=""
export MANPATH=""
export INCLUDE=""
export FPATH=""
export CPATH=""
export MKLROOT=""
export MIC_LD_LIBRARY_PATH=""
export NLSPATH=""
export PATH="/public/home/software/opt/moudles/Modules/3.2.10/bin/:/opt/ibm/lsf/10.1/linux3.10-glibc2.17-x86_64/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin"
source /public/home/software/opt/moudles/Modules/3.2.10/init/bash
- 当需要使用SOAPdenovo2时,我们可以先用
module list
查看一下目前的环境中是否加载了SOAPdenovo2,如果没有,则首先通过module av S
来搜索SOAPdenovo2的modulefile
文件;
$ module av
--------------------------------------------- /public/home/software/opt/bio/modules/all/ ----------------------------------------------
ABySS/1.9.0-foss-2016b Java/1.8.0_92
ALLPATHS-LG/52488 JUnit/4.12-Java-1.8.0_92
Anaconda2/4.0.0 libevent/2.0.22-foss-2016b
ant/1.9.7-Java-1.8.0_92 libffi/3.2.1-foss-2016b
argtable/2.13-foss-2016b libjpeg-turbo/1.5.0-foss-2016b
augustus/2.7 libpng/1.6.23-foss-2016b
augustus/3.2.7 libreadline/6.3
Autoconf/2.69-foss-2016b libreadline/6.3-foss-2016b
Automake/1.15-foss-2016b LibTIFF/4.0.6-foss-2016b
Autotools/20150215-foss-2016b libtool/2.4.6-foss-2016b
BamTools/2.4.0-foss-2016b libunwind/1.1-foss-2016b
BamUtil/1.0.13-foss-2016b libxml2/2.9.4-foss-2016b
BCFtools/1.3-foss-2016b log4cplus/1.1.2
BEDTools/2.26.0-foss-2016b log4cplus/1.1.2-foss-2016b
BFAST/0.7.0 Lua/5.1.4-8
binutils/2.26 M4/1.4.17
binutils/2.26-GCCcore-5.4.0 M4/1.4.17-foss-2016b
binutils/2.27 M4/1.4.17-GCCcore-5.4.0
binutils/2.27-GCCcore-6.2.0 M4/1.4.17-GCCcore-6.2.0
BioPerl/1.6.924-foss-2016b-Perl-5.22.1 maker/2.31.9
Bison/3.0.4 MaSuRCA/3.2.1
Bison/3.0.4-foss-2016b MATLAB/2015a
Bison/3.0.4-GCCcore-5.4.0 METIS/5.1.0-foss-2016b
- 通过第二步,我们得知SOAPdenovo2的
modulefile
文件为SOAPdenovo2/r240-foss-2016b
,此时我们可以使用module load SOAPdenovo2/r240-foss-2016b
命令来加载SOAPdenovo2的所有环境变量; - 如果不再需要使用SOAPdenovo2,我们可以使用
module unload SOAPdenovo2/r240-foss-2016b
命令来卸载所有SOAPdenovo2相关的环境变量。如果我们一次加载了很多软件,我们可以使用module purge
来卸载所有软件的环境变量。
自定义modulefile文件¶
有时我们需要用的软件在系统上没有预装,此时,我们可以将此软件安装在用户自己的目录下,然后自定义modulefile
文件来通过module来加载自己安装的软件。以sratoolkit为例,具体步骤如下:
- 建立一个目录用于放置所有自定义的
modulefile
文件;
mkdir ~/.modulefiles
- 运行
module use ~/.modulefiles
命令,使得module av, module load
可以搜索、加载~/.modulefiles
目录下的modulefile
文件(其实该命令的作用是将~/.modulefiles
加入到$MODULEPATH
变量中)。为了保证长期可用,建议将改命令写入到~/.bashrc
文件中;
module use ~/.modulefiles
- 在
~/.modulefiles
创建目录sratoolkit:mkdir sratoolkit
,编辑一个以该软件版本为名字的文件:vim 2.5.7
,文件内容如下(内容比较简单,更复杂的例子可以查看官网);
#%Module
set root /public/home/software/opt/bio/software/sratoolkit/2.5.7
conflict sratoolkit
prepend-path PATH $root/bin
- 保存退出后,运行module av 即可以看到sratoolkit的
modulefile
文件sratoolkit/2.5.7
,需要使用时运行命令:module load sratoolkit/2.5.7
,就可以使用该软件了。
module load sratoolkit/2.5.7
有些软件安装完后,通过 source xxx.sh
的方式导入环境变量,可以这么写 modulefile
,如 intel parallel studio
#%Module
set scriptpath "/public/software/intel/2018.1/compilers_and_libraries_2018.1.163/linux/bin"
switch -- [module-info shelltype] {
sh {
source-sh bash $scriptpath/compilervars.sh intel64
}
csh {
source-sh tcsh $scriptpath/compilervars.csh intel64
}
}
append-path INTEL_LICENSE_FILE "/public/software/intel_parallel_studio/licenses"
注意事项¶
有的用户自己的~/.bashrc
等文件内有自己写入的环境变量,使用module载入系统装好的软件时,载入的环境变量可能会与自己已有的环境变量产生冲突,导致载入的软件不可用,此时需要注释掉自己的环境变量。典型例子,载入需要perl支持的软件时如RepeatMasker,如果自己的用户环境内已经有了perl相关的环境变量,可能会因为两个不同版本的perl之间的冲突导致软件不可用,此时需要注释自己的perl的相关环境变量。
本站总访问量 次