Environment Modules工具介绍与使用

目录

Environment Modules工具简介

测试环境

module工具安装

module工具常用命令

测试module工具的使用


Environment Modules工具简介

在Linux环境下,当同一个软件存在多个版本且多个版本都需要在不同的场景下或给不同人员使用时,配置环境变量是一个非常繁琐的过程。Environment Modules是一个专门管理环境变量和软件版本的工具,可以通过NFS共享的方式把多个软件的多个版本安装在NFS共享目录下,通过module load等命令可以非常方便地使用不同版本的软件。Environment Modules工具在EDA领域使用非常广泛。本文介绍Environment Modules的安装和基本使用方法。按习惯叫法,后文也称其为module工具。

module工具官网地址:

Environment Modules

module工具官方文档:

Environment Modules — Modules documentation

测试环境

主机名

操作系统IP地址用途
nfsCentOS 7.9192.168.200.110

提供NFS共享目录

node01CentOS 7.9192.168.200.111

测试节点

module工具安装

1. 在nfs节点上执行以下操作,设置共享目录:

nfs_ip="192.168.200.110"
yum -y install nfs-utils.x86_64
mkdir -m 777 /software
echo "/software *(rw,sync,no_root_squash)" >> /etc/exports
systemctl enable nfs
systemctl start nfs
# 检查共享
showmount -e $nfs_ip

2. node01挂载共享目录

nfs_ip="192.168.200.110"
yum -y install nfs-utils.x86_64
mkdir -m 777 /software
mount $nfs_ip:/software /software
# 检查挂载
df -h

3. 安装module工具

module工具基于tcl(8.4以上版本)开发。module工具可以使用源码编译方式安装,也可以使用yum快速安装。module工具依赖于tcl工具,因此首先要安装tcl工具。

方法1:yum安装module工具

# yum方式安装需要在每个节点都安装tcl工具和module工具
yum -y install tcl*
yum -y install environment-modules

方法2:源码编译安装module工具(本文后续以此为基础介绍)

# 源码编译安装,把tcl工具和module工具安装在共享目录下,通过nfs挂载的方式就可以使用

# 源码编译安装tcl工具
mkdir /software/tcl
cd /software/tcl
wget --no-check-certificate https://cfhcable.dl.sourceforge.net/project/tcl/Tcl/8.5.9/tcl8.5.9-src.tar.gz
tar -zxvf tcl8.5.9-src.tar.gz
cd tcl8.5.9/unix
yum -y install gcc dejagnu
./configure --prefix=/software/tcl/
make && make install

# 源码编译安装module工具
mkdir /software/module
cd /software/module/
curl -LJO https://github.com/cea-hpc/modules/releases/download/v5.0.1/modules-5.0.1.tar.gz 
tar xfz modules-5.0.1.tar.gz
cd modules-5.0.1
./configure --prefix=/software/module --with-tcl-lib=/software/tcl/lib --with-tcl-inc=/software/tcl/include --with-tcl=/software/tcl/lib/tclConfig.sh
make && make install

安装完成之后,在/software/module目录下就有module工具了。不过在默认的$PATH路径下,是没有设置module命令路径的。需要把module工具自带的profile.sh添加到系统/etc/profile文件里,或者用软链接的方式放到/etc/profile.d/目录下,这样登录后就可以直接使用module命令了。

echo "source /software/module/init/profile.sh" >> /etc/profile
# 或者
ln -s /software/module/init/profile.sh /etc/profile.d/modules.sh
ln -s /software/module/init/profile.csh /etc/profile.d/modules.csh

module工具源码编译安装时默认会将tclsh设置为/usr/bin/tclsh,需要替换为/software/tcl下的路径:

cd /software/module/init
sed -i 's#/usr/bin/tclsh#/software/tcl/tcl8.5.9/unix/tclsh#g' $(ls) &>/dev/null

4. 编写modulefiles文件,modulefiles文件中常用关键字如下表所示:

关键字

作用

set <局部变量key> <局部变量value>

设置modulefiles文件中的局部变量

setenv <环境变量key> <环境变量value>

设置系统环境变量

prepend-path PATH <PATH路径>

将<PATH路径>添加到环境变量$PATH的最前面

set-alias <命令别名> <命令>

给当前模块设置别名

module-whatis

模块说明

如果对modulesfiles语法不太熟悉,可以先写好shell脚本,再通过module工具提供的sh-to-mod子命令转换成modulefiles格式:

