Linux【8】-软件管理-9-软件安装1-Environment module在centos系统中的安装和使用
一、简介
在linux下当对同一个编译器、运行库等有多版本的时候,如果每次编译都要去写上绝对路径就会很麻烦,使用module-environment来进行管理这些环境变量是比较方便的。
二、安装
检查系统中是否已经安装了modules软件
[root@g01 data]# rpm -qa | grep environment-modules
environment-modules-3.2.10-10.el7.x86_64
查看可以安装modules
[root@g01 data]# yum list |grep modules
environment-modules.x86_64 3.2.10-10.el7 @base
安装modules
yum install -y environment-modules-3.2.10-10
默认安装路径:
/usr/share/Modules
当然,也可以通过rpm查询到安装路径
rpm -ql environment-modules-3.2.10-10.el7.x86_64
三、使用
安装完成后,会默认在/usr/share/Modules目录下产生一系列文件夹,其中init中放了在各种系统下初始化这个程序的脚本,我的终端是bash,所以使用如下命令初始化。
source /usr/share/Modules/init/bash
3.1 一些常用命令
显示可以使用的模块
module avail
加载模块
module load
卸载模块
module unload
显示已经加载的模块
module list
3.2 modulefile的书写
3.2.1.搜索路径
使用module load xxx命令后,系统就会在 $MODULEPATH 去寻找名字为xxx的文件,然后按照该文件里面的内容来修改环境变量。
$MODULEPATH默认是在 /usr/share/Modules/modulefile 和一些其他的地方。如果想修改或者说添加一些别的路径,可以通过在初始化文件中添加命令修改MODULEPATH来达到目的。
在 /usr/share/Modules/init/bash 中最后一行添加
export MODULEPATH=/YOUR/PATH/:$MODULEPATH
查看MODULEPATH环境变量
echo $MODULEPATH
3.2.2 文件书写
/usr/share/Modules/modulefiles/own-modules
#%Module1.0
module-whatis Provides the Intel fortran and c compiler mkl 2015 environment for x86_64 systems
setenv INTEL_LICENSE_FILE /opt/intel/licenses/all_intel_products.lic
#conflict intel pathscale pgi gcc open64
setenv CC icc
setenv CXX icpc
setenv FC ifort
setenv F77 ifort
setenv F90 ifort
setenv F95 ifort
setenv CFLAGS -O2
setenv FFLAGS -O2
setenv OFLAGS -O3
setenv GFLAGS -g -O1
setenv MKLROOT /opt/intel/mkl
prepend-path PATH /opt/intel/composer_xe_2015/bin
prepend-path MANPATH /opt/intel/composer_xe_2015/man/en_US
prepend-path LD_RUN_PATH /opt/intel/composer_xe_2015/lib/intel64:/opt/intel/composer_xe_2015/mkl/lib/intel64
prepend-path LD_LIBRARY_PATH /opt/intel/composer_xe_2015/lib/intel64:/opt/intel/composer_xe_2015/mkl/lib/intel64
prepend-path LIBRARY_PATH /opt/intel/composer_xe_2015/lib/intel64:/opt/intel/composer_xe_2015/mkl/lib/intel64
说明:
#%Module1.0
这个是识别这个文件为modulefile的,没有他这个文件不会被识别
给环境变量添加新路径:
prepend 要修改的环境变量 路径
修改环境变量值:
setenv 环境变量名 值
如果这个modulefile 已经被加载,那么当前的modulefile将不能被加载。
conflict modulefile
其他例子:
[root@g01 ~]# module list
No Modulefiles Currently Loaded.
[root@g01 ~]# module avail
--------------------------------------------- /usr/share/Modules/modulefiles ---------------------------------------------
dot module-git module-info modules null use.own
---------------------------------------------------- /etc/modulefiles ----------------------------------------------------
mpi/openmpi-x86_64
[root@g01 ~]# module load mpi/openmpi-x86_64
[root@g01 ~]# module list
Currently Loaded Modulefiles:
1) mpi/openmpi-x86_64
[root@g01 ~]# echo $MODULEPATH
/usr/share/Modules/modulefiles:/etc/modulefiles
[root@g01 ~]# cat /etc/modulefiles/mpi/openmpi-x86_64
#%Module 1.0
#
# OpenMPI module for use with 'environment-modules' package:
#
conflict mpi
prepend-path PATH /usr/lib64/openmpi/bin
prepend-path LD_LIBRARY_PATH /usr/lib64/openmpi/lib
prepend-path PYTHONPATH /usr/lib64/python2.7/site-packages/openmpi
prepend-path MANPATH /usr/share/man/openmpi-x86_64
setenv MPI_BIN /usr/lib64/openmpi/bin
setenv MPI_SYSCONFIG /etc/openmpi-x86_64
setenv MPI_FORTRAN_MOD_DIR /usr/lib64/gfortran/modules/openmpi-x86_64
setenv MPI_INCLUDE /usr/include/openmpi-x86_64
setenv MPI_LIB /usr/lib64/openmpi/lib
setenv MPI_MAN /usr/share/man/openmpi-x86_64
setenv MPI_PYTHON_SITEARCH /usr/lib64/python2.7/site-packages/openmpi
setenv MPI_COMPILER openmpi-x86_64
setenv MPI_SUFFIX _openmpi
setenv MPI_HOME /usr/lib64/openmpi
其他例子:
proc ModulesHelp { } {
global version prefix
puts stderr "\t Loads the environment for my installed home folder HOME/local"
}
module-whatis "Loads the environment for my installed home folder HOME/local"
set HOME /home/svu/a0081742
prepend-path PATH $HOME/local/bin
prepend-path LIBRARY_PATH $HOME/local/lib
prepend-path LD_LIBRARY_PATH $HOME/local/lib
prepend-path LD_INCLUDE_PATH $HOME/local/include
四、报错
报错1
root@g03 bin]# module load amber/amber18
amber/amber18(10):ERROR:102: Tcl command execution failed: prepend-path PATH $AMBERHOME/bin
原因:
$AMBERHOME 需要绝对路径, 改成/data/software/amber18/即可
五、我的例子
5.1 amber
/etc/profile中的
# Amber
export AMBERHOME=/data/software/amber20
export MPI_HOME=$AMBERHOME/AmberTools
export PATH=$AMBERHOME/bin:$PATH
export LD_LIBRARY_PATH=$AMBERHOME/lib:$LD_LIBRARY_PATH
#export DO_PARALLEL="mpirun -np 4"
export PYTHON_PATH=/data/software/amber18/lib/python2.7/site-packages:$PYTHON_PATH
改成:
vim /data/modulefiles/amber/amber20
#%Module 1.0
#
# OpenMPI module for use with 'environment-modules' package:
#
#
setenv AMBERHOME /data/software/amber/amber20
setenv CUDA_HOME /usr/local/cuda-10.1
setenv MPI_ROOT /data/software/mpich/mpich-3.3.2
prepend-path PATH /data/software/amber/amber20/bin
prepend-path PATH /data/software/mpich/mpich-3.3.2/bin
prepend-path LD_LIBRARY_PATH /data/software/amber/amber20/lib
prepend-path LD_LIBRARY_PATH /data/software/g03-ti-lib
prepend-path PERL5LIB /data/software/amber/amber20/lib/perl
prepend-path PYTHONPATH /data/software/amber/amber20/lib/python3.8/site-packages
添加modulefle路径
echo $MODULEPATH
/usr/share/Modules/modulefiles:/etc/modulefiles
vim /usr/share/Modules/init/bash 中最后一行添加
export MODULEPATH=/data/modulefiles/:$MODULEPATH
然后:
source /usr/share/Modules/init/bash
echo $MODULEPATH
/data/modulefiles/:/usr/share/Modules/modulefiles:/etc/modulefiles
参考资料
- https://blog.csdn.net/jslove1997/article/details/80338370
- http://modules.sourceforge.net/
- https://modules.readthedocs.io/en/latest/module.html
- https://help.ubuntu.com/community/EnvironmentVariables *https://blog.mrzhenggang.com/supercomputer-courses-module/#3-3-%E5%8D%B8%E8%BD%BD%E6%89%80%E6%9C%89%E6%A8%A1%E5%9D%97
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn