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

  1. #%Module *.*
    はじめのおまじない
    ないと怒られる

  2. conflict        gcc
    モジュールのグループのようなもの
    これが同じモジュールを2つ以上ロードしようとすると怒られる

  3. prepend-path   ENV_VAR val
    環境変数ENV_VARの先頭にvalを追加
  4. (例にはないけど)
    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
などと書いておけばいいかも.
カテゴリー:サーバ
記事作成日:2018-06-07