LoginSignup
4
3

Environment modules事始め

Last updated at Posted at 2019-01-05

Environment modulesの概要

数値計算を行うサーバーで、複数のビルド環境をそろえて、それらを簡便に切り替えたい場合や、それらのビルド環境でビルドしたアプリをそろえて切り替えたい場合に便利。

例えば、最新のgccを入れたい場合、一般にはシステムデフォルトのgccと環境が食い合う。
デフォルト以外のコンパイラを入れれば、出来れば使うライブラリもそれに合わせてビルドした方がよい。そうすると、コンパイラの切り替えに伴って、そのコンパイラでビルドしたディレクトリにLD_LIBRARY_PATHを通したい という要望が出てくる。他にもintelのコンパイラを使っているときはMKLをリンクしたい という事にもなる。
さらにコンパイラ毎にMPIをビルドする場合、もう少し話がややこしくなる。MPIを使ってビルドしたものはビルドに使ったものと同じ環境のMPIのmpirun実行するのが望ましい。つまり、ビルド時だけではなくて、アプリ実行時にも環境をそろえた方が良い ということになる。
と、様々なコンパイラ、ライブラリでのビルド環境をそろえようとすると、何か一括して環境を切り替えたい という需要が出てくる。その実現方法として、environment modulesが便利。

インストール

インストールはCentOSであれば、yumで簡単。
参考ウェブページ:Environment modules のインストールと modulefile の登録 - Qiita

設定

中心となる環境変数はMODULESPATHMODULEHOME
この環境変数は$(MODULESHOME)/init/.modulespathに記載されているので、自分の好みのディレクトリを作りたければ、ここに追加。反映させるには再ログインが必要。

/usr/share/Modules/init/.modulespath に追加するテキスト例
/opt/modulefiles

使い方

#ロードされているmoduleのリストを表示
module list
#ロードされているmoduleを全てアンロードする
module purge
#用意されているmoduleのリストを表示
module avail
#モジュールAを読み込む
module load A
#モジュールAのヘルプを見る
module help A

シェルスクリプト内で呼ぶとき

moduleコマンドはやや特殊で、PATHを通す類のものとは異なる。スクリプトの上部に以下のコマンドを書いておくとmoduleコマンドが使える

source /etc/profile.d/modules.sh  #sh/bash
source /etc/profile.d/modules.csh #csh/tsch

参考にしたページ: module コマンド

書き方

#ヘルプに表示される内容
proc ModulesHelp { } {
        puts stderr "module what is\n"
}

module-whatis   "module what is"

#基本となる変数の設定
set variable variable_to_be_substituted

#競合するモジュールの指定
conflict a_module_to_be_avoided_with_this_module

#当該モジュールに伴って呼ばれるべきモジュールを読む
module load module_to_be_loaded

#PATHをA_PATH_to_be_prependedに前置
prepend-path A_PATH PATH_to_be_prepended

#AN_ENVIRONMENT_VARIABLE_to_be_declaredを環境変数AN_ENVIRONMENT_VARIABLEとして宣言
setenv AN_ENVIRONMENT_VARIABLE AN_ENVIRONMENT_VARIABLE_to_be_declared

たとえば、

proc ModulesHelp { } {
        puts stderr "\tAdds some_application to your environment variables.\n"
}

module-whatis   "adds some_application to your environment variable.s"

set root /opt/some_application_1.2.3

conflict different_environment_module

module load dependent_module_on_some_application_1.2.3

prepend-path PATH $root/bin
prepend-path PATH $root/sbin

prepend-path MANPATH $root/share/man

prepend-path LD_LAIBRARY_PATH $root/lib

setenv some_application_ROOT $root

参考にしたURL: Modulesを使った環境設定、環境スイッチ - おびなたん☆

4
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3