The problem

Maintaining custom software as a sysadmin is not easily possible for a research group, because ressources needed to do so easily exceed the available working time, as soon as the number of software installations is getting too big or the software too complex.

Researchers on the other hand rely on up-to-date or unpackaged software to do their work.

General solution

One way to solve this issue is to provide a way researchers can install and maintain their own software, without interferring with the system software.

Software solution

One possible software solution is provided by the Environment Modules Project.

Implementation

The path /pub/env-modules should contain the user maintained software and is mounted via nfs and autofs. The Environment Modules Package is installed below /pub/env-modules/Modules, the files to configure modules (modulefiles) reside below /pub/env-modules/modulefiles/.

Installation of modules

The usual three step work fine, if you've tcl installed:

modules-3.2.8% ./configure --prefix=/pub/env-modules --with-module-path=/pub/env-modules/modulefiles
modules-3.2.8% make
modules-3.2.8% make install

Usage

Creating a new module (sysadmin part)

Create a new directory below /pub/env-modules and a link below /pub/env-modules/modulefiles/ to the newly created directory. Now give ownership to the researcher who is maintaining the new software, who can install the software and create a specific modulefile for the software. For instance:

% mkdir /pub/env-modules/cdist
% chown nicosc /pub/env-modules/cdist

# Delegate support for cdist maintenance into the user owned folder
% ln -s /pub/env-modules/cdist/modulefiles /pub/env-modules/modulefiles/cdist

Creating a new module (user part)

Install the software into your directory and create modulefiles below the modulefiles directory:

% git clone git://git.schottelius.org/cdist /pub/env-modules/cdist/
% mkdir /pub/env-modules/cdist/modulefiles
% cat << eof > /pub/env-modules/cdist/modulefiles/git
#%Module1.0#####################################################################
##
## cdist modulefile
##
## 
##
proc ModulesHelp { } {
   puts stderr "\tLet's you use cdist"
}

module-whatis  "Configuration Management"

append-path PATH  /pub/env-modules/cdist/bin
eof

Using env modules

To actually make use of the new modules, you need to add env modules into your shell. The following commands illustrate the way for the bash:

% . /pub/env-modules/Modules/3.2.8/init/bash
% module avail

----------------------------------- /pub/env-modules/Modules/versions -----------------------------------
3.2.8

------------------------------------- /pub/env-modules/modulefiles --------------------------------------
cdist/git
% module load cdist/git
% module list
Currently Loaded Modulefiles:
  1) cdist/git