查看: 2695|回复: 0

环境变量管理软件environment module files

[复制链接]

该用户从未签到

发表于 2021-11-22 14:39:00 | 显示全部楼层 |阅读模式
分享到:
其实也不算我的原创,通过网上的资料整理而来,发现大家都麻烦的设置各个版本软件的环境变量,如果出现莫名其妙的问题很难知道问题到底出在哪,或者source了一个脚本发现自己需要的软件path根本不是对应的版本,有了modulefile,这样狗血的情况基本不会发生了,当然,免费软件偶尔也会有的小bug的。下面是软件英文介绍翻译过来的

软件介绍

Modules environment描述

这是一个系统允许你很容易的在各个编译器好软件版本中转换,无论你使用什么shell,每次不需要手动设置环境变量,以下是作者感言:

module 模块是数据库和一系列脚本的集合,简化shell的初始化,允许用户在工作过程中很容易的修改环境变量,module模块减少unix环境变量的维护难度,提供了一种机制通过一个方式动态修改应用环境。

适应对象

suse 工作站和所有其他server除了Chimaera and Athens,插一句,旁白:在rhel6环境工作ok

源代码

http://modules.sourceforge.net/,旁白:网上可以搜到很多需要自己编译的软件版本,软件洒家也编译过,但是这个东西不是编译不了,是编译完死活也运行不起来,提示tcl无法初始化,试过各种tcl的版本,就在几乎绝望的时候为了安装方便为RHEL配置了centos的源,然后狗血的发现里面竟然有tcl,后来又在sourceforge发现了编译好的module filels,终于在一堆默认的路径下把module filels run 起来了,如果有大侠知道如何设置tcl环境那是极大的感谢。

Licence details

GPL

用户手册

基本信息
机器可能有不同版本的fortran编译器,库,和其他安装的软件,其中的一部分又有很多版本,会越来越难为用户设置环境变量,特别是需要测试代码,不停的在各个版本间切换,module模块的目的是为终端用户减化该过程。
在很多机器上,module模块是统一的,有的机器上module是在用户login是加载的。旁白:.cshrc,.bashrc登场了
module filels使用以下方式工作,列出可以加载的模块
cen1001@sword:~$ module list

Currently Loaded Modulefiles:

1) modules              3) ifort/8.0            5) nag/5.0

2) ifc                  4) pgi/4.0-3(default)
你可以看到它加载了自己,modules,其他的基本都是编译器,旁白:洒家这里是大量的eda工具,好几好几屏。但是可能你不知道这个ifc是干啥的
cen1001@sword:~$ module whatis ifc

ifc                  : Loads version 7 of the Intel Fortran compiler


cen1001@sword:~$ module help ifc


----------- Module Specific Help for 'ifc' ------------------------


        ifc - loads version 7 of the Intel Fortran compiler

        Thisadds /usr/local/intel/compiler70/ia32/bin to the PATH and

        sets the LM_LICENSE_FILE variable amongst others.

        ifc is a highly optimizing Fortran compiler for Intel chips.

        It relies on a licence server for compiling, but binaries may

        be run without a licence being available. There is a manpage,

        and both HTML and PDF documentation in

        /usr/local/intel/compiler70/doc .

其中一些modules可能有不同版本,你可以看每个module的版本cen1001@sword:~$ module avail

------------------------- /
usr/local/Modules/versions --------------------------

3.1.6


--------------------- /usr/local/Modules/3.1.6/modulefiles ---------------------


fftw/2.1.5/ifc      module-cvs          null

fftw/3.0.1          module-info         pgi/4.0-3(default)

ifc                 modules             pgi/5.0-2

ifort/8.0           mpi/mpich/1.2.5/ifc pgi/5.1-6

mkl/6.0(default)    mpi/mpich/1.2.5/pgi pgi/5.2-4

mkl/6.1             nag/5.0             use.own

如果你想看一个模块加载了什么东西cen1001@sword:~$ module display ifort

-------------------------------------------------------------------


/usr/local/Modules/3.1.6/modulefiles/ifort/8.0:

module-whatis    Loads version 8.0 of the Intel Fortran compiler

setenv           LM_LICENSE_FILE 28518@por.ch.private.cam.ac.uk

append-path      PATH /usr/local/intel_fc_80/bin

prepend-path     LD_LIBRARY_PATH /usr/local/intel_fc_80/lib

append-path      MANPATH /usr/local/intel_fc_80/man

------------------------------------------------------------------

有一些module和其他的软件冲突,比如你可以有一个pgi模块load环境变量,如果我在pgi load 5.2-4之前load了4.0-3,我获得了一个编译错误的信息,这时我需要卸载
4.0-3
cen1001@sword:~$ module unload pgi

cen1001@sword:~$ module load pgi/5.2-
或者更省事:cen1001@sword:~$ module swap pgi pgi/5.2-4
今天翻译不完了,明天继续
有些机器有特殊的module,这些module通过一个命令加载了一系列的模块,当进行并行运算,这些运算一般需要load一系列的兼容module,
这种方法能够保证依赖关系正确有效,此时该方法很有用。这些module称为环境或者编译器,这些特殊的module类似于位于你shell中的快捷方式
,除了load module不做其他的处理。
下面删除了一段,使你的环境更加严谨,管理员注意事项dd

加载模块
module load ifort/32/9.0/032



proc ModulesHelp { } {

  puts "This is a dummy module; to see what it does type \"module disp [module-info name ]\"\n"

  }



  module-whatis "This is a dummy module; type \"module disp [module-info name ]\" to see what it does\n"
ok,该模块已经加载到你的环境里了。

下面结合ic eda说一下:
首先,你要安装好module file,在安装modulefile之前,要先安装tcl,当然推荐使用sourceforge编译好的modules,有依赖包就去下载,原版的module不是通常情况加载到PATH路径下的,所以which module可能找不到,这时试用一下moduleava,如果安装了会有显示。modules会使用一组文件夹表明所list的软件版本,比如
<lion@hal:/home/lion> cd env/module_files/
.  ..  codelink  ius  project  specman  verdi  vipcat
在环境变量里使用module use ~/
env/module_files,该module file下面的软件版本就会出现在module list里面,然后选择大家最喜欢的verdi看看里面有些什么,这里面就是实际的软件版本了
.   2006.07  2008.04  2009.01  2009.10  2010.04  2010.10  2011.10  
..  2007.07  2008.10  2009.07  2010.01  2010.07  2011.01  2012.04  2012.10
打开一个看看
#%Module1.0

# verdi and siloti 2012.10 version
######################################################################
# Set Verdi Path
######################################################################

set       verdi_home    /tools/novas/verdi-201210
setenv    VERDI_HOME    $verdi_home
setenv    SILOTI_HOME   $verdi_home

#set the SPS_BATCH_KILL environment variable to 1 when using the esa
#utility in LSF environments
setenv    SPS_BATCH_KILL 1
# FSDB set up
# Enable glitch and event sequence dumping
setenv NOVAS_FSDB_ENV_MAX_GLTICH_NUM 0
setenv NOVAS_FSDB_ENV_DUMP_SEQ_NUM on

prepend-path    PATH            $verdi_home/bin

# Add FsdbDump
##--- for NC simulator -------#
prepend-path   LD_LIBRARY_PATH $verdi_home/share/PLI/IUS/LINUX64

##--- for VCS simulator ----#
prepend-path   LD_LIBRARY_PATH   $verdi_home/share/PLI/VCS/LINUX


#dump fsdb on mult-core workstations
setenv NOVAS_FSDB_PARALLEL 1

#internal optimization
setenv FSDB_NCSIM_OPTIM 1

prepend-path NOVAS_LICENSE_FILE 28001@c0217

大概讲一下,
#%Module1.0是表明该文件是module file使用的,不添加该文件版本不会出现在module list里面,下面是软件的说明,在下面就是大家熟悉的部分了,需要注意的是它有自己的语法结构,setenv的变量不能作为内部变量使用,像prepend-path是把该变量加在变量前面,当然它还有很多复杂的语法,大家需要自己研究,我也不会。

好了,写好module file之后重新module ava xx,它就会出现在list里面,然后module load,新的环境就已经加载了,但是实际上老的变量还在,最好把老的module unload。核心东西就这么多,还有很多东西大家可以探索。

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-11-15 07:28 , Processed in 0.110626 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.