Environment Modulesを使う
前書き
CUDAを使っているとgccのバージョンをやたらにあげられないけど、バージョンの高いgccを使いたい時もあったりなかったり.
そんな時に使うgccのバージョンをちょちょいと切り替えできたら嬉しい.
そんな時に使えるのがmodulesと言うもの.
スパコンなんかでたくさん使われているイメージ.
インストール
CentOSだと
yum install environment-modules
で入るはず.
設定ファイルの置き場
echo $MODULEPATH
で表示されるディレクトリをmoduleコマンドは検索する.
root権限がないとかで他の場所に置きたければ
module use /path/to/modulefiles/dir
で検索ディレクトリを追加できる.
設定ファイル
例: 野良ビルドしたgcc
#%Module 4.1
conflict gcc
prepend-path PATH /usr/local/gcc-5.4.0/bin
prepend-path LD_LIBRARY_PATH /usr/local/gcc-5.4.0/lib64
prepend-path CPATH /usr/local/gcc-5.4.0/include
#%Module *.*
はじめのおまじない
ないと怒られる
conflict gcc
モジュールのグループのようなもの
これが同じモジュールを2つ以上ロードしようとすると怒られる
prepend-path ENV_VAR val
環境変数ENV_VARの先頭にvalを追加- (例にはないけど)
setenv ENV_VAR val
環境変数ENV_VARをvalに設定
依存関係を記述
-
prereq hoge
と書けばhogeがloadされていない場合に怒られる - 依存モジュールが勝手にロードされるようにしたければ
load hoge
と記述しておく.
この場合依存元をunloadするとhogeもunloadされる.
hogeをunloadしたくなければalways_load hoge
とすればいい.
使い方
全モジュール一覧を表示
module avail
モジュールをロード
module load module_name
モジュールをアンロード
module unload module_name
ロードしているモジュールの一覧を表示
module list
インストールしたのにmoduleコマンドが無いと言われる場合
shellの.*rcファイルなどに
. /etc/profile.d/modules.sh
などと書いておけばいいかも.