module sh-to-mod <shell> <script>

例如,先写好一个bash脚本:

cat >python3.5.sh<< EOF
#!/bin/bash
prefix="/software/python/3.5"
export PYTHON_HOME="$prefix"
export MANPATH="$prefix/share/man"
export PATH="$prefix/bin:$PATH"
alias python="python3.5"
EOF

再通过module sh-to-mod命令转换成modulefiles格式:

$ module sh-to-mod bash ./python3.5.sh 
#%Module
prepend-path    PATH /software/python/3.5/bin
set-alias       python python3.5
setenv          MANPATH /software/python/3.5/share/man
setenv          PYTHON_HOME /software/python/3.5

module工具常用命令

module [options] [command]
命令用途
module avail 或 module ava

显示可以使用的模块

module list

显示已经加载的模块

module load <software/version> 

或 module add <software/version>

加载模块

module unload <software/version>

或 module rm <software/version>

卸载模块

module purge

取消所有加载的工具

module show <software/version>

查看模块配置信息

module use <modulefiles路径>

使用<modulefiles路径>下的模块定义文件

module switch <software/version>

或 module swap <software/version>

交换模块

测试module工具的使用

下面以Python的不同版本为例,测试module工具的基本使用。

1. 安装python的3.5和3.6两个不同版本

# 安装在共享目录下,可以通过挂载的方式使用不同版本的python
mkdir -p /software/python/{3.5,3.6}
cd /software/python
wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tgz
tar xzf Python-3.5.1.tgz 
tar xzf Python-3.6.1.tgz
cd Python-3.5.1/
./configure --prefix=/software/python/3.5
make && make install
cd /software/python/Python-3.6.1/
./configure --prefix=/software/python/3.6
make && make install

2. 编写python 3.5和3.6的modulefiles文件

modulefiles_dir="/software/module/modulefiles"
mkdir $modulefiles_dir/python
cd $modulefiles_dir/python

# 编辑python/3.6的modulefiles
cat >3.6<< EOF
#%Module
module-whatis   "loads the modules environment of python-3.6"
# for Tcl script use only
set     prefix          /software/python/3.6
setenv          MODULESHOME     \$prefix
prepend-path    PATH            \$prefix/bin
prepend-path    MANPATH         \$prefix/share/man
set-alias       python       python3.6
EOF

# 编辑python/3.5的modulefiles
cat >3.5<< EOF
#%Module
module-whatis   "loads the modules environment of python-3.5"
# for Tcl script use only
set     prefix          /software/python/3.5
setenv          MODULESHOME     \$prefix
prepend-path    PATH            \$prefix/bin
prepend-path    MANPATH         \$prefix/share/man
set-alias       python       python3.5
EOF

# 编辑python/.version设置default版本,在不指定版本情况下加载default版本
cat >.version<<EOF
#%Module
set ModulesVersion "3.5"
EOF

说明:module工具是通过#%Module识别modulefiles文件的,因此modulefiles文件第一行必须以#%Module开头,编写或修改完modulefiles文件后可以直接通过module命令使用,无需重新加载。

3. module工具常用命令演示

[user@node01]$ module ava
-------------------------- /software/module/modulefiles --------------------------
dot         module-info  null                 python/3.6  
module-git  modules      python/3.5(default)  use.own

[user@node01]$ module list
No Modulefiles Currently Loaded.

[user@node01]$ python -V
Python 2.7.5

[user@node01]$ echo $PATH
/software/module/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/user/bin

[user@node01]$ module load python

[user@node01]$ module list
Currently Loaded Modulefiles:
 1) python/3.5(default)  

[user@node01]$ echo $PATH
/software/python/3.5/bin:/software/module/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/user/bin

[user@node01]$ python -V
Python 3.5.1

[user@node01]$ module rm python/3.5 

[user@node01]$ module load python/3.6

[user@node01]$ echo $PATH
/software/python/3.6/bin:/software/module/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/user/bin

[user@node01]$ python -V
Python 3.6.1

关于module命令的更多用法,可以参考module官方文档:

module — Modules documentation

欢迎关注下方微信公众号【HPC常青园】,共同交流HPC集群管理经验和最佳实践。如果您有关于HPC集群的具体需求,欢迎邮件沟通交流:hpc@ivyent.cn。

HPC常青园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常算科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值