1.module簡介
module是一個專門管理環境變量的工具,全程是module environment,一般應用於軟件或運行庫等設備有多個版本,且需要分別配置這些環境變量。
2.module工具的官網
https://modules.readthedocs.io/en/latest/index.html
3.module的安裝
Moudle工具是基於TCL(8.4以上版本)工具的。Moudle工具可以使用二進制編譯安裝,也可以使用yum/apt快速安裝,
module工具,依賴tcl工具,因此首先要安裝tcl工具。
wget https://cfhcable.dl.sourceforge.net/project/tcl/Tcl/8.5.9/tcl8.5.9-src.tar.gz
tar -zxvf tcl8.5.9-src.tar.gz
cd tcl8.5.9/unix
./configure --prefix=/usr/local/tools/tcl
make
make install
安裝tcl之后,就可以安裝module工具了。
wget https://newcontinuum.dl.sourceforge.net/project/modules/Modules/modules-4.2.4/modules-4.2.4.tar.gz
tar -zxvf modules-4.2.4.tar.gz
cd modules-4.2.4
./configure --prefix=/usr/local/tools/modules --with-tcl-lib=/usr/local/tools/tcl/lib --with-tcl-inc=/usr/local/tools/tcl/include
make
make install
安裝完成之后,在/usr/local/tools/modules目錄下,就有module工具了。不過在bin目錄下,是沒有module這個命令的。
4.module的初始化
安裝module工具后,你會發現它並不是一個可執行的二進制文件,你需要對module工具進行一次初始化。
在/usr/share/modules/init(注意此處,可能是module也可能是modules)內部你可以找到針對各個腳本的二進制初始化文件,有profile.sh和profile.csh文件,用來配置module的腳本文件。如果當前用的shell是bash,就使用profile.sh,如果當前用的shell是cshell,就使用profile.csh。可以直接source這個文件,也可以打開/etc/profile文件,加入 source /usr/llocal/tools/modules/init/profile.(c)sh 這一行代碼。重啟終端,使用module -h,就可以打印module命令的help了。也可以建立符號鏈接,這樣當系統重啟后,會自動加載。
ln -s /usr/local/tools/modules/init/profile.sh /etc/profile.d/module.sh
ln -s /usr/local/tools/modules/init/profile.csh /etc/profile.d/module.csh
不過如果使用which module,會發現找不到module命令。
5.Moudle工具的使用
Module工具依托於MODULEPATH這個環境變量來查找配置信息目錄,也就是說你在設置好目錄結構,配置好環境變量后,只需要設置這一個module的環境變量,那么module工具就會自動去查找這個路徑下的所有配置信息。export MODULEPATH=/opt/modulefiles
例如這個工具文件modulefiles放在了/opt下面,其他環境配置文件例如放在目錄下/opt/modulefils/gcc/4.8.4和/opt/modulefiles/gcc/4.9.7。
6.modulefiles文件編寫
以下是 modulefiles目錄下的 modules文件,我們后面實現的工具配置文件,都是基於這個文件進行修改。千萬不要出現軟件名和版本一樣的modulefile。
#%Module1.0#####################################################################
## //#%Module1.0 這個是識別這個文件為modulefile的,沒有他這個文件不會被識別。
## modules modulefile
##
proc ModulesHelp { } { //proc:幫助文件,可以要,也可以不要
global version prefix
puts stderr "\tmodules - loads the modules software & application environment"
puts stderr "\n\tThis adds $prefix/* to several of the"
puts stderr "\tenvironment variables."
puts stderr "\n\tVersion $version\n"
}
module-whatis "loads the modules environment"
# for Tcl script use only
set version 4.2.4 //設置變量
set prefix /usr/local/tools/modules //設置變量
setenv MODULESHOME $prefix //設置環境變量:這個命令會把你需要的環境變量配置到系統中
prepend-path PATH /usr/local/tools/modules/bin //必須:這個命令會把工具路徑添加到環境變量的前面
prepend-path MANPATH /uer/local/tools/modules/share/man
要注意的是,$env(PROJ_SRC_ROOT),是獲取環境變量 PROJ_SRC_ROOT 的值。
6.module基本命令
module avail/ava //顯示可以使用的模塊
module list //顯示已經加載的模塊
module load/add gcc/4.8.4 //加載模塊AAA
module unload/rm gcc/4.8.4 //卸載模塊
module purge //取消所有加載的工具
module show gcc/8.4.4 //來查看相應配置信息
注意:由於moudle只能載入同類工具、庫的某一個版本,刪除的時候就直接說明刪除的工具、庫就可以了,后面不需要帶版本號。
/home # module show gcc/4.8.4
/opt/modulefiles/gcc/4.8.4:
setenv GCC_HOME /opt/modulefiles/gcc/4.8.4
prepend-path PATH /opt/modulefiles/gcc/4.8.4/bin
7.默認版本
在module avail中,我們可以設置默認版本,例如我想將gcc 4.9.3設置為默認版本,當我module load gcc的時候,就直接載入4.9.3版本,我們可以用.version文件來控制這個默認信息。
在/opt/modulefile/gcc目錄下創建.version文件,看清楚,前面有個點,寫法如下:
#%Module1.0
set ModulesVersion "4.9.3"
用module ava查看時在4.9.3版本后面多了一個(default)。
8.全局控制
由於module的特性問題,如果在公司內使用,你可能需要所有的使用人員設置一個統一的初始腳本,無論是bash還是csh,通常我們建議建立一個用戶可讀的統一腳本文件,然后link到每個使用人員的家目錄下的初始腳本。
例如我們建立為csh建立一個統一的csh.cshrc文件。Link給zhangsan
ln -s csh.cshrc /home/zhangsan/.cshrc
我們可以在統一的初始腳本中加入source ./cshrc.own
那么用戶只需要在家目錄創建一個cshrc.own的文件所謂個性化腳本文件即可。