Tutorial : configurer PVM sur plusieurs machines

Bon, comme la configuration de pvm en salle Intel n’est pas triviale et que j’ai quand même passé 3 jours à essayer de débugger et de comprendre comment ça marchait avec, entre autre, l’aide des administrateurs, je vous transmet ce petit « tuto » pour que vous ne perdiez pas autant que moi, juste en ce qui concerne la configuration pure de PVM pour votre projet d’applications réparties.

Donc contrairement à ce qui est mis dans le notes, pvm en salle intel n’est pas installé dans /usr/local/pvm3, mais bien dans /usr/share/pvm3.

Pour pouvoir l’utiliser, ainsi que aimk, vous pouvez ajouter le répertoire /usr/share/pvm3/lib/ à votre path:

export PATH=/usr/share/pvm3/lib:$PATH

Maintenant ça c’est un premier pas, le plus dur a été de comprendre comment connecter plusieurs ordinateur à PVM et pourquoi ça ne marchait pas à la base car on peut pas dire qu’il y a des tonnes de tutos sur le net. Alors voici comment je m’y suis pris.

Vérifier le contenu de ~/.rhosts pour autoriser les ordi utilisés:

host1 login
host2 login
host3 login
... (pour les machines que vous utilisez dans le réseau)

Vérifier le contenu de ~/pvm_config.txt pour ajouter les ordi à la config

* ep=$HOME/workspace/Projet
&host1
&host2
&host3_solaris dx=/usr/local/pvm3/lib/pvmd
&host4_OSX_darwin dx=/opt/local/lib/pvm/lib/pvmd

Le signe & signifie que les machines ne seront ajoutée à la configuration que si on les appelle manuellement. C’est à dire avec la commande « add host » dans pvm. Mais si vous voulez que ça se charge automatiquement on peut enlever le « & ».

Ce qui se trouve derrière « dx » c’est le répertoire où l’on peut trouver le démon pvm sur ces machines. Dans mon cas j’ai du me connecter à des machines d’architectures différentes, et typiquement, les répertoires où se trouvent les librairies diffèrent. D’où l’importance de mettre cette variable.

  • Sur mon mac c’est /opt/local/lib/pvm/lib/pvmd
  • Sur le serveur solaris c’était /usr/local/pvm3/lib/pvmd

Vérifier que les variable d’environnement ont bien été configurées:

echo $PVM_ROOT $PVM_ARCH $PVM_RSH

sinon, pour la salle linux:

export PVM_ARCH=LINUXI386
export PVM_ROOT=/usr/share/pvm3
export PVM_RSH=/usr/bin/ssh
export PATH=$PVM_ROOT/lib:$PATH

En effet, si on ne précise pas ces éléments là, PVM ne sait pas se lancer sur la machine. De plus, PVM utilise par défaut le protocole rsh pour se connecter avec les machine distantes. Or le protocole rsh n’est pas autorisé pour les élèves en salle Intel car il possède pas mal de failles de sécurité (notamment la possibilité de se loger en root sur une machine sans connaitre le mot de passe).

Remarque : ces variables d’envirronement doivent être initialisées sur toutes les machines que vous utilisez. Il est donc conseillé de rajouter ces 4 lignes d’export dans le fichier de configuration ~/.bashrc de votre session.

Elever les locks

Avant de pouvoir lancer definitivement pvm, il faut encore s’assurer que sur les machines utilisées il n’y a pas de lock qui pourrait éventuellement empêcher PVM de fonctionner correctement. Ces locks se trouvent dans le repertoire /tmp/. Pour supprimer ces locks, il faut donc supprimer le fichier lock appartenant à sa propre session dans le répertoire /tmp/ :

rm /tmp/pvm*

Remarque: cette manière de faire est un peu bourrin car si vous êtes en root vous supprimer aussi les locks des autres utilisateurs. Il est donc préférable de sélectionner uniquement les fichiers commencant par pvm et appartenant à votre session pour les supprimer :

rm /tmp/pvmd.12560 /tmp/pvml.12560

Attention, ceci doit être fait sur toutes les machines utilisées

Finalement lancez pvm avec le fichier de configuration

$ pvm ~/pvm_config.txt
pvm> add cupidon
add cupidon
login@cupidon's password:
1 successful
                    HOST     DTID
                 cupidon    80000
pvm> conf
conf
2 hosts, 1 data format
                    HOST     DTID     ARCH   SPEED       DSIG
                 hellboy     40000 LINUXI386    1000 0x00408841
                 cupidon    80000 LINUXI386    1000 0x00408841
pvm> halt
halt
Terminated

Une fois que ça marche en ligne de commande, je suppose (mais j’ai pas encore testé) que ça doit marcher avec les librairies C dans notre programme C. Mais disons qu’ici c’est surtout pour s’assurer que ça marche.

Voilà, en espérant avoir été plus ou moins clair 😉 et en espérant que ça serve à quelqu’un