Environment Modules簡單使用
Environment Modules簡介
Typically users initialize their environment when they log in by setting environment information for every application they will reference during the session. The Environment Modules package is a tool that simplify shell initialization and lets users easily modify their environment during the session with modulefiles.
下載安裝
安裝步驟
$ INSTALL.txt
$ ./configure
$ make
$ make install
默認安裝目錄
/usr/local/Modules
├── bin
│ ├── add.modules
│ ├── envml
│ ├── mkroot
│ └── modulecmd
├── etc
│ └── siteconfig.tcl
├── init
│ ├── bash
│ ├── bash_completion
│ ├── cmake
│ ├── csh
│ ├── fish
│ ├── fish_completion
│ ├── ksh
│ ├── ksh-functions
│ ├── lisp
│ ├── modulerc
│ ├── perl.pm
│ ├── profile-compat.csh
│ ├── profile-compat.sh
│ ├── profile.csh
│ ├── profile.sh
│ ├── python.py
│ ├── r.R
│ ├── ruby.rb
│ ├── sh
│ ├── tcl
│ ├── tcsh
│ ├── tcsh_completion
│ ├── zsh
│ └── zsh-functions
├── lib
│ └── libtclenvmodules.so
├── libexec
│ ├── modulecmd-compat
│ └── modulecmd.tcl
├── modulefiles
│ ├── dot
│ ├── module-git
│ ├── module-info
│ ├── modules
│ └── gcc
└── share
├── doc
└── vim
初始化
剛剛安裝好的
Environment Modules
是沒有module
這條shell命令的
需要進行簡單的配置source
一下環境
- 在
profile.d
下建立軟連接,執行下列語句
# 全局初始化(root執行)
$ cd /etc/profile.d
$ ln -s /usr/local/Modules/init/profile.sh module-profile.sh
$ ln -s /usr/local/Modules/init/profile.csh module-profile.csh
# 本地shell初始化
# bash
$ echo "source /usr/local/Modules/init/profile.sh" >> ~/.bashrc
$ source ~/.bashrc
# csh/tcsh
% echo "source /usr/local/Modules/init/tcsh" >> ~/.cshrc
% source ~/.cshrc
$ which module
module is a function
module ()
{
_module_raw "$@" 2>&1
}
bash下支持自動補全
# 確認已經安裝bash-completion
$ cd /etc/bash_completion.d
$ ln -s /usr/local/Modules/init/bash_completion modules-compliction.bash
csh/tcsh下支持自動補全
% echo "source /usr/local/Modules/init/tcsh_completion" >> ~/.cshrc
管理工具的不同版本
一個簡單的例子
$ cd /usr/local/Modules/modulefiles
$ mkdir riscv_toolchain
$ cd riscv_toolchain
$ touch compile-version
$ touch freedomstudio-version
- compile-verison
#%Module1.0######################################################################
conflict riscv_toolchain/freedomstudio-version
set tool_home /opt/riscv/toolchain
setenv RISCV $tool_home
append-path PATH $tool_home/bin
append-path LIBRARY_PATH $tool_home/lib
append-path LD_LIBRARY_PATH $tool_home/lib
append-path LD_INCLUDE_PATH $tool_home/include
append-path MANPATH $tool_home/share/man
- freedomstudio-verison
#%Module1.0######################################################################
conflict riscv_toolchain/compile-version
set tool_home /opt/FreedomStudio/SiFive/riscv64-unknown-elf-gcc-8.3.0-2019.08.0
setenv RISCV $tool_home
append-path PATH $tool_home/bin
append-path LIBRARY_PATH $tool_home/lib
append-path LD_LIBRARY_PATH $tool_home/lib
append-path LD_INCLUDE_PATH $tool_home/include
append-path MANPATH $tool_home/share/man
依賴其他module的例子
#%Module1.0######################################################################
# conflict sbt/
# 依賴於java環境,先加載此module
module load java/jdk-14.0.1
set tool_home /opt/scala/sbt-1.3.4
prepend-path PATH $tool_home/bin
prepend-path LIBRARY_PATH $tool_home/lib
prepend-path LD_LIBRARY_PATH $tool_home/lib
簡單使用
$ module load riscv_toolchain/compile-version
$ which riscv64-unknown-elf-gcc
riscv64-unknown-elf-gcc is /opt/riscv/toolchain/bin/riscv64-unknown-elf-gcc
$ module load riscv_toolchain/freedomstudio-version
Loading riscv_toolchain/freedomstudio-version
ERROR: riscv_toolchain/freedomstudio-version cannot be loaded due to a conflict.
HINT: Might try "module unload riscv_toolchain/compile-version" first.
$ module unload riscv_toolchain/compile-version
$ module load riscv_toolchain/freedomstudio-version
$ which riscv64-unknown-elf-gcc
riscv64-unknown-elf-gcc is /opt/FreedomStudio/SiFive/riscv64-unknown-elf-gcc-8.3.0-2019.08.0/bin/riscv64-unknown-elf-gcc
個人環境管理
~/privatemodules/
與/usr/local/Modules/modulefiles
一樣可以包含local的環境設置
$ cd ~/
$ mkdir privatemodules/
自定義路徑
增加module搜索的路徑
$ export MODULEPATH=your_modulefiles_path_directory:$MODULEPATH
常用命令
命令 | 作用 |
---|---|
module avail 或 module av | 查看系統中可用的資源 |
module add 或 module load | 加載模塊 |
module rm 或 unload | 卸載模塊 |
module list 或 module li | 顯示已加載模塊 |
module purge | 卸載所有模塊 |
module show | 顯示模塊配置文件 |
module swap 或 module switch | 將模塊1 替換為 模塊2 |
module help | 查看具體軟件的信息 |
參考資料
[1].超算入門課程4 module命令使用教學
[2].Environment Modules
[3].Linux使用Moduler切換各種MPI環境