[Rocky] Environment modules






1. 개요

Environment modules을 설정하고 사용합니다.







2. 버전

Rocky 9.5







3. 내용





3-1. Environment modules이란?

소프트웨어 환경을 동적으로 관리하고 사용자 세션에서 필요한 프로그램이나 라이브러리의 버전을 설정할 수 있게 해주는 Unix/Linux 시스템의 유틸리티입니다.




3-2. Environment modules 주요 특징

  1. 동적 환경 설정
    • 소프트웨어의 실행 환경을 동적으로 설정합니다.
    • 특정 소프트웨어의 설치 경로나 버전을 쉽게 전환할 수 있습니다.
  2. 버전 관리
    • 동일한 소프트웨어의 여러 버전을 한 시스템에서 사용할 수 있으며, 사용자가 필요한 버전을 명시적으로 로드할 수 있습니다.
  3. 독립적인 환경 제공
    • 사용자가 서로 간섭 없이 독립적인 소프트웨어 환경을 설정할 수 있습니다.
  4. 간단한 명령어
    • 텍스트 기반으로 module 명령어를 사용하여 손쉽게 환경을 로드하거나 언로드할 수 있습니다.




3-3. Environment modules 설정 파일

  1. 설정 파일 경로
    • /etc/environment-modules
  2. modulespath
    • 모듈 파일 검색 경로를 정의하는 파일입니다.
  3. initrc
    • Environment Modules의 초기화 파일로, 모듈 시스템의 기본 설정을 정의합니다.
    • 사용자별 초기 설정 파일로, 일반적으로 모듈 시스템이 시작될 때 로드됩니다.
  4. siteconfig.tcl
    • 전역 설정을 위한 Tcl 스크립트, 환경 모듈 동작을 세부적으로 조정합니다.

3-4. Environment module 명령어 옵션




3-4-1. 모듈 관리 옵션

  1. module avail
    설명: 현재 시스템에서 사용 가능한 모든 모듈을 표시합니다.
    예제: module avail
  2. module list
    설명: 현재 로드된 모듈을 나열합니다.
    예시: module list
  3. module load <module>
    설명: 지정한 모듈을 로드합니다.
    예시 : module load python/3.12.8
  4. module unload <module>
    설명: 로드된 모듈을 언로드합니다.
    예시: module unload python/3.12.8
  5. module purge
    설명: 로드된 모든 모듈을 언로드합니다.
    예시: module purge
  6. module swap <mod1> <mod2>
    설명: <mod1> 모듈을 언로드하고 <mod2> 모듈을 로드합니다.
    예시: module swap python/3.12.8 python/3.13.1



3-5-2. 모듈 정보 확인 옵션

  1. module show <module>
    설명: 지정한 모듈이 설정하는 환경 변수 및 설정을 자세히 표시합니다.
    예제: module show python/3.12.8
  2. module display <module>
    설명: module show와 비슷하지만 간략하게 표시.
    예제: module display python/3.12.8
  3. module whatis <module>
    설명: 지정한 모듈의 간략한 설명(whatis 메시지)을 표시.
    예제: module whatis python/3.12.8
  4. module help <module>
    설명: 모듈 로드 시 제공되는 도움말(ModulesHelp)를 표시.
    예제: module help python/3.12.8



3-5-3. 모듈 경로 관리 옵션

  1. module use <dir>
    설명: 새로운 모듈 파일 디렉터리를 경로에 추가합니다.
    예제: module use /home/user/modules
  2. module unuse <dir>
    설명: 경로에서 특정 디렉터리를 제거합니다.
    예제: module unuse /home/user/modules
  3. module path
    설명: 현재 사용 중인 모듈 파일 경로를 표시합니다.
    예제: module path



3-5-4. 캐시 및 환경 관리 옵션

  1. module refresh
    설명: 모듈 캐시를 새로 고침합니다.
    예제: module refresh
  2. module initadd <module>
    설명: 특정 모듈을 로그인 시 자동으로 로드되도록 설정합니다. 예제: module initadd gcc/9.3.0
  3. module initrm <module>
    설명: 자동 로드에서 특정 모듈을 제거합니다.
    예제: module initrm gcc/9.3.0
  4. module initlist
    설명: 자동 로드 설정된 모듈 목록을 표시합니다.
    예제: module initlist




3-5. Environment module 파일 옵션

  1. set
    설명: 모듈 파일 내부 변수 설정합니다. (환경 변수는 아님)
    예제: set python_root /apps/python/3.12.8
  2. setenv
    설명: 환경 변수 설정합니다.
    예제: setenv PYTHONHOME $python_root
  3. unsetenv
    설명: 환경 변수 제거합니다.
    예제: unsetenv PYTHONHOME
  4. prepend-path
    설명: 지정된 환경 변수에 경로를 앞에 추가합니다.
    예제: prepend-path PATH $python_root/bin
  5. append-path
    설명: 지정된 환경 변수에 경로를 뒤에 추가합니다.
    예제: append-path LD_LIBRARY_PATH $python_root/lib
  6. module load
    설명: 다른 모듈 파일을 로드합니다.
    예제: module load python/3.12.8
  7. module unload
    설명: 특정 모듈 파일을 언로드합니다.
    예제: module unload python/3.12.8
  8. conflict
    설명: 충돌하는 모듈이 로드되어 있으면 에러 발생합니다.
    예제: conflict other_module
  9. module-whatis
    설명: 모듈 설명 추가합니다.
    예제: module-whatis “Loads Python 3.12.8”
  10. proc ModulesHelp
    설명: 모듈 도움말 추가합니다.
    예제: proc ModulesHelp { } { puts stderr “…”}
  11. if
    설명: 조건문 조건에 따라 다른 설정 적용합니다.
    예제: if { [info exists env(PYTHONHOME)] } {}
  12. puts stderr
    설명: 디버깅 또는 상태 메시지 출력합니다.
    예제: puts stderr “Loading Python”







4. Environment modules





4-1. 설치

# dnf -y install environment-modules




4-2. 확인

# module avail

---------- /usr/share/Modules/modulefiles ----------
dot  module-git  module-info  modules  null  use.own

Key:
modulepath







5. modulespath





5-1. Module 파일 검색 경로 확인

# echo $MODULEPATH

/usr/share/Modules/modulefiles:/etc/modulefiles:/usr/share/modulefiles




5-2. Module 파일 검색 경로 변경

# mkdir /apps/modulefiles
# vim /etc/environment-modules/modulespath

#/usr/share/Modules/modulefiles:/etc/modulefiles:/usr/share/modulefiles
/apps/modulefiles




5-3. Module 파일 검색 경로 변경 확인

# su –
# echo $MODULEPATH

/appss/modulefiles







6. Environment Module 설정





6-1. 모듈 파일 생성

# mkdir /apps/modulefiles/python
# vim /apps/modulefiles/python/3.12.8

#%Module

# Module description
proc ModulesHelp { } {
    puts stderr "This module sets up the environment for Python 3.12.8."
}

module-whatis "Sets up Python 3.12.8 environment."

# Set PYTHONHOME
setenv PYTHONHOME /apps/python/3.12.8

# Prepend to PATH
prepend-path PATH $env(PYTHONHOME)/bin

# Prepend to LD_LIBRARY_PATH
prepend-path LD_LIBRARY_PATH $env(PYTHONHOME)/lib


# vim /apps/modulefiles/python/3.13.1

#%Module

# Module description
proc ModulesHelp { } {
    puts stderr "This module sets up the environment for Python 3.13.1."
}

module-whatis "Sets up Python 3.13.1 environment."

# Set PYTHONHOME
set PYTHONHOME /apps/python/3.13.1

# Append to PATH
append-path PATH $PYTHONHOME/bin

# Append to LD_LIBRARY_PATH
append-path LD_LIBRARY_PATH $PYTHONHOME/lib




6-2. 모듈 설정 확인

# module avail python

-------------------- /apps/modulefiles --------------------
python/3.12.8  python/3.13.1




6-3. 모듈 help 확인

# module help python/3.12.8

-------------------------------------------------------------------
Module Specific Help for /apps/modulefiles/python/3.12.8:

This module sets up the environment for Python 3.12.8.
-------------------------------------------------------------------


# module help python/3.13.1

-------------------------------------------------------------------
Module Specific Help for /apps/modulefiles/python/3.13.1:

This module sets up the environment for Python 3.13.1.
-------------------------------------------------------------------




6-4. 모듈 whatis 확인

# module whatis

-------------------- /apps/modulefiles --------------------
       python/3.12.8: Sets up Python 3.12.8 environment.
       python/3.13.1: Sets up Python 3.13.1 environment.




6-5. 모듈 로드




6-5-1. prepend-path

# module load python/3.12.8
# module list

Currently Loaded Modulefiles:
 1) python/3.12.8


# which python

/apps/python/3.12.8/bin/python



6-5-2. append-path

# module load python/3.13.1
# module list

Currently Loaded Modulefiles:
 1) python/3.12.8   2) python/3.13.1


# which python

/apps/python/3.12.8/bin/python


# echo $PATH

/apps/python/3.12.8/bin:/root/.local/bin:/root/bin:/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/apps/python/3.13.1/bin




6-6. 모듈 언로드

# module unload python/3.12.8
# module list

Currently Loaded Modulefiles:
 1) python/3.13.1




6-7. 모듈 purge

# module load python/3.12.8
# module list

Currently Loaded Modulefiles:
 1) python/3.13.1   2) python/3.12.8


# module purge
# module list

No Modulefiles Currently Loaded.







6. initrc





6-1. 설정

# vim /etc/environment-modules/initrc

+ module load python/3.12.8




6-2. 확인

# su – seuheu

Loading python/3.12.8


# python –version

Python 3.12.8







7. siteconfig.tcl





7-1. 설정

# vim /etc/environment-modules/siteconfig.tcl

prepend-path PATH /apps/python/3.13.1/bin
prepend-path LD_LIBRARY_PATH /apps/python/3.13.1/lib




7-2. 확인

# su – seuheu
$ echo $PATH

/home/seuheu/.local/bin:/home/seuheu/bin:/usr/share/Modules/bin:/apps/python/3.12.8/bin:/apps/python/3.13.1/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin



Leave a Comment