@ Карта сайта News Автора!

Bog BOS: Управление переменными окружения - Environment Modules

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL

Последнее изменение файла: 2012.11.28
Скопировано с www.bog.pp.ru: 2024.11.23

Bog BOS: Управление переменными окружения - Environment Modules

Пакет Environment Modules предназначен для управления установкой переменных окружения командной оболочки (bash, ksh, zsh, sh, csh, tcsh, perl) с целью запуска различных версий приложения или различных приложений.

Теория операций

Описание переменных окружения оболочки для каждой версии приложения оформляется в виде описания модуля. При инициализации оболочки обеспечивается инициализация системы управления модулями, в частности задаются начальные значения переменных окружения самой системы модулей и наличие команды module, вызываемой затем пользователем. Основная функция команды module - загрузка модуля - рекурсивный поиск (список каталогов поиска в MODULEPATH, подкаталог можно задавать явно) и интерпретация (выполнение) описания модуля, обеспечивающее устанавливку значений переменных окружения, требуемых приложению (PATH, MANPATH, LD_LIBRARY_PATH и др.). При выгрузке модуля состояние переменых окружения возвращается в исходное состояние. В качестве имени модуля используется имя файла (с указанием подкаталогов). Описание модулей делается на языке Tcl (включая условные выражения, зависящие от текущего значения переменных окружения) и представляет собой набор команд Tcl, включая TclX и расширения Tcl от системы модулей (при выгрузке модуля выполняются обратные команды, по возможности). Описание требуемых изменений значений переменных окружения не зависит от типа используемой командной оболочки (конечно, из списка поддерживаемых). Есть поддержка версий самой системы модулей (не разбирался).

Установка

Реализован на C, но с использованием libtcl8.4 (были реализации на sh и tcl). Для сборки также требуются tcl-devel [и tclx-devel]. Имеются готовые пакеты environment-modules (версия 3.2.6) для RHEL в репозиториях EPEL (поиск модулей задаётся в /usr/share/Modules/init/.modulespath; при установке там указаны /etc/modulefiles и /usr/share/Modules/modulefiles; затирается при обновлении пакета, также как и /usr/share/Modules/etc/rc) и Modules для SuSE. Для установки требуются пакеты tcl [и tclx].

Некоторые ключи ./configure (./configure --help):

Настройка

Описание модуля начинается с магического комментария (в конце может стоять номер версии формата: "1.0"):

#%Module

Специфические для системы модулей команды Tcl (и модифицированные):

Переменные

Подпрограмма ModulesHelp в теле описания модуля позволяет задать текст, который будет выводить команда "module help имя-модуля".

Подпрограмма ModulesDisplay в теле описания модуля позволяет задать дополнительный текст, который будет выводить команда "module display имя-модуля".

Использование

При запуске командной оболочки bash выполняется ~/.bash_profile, который выполняет ~/.bashrc, который выполняет /etc/bashrc, который выполняет скрипты /etc/profile.d/*.sh, среди которых есть /etc/profile.d/modules.sh, устанавливающий переменные окружения (MODULESHOME, LOADEDMODULES, MODULEPATH) для системы модулей и создаёт макрокоманду module. Для командных оболочек csh (ksh) используется /etc/profile.d/modules.csh. Текущее состояние переменных окружения запоминается в ~/.modulesbeginenv (а если параллельно выполняется несколько командных оболочек? а разных оболочек?). Команды инициализации берутся из ${MODULESHOME}/init/bash (csh, ksh, sh, perl, python, tcsh, zsh). Переменная окружения MODULEPATH задаёт список каталогов (через двоеточие), в которых ищутся описания модулей. Первоначальный список берётся из ${MODULESHOME}/init/.modulespath.

Переменные окружения:

Команда module при каждом запуске просматривает файлы с глобальными (${MODULERCFILE } или ${MODULESHOME }/etc/rc (сюда вписывать trace и log)), личными (${HOME }/.modulerc ) и модулезависимыми (файлы .modulerc и .version, встреченные во время поиска описания модуля) настройками. Обнаруженный файл с настройками интерпретируется (выполняется) как описание загружаемого модуля.

Модули ищутся по имени в каталогах (рекурсивно), указанных в MODULEPATH (список через двоеточие). Описанием модуля считается файл, имеющий в начале магический заголовок.

Ключи команды module:

Подкоманды команды module:

Методика использования при проектной работе

Сгруппировать все модули для проектов в одно хранилище (.../modulefiles/projects), в котором для каждого проекта будет модуль, задающий версии используемых САПР:

#%Module1.0
setenv PROJECT_HOME /share/projects/имя-проекта

setenv CADNAME1_DEFAULT 6.7
setenv CADNAME2_DEFAULT A-2008

Сгруппировать все модули для отдельных САПР в одно хранилище (.../modulefiles/tools), в котором для каждого САПР будет отдельный каталог в соответствии с именем САПР. В этом каталоге будет отдельный модуль для каждой версии и файл .version для определения версии по умолчанию

#%Module1.0

if [info exists env(CADNAME1_DEFAULT)] {
  set    ModulesVersion $env(CADNAME1_DEFAULT)
} else {
  set    ModulesVersion "5.2"
}

Создать хранилище для группировки САПР, часто используемого вместе (.../modulefiles/works), в котором для каждого типа работы будет отдельный модуль:

#%Module1.0

module load САПР1 САПР2

Теперь для создания правильного окружения над определённым проектом достаточно выполнить

module load имя-проекта тип-работы

Ссылки

@ Карта сайта News Автора!

Bog BOS: Управление переменными окружения - Environment Modules

Последние изменения:
2024.11.22: sysadmin: systemd-journald (централизованное хранение)
2024.11.11: sysadmin: Linux: пространства имён
2024.11.06: sysadmin: настройка TCP/IP в Linux: виртуальный интерфейс и виртуальный мост
2024.10.25: sysadmin: Linux VFS, атрибуты, расширенные атрибуты, ACL



Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru