当前位置:   article > 正文

Environment Modules工具介绍与使用

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节点上执行以下操作,设置共享目录:

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

2. node01挂载共享目录

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

3. 安装module工具

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

方法1:yum安装module工具

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

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

  1. # 源码编译安装,把tcl工具和module工具安装在共享目录下,通过nfs挂载的方式就可以使用
  2. # 源码编译安装tcl工具
  3. mkdir /software/tcl
  4. cd /software/tcl
  5. wget --no-check-certificate https://cfhcable.dl.sourceforge.net/project/tcl/Tcl/8.5.9/tcl8.5.9-src.tar.gz
  6. tar -zxvf tcl8.5.9-src.tar.gz
  7. cd tcl8.5.9/unix
  8. yum -y install gcc dejagnu
  9. ./configure --prefix=/software/tcl/
  10. make && make install
  11. # 源码编译安装module工具
  12. mkdir /software/module
  13. cd /software/module/
  14. curl -LJO https://github.com/cea-hpc/modules/releases/download/v5.0.1/modules-5.0.1.tar.gz
  15. tar xfz modules-5.0.1.tar.gz
  16. cd modules-5.0.1
  17. ./configure --prefix=/software/module --with-tcl-lib=/software/tcl/lib --with-tcl-inc=/software/tcl/include --with-tcl=/software/tcl/lib/tclConfig.sh
  18. make && make install

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

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

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

  1. cd /software/module/init
  2. 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脚本:

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

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

  1. $ module sh-to-mod bash ./python3.5.sh
  2. #%Module
  3. prepend-path PATH /software/python/3.5/bin
  4. set-alias python python3.5
  5. setenv MANPATH /software/python/3.5/share/man
  6. 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两个不同版本

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

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

  1. modulefiles_dir="/software/module/modulefiles"
  2. mkdir $modulefiles_dir/python
  3. cd $modulefiles_dir/python
  4. # 编辑python/3.6的modulefiles
  5. cat >3.6<< EOF
  6. #%Module
  7. module-whatis "loads the modules environment of python-3.6"
  8. # for Tcl script use only
  9. set prefix /software/python/3.6
  10. setenv MODULESHOME \$prefix
  11. prepend-path PATH \$prefix/bin
  12. prepend-path MANPATH \$prefix/share/man
  13. set-alias python python3.6
  14. EOF
  15. # 编辑python/3.5的modulefiles
  16. cat >3.5<< EOF
  17. #%Module
  18. module-whatis "loads the modules environment of python-3.5"
  19. # for Tcl script use only
  20. set prefix /software/python/3.5
  21. setenv MODULESHOME \$prefix
  22. prepend-path PATH \$prefix/bin
  23. prepend-path MANPATH \$prefix/share/man
  24. set-alias python python3.5
  25. EOF
  26. # 编辑python/.version设置default版本,在不指定版本情况下加载default版本
  27. cat >.version<<EOF
  28. #%Module
  29. set ModulesVersion "3.5"
  30. EOF

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

3. module工具常用命令演示

  1. [user@node01]$ module ava
  2. -------------------------- /software/module/modulefiles --------------------------
  3. dot module-info null python/3.6
  4. module-git modules python/3.5(default) use.own
  5. [user@node01]$ module list
  6. No Modulefiles Currently Loaded.
  7. [user@node01]$ python -V
  8. Python 2.7.5
  9. [user@node01]$ echo $PATH
  10. /software/module/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/user/bin
  11. [user@node01]$ module load python
  12. [user@node01]$ module list
  13. Currently Loaded Modulefiles:
  14. 1) python/3.5(default)
  15. [user@node01]$ echo $PATH
  16. /software/python/3.5/bin:/software/module/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/user/bin
  17. [user@node01]$ python -V
  18. Python 3.5.1
  19. [user@node01]$ module rm python/3.5
  20. [user@node01]$ module load python/3.6
  21. [user@node01]$ echo $PATH
  22. /software/python/3.6/bin:/software/module/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/home/user/bin
  23. [user@node01]$ python -V
  24. Python 3.6.1

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

module — Modules documentation

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

HPC常青园

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/189129
推荐阅读
相关标签
  

闽ICP备14008679号