原创

【拒绝Conda】Linux使用Modules管理软件

温馨提示:
本文最后更新于 2024年03月02日,已超过 56 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

背景

在生信分析中,我们常有不同的任务需要处理,使用到的软件也多到数不胜数,多数小伙伴,使用到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/

下载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
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了。
非常方便。


写在最后:有时间我们会努力更新的。大家互动交流可以前去论坛,地址在下面,复制去浏览器即可访问,弥补下公众号没有留言功能的缺憾。

bioinfoer.com

有些板块也可以预设为大家日常趣事的分享等,欢迎大家来提建议。

正文到此结束
本文目录