NOTE: I haven't actually tested the binaries and libs compiled here. I think they should work. But I don't know for sure.
PQS works with openmpi, mpich and PVM. Our vanilla ROCKS install already has openmpi and mpich. There's a package called rocks-pvm, but the size is 50 kb and didn't seem to actually install anything precompiled, so I removed it and decided to go the compilation way instead.
The paths here are specific to the cluster I did this on, so customise as needed.
sudo mkdir /share/apps/pvm
sudo chown ${USER} /share/apps/pvm
cd /share/apps/pvm
wget http://www.netlib.org/pvm3/pvm3.4.6.tgz
tar xvf pvm3.4.6.tgz
cd pvm3/
export PVM_ROOT=`pwd`
make
Time to set up environment variables. Either edit /etc/profile or ~/.bashrc, depending on powers and reach., and add
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:share/apps/pvm/pvm3/lib/LINUX64
export PATH=$PATH:/share/apps/pvm/pvm3/bin/LINUX64
export PVM_ROOT=/share/apps/pvm/pvm3
Changes won't take effect until you source the file, or open a new terminal.
I profess to be ignorant about how to actually use pvm, so no testing just yet.
So I also stumbled across xpvm, which sounds (and looks) neat.
wget http://www.netlib.org/pvm3/xpvm/XPVM.src.1.2.5.tgz
cd /share/apps/pvm
tar xvf XPVM.src.1.2.5.tgz
cd xpvm/
Time to do some housekeeping before compiling:
It requires:
1. PVM 3.3.0 or later.
2. TCL 7.3 or later.
3. TK 3.6.1 or later.
I find
/usr/share/tk8.4
/usr/share/tcl8.4
so I might be ok. We just compiled pvm 3.4.6, so it should be alright.
First figure out where stuff is:
locate libtk|grpe so
/usr/lib/libtk.so
/usr/lib/libtk8.4.so
/usr/lib64/libtk.so
/usr/lib64/libtk8.4.so
locate libtcl|grep so
/usr/lib/libtcl.soThese are fairly standard locations, so they should already be searched by ld -- no need to specify them thus.
/usr/lib/libtcl8.4.so
/usr/lib64/libtcl.so
/usr/lib64/libtcl8.4.so
/usr/lib64/tclx8.4/libtclx8.4.so
Include is potentially worse since they'd typically need the development packages.
locate tcl | grep "\.h"
[..]locate tk|grep "\.h"
/usr/include/tcl-private/generic/tcl.h
[..]
[..]So we /should/ be fine.
/usr/include/tk-private/generic/tk.h
[..]
We also need the X11 libs and headers:
locate libX11
/usr/lib/libX11.solocate X11|grep include
/usr/lib/libX11.so.6
/usr/lib/libX11.so.6.2.0
/usr/lib64/libX11.so
/usr/lib64/libX11.so.6
/usr/lib64/libX11.so.6.2.0
[..]Finally,
/usr/include/X11
[..]
locate libdl
/lib/libdl-2.5.so
/lib/libdl.so.2
/lib64/libdl-2.5.so
/lib64/libdl.so.2
/usr/lib/libdl.a
/usr/lib/libdl.so
/usr/lib64/libdl.a
/usr/lib64/libdl.so
I'll specify the lib locations even though in some of these particular cases it isn't necessary:
Edit xpvm/src/Makefile.aimk and set (line numbers added by me):
19 PVMVERSION = -DUSE_PVM_34
Comment out line 42:
42 #TCLTKHOME = $(HOME)/TCL
and
44 TCLTKHOME = /usr/include
Change
47 TCLINCL = -I$(TCLTKHOME)/tcl-private/generic
48 TKINCL = -I$(TCLTKHOME)/tk-private/generic
and
57 TCLLIBDIR = -L/usr/lib64/tclx8.4
58 TKLIBDIR = -L/usr/lib64
and
70 TCLLIB = -ltcl8.4
71 TKLIB = -ltk8.4
and
83 XINCL = -L/usr/include/X11
84 XLIBDIR = -L/usr/lib64
and finally,
96 SHLIB = -ldl
Fell asleep? Time to get compiling.
export TCL_LIBRARY=
/usr/share/tcl8.4export TK_LIBRARY=/usr/share/tk8.4
cd ${XPVM_ROOT}
make
[..]
Installing xpvm.tcl
Installing globs.tcl
Installing procs.tcl
Installing util.tcl
make[1]: Leaving directory `/share/apps/pvm/xpvm/src/LINUX64'
The beautiful thing is that the xpvm binary automagically ends up in the pvm3/bin/LINUX64 directory, so no need to fiddle with path.
In theory everything should work now if you log in with ssh -XC. However I get
xpvm
libpvm [pid2607] /tmp/pvmd.502: No such file or directory
libpvm [pid2607]: Can't Start PVM: Can't start pvmd
I'm not actually running -- nor have I ever run -- anything with pvm.
touch /tmp/pvmd.502
xpvm
libpvm [pid4219]: mksocs() read addr file: wrong length read
Connecting to PVMD already running... libpvm [pid4219]: mksocs() read addr file: wrong length read
libpvm [pid4219]: mksocs() read addr file: wrong length read
libpvm [pid4219]: mksocs() read addr file: wrong length read
libpvm [pid4219]: pvm_mytid(): Can't contact local daemon
libpvm [pid4219]: Error Joining PVM: Can't contact local daemon
I mean, it looks like it should work, once pvm is being used.