Environment Modules で複数のバージョンのソフトウェアを扱う

Modules -- Software Environment Management *1

これはユーザーが異なる複数のバージョンのソフトウェアを使用できるようにするために, load/unload を提供して管理を楽にする為のソフトウェアのようです.

PC クラスタOSCAR Project)などでの運用実績があり, クラスタスパコンなどで使うところが多いという感じを受けました.

ソフトウェアのインストール, 設定後の話をすると.

$ module avail
gnu/4.6.3 gnu/4.7.1
$ module load gnu/4.6.3
$ gcc --version
gcc 4.6.3
$ module unload gnu/4.6.3
$ gcc --version
gcc 4.4.6 # デフォルトの GCC

みたいな操作ができます.

もちろん, 自動でやってくれるわけではなく, 自分でモジュールの設定ファイルを書く必要があります. それはこのソフトウェアをインストールした後に自動で入っているモジュールを参考にすると案外簡単にかけます.

なのでインストールから module が使用できるようになるまでさっと書いておきます.

インストール

上のページのインストールからソフトウェアをダウンロードしていつものコマンドでインストール. C 言語版の Stable の方がいいでしょう.

$ ./configure
$ make install

一応 make install する前に,

$ ./modulecmd bash

と打ち込んでエラーがないか確認してください.

デフォルトのインストールパスは /usr/local/Modules のようです.

設定

これだけでは使えないので, 環境変数のロード用のスクリプトを読み込みます.<インストールディレクトリ>/<バージョン>/init ディレクトリ内に bash, sh などシェルと Python, Perl 用の設定ファイルが置かれているようです.

bash では .bashrc に以下のように書き込めば OK です.

if [ -f <インストールディレクトリ>/<バージョン>/init/bash ]; then
  . <インストールディレクトリ>/<バージョン>/init/bash
fi

これで,

$ module

と打ち込んで Usage が出力されれば OK.

これでモジュールの管理設定の前までできました.

モジュールの登録

後はこのソフトウェアで管理すべきモジュールを登録するのですが, これは設定ファイルを見て書いたほうが早いと思います.<インストールディレクトリ>/<バージョン>/modulefiles の中に幾つかモジュール設定ファイルが入っていますので, これを参考にしてください.

また, モジュール設定ファイルのパスは $MODULEPATH 環境変数に登録されています. 自分で設定すれば任意のディレクトリに置くことが可能です.

最後に

今まで GCC の変更には update-alternatives を使っていました. しかし今回紹介したソフトウェアはモジュール設定ファイルを実際に見てもらえれば分かりますが環境変数に append/prepend などができますので, 実行ファイルだけでなくライブラリなども簡単に変更できると思います.

例えば, MPI の実装などは OpenMPI や MVAPICH や MPICH などの複数ありますが, 実行ファイル名が被っていたりしてかなりめんどくさいです.

インストールが大変めんどくさくなると思いますが, 今回のソフトウェアで多少運用が楽になるかなと思います.

*1:正式な名前がよく分かりません...