[ Module ] 环境变量管理工具 Module 安装和使用
https://www.cnblogs.com/yeungchie/
1. 工具下载
- 手动下载
modules-5.1.0 点击下载
- wget 下载
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
2. 工具安装
下面演示将 Module 工具放到 /opt/tools/modules 这个路径,下面再建立三个子目录:
- src
这里放安装包/源文件 - installed
这里是工具安装路径 - modulefiles
这里放 modulefiles -- 各个软件的版本文件
路径可以根据需求自行改动
2.1. 下载解压
cd /opt/tools/modules/src
wget https://files.cnblogs.com/files/yeungchie/modules-5.1.0.tar.gz
tar -zxvf modules-5.1.0.tar.gz
cd modules-5.1.0
2.2. 编译前配置
./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/ 是一个比较规范的路径,能够自动识别到的。
2.3. 编译安装
make && make install
工具比较小,很快就安装好了。
2.4. 加载环境
最后在 ~/.bashrc 中增加下面这句,就可以自动加载 modules 工具了。
source /opt/tools/modules/installed/init/profile.sh
也可以写到
/etc/profile让所有用户都默认加载。
具体加载哪个文件,看自己用的是那种 shell 环境。
这些算是使用 Linux 的常识,就不多赘述了。
2.5. 验证安装完成
查看一下版本,安装完成。
module -V
# Modules Release 5.1.0 (2022-04-30)
3. modulefiles
目录结构
安装完成后 modulefiles 目录下会生成一些模版,可以参考一下。
modulefiles 一般是三级目录的结构:
- 第一级是 modulefiles 根目录
- 第二级是软件名
- 第三级是版本号(这一级的文本文件就是 modulefile)
- 第二级是软件名
/opt/tools/modules/modulefiles/
├── advm
│ └── 20.10
├── assura
│ └── 416
├── calibre
│ ├── 2019
│ └── 2020
├── ic
│ ├── 617ISR22
│ └── 618.130
├── sos
│ └── 7.05
├── spectre
│ └── 181
...
编写 modulefile
用 virtuoso 来举例吧,下面制作 617 和 618 的两个版本的 modulefile。
在 /opt/tools/modules/modulefiles/ 下需要创建一个目录 ic,再在 ic 目录下编写两个文件就叫 617 和 618。
- modulefile 必须以
#%Module开头,这样工具才能识别为 modulefile。 - 文件格式为 Tcl,需要遵循 Tcl 的语法来编写。
- 常用的函数
- setenv 设置环境变量
- prepend-path 追加到环境变量前
- append-path 追加到环境变量后
- ic/617
#%Module
set version 617ISR22
set HOME $::env(HOME)
set CAD /opt/eda/cadence
set CDS $CAD/IC617ISR22
setenv CDSHOME $CDS
setenv CDS_HOME $CDS
setenv LANG C
setenv CDS_Netlisting_Mode Analog
setenv CDS_ENABLE_VMS 1
setenv CDS_LOAD_ENV CWD
setenv CDS_LOG_PATH $HOME/LOG
setenv CDS_LIC_FILE $CAD/license/license.dat
setenv CDS_LIC_ONLY 1
setenv CDS_AUTO_64BIT ALL
setenv OA_UNSUPPORTED_PLAT linux_rhel50_gcc44x
setenv W3264_NO_HOST_CHECK 1
prepend-path OA_HOME $CDS/oa
prepend-path OA_PLUGIN_PATH $CDS/oa/data/plugins
prepend-path PATH $CDS/tools/bin
prepend-path PATH $CDS/tools/dfII/bin
prepend-path PATH $CDS/tools/plot/bin
prepend-path LD_LIBRARY_PATH $CDS/tools/plot/bin
- ic/618.130
#%Module
set version 618
set HOME $::env(HOME)
set CAD /opt/eda/cadence
set CDS $CAD/IC618.130
setenv CDSHOME $CDS
setenv CDS_HOME $CDS
setenv LANG C
setenv CDS_Netlisting_Mode Analog
setenv CDS_ENABLE_VMS 1
setenv CDS_LOAD_ENV CWD
setenv CDS_LOG_PATH $HOME/LOG
setenv CDS_LIC_FILE $CAD/license/license.dat
setenv CDS_LIC_ONLY 1
setenv CDS_AUTO_64BIT ALL
setenv OA_UNSUPPORTED_PLAT linux_rhel50_gcc44x
setenv W3264_NO_HOST_CHECK 1
prepend-path OA_HOME $CDS/oa
prepend-path OA_PLUGIN_PATH $CDS/oa/data/plugins
prepend-path PATH $CDS/tools/bin
prepend-path PATH $CDS/tools/dfII/bin
prepend-path PATH $CDS/tools/plot/bin
prepend-path LD_LIBRARY_PATH $CDS/tools/plot/bin
指定默认版本
在第二级目录下新增一个 .version 文件用来指定默认的版本。
#%Module
set ModulesVersion 618
当然这里的就算不指定,默认的版本也会是 618
5. 常用命令
modulefiles 写好后就可以使用 module 命令来加载零活地加载环境和切换软件版本了。
module avail
查看当前所有可用的 module
module avail # 查看所有的
module avail ic # 只看 ic 的
------------------------ /opt/tools/modules/modulefiles ------------------------
ic/617 ic/618Key:
modulepath default-version
module add
加载某个 module
module add ic
virtuoso -V
@(#)$CDS: virtuoso version 6.1.8-64b 08/04/2020 19:31 (cpgsrv11) $
module list
查看当前已经加载的 module
module list
Currently Loaded Modulefiles:
- ic/618
Key:
default-version
module switch
切换某个 module
module switch ic ic/617
virtuoso -V
@(#)$CDS: virtuoso version 6.1.7-64b 08/21/2018 19:47 (sjfhw316) $
module rm
移除某个 module
module rm ic
module list ; virtuoso -V
No Modulefiles Currently Loaded.
bash: virtuoso: command not found
如果加载了同个软件的多个版本,则一次 rm 只会移除一个版本。
当然同一个软件加载多个版本是不规范的操作。
module purge
清空所有已经加载的 module
module purge
注意这个命令可能在老版本中有人会习惯使用
module clear,这个实际上是无效的。
它只会清空module list的内容,并不会移除环境变量中已经加载的内容。
因此后续再进行module rm操作都是无效的。
我自己的理解是,module clear的效果只是将已经配置好的环境 "摆脱" Module 工具的控制。
module -h
更多的命令使用方法可以查看 module -h
4. 参考资料
[ Module ] 环境变量管理工具 Module 安装和使用的更多相关文章
- direnv 一个强大的环境变量管理工具
direnv 是一个基于golang 编写的强大的环境变量管理工具,可以帮助我们简化环境变量管理,而且 支持的平台比较多. 基本使用 下载二进制软件包 https://github.com/dir ...
- 集成direnv 与docker-compose 进行环境变量管理
direnv 是一个不错的换将变量管理工具,同时日常的开发测试中我们使用docker-compose 会比较多,一般我们的玩法是 可以再docker-compose 中指定环境变量,可以通过envir ...
- 微软源代码管理工具TFS2013安装与使用详细图文教程(Vs2013)
这篇文章联合软件小编主要介绍了微软源代码管理工具TFS2013安装与使用图文教程,本文详细的给出了TFS2013的安装配置过程.使用教程,需要的朋友可以参考下 最近公司新开发一个项目要用微软的TFS2 ...
- [转] 微软源代码管理工具TFS2013安装与使用详细图文教程(Vs2013)
这篇文章联合软件小编主要介绍了微软源代码管理工具TFS2013安装与使用图文教程,本文详细的给出了TFS2013的安装配置过程.使用教程,需要的朋友可以参考下 最近公司新开发一个项目要用微软的TFS2 ...
- 微软源代码管理工具TFS2013安装与使用图文教程
微软源代码管理工具TFS2013安装与使用图文教程 这篇文章主要介绍了微软源代码管理工具TFS2013安装与使用图文教程,本文详细的给出了TFS2013的安装配置过程.使用教程,需要的朋友可以参考下 ...
- Linux下批量管理工具pssh安装和使用
Linux下批量管理工具pssh安装和使用 pssh工具包 安装:yum -y install pssh pssh:在多个主机上并行地运行命令 pscp:把文件并行地复制到多个主机上 prsync:通 ...
- 使用YApi搭建API接口管理工具(docker安装)
使用YApi搭建API接口管理工具(docker安装) 工具描述 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布 ...
- Linux 进程管理工具 supervisord 安装及使用
Supervisor是用Python实现的一款非常实用的进程管理工具 1.安装过程非常简单 安装python 安装meld3-0.6.8.tar.gz 安装supervisor-3.0a12.tar. ...
- js的包管理工具bower安装
bower需要:node 和 git node安装包下载:http://blog.csdn.net/myan/article/details/2028545 Git安装: 选择第二项:Use Git ...
随机推荐
- python 基础数据类型汇总
数据类型小结(各数据类型常用操作) 一.数字/整型int int()强行转化数字 二.bool类型False&True bool()强行转化布尔类型. 0,None,及各个空的字符类型为Fal ...
- 基于CrawlSpider全栈数据爬取
CrawlSpider就是爬虫类Spider的一个子类 使用流程 创建一个基于CrawlSpider的一个爬虫文件 :scrapy genspider -t crawl spider_name www ...
- 学习Redis(三)
一.安装部署 1.常规安装 1.安装 # wget http://download.redis.io/releases/redis-3.0.7.tar.gz # tar xf redis-3.0.7. ...
- ACM中的位运算技巧
听说位运算挺好玩的,那这节总结一下ACM中可能用到的位运算技巧. XOR运算极为重要!!(过[LC136](只出现一次的数字 - 力扣(LeetCode)):数组中每个数字都出现两次,只有一个出现一次 ...
- C++ | 栈的应用(逆波兰算法) | 计算器
#include <iostream> using std::cin; using std::cout; using std::endl; template<typename T&g ...
- 用AltiumDesigner画完PCB生成gerber(光绘)文件详细说明
什么是gerber文件 Gerber文件是所有电路设计软件都可以产生的文件,在电子组装行业又称为模版文件(stencil data),在PCB制造业又称为光绘文件.可以说Ger ...
- post提交的数据有哪几种编码格式?能否通过URL参数获取用户账户密码
这里是修真院前端小课堂,每篇分享文从 [背景介绍][知识剖析][常见问题][解决方案][编码实战][扩展思考][更多讨论][参考文献] 八个方面深度解析前端知识/技能,本篇分享的是: [post提交的 ...
- 解决Mui中popover 顶部弹出菜单弹出位置不准确以及无法收回的问题
前言 最近公司的项目转向使用Hbuilder开发移动端项目,其中想要通过在顶部标题栏加入弹出菜单的方式,来定位长列表的位置,如图所示. 问题 Mui的功能貌似还不是很完善,在使用这个弹出菜单的时候,发 ...
- 基于canvas和web audio实现低配版MikuTap
导言 最近发掘了一个特别happy的网页小游戏--MikuTap.打开之后沉迷了一下午,导致开发工作没做完差点就要删库跑路了,还好boss瞥了我一眼就没下文了.于是第二天我就继续沉迷,随着一阵抽搐,这 ...
- python-人物风云榜(实现排名)
Description 又到了云之国一年一度的任务风云榜更新的大日子了.给出每个人风云力数值,需要你给出每个人的排名.注意,排名存在并列的情况. Input 一共有 22 行.第一行一个整数 n ,表 ...