Gestion Parc Informatique Client UNIX Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
2 Sommaire: Analyse: Scénario Diagramme de cas d'utilisations général Diagramme de cas d'utilisations Diagramme de séquence acteur / système Diagramme de séquence poste client / serveur Diagramme d'activité Diagramme de classe Programmation: Installation Algorithmes codés Résultat Conclusion Présentation du projet: Présentation générale Présentation de la partie client Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
3 Présentation générale Description: Il s'agit de développer un système d'inventaire automatise en temps réel A la mise en service d'un poste sur le réseau pédagogique de l'établissement, celui ci devra être reconnu par le système suivant le paramétrage et récupérera dans une base de données les informations matérielles et logicielles du matériel connecte. Ce projet se divise en 3 parties: - Serveur: Détecter la connexion d'un poste Recevoir le relevé d'informations du poste Mettre a jour la base de données ( un utilisateur autorisé pourra configurer le service) - Base de donnes: Récupérer la BdD Extraire des informations de la BdD Exécuter des requêtes pré-programmées sur la base de données -Client: Récupérer les informations du poste Traiter les données mises a jour Envoyer les informations au serveur d'inventaire Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
4 Présentation générale Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
5 Présentation de la partie client Utilisateur lambdaPoste clientPoste serveur Envoie la base de données automatiquement Démarrage du poste Un utilisateur lambda démarre son poste. Au lancement de l'ordinateur, le poste client exécute un script pour effectuer un inventaire matériel et logiciel. Il appelle ensuite un programme qui effectue une comparaison entre les fichiers d'inventaires, et envoie le fichier au serveur s'ils sont différents. L'ensemble des opérations est compris dans le chargement du systeme d'exploitation et est complètement transparent pour l'utilisateur. Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
6 Scénario L'utilisateur allume son poste ( système d'exploitation UNIX ). A la fin du démarrage, le script (shell) est lancé automatiquement par le systeme d'exploitation. L'utilisateur peut ensuite ouvrir une session Xwindow (l'ouverture peut se faire automatiquement),. Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 Une fois que le programme a fini de s'executer, l'utilisateur prends la main, il pourra utiliser l'ordinateur comme bon lui semble une fois le chargement de Xwindow terminé. (Possibilité de lancement lors de l'ouverture de Xwindow au lieu du chargement du Systeme d'exploitation.) Le script effectue dans un premier temps la rotation des fichiers log.txt en log.txt.old (s'ils existent déjà, sinon il les crée ainsi que tous les fichiers necessaires au relevé). Il procède ensuite au relevé d'informations, et fait appel au programme en C++.
7 Scénario Le script effectue un inventaire ordonné des informations a récupérer et les stocke dans log.txt dans l'ordre suivant: 1-Table MATERIEL #Processeur – Vendeur #Proceseur – Modele #Carte son #Carte graphique #Processeur – cadence #Date 2-Table HDD #Nom du HDD #Taille totale 3-Table ETHERNET #Nom de la CR #Adresse MAC 4-Table OS #Nom du OS 5-Table LOGICIELS #Nom du logiciel Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 Le script appelle ensuite le programme GPI.exe (C++). Le programme compare les deux fichiers d'inventaire, s'ils sont différents, il établie une connexion avec le serveur et envoie le fichier d'inventaire le plus récent L'intégralité du processus est complètement transparente pour l'utilisateur.
8 Diagramme de cas d'utilisations générale Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
9 Diagramme de cas d'utilisations Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
10 Diagramme de séquence acteur / système Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
11 Diagramme de séquence client / serveur Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
12 Diagramme d'activité [BDD non a jour] Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
13 Diagramme de classes Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
14 Installation Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 Extrait du fichier MANUEL #Programme d'inventaire - client UNIX - Remy Chaumard BTSIRIS2 Lurcat Martigues #Manuel d'utilisation - beta v0.1 ## 1 ## Configurer l'adresse serveur dans $pwd/GPI.conf #PAR DEFAUT Linux, Windows. ## 2 ## Executer la commande: make ## 3 ## Executer la commande: sh INSTALL.sh ## 4 ## Entrer le (nouveau) nom du poste. ## 5 ## Redemarrer pour effectuer l'inventaire. #Recupere le niveau d'execution du systeme actuel: INIT=`cat /etc/inittab | grep ^id\: | cut -b 4` #Creation d'un lien symbolique pour l'execution au demarrage cd /etc/init.d/rc$INIT.d/ if test -e /etc/init.d/rc$INIT.d/S99bootgpi then echo -e "/etc/init.d/rc$INIT.d/S99bootgpi existe deja, il ne sera pas remplace." else ln -s../bootGPI.sh /etc/init.d/rc$INIT.d/S99bootgpi fi touch /etc/X11/xinit/xinitrc.d/GPI/ID_MAT Loop= while [ "$Loop" != "o" ] do echo -e "Ancien nom du poste: `cat /etc/X11/xinit/xinitrc.d/GPI/ID_MAT`" echo -e -n "Entrer le (nouveau) nom du poste: " read ID_MAT echo -e -n "Etes vous sur (o/n) ? " read Loop done echo -e $ID_MAT > /etc/X11/xinit/xinitrc.d/GPI/ID_MAT unset $Loop #!/bin/sh #Programme d'inventaire - client UNIX - Remy Chaumard BTSIRIS2 Lurcat Martigues #Fichier d'installation automatique if cp bootGPI.sh /etc/init.d then chmod a+x /etc/init.d/bootGPI.sh echo -e "\"bootGPI.sh\" copie avec succes" fi if mv GPI.exe /etc/X11/xinit/xinitrc.d/GPI/ then chmod a+x /etc/X11/xinit/xinitrc.d/GPI/GPI.exe echo -e "\"GPI.exe\" deplace avec succes" fi GPI.exe: GPI.o lib.o GPI.conf bootGPI.sh g++ GPI.o lib.o -o GPI.exe rm -f *.o GPI.o: GPI.cpp lib.h g++ -c GPI.cpp lib.o: lib.cpp lib.h GPI.conf g++ -c lib.cpp Extrait du fichier makefile Extrait du fichier INSTALL
15 Logique de boot Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 #!/bin/sh #Programme d'inventaire - client UNIX - Remy Chaumard BTSIRIS2 Lurcat Martigues ### BEGIN INIT INFO # Provides: Script d'Inventaire GPI # Required-Start: $ALL # X-UnitedLinux-Should-Start: $network $local_fs $remote_fs $syslog $named $netdaemons $time $portmap # Required-Stop: # Default-Start: 3 5 # Default-Stop: 0 # Description: Effectue un inventaire automatise de la machine. Projet GPI lycee Jean Lurcat. ### END INIT INFO ### SCRIPT D'INVENTAIRE ### test -s /etc/rc.status &&. /etc/rc.status && rc_reset case "$1" in start) echo -n "Starting bootGPI Service --- projet GPI" Extrait du fichier bootGPI.sh
16 // Fermeture Fichiers File.close(); OldFile.close(); return 0; } Algorithmes Algorithme de comparaison des fichiers int c_Client::Comp () { string Word; string OldWord; bool Id = true; // Ouverture Fichiers ifstream File( Path_File ); ifstream OldFile( Path_OldFile ); c_FileAcces Verification; Verification.Verif(); // Traitement Fichiers for ( unsigned i = 0; !OldFile.eof() && Id; ) { File >> Word; OldFile >> OldWord; if ( Word == "," ) ++i; //La septieme virgule represente la date, sauter cette etape revient a exclure la date de la comparaison pour eviter d'envoyer le fichier a chaque fois. if ( (Word != OldWord) && ( i != 7 ) ) { Id = false; File.close(); c_NetworkCommunication Envoi; Envoi.SendToServer(); } Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 Extrait du fichier lib.cpp
17 Algorithme de vérification d'accès Algorithmes Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 int c_FileAcces::Verif () { //Creation des flux de lecture ifstream File( Path_File ); ifstream OldFile( Path_OldFile ); //Verification de l'ouverture des fichier if ( File.bad() ) { //cerr << "Ouverture de \"log.txt\" echouee" << endl; c_Erreur Erreur; t_Erreur Report = "Acces aux fichiers"; Erreur.Throw_Error ( Report ); return -1; } [...] return 0; } Extrait du fichier lib.cpp
18 Exemple de mise en forme via script Shell: element non- redondant Algorithmes ### TABLE MATERIEL ### echo -n INSERT INTO MATERIEL VALUES \(\"$ID_MAT\", \" >> /etc/X11/xinit/xinitrc.d/log.txt #Date (Sautee lors de la comparaison - format aaaa/mm/jj) echo -n `date +%Y`/`date +%m`/`date +%d` >> /etc/X11/xinit/xinitrc.d/log.txt echo -e \"\)\;'\n' >> /etc/X11/xinit/xinitrc.d/log.txt #echo -e '\r'[##########################______________________]'\c' #Carte graphique echo -n `/sbin/lspci -v | grep VGA\ compatible\ controller` >> /etc/X11/xinit/xinitrc.d/log.txt echo -n \", \" >> /etc/X11/xinit/xinitrc.d/log.txt #echo -e '\r'[####################____________________________]'\c' #Processeur - Cadence (en Mhz xxxx.xxx) echo -n `more /proc/cpuinfo | grep cpu\ MHz | cut -b 12-22` >> /etc/X11/xinit/xinitrc.d/log.txt echo -n \", \" >> /etc/X11/xinit/xinitrc.d/log.txt #echo -e '\r'[#######################_________________________]'\c' Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 Extrait du fichier bootGPI.sh
19 Exemple de mise en forme via script Shell: element redondant Algorithmes ### TABLE ETHERNET ### ETH_lst="`/sbin/ifconfig | grep eth | cut -b 4-5`" for ETH_id in $ETH_lst do done echo -n INSERT INTO ETHERNET VALUES \(0, \"$ID_MAT\", \" >> /etc/X11/xinit/xinitrc.d/log.txt MAC_addr="`/sbin/ifconfig | grep HWaddr | grep eth$ETH_id | tail --bytes=20 | cut -b 0-17 | tr [A- Z] [a-z]`" if test -e /etc/sysconfig/network/ifcfg-eth-id-$MAC_addr then echo -e -n `cat /etc/sysconfig/network/ifcfg-eth-id-$MAC_addr | grep NAME | cut -b 7-`\",\ >> /etc/X11/xinit/xinitrc.d/log.txt elif test -e /etc/sysconfig/network/ifcfg-wlan-id-$MAC_addr then echo -e -n `cat /etc/sysconfig/network/ifcfg-wlan-id-$MAC_addr | grep NAME | cut -b 7-`\",\ >> /etc/X11/xinit/xinitrc.d/log.txt else echo -e -n no name\",\ >> /etc/X11/xinit/xinitrc.d/log.txt fi echo -e \"$MAC_addr\"\)\;'\n' >> /etc/X11/xinit/xinitrc.d/log.txt Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 Extrait du fichier bootGPI.sh
20 Algorithmes int main ( int argc, char* argv[] ) { int Res; try { c_Client Comm; Res = Comm.Comp(); } catch ( t_Erreur RcvdError ) { c_Erreur Erreur; Erreur.Log_Error ( RcvdError ); return -1; } return Res; } Une erreur apparait dans le bloc try.. int c_NetworkCommunication::SendBuffer ( int Sock, const char* BufToSend ) { //Envoi if ( send( Sock, BufToSend, strlen ( BufToSend ), 0 ) < 0 ) { //cerr << "Impossible d'envoyer " << "BufToSend" << " au serveur"" << endl; c_Erreur Erreur; t_Erreur Report = "Envoi"; Erreur.Throw_Error ( Report ); return -1; } return 0; L'envoi echoue, la fonction apelle Throw_Error avec une erreur contenant le libelle "Envoi" Extrait des fichier lib.cpp et GPI.cpp void c_Erreur::Throw_Error( t_Erreur Type_Error ) {throw Type_Error; } int main ( int argc, char* argv[] ) { int Res; try { c_Client Comm; Res = Comm.Comp(); } catch ( t_Erreur RcvdError ) { c_Erreur Erreur; Erreur.Log_Error ( RcvdError ); return -1; } return Res; } L'erreur est interceptee par le bloc catch void c_Erreur::Log_Error ( t_Erreur Type_Error ) { cerr << "Une erreur est survenue. Verifiez le fichier " << Path_GPILOG << " pour plus d'informations." << endl; ofstream Error ( Path_GPILOG ); //Recuperation de la date actuelle time_t TimeBuffer; time(&TimeBuffer); Error << "Erreur : " << Type_Error << " est survenue a la date " << ctime(&TimeBuffer) << "." <<endl; } Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3
21 Résultats Extrait du fichier log.txt INSERT INTO MATERIEL VALUES ("ID_07001", "GenuineIntel", "Intel(R) Pentium(R) M processor 1500MHz", "503", "00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03)", "01:00.0 VGA compatible controller: ATI Technologies Inc M9+ 5C61 [Radeon Mobility 9200 (AGP)] (rev 01) (prog-if 00 [VGA])", " ", "2007/05/21"); Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 INSERT INTO LOGICIELS VALUES (0, "ID_07001", "NetworkManager "); INSERT INTO LOGICIELS VALUES (0, "ID_07001", "OpenEXR "); INSERT INTO LOGICIELS VALUES (0, "ID_07001", "PolicyKit-0.2_git "); INSERT INTO LOGICIELS VALUES (0, "ID_07001", "RealPlayer "); INSERT INTO OS VALUES (0, "ID_07001", "Linux default"); INSERT INTO ETHERNET VALUES (0, "ID_07001", "Sony 82801DB PRO/100 VE (MOB) Ethernet Controller'", "08:00:46:da:9c:03"); INSERT INTO ETHERNET VALUES (0, "ID_07001", "Intel PRO/Wireless 2200BG Network Connection'", "00:0e:35:16:f7:14"); INSERT INTO HDD VALUES (0, "ID_07001", "IC25N060ATMR04-0, ATA DISK drive", 55");
22 Conclusion Le travail a été réalisé: Rémy Chaumard – BTSIRIS2 – projet GPI client UNIX – revue n3 L'exécution automatique du script au démarrage fonctionne. La mise en forme pour insertion automatique dans la BDD fonctionne. Le traitement des erreurs fonctionne. Le transfert du relevé fonctionne. Le relevé d'informations ordonné fonctionne. L'algorithme de comparaison fonctionne. Les normes de communications ont été établies avec l'équipe Serveur. On utilisera le protocole TCP/IP via une communication Socket (port 60000)