描述
如果一个服务器中某个工具有多个版本,如果全写在bashrc
中,可能就会造成配置混乱且不好管理。有没有什么好的办法解决呢,有的,那就是Module
这个工具。Module
是一个简化 shell 初始化的工具,可以很方便的管理环境。更多可见官网。
官方介绍中使用的源码安装,安装在/usr/share/Modules
,配置文件在/etc/modulefiles
。安装完后在/etc/profile
中加入下面一行
source /usr/local/Modules/init/profile.sh
这样每次启动terminal时就可以直接使用module
命令了。
配置
在安装完后,已经可以使用module
了,下一步就是需要为不同的工具设置配置文件了。以vcs为例,假如服务器安装了两个版本的vcs,分别为vcs-mx_vl_2016.06和vcs-mx_o-2018.09-SP2。首先在配置文件目录下(/etc/modufiles
)新建一个文件夹,名称随意,假设为vcs-mx。
mkdir /etc/modulefiles/vcs
然后在/etc/modulefiles/vcs-mx/
下新建2个文件,名称随意,假设为vl_2016.06和o-2018.09-SP2
touch /etc/modulefiles/vcs-mx/vl_2016.06
touch /etc/modulefiles/vcs-mx/o-2018.09-SP2
接着在vl_2016.06中填写下面的内容
#%Module1.0#####################################################################
##
## use.own modulefile
##
proc ModulesHelp { } {
puts stderr "\tThis module file will add \$HOME/privatemodules to the"
puts stderr "\tlist of directories that the module command will search"
puts stderr "\tfor modules. Place your own module files here."
puts stderr "\tThis module, when loaded, will create this directory"
puts stderr "\tif necessary."
}
module-whatis "adds your own modulefiles directory to MODULEPATH"
eval set [ array get env HOME ]
set ownmoddir $HOME/privatemodules
setenv version 2016.06
# create directory if necessary
if [ module-info mode load ] {
if { ! [ file exists $ownmoddir ] } {
file mkdir $ownmoddir
set null [open $ownmoddir/null w]
puts $null "#%Module########################################################################"
puts $null "##"
puts $null "## null modulefile"
puts $null "##"
puts $null "proc ModulesHelp { } {"
puts $null " puts stderr \"\tThis module does absolutely nothing.\""
puts $null " puts stderr \"\tIt's meant simply as a place holder in your\""
puts $null " puts stderr \"\tdot file initialization.\""
puts $null "}"
puts $null ""
puts $null "module-whatis \"does absolutely nothing\""
}
}
module use --append $ownmoddir
# set enviroment variable
prepend-path PATH /opt/synopsys/vcs-mx_vL_2016.06/bin
prepend-path PATH /opt/synopsys/vcs-mx_vL_2016.06/gui/dve/bin
prepend-path VCS_HOME /opt/synopsys/vcs-mx_vL_2016.06
prepend-path VCS_ARCH_OVERRIDE linux
里面比较关键的分别为:
setenv version 2016.06
用于设置版本prepend-path PATH xx
用于将xx加入到环境变量PATH
中,这样就可以直接访问vcs
等命令- 以及vcs过程中需要用到的一些变量如
VCS_HOME
,VCS_ARCH_OVERRIDE
等
另外一个配置文件o-2018.09-SP2的写法也类似,需要注意是的其中的路径要做相应的更改。至此,配置文件也设置好,然后就可以使用了。比如可以用module av vcs-mx
查看可以使用的vcs-mx
版本
用
module load vcs-mx/vl_2016.06
加载此vcs版本,然后就可以正常的使用了。
如果需要加载vcs的其它版本,需要先使用module unload
来卸载当前使用的版本,以免造成不预期的行为
常用命令
module list
或module li
: 列出当前已加载的modulemodule avail
或module av
: 查看所有可用的工具module av x
: 查看工具 x 可用的版本
module add x
或module load x
: 加载工具 xmodule load x/y
: 加载版本号为y的工具x
module rm x
或module unload x
: 卸载工具 xmodule unload x/y
: 卸载版本号为y的工具x
module show x
: 显示工具x的配置文件module show x/y
: 显示版本号为y的工具x的配置文件
module swap a b
或module switch a b
: 将模块a替换为模块bmodule purge
: 卸载所有模块