1. 개요
Environment modules을 설정하고 사용합니다.
2. 버전
Rocky 9.5
3. 내용
3-1. Environment modules이란?
소프트웨어 환경을 동적으로 관리하고 사용자 세션에서 필요한 프로그램이나 라이브러리의 버전을 설정할 수 있게 해주는 Unix/Linux 시스템의 유틸리티입니다.
3-2. Environment modules 주요 특징
- 동적 환경 설정
- 소프트웨어의 실행 환경을 동적으로 설정합니다.
- 특정 소프트웨어의 설치 경로나 버전을 쉽게 전환할 수 있습니다.
- 버전 관리
- 동일한 소프트웨어의 여러 버전을 한 시스템에서 사용할 수 있으며, 사용자가 필요한 버전을 명시적으로 로드할 수 있습니다.
- 독립적인 환경 제공
- 사용자가 서로 간섭 없이 독립적인 소프트웨어 환경을 설정할 수 있습니다.
- 간단한 명령어
- 텍스트 기반으로 module 명령어를 사용하여 손쉽게 환경을 로드하거나 언로드할 수 있습니다.
3-3. Environment modules 설정 파일
- 설정 파일 경로
- /etc/environment-modules
- modulespath
- 모듈 파일 검색 경로를 정의하는 파일입니다.
- initrc
- Environment Modules의 초기화 파일로, 모듈 시스템의 기본 설정을 정의합니다.
- 사용자별 초기 설정 파일로, 일반적으로 모듈 시스템이 시작될 때 로드됩니다.
- siteconfig.tcl
- 전역 설정을 위한 Tcl 스크립트, 환경 모듈 동작을 세부적으로 조정합니다.
3-4. Environment module 명령어 옵션
3-4-1. 모듈 관리 옵션
- module avail
설명: 현재 시스템에서 사용 가능한 모든 모듈을 표시합니다.
예제: module avail - module list
설명: 현재 로드된 모듈을 나열합니다.
예시: module list - module load <module>
설명: 지정한 모듈을 로드합니다.
예시 : module load python/3.12.8 - module unload <module>
설명: 로드된 모듈을 언로드합니다.
예시: module unload python/3.12.8 - module purge
설명: 로드된 모든 모듈을 언로드합니다.
예시: module purge - module swap <mod1> <mod2>
설명: <mod1> 모듈을 언로드하고 <mod2> 모듈을 로드합니다.
예시: module swap python/3.12.8 python/3.13.1
3-5-2. 모듈 정보 확인 옵션
- module show <module>
설명: 지정한 모듈이 설정하는 환경 변수 및 설정을 자세히 표시합니다.
예제: module show python/3.12.8 - module display <module>
설명: module show와 비슷하지만 간략하게 표시.
예제: module display python/3.12.8 - module whatis <module>
설명: 지정한 모듈의 간략한 설명(whatis 메시지)을 표시.
예제: module whatis python/3.12.8 - module help <module>
설명: 모듈 로드 시 제공되는 도움말(ModulesHelp)를 표시.
예제: module help python/3.12.8
3-5-3. 모듈 경로 관리 옵션
- module use <dir>
설명: 새로운 모듈 파일 디렉터리를 경로에 추가합니다.
예제: module use /home/user/modules - module unuse <dir>
설명: 경로에서 특정 디렉터리를 제거합니다.
예제: module unuse /home/user/modules - module path
설명: 현재 사용 중인 모듈 파일 경로를 표시합니다.
예제: module path
3-5-4. 캐시 및 환경 관리 옵션
- module refresh
설명: 모듈 캐시를 새로 고침합니다.
예제: module refresh - module initadd <module>
설명: 특정 모듈을 로그인 시 자동으로 로드되도록 설정합니다. 예제: module initadd gcc/9.3.0 - module initrm <module>
설명: 자동 로드에서 특정 모듈을 제거합니다.
예제: module initrm gcc/9.3.0 - module initlist
설명: 자동 로드 설정된 모듈 목록을 표시합니다.
예제: module initlist
3-5. Environment module 파일 옵션
- set
설명: 모듈 파일 내부 변수 설정합니다. (환경 변수는 아님)
예제: set python_root /apps/python/3.12.8 - setenv
설명: 환경 변수 설정합니다.
예제: setenv PYTHONHOME $python_root - unsetenv
설명: 환경 변수 제거합니다.
예제: unsetenv PYTHONHOME - prepend-path
설명: 지정된 환경 변수에 경로를 앞에 추가합니다.
예제: prepend-path PATH $python_root/bin - append-path
설명: 지정된 환경 변수에 경로를 뒤에 추가합니다.
예제: append-path LD_LIBRARY_PATH $python_root/lib - module load
설명: 다른 모듈 파일을 로드합니다.
예제: module load python/3.12.8 - module unload
설명: 특정 모듈 파일을 언로드합니다.
예제: module unload python/3.12.8 - conflict
설명: 충돌하는 모듈이 로드되어 있으면 에러 발생합니다.
예제: conflict other_module - module-whatis
설명: 모듈 설명 추가합니다.
예제: module-whatis “Loads Python 3.12.8” - proc ModulesHelp
설명: 모듈 도움말 추가합니다.
예제: proc ModulesHelp { } { puts stderr “…”} - if
설명: 조건문 조건에 따라 다른 설정 적용합니다.
예제: if { [info exists env(PYTHONHOME)] } {} - 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