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

参考资料

药企,独角兽,苏州。团队长期招人,感兴趣的都可以发邮件聊聊:tiehan@sina.cn
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn