• [ Module ] 环境变量管理工具 Modules 安装和使用


    https://www.cnblogs.com/yeungchie/

    Environment Modules: provides dynamic modification of a user's environment

    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.1.0

    依赖 Tcl 版本 >= 8.5 ,查看 Tcl 版本:

    echo puts \$tcl_version | tclsh
    # 8.6
    

    2. 工具安装

    下面演示将 Modules 工具的文件放到 /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. 配置 module

    目录结构

    安装完成后 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 目录下编写两个文件就叫 617618

    1. modulefile 必须以 #%Module 开头,这样才能被工具识别为 modulefile。
    2. 文件格式为 Tcl,需要遵循 Tcl 的语法来编写。
    3. 常用的函数
      1. setenv 设置环境变量
      2. prepend-path 追加到环境变量前
      3. 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/618

    Key:
    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:

    1. 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 --help

    更多的命令使用方法可以查看 module --help

    4. 参考资料

  • 相关阅读:
    dlib库+vs2017详细配置流程
    【网易云课堂】【中科院团队】深度学习:算法到实战——神经网络基础
    【网易云课堂】【中科院团队】深度学习:算法到实战——绪论
    matlab 读取多行txt文本
    LeetCode 228. Summary Ranges【未加入列表】
    LeetCode 438. Find All Anagrams in a String
    c++冷知识
    python项目实战——西游记用字统计
    LeetCode 101. Symmetric Tree
    LeetCode 63. Unique Paths II
  • 原文地址:https://www.cnblogs.com/yeungchie/p/16268954.html
Copyright © 2020-2023  润新知