Redimp's Blog
15Apr/1423

environment module files

Environment module files are a nice way to provide multile versions of different packages for users. In our network, we provide a nfs mounted /opt-Partition which contains every software which isn't supported (either in no way, or in different versions) by our distribution.

We put all packages in /opt/packkages/$packagename-$version/. When compiling packages, we use --prefix=/opt/packkages/$packagename-$version/, which makes it easy to use for example a library like openmpi.

To install environment modules from the scratch, download the tar.gz from http://sourceforge.net/projects/modules/.

The following at least worked for VERSION=3.2.10.

# Unpack tar xvf modules-$VERSION.tar.gz
# Change directory
cd modules-$VERSION
# Configure (I'm using a network shared /opt partition)
./configure --prefix=/opt/packages/modules/
# Build and install
make && make install
# create default link (i have no idea, why this 
# isn't done by "default"
cd /opt/packages/modules/Modules/
ln -s $VERSION default
# return to the source directory
cd -
# copy profile script to a profile.d directory 
# (in my case again on /opt)
cp etc/global/profile.modules /opt/etc/profile.d/profile.modules.sh
# edit module configuration
vim /opt/packages/modules/Modules/$VERSION/init/.modulespath
# i just commented out all lines and add /opt/modules where
# i put my module files

The next step is, to create the module files. I suggest to keep them as clean and small as possible. Using Variables makes them easy to copy n paste (for example, if you update a library to a new version and want to keep the old version too).

Beware, there are many strange module files to find in the web. I suggest to write them by yourself and use only commands you know and environment variables from which you know what they are doing.

First example cmake, which i build using:

# Download
wget http://www.cmake.org/files/v2.8/cmake-2.8.12.2.tar.gz
# Extract
tar xzf cmake-2.8.12.2.tar.gz
# create build directory
mkdir -p cmake-2.8.12.2/build; cd cmake-2.8.12.2/build
# configure
cmake .. -DCMAKE_INSTALL_PREFIX=/opt/packages/cmake-2.8.12.2
# make and install 
make -j4 && make install

whichs results in a driectory which looks like this

ls /opt/packages/cmake-2.8.12.2/
bin  doc  man  share

So i create a module file /opt/modules/cmake/2.8.12.2 which makes cmake easy useable:

#%Module1.0
#####################
# CMake Module file
 
set package "cmake"
set version "2.8.12.2"
set dir "/opt/packages/$package-$version"
 
# Defines String that is displayed when command "module whatis" is invoked
module-whatis "$package/$version - sets the environment variables to use $package in $dir"
 
 
if { ! [ file exists $dir ] } {
	puts stderr "$package-$version is not available on this machine. directory $dir not found"
	exit 1
}
 
# Set Conflicts: Defines modulefiles that can not be loaded at the same time
conflict $package
 
prepend-path PATH	$dir/bin
prepend-path MANPATH	$dir/man

What a module does, can be tested by using module show:

module show cmake/2.8.12.2 
-------------------------------------------------------------------
/opt/modules/cmake/2.8.12.2:
 
module-whatis	 cmake/2.8.12.2 - sets the environment variables to use cmake in /opt/packages/cmake-2.8.12.2 
conflict	 cmake 
prepend-path	 PATH /opt/packages/cmake-2.8.12.2/bin 
prepend-path	 MANPATH /opt/packages/cmake-2.8.12.2/man 
-------------------------------------------------------------------

next, load the module, and check if we got the right cmake version:

# load module
$ module load cmake/2.8.12.2 
# check which binary is used
$ which cmake
/opt/packages/cmake-2.8.12.2/bin/cmake
# check version
$ cmake --version
cmake version 2.8.12.2

I hope this little howto will help somebody (at least me, if i have to install module files again somewhere else). Commends welcome.

Hint: Useful documentation i've used:

Tagged as: 23 Comments
19Nov/091

Vortrag: Subversion

Im Institut wird dieses Semester ein Mini-Seminar veranstaltet, dass den Titel "Technische Numerik" traegt. Hier werde alle moeglichen technischen Mittel erlaeutert, die man in der Numerik braucht und die (meistens) wenig mit Mathe zu tun haben. Unter den Vortragsthemen sind der gdb, valgrind, mpi und noch ein Haufen anderer, spannender Kram.

Ich habe im Rahmen dieses Seminars einen Vortrag mit dem Thema "Versionskontrolle mit Subversion" gehalten. Meine Folien dazu gibt es hier: Versionskontrolle mit SVN.

Da ich das wiederholt gefragt worden bin... Die "Terminals" habe ich mit dem \LaTeX Paket lstlisting gemacht.

% Paket einbinden
\usepackage{listings}

% Sprache definieren
\lstdefinelanguage{svn}{
morekeywords={commit,import,add,checkout,create,status,
diff,update,propset,propdel,blame,log,resolve,copy,propedit,
propget,proplist,merge,copy},
morekeywords={[2]svn,svnadmin,ls,cd}
}

% Listings konfigurieren
\lstset{lineskip=1pt,numbers=none,linewidth=\linewidth,
basicstyle=\color{white}\ttfamily,
backgroundcolor=\color{black},
keywordstyle=\color{blue},
keywordstyle={[2]\color{green}}}

% Die Umgebung svn erstellen
\lstnewenvironment{svn}[1][]
{\lstset{language=svn,#1}}{}

Das laesst sich im Paket latex-beamer dann wie folgt benutzen:

\begin{frame}[fragile]{Test der svn-Umgebung}
\begin{svn}
> svn update
At revision 1.
\end{svn}
\end{frame}

und sieht dann so aus:

Tagged as: , , 1 Comment
10Nov/091

Sankt Martin vs Halloween

Im November, genauer rund um den Martinstag,  ziehen (mindestens) im Rheinland jedes Jahr wieder Kinder um die Häuser, um mittels Gesang Kram zu erbetteln erbitten erpressen. Das ganze nennt sich Martinssingen.

Da steht ein Rudel Kinder mit Fackeln vor der Tür und fordert mit infernalischem Gebrüll Süßigkeiten - klingt zum Fürchten. Als wäre das nicht schlimm genug, muss man sich noch verhöhnen lassen "...Hier wohnt ein reicher Mann..." Als Besitzer einer Burg würde man schlicht zu heißem Pech und den Waffen greifen. So bleibt einem nichts anderes übrig, als verkniffen lächelnd das Geforderte herrauszugeben, die Tür zu schliessen und zu hoffen, dass zumindest der Kelch der Sternsinger Im Januar an einem vorübergehen wird.

Halloween ist etwas früher dran. Der (vermutlich) irische Feiertag ist erst nach Amerika exportiert und dann nach Europa reimportiert worden. Dabei ist er nicht nur wesentlich dicker geworden, sondern auch bunter und lauter.

Auch hier fordern Kinder Süßigkeiten - unmissverständlich mit "Süßes oder Saures". Mit ein bisschen Glück sind sie lustig angezogen. Wir hatten dieses Jahr ein Rudel Präpupertierender mit Masken aus Saw* und Scream* vor der Tür stehen (Offensichtlich gibts keine FSK in der Maskenindustrie). Begleitet wurden sie von einem Dritten der ein Kostüm hatte, das ich nicht identifizieren konnte - es erinnerte mich jedoch schwer an Orko. Das fand ich wirklich gruselig.

Nun der Titel regt einen Vergleich an was  man besser findet ... Ich überlasse die Entscheidung jedem selbst, behalte Euch meine aber nicht vor. Ich finde Halloween witziger. Dann kann man ungestraft und barfuß, mit einem Schraubenzieher in der einen, einem blutüberströmtem Latexhandschuh in der anderen Hand die Tür öffnen und sagen:

"Ahhh, ihr kommt gerade recht, ich habe fuuuurchtbare Probleme mit dem Hund."

21Oct/091

(Rundungs-)Fehler

Maschinengenauigkeit und aus der Maschinenungenauigkeit resultierende Rundungsfehler sind in der Numerik schon in den ersten Vorlesungen ein Thema. Bei einfacher Genauigkeit ist schon irgendwo bei 6 \cdot 10^{-8} Schluss, bei doppelter erst bei 10^{-16}.

Gestern Abend musste ich feststellen, dass mir meine Rechnung um die Ohren fliegt, wenn ich 1/3 an meine Matrix multipliziere. Die Matrix liess sich aufstellen, und da gab es auch keinerlei Probleme, nur der Loeser hat danach nur noch Unsinn gemacht. Ich habe es spasseshalber mal versucht dieses Epsilon auf der Konsole als Parameter uebergeben, statt das Drittel fest zu verdrahten, ... und mit -eps 0.333333 lief die Rechnung froehlich vor sich hin und in die richtige Richtung. Tja, dann habe ich es mit -eps 0.3333333 versucht und wieder: Alles im Lot. Bei -eps 0.33333333 (8 Stellen hinter dem Komma) knallte es dann endlich: Der Loeser rannte froehlich in die falsche Richtung. Irgendwo musste sich ein float in meiner Rechnung versteckt haben, vielmehr ein Zwischenrechenschritt musste mir die doppelte Genauigkeit kaputt gemacht haben. So einen Fehler zu suchen, das macht keinen Spass.

Ich habe mir zum Glueck erst die gespeicherten Matrizen angeguckt bevor ich wirklich tief in die Fehlersuche eingestiegen bin. Diese lege ich in Dateien ab, damit ich sie nicht fuer jede Rechnung neu aufstellen muss. Da wir hier verschiedene Architekturen haben und somit double unterschiedlich lang sein koennen, habe ich es fuer eine gute Idee gehalten, die Dateien einfach als ASCII Files abzulegen. Und da lachte mich auch schon mein Fehler an:

// configure outputstream: write in x.yEz format with precision 8
ost << std::scientific << std::setprecision(8);

Ich speichere die Matrizen jetzt wieder binaer via

ost.write( reinterpret_cast( &d ), sizeof d); // double d

Man kann sich die Genauigkeit auch mit allen Mitteln kaputt machen. Man muss nur wollen.

17Oct/097

Endlich: Aufpoliert!

Endlich ist redimp.de umgezogen. Jetzt hockt die Domain auf nem Server den ich selber administriere und auf dem ich auch schon nachtling.com mit allem was dazugehört eingelagert habe.

Mit dem Umzug habe ich das Serendipity das hier lief eingestampft und durch WordPress ersetzt. Nach langer suche habe ich ein Theme gefunden das mir gefallen hat und es nach meinen Vorstellungen angepasst - das alte Blog war schon sehr eingestaubt.

Worüber ich bloggen werde? Das wird sich zeigen müssen. Derzeit dreht sich in meinem alles um meine Diplomarbeit. Die Prinzessin, der Kater und der Hund werden sicher auch nochmal vorkommen, ebenso wie Geschichten übers fotografieren und programmieren.

Ich hoffe es wird intressant und/oder lustig. Mit Glück beides.

Filed under: Allgemeines 7 Comments