Environment Modules - 在工具生命周期的重要性

54 篇文章 24 订阅

Environment Modules - 在工具生命周期的重要性



前言

在CAD环境中,工具有一个寿命周期,如工具上架,变更维护,下架等。
从管理员角度,如何能快速实现(浅)侵入式的定制开发,实现想要的操作呢?

本文将以加载/卸载来控制alias设置不同的值为例子,说明modulefile可灵活定制的重要性。


一、查看资料

官网资料 module-info option [info-args]

二、实现

效果

[thesre@centos8 ~]$ which mavail
mavail:          aliased to module avail !*
[thesre@centos8 ~]$ module load gcc/10.2.0
[thesre@centos8 ~]$ which mavail #加载后查看mavail别名,设置好了期望的值。
mavail:          aliased to /path/to/module_avail_command
[thesre@centos8 ~]$ module unload gcc/10.2.0
[thesre@centos8 ~]$ which mavail #卸载后查看mavail别名,恢复了看到没?
mavail:          aliased to module avail !*

实现
新版实现

#%Module1.0

# Author      : 王万林
# Date        : 09/17/2022
# Description : Modulefile for Environment Modules. 
# License     : All rights reserved.

set curMod           [ module-info  name              ]
set version_abs_path [ info script                    ]
set version          [ file tail    $version_abs_path ]
set tool_abs_path    [ file dirname $version_abs_path ]
set tool             [ file tail    $tool_abs_path    ]
set vendor_abs_path  [ file dirname $tool_abs_path    ]
set vendor           [ file tail    $vendor_abs_path  ]

# use is-loaded instead.
if { [ is-loaded $tool ] && ! [ is-loaded $curMod ] } {
    puts stderr "$tool was loaded, but not $curMod."
    module remove $tool
}

# Help messages.
proc ModuleHelp { } {
    puts stderr "Any questions, please contact 王万林."
}

# Information to display when perform 'module dipslay $curMod'.
module-whatis "Modulefile for $vendor/$tool/$version"

# PATH
prepend-path PATH /tools/$vendor/$tool/$version/bin

# set alias on module load, and 
# unset alias & set another value to it on module unload
if { [ module-info mode load ] } {
    # 加载时设置mavail别名为/path/to/module_avail_command
    set-alias mavail { /path/to/module_avail_command } 
} elseif { [ module-info mode remove ] } {
    # 卸载时通过在终端直接执行来设置mavail别名为module avail !*
    # 请注意,要输出到标准输出,以便被eval执行,作用于terminal
    puts stdout {alias mavail module avail '\!*';} 
}

旧版实现

[thesre@centos8 ~]$ cat /environment_modules/opensource/gcc/10.2.0
#%Module1.0

# Author      : 王万林
# Date        : 01/12/2020
# Description : Modulefile for Environment Modules. 
# License     : All rights reserved.

set curMod           [ module-info  name              ]
set version_abs_path [ info script                    ]
set version          [ file tail    $version_abs_path ]
set tool_abs_path    [ file dirname $version_abs_path ]
set tool             [ file tail    $tool_abs_path    ]
set vendor_abs_path  [ file dirname $tool_abs_path    ]
set vendor           [ file tail    $vendor_abs_path  ]

# Prevent from 'module load'-ing two versions from within the same tool directory at one time. 
if { [ module-info mode load ] } {
    if { [ info exists env(_LMFILES_) ] } {
        if { [ regexp $tool_abs_path/ $env(_LMFILES_) ] && ! [ regexp $vendor/$curMod $env(_LMFILES_) ] } {
            # Another version of this tool was loaded. Removing it...
            module remove $tool
        }
    }
}

# Help messages.
proc ModuleHelp { } {
    puts stderr "Any questions, please contact TheSRE."
}

# Information to display when perform 'module dipslay $curMod'.
module-whatis "Modulefile for $vendor/$tool/$version"

# PATH
prepend-path PATH /apps/$vendor/$tool/$version/bin

# set alias on module load, and 
# unset alias & set another value to it on module unload
if { [ module-info mode load ] } {
    # 加载时设置mavail别名为/path/to/module_avail_command
    set-alias mavail { /path/to/module_avail_command } 
} elseif { [ module-info mode remove ] } {
    # 卸载时通过在终端直接执行来设置mavail别名为module avail !*
    # 请注意,要输出到标准输出,以便被eval执行,作用于terminal
    puts stdout {alias mavail module avail '\!*';} 
}

总结

以上就是今天要讲的内容。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王万林 Ben

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值