Environment Modules: provides dynamic modification of a user's environment 一个可以动态修改用户环境的工具 https://www.cnblogs.com/yeungchie/
Environment Modules: provides dynamic modification of a user's environment
modules-5.1.0 点击下载
wget https://jaist.dl.sourceforge.net/project/modules/Modules/modules-5.1.0/modules-5.1.0.tar.gz下载不了的话可以使用我上传到了博客园的 链接
wget https://files.cnblogs.com/files/yeungchie/modules-5.1.0.tar.gz也可以通过 yum -y install environment-modules 安装,但是一般这样安装的是很老的版本。
目前已知 3.x 版本中存在一些 Bug,例如同时加载的 modulefile 较多的时候,module purge 会出现错误。
建议使用新版本,目前最新版是 Modules Release 5.0.1 (2021-10-16)
依赖 Tcl 版本 >= 8.5 ,查看 Tcl 版本:
echo puts \$tcl_version | tclsh# 8.6下面演示将 Module 工具放到 /opt/tools/modules 这个路径,下面再建立三个子目录:
路径可以根据需求自行改动
cd /opt/tools/modules/srcwget https://files.cnblogs.com/files/yeungchie/modules-5.1.0.tar.gztar -zxvf modules-5.1.0.tar.gzcd modules-5.1.0./configure --prefix=/opt/tools/modules/installed --modulefilesdir=/opt/tools/modules/modulefiles这一步可能会报错,提示找不到 tclConfig.sh,需要用 --with-tcl 来指定 tclConfig.sh 所在的路径。
首先使用 whereis 找到 tclConfig.sh 的位置:
whereis tclConfig.sh# tclConfig:如果没找到说明 tcl-devel 没安装, yum 安装即可:
yum -y install tcl-devel再次查找就可以找到了:
whereis tclConfig.sh# tclConfig: /usr/lib64/tclConfig.sh接着重新执行 configure ,加上 --with-tcl
./configure --with-tcl=/usr/lib64/ --prefix=/opt/tools/modules/installed --modulefilesdir=/opt/tools/modules/modulefiles其实现在不加
--with-tcl也没有问题了,/usr/lib64/ 是一个比较规范的路径,能够自动识别到的。
make && make install工具比较小,很快就安装好了。
最后在 ~/.bashrc 中增加下面这句,就可以自动加载 modules 工具了。
source /opt/tools/modules/installed/init/profile.sh也可以写到
/etc/profile让所有用户都默认加载。
具体加载哪个文件,看自己用的是那种 shell 环境。
这些算是使用 Linux 的常识,就不多赘述了。
查看一下版本,安装完成。
module -V# Modules Release 5.1.0 (2022-04-30)安装完成后 modulefiles 目录下会生成一些模版,可以参考一下。
modulefiles 一般是三级目录的结构:
/opt/tools/modules/modulefiles/├── advm│ └── 20.10├── assura│ └── 416├── calibre│ ├── 2019│ └── 2020├── ic│ ├── 617ISR22│ └── 618.130├── sos│ └── 7.05├── spectre│ └── 181...用 virtuoso 来举例吧,下面制作 617 和 618 的两个版本的 modulefile。
在 /opt/tools/modules/modulefiles/ 下需要创建一个目录 ic,再在 ic 目录下编写两个文件就叫 617 和 618。
#%Module 开头,这样工具才能识别为 modulefile。#%Moduleset version 617ISR22set HOME $::env(HOME)set CAD /opt/eda/cadenceset CDS $CAD/IC617ISR22setenv CDSHOME $CDSsetenv CDS_HOME $CDSsetenv LANG Csetenv CDS_Netlisting_Mode Analogsetenv CDS_ENABLE_VMS 1setenv CDS_LOAD_ENV CWDsetenv CDS_LOG_PATH $HOME/LOGsetenv CDS_LIC_FILE $CAD/license/license.datsetenv CDS_LIC_ONLY 1setenv CDS_AUTO_64BIT ALLsetenv OA_UNSUPPORTED_PLAT linux_rhel50_gcc44xsetenv W3264_NO_HOST_CHECK 1prepend-path OA_HOME $CDS/oaprepend-path OA_PLUGIN_PATH $CDS/oa/data/pluginsprepend-path PATH $CDS/tools/binprepend-path PATH $CDS/tools/dfII/binprepend-path PATH $CDS/tools/plot/binprepend-path LD_LIBRARY_PATH $CDS/tools/plot/bin#%Moduleset version 618set HOME $::env(HOME)set CAD /opt/eda/cadenceset CDS $CAD/IC618.130setenv CDSHOME $CDSsetenv CDS_HOME $CDSsetenv LANG Csetenv CDS_Netlisting_Mode Analogsetenv CDS_ENABLE_VMS 1setenv CDS_LOAD_ENV CWDsetenv CDS_LOG_PATH $HOME/LOGsetenv CDS_LIC_FILE $CAD/license/license.datsetenv CDS_LIC_ONLY 1setenv CDS_AUTO_64BIT ALLsetenv OA_UNSUPPORTED_PLAT linux_rhel50_gcc44xsetenv W3264_NO_HOST_CHECK 1prepend-path OA_HOME $CDS/oaprepend-path OA_PLUGIN_PATH $CDS/oa/data/pluginsprepend-path PATH $CDS/tools/binprepend-path PATH $CDS/tools/dfII/binprepend-path PATH $CDS/tools/plot/binprepend-path LD_LIBRARY_PATH $CDS/tools/plot/bin在第二级目录下新增一个 .version 文件用来指定默认的版本。
#%Moduleset ModulesVersion 618当然这里的就算不指定,默认的版本也会是 618
modulefiles 写好后就可以使用 module 命令来加载零活地加载环境和切换软件版本了。
查看当前所有可用的 module
module avail # 查看所有的module avail ic # 只看 ic 的------------------------ /opt/tools/modules/modulefiles ------------------------
ic/617 ic/618Key:
modulepath default-version
加载某个 module
module add icvirtuoso -V@(#)$CDS: virtuoso version 6.1.8-64b 08/04/2020 19:31 (cpgsrv11) \$
查看当前已经加载的 module
module listCurrently Loaded Modulefiles:
- ic/618
Key:
default-version
切换某个 module
module switch ic ic/617virtuoso -V@(#)$CDS: virtuoso version 6.1.7-64b 08/21/2018 19:47 (sjfhw316) \$
移除某个 module
module rm icmodule list ; virtuoso -VNo Modulefiles Currently Loaded.
bash: virtuoso: command not found
如果加载了同个软件的多个版本,则一次 rm 只会移除一个版本。
当然同一个软件加载多个版本是不规范的操作。
清空所有已经加载的 module
module purge注意这个命令可能在老版本中有人会习惯使用
module clear,这个实际上是无效的。
它只会清空module list的内容,并不会移除环境变量中已经加载的内容。
因此后续再进行module rm操作都是无效的。
我自己的理解是,module clear的效果只是将已经配置好的环境 "摆脱" Module 工具的控制。
更多的命令使用方法可以查看 module --help