From 770972d203e660d113ec9fa3542e05f739f99971 Mon Sep 17 00:00:00 2001 From: glenux Date: Fri, 17 Mar 2006 17:04:59 +0000 Subject: [PATCH] --- README | 35 --- readme.css | 33 +++ readme.html | 322 +++++++++++++++++++++ Makefile => src/Makefile | 5 +- detector-server.c => src/detector-server.c | 0 libdetect.c => src/libdetect.c | 0 test.c => src/test.c | 0 test_mod.c => src/test_mod.c | 0 worms.c => src/worms.c | 0 worms_mod.c => src/worms_mod.c | 0 10 files changed, 358 insertions(+), 37 deletions(-) delete mode 100644 README create mode 100644 readme.css create mode 100644 readme.html rename Makefile => src/Makefile (90%) rename detector-server.c => src/detector-server.c (100%) rename libdetect.c => src/libdetect.c (100%) rename test.c => src/test.c (100%) rename test_mod.c => src/test_mod.c (100%) rename worms.c => src/worms.c (100%) rename worms_mod.c => src/worms_mod.c (100%) diff --git a/README b/README deleted file mode 100644 index a4cc2de..0000000 --- a/README +++ /dev/null @@ -1,35 +0,0 @@ - -Prérequis: L'utilisation de ce projet nécessite un système GNU/Linux, et la -présence du compilateur GNU GCC - - - - make - -* Détecteur de pannes, invoqué depuis main - - Taper: - - make worm_inc - - et suivre les instructions. - - -* Détecteur de pannes, invoqué depuis main et compilé - dans une bibliothèque chargée dynamiquement - - Taper: - - make worm_shared - - et suivre les instructions. - -* Détecteur de pannes, dans une bibliothèque chargée - dynamiquement, mais sans toucher au code source du programme original. - - Taper: - - make worm_preload - - et suivre les instructions. - diff --git a/readme.css b/readme.css new file mode 100644 index 0000000..62bfb2f --- /dev/null +++ b/readme.css @@ -0,0 +1,33 @@ +/* Generated by CaScadeS, a stylesheet editor for Mozilla Composer */ + + p.code { border: 2px dashed rgb(153, 153, 153); + padding: 5px; + background: rgb(204, 204, 204) none repeat scroll 0% 50%; + -moz-background-clip: initial; + -moz-background-origin: initial; + -moz-background-inline-policy: initial; + font-family: monospace; + } + + div.page { border: 2px dashed rgb(153, 153, 153); + padding: 10px; + top: 10px; + left: 10px; + right: 10px; + bottom: 10px; + margin-right: auto; + margin-left: auto; + background-color: rgb(255, 255, 255); + opacity: 1; + width: 60%; + font-family: Arial,Helvetica,sans-serif; + } + + body { background-color: rgb(51, 51, 51); + } + + span.code { border: 1px dashed rgb(153, 153, 153); + background-color: rgb(204, 204, 204); + font-family: monospace; + } + diff --git a/readme.html b/readme.html new file mode 100644 index 0000000..bae817c --- /dev/null +++ b/readme.html @@ -0,0 +1,322 @@ + + + + + + + + Alobé + + + + + + + + + +
+

Programmation répartie - TP4

+ +

1. +Description

+ +

Le but de ce TP est de concevoir une bibliothèque +de détection de pannes (mort ou blocage), utilisable sur +n'importe quel processus.

+ +

Il possède les +caractéristiques +suivantes :

+ +
    + +
  • Il est distribué +sous la licence GNU +General Public License
  • + +
  • Il est +écrit en C, 
  • + +
  • Il peut être invoqué depuis la +fonction main(int, char**) d'un programme et lié +statiquement.
  • + +
  • Il peut être invoqué depuis la +fonction main(int, char**) d'un programme et être +lié dynamiquement.
  • + +
  • Il peut être invoqué sans modifier le +programme original, au chargement de la bibliothèque +dynamique.
  • + +
+ +

1.1. +Auteurs

+ +

Cet exercice a +été entièrement +réalisé par Glenn ROLLAND <glenux@fr.st> +à l'occasion de travaux pratiques du cours de Programmation Répartie +du Master 2 Ingénierie Informatique +- +Systèmes, Réseaux et Internet.

+ +

2. +Pré-requis

+ +

Cet exercice nécessite un système +GNU/Linux, ainsi que l'utilisation de GNU GCC +(version ≥ +2.95) et de GNU Make.

+ +

3. +Se procurer le sources

+ +

Vous +pouvez télécharger la dernière archive +des +sources, ou bien directement leur version la plus récente +sur le dépôt Subversion du projet.

+ +

3.1. L'archive compressée

+ +

Elle est disponible à l'adresse :
+ +http://glenux2.free.fr/pub/projets/ProgRepartieTP4/archives/
+ +

+ +

3.2. Le +dépôt Subversion

+ +

Afin d'obtenir les sources les +plus à jour, vous pouvez utiliser le logiciel de +contrôle de sources Subversion

+ +

$ svn +checkout \
+ +  +http://repository.glenux.ath.cx/svn/Cours/M2/Prog_Repartie/TP4/ \
+ +  prog-repartie-tp4

+ +

Il n'y a pas de mot de passe, +il suffit donc de presser la touche +"Entrée" pour l'utilisateur "anonymous", si ce dernier vous +est +demandé.

+ +

4. +Utiliser le logiciel

+ +

4.1. +Compilation

+ +

Si vous avez choisi l'archive, commencez par la +décompressez.

+ +

$ tar -xzvf prog-repartie-tp4.tar.gz

+ +

Rendez vous ensuite dans le +dossier qui vient d'être créé lors de +la décompression.

+ +

$ cd prog-repartie-tp4

+ +

Puis lancez la compilation du logiciel avec les +paramètres souhaités..

+ +

4.2. +Exercices

+ +

Il s'agit d'écrire un détecteur de +pannes, utilisant deux threads: une pour le programme principal, et une +pour le détecteur. La thread du détecteur se +connecte via une socket INET à un serveur chez qui elle +"s'enregistre" pour être ensuite surveillée.

+ +

Pour utiliser les logiciels, il faut avoir défini +les variables d'environnement DETECTOR_HOSTNAME +et DETECTOR_PORT +sur chacune des machines faisant partie du système de +détection de pannes.

+ +

Avant de lancer les programmes à surveiller, il +faut d'abord lancer le programme serveur qui vérifiera la +vivacité des processus enregistrés.

+ +

4.2.1. Exercice 1

+ +

Il s'agit du programme serveur. 

+ +

Pour le compiler, taper:

+ +

$ make server

+ +

Pour l'executer (sur un shell bash):

+ +

$ export DETECTOR_PORT=2345
+ +$ ./detector-server

+ +

On obtient alors:

+ +

Lookup for localhost...
+ +Host found
+ +Bind on port 2345 of 127.0.0.1
+ +Ready to accept connexions.
+ +[\] Select...done

+ +

Lorsque qu'un processus se connecte, puis s'enregistre, les +lignes suivantes apparaissent:

+ +

Got new connection at 4
+ +[-] Select...done
+ +Registering client : 13331@djeke
+ +[\] Select...done

+ +

Puis, tant que le programme est en fonctionnement:

+ +

Requesting liveness for '13331@djeke'
+ +[/] Select...done
+ +Requesting liveness for '13331@djeke'
+ +[-] Select...done
+ +...
+ +Requesting liveness for '13331@djeke'
+ +[\] Select...done

+ +

Enfin, lorsque le programme plante (ou quitte), on voit:

+ +

[|] Select...done
+ +Requesting liveness for '13442@djeke'
+ +Select...done
+ +Client '13442@djeke' has disconnected !

+ +

4.2.1. Exercice 2

+ +

Il s'agit du détecteur de pannes invoqué +depuis le main du programme à surveiller et lié +statiquement.

+ +

Pour compiler les exemples, taper:

+ +

$ make worm_inc

+ +

Puis, pour lancer les exemples: 

+ +

$ export DETECTOR_HOSTNAME=localhost
+ +$ export DETECTOR_PORT=2345
+ +$ ./worms_mod

+ +

ce qui affiche:

+ +

... (puis on voit des vers qui se baladent +sur le terminal)

+ +

ou bien :

+ +

$ export DETECTOR_HOSTNAME=localhost
+ +$ export DETECTOR_PORT=2345
+ +$ ./test_mod

+ +

ce qui affiche:

+ +

HOST (localhost) PORT (2345)
+ +Thread launched
+ +Lookup for localhost...
+ +Host found
+ +Thread connected
+ +Loooooping
+ +Loooooping
+ +Loooooping
+ +Loooooping
+ +[ ... ]

+ +

4.2.2. Exercice 2 

+ +

Il s'agit du détecteur de pannes invoqué +depuis le main du programme à surveiller et lié +dynamiquement.

+ +

Pour compiler les exemples, taper:

+ +

$ make worm_shared

+ +

Puis, pour lancer les exemples: 

+ +

$ export DETECTOR_HOSTNAME=localhost
+ +$ export DETECTOR_PORT=2345
+ +$ LD_LIBRARY_PATH="." ./worms_mod

+ +

ou bien :

+ +

$ export DETECTOR_HOSTNAME=localhost
+ +$ export DETECTOR_PORT=2345
+ +$ LD_LIBRARY_PATH="." ./test_mod

+ +

4.2.3. Exercice 3

+ +

Il s'agit du détecteur de pannes, dans une +bibliothèque liée dynamiquement, mais sans aucune +modification au code source du programme original.

+ +

Pour compiler les exemples, taper:

+ +

$ make worm_inc

+ +

Puis, pour lancer les exemples: 

+ +

$ export DETECTOR_HOSTNAME=localhost
+ +$ export DETECTOR_PORT=2345
+ +$ LD_LIBRARY_PATH="." LD_PRELOAD=libdetect.so ./worms

+ +

ou bien :

+ +

$ export DETECTOR_HOSTNAME=localhost
+ +$ export DETECTOR_PORT=2345
+ +$ LD_LIBRARY_PATH="." LD_PRELOAD=libdetect.so ./test

+ +
+ + + diff --git a/Makefile b/src/Makefile similarity index 90% rename from Makefile rename to src/Makefile index 7c15949..e963852 100644 --- a/Makefile +++ b/src/Makefile @@ -2,8 +2,9 @@ all: @echo "Usage: make " @echo "" @echo "Commandes disponibles:" - @echo "- worm_inc : version modifiée des programmes, avec insertion de detect_init()" - @echo " et bibliothèque de détection de pannes liée statiquement" + @echo "- server : programme serveur" + @echo "- worm_inc : version modifiée des programmes, avec insertion de detect_init()" + @echo " et bibliothèque de détection de pannes liée statiquement" @echo "- worm_shared : version modifiée des programmes, avec insertion de detect_init()" @echo " et bibliothèque de détection de pannes liée dynamiquement" @echo "- worm_preload: version non modifiée des programmes, avec préchargement de la " diff --git a/detector-server.c b/src/detector-server.c similarity index 100% rename from detector-server.c rename to src/detector-server.c diff --git a/libdetect.c b/src/libdetect.c similarity index 100% rename from libdetect.c rename to src/libdetect.c diff --git a/test.c b/src/test.c similarity index 100% rename from test.c rename to src/test.c diff --git a/test_mod.c b/src/test_mod.c similarity index 100% rename from test_mod.c rename to src/test_mod.c diff --git a/worms.c b/src/worms.c similarity index 100% rename from worms.c rename to src/worms.c diff --git a/worms_mod.c b/src/worms_mod.c similarity index 100% rename from worms_mod.c rename to src/worms_mod.c