背景
在生信分析中,我们常有不同的任务需要处理,使用到的软件也多到数不胜数,多数小伙伴,使用到conda创建虚拟环境,用起来也算方便,但使用久了,目录文件繁多不说,有时候也会出现意想不到的bug,网络错误或是依赖冲突等。
今天给大家带来的是一款更加优秀的软件管理工具,简单来说就是加载了就添加软件的路径到你的环境变量中去,移除了就删除该环境变量。无其余任何负担。
大概描述下具体使用场景如下:比如你已经有了conda环境1包含了软件1,2,3;conda环境2包含了软件2,3,4。此时,我们想同时使用软件1,2,3,4,要么我们在conda1中安装4或是conda2中安装1,总是要改变一个conda环境,或是新增conda环境(又要多一个conda环境目录了,不考虑)。从“一些都是文件”的概念出发:多数conda环境总是有一些重复的文件的,时间长起来,服务器上会占用很多不必要的空间。
而换到Module上,每个软件都仅出现一次,就是软件自己的目录,要用就加载。可以理解为把上述情况conda1环境拆分了conda1.1,conda1.2,conda1.3;conda2环境变为conda2.2,conda2.3,conda2.4.再合并,最后仅有conda.1,conda.2,conda.3,conda.4软件,同时使用就一起调用,因为每个软件都是手工编译好的软件目录,这样的理念更进一步。
部署步骤
1 准备
1.1 文件准备
不使用yum install,版本较老且有bug。
选择最新版本
#查看最新版本
[https://sourceforge.net/projects/modules/files/](https://sourceforge.net/projects/modules/files/)
下载5.4.0到本地
1.2 服务器准备
1.2.1 用户新增
新增sysop用户,id为2000(注意id占用,新的服务器可以1000),专用于module管理。
1.2.2 目录新增
使用root
mkdir -p /opt/tools/modules/src /opt/tools/modules/installed /opt/tools/modules/modulefiles
/opt/tools/modules/src
这里放安装包/源文件
/opt/tools/modules/installed
这里是工具安装路径
/opt/tools/modules/modulefiles
这里放 modulefiles -- 各个软件的版本文件
1.2.3 依赖检查
需要tcl>=8.5
echo puts \$tcl_version | tclsh
# 8.5
tcl-devel需要安装
首先使用 whereis 找到 tclConfig.sh 的位置:
whereis tclConfig.sh
# tclConfig:
如果没找到说明 tcl-devel 没安装, yum 安装即可:
yum -y install tcl-devel
再次查找就可以找到了:
whereis tclConfig.sh
# tclConfig: /usr/lib64/tclConfig.sh
2 安装
2.1 下载解压
本地上传到/opt/tools/modules/src
cd /opt/tools/modules/src
tar -zxvf modules-5.4.0.tar.gz
cd modules-5.4.0
2.2 编译安装
./configure --prefix=/opt/tools/modules/installed --modulefilesdir=/opt/tools/modules/modulefiles
make && make install
2.3 全局加载
因为是root环境,我们直接写入/etc/profile最后一句
source /opt/tools/modules/installed/init/profile.sh
当普通用户登入ssh,自动载入/etc/profile就可以使用module了。
3 配置软件
3.1 移交权限给sysop
前面我们提到了使用sysop用户配置,避免root使用出错
那么我们有了module目录,再建立一个软件安装目录
mkdir /share/apps/repos
repos:软件目录
/opt/tools/modules/modulefiles:module连接软件的配置目录
两个目录,我们都使用root将所有权交给sysop,后就可以退出root了
chown -R sysop:sysop /share/apps/repos
chown -R sysop:sysop /opt/tools/modules/modulefiles
exit #退出root用户
3.2 sysop示例安装
以samtools安装为例
3.2.1 下载编译
cd /share/apps/repos
mkdir samtools;cd samtools
wget [https://github.com/samtools/samtools/releases/download/1.18/samtools-1.18.tar.bz2](https://github.com/samtools/samtools/releases/download/1.18/samtools-1.18.tar.bz2)
tar -xjvf samtools-1.18.tar.bz2
mv samtools-1.18 1.18
cd 1.18
# yum install ncurses-devel ncurses #或需要root安装
./configure --prefix=/share/apps/repos/samtools/1.18
make && make install
3.2.2 添加进module
cd /opt/tools/modules/modulefiles
mkdir samtools;cd samtools
vi 1.18 #添加以下内容保存
版本文件内容如下,即让module识别到软件未知并添加进path变量的。
#%Module
module-whatis "samtools 1.18"
prepend-path PATH /share/apps/repos/samtools/1.18/bin
3.2.3 普通用户使用
我们使用 zhangsan 用户登录ssh;
#检查环境变量
$ ml av #可用的module
----------------------------------- /opt/tools/modules/modulefiles ------------------------------------
dot module-git module-info modules null samtools/1.18 use.own
Key:
modulepath
$ echo $PATH #当前环境变量
/share/home/zhangsan/.local/bin:/share/home/zhangsan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
$ ml load samtools/ #加载samtools
$ echo $PATH #改变了环境变量
/share/apps/repos/samtools/1.18/bin:/share/home/zhangsan/.local/bin:/share/home/zhangsan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
$ samtools --version #是否可用samtools
samtools 1.18
#卸载不用
$ ml rm samtools #卸载samtools
$ echo $PATH #改变了环境变量
/share/home/zhangsan/.local/bin:/share/home/zhangsan/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
$ samtools --version #是否可用samtools
bash: samtools: command not found...
后记
后续我们写脚本命令前就可以使用ml load软件了
这个时候等同了写R脚本前的library,写python时的import了。
非常方便。