#!/usr/bin/perl use strict; use warnings; #********** INITIALISATION DE LA GENERATION FICHIER CHECKLIST ********* #my $CheckFile="/home/lalis/Documents/checklist.txt"; my $CheckFile="/usr/share/lalis/checklist.txt"; my $PathFicout="/usr/share/lalis/"; #************* INITIALISATION DES INFORMATIONS GENERALES (LSHW) **************** # copie de la commande dans un tableau pour lshw my @LshwTab=`lshw`; # Extraction des champs relatifs aux item my @ChampsLshw=("description|produit|fabriquant|numéro", # champs Identification ORDINATEUR "description|produit|fabriquant|version",# champs Identification CARTE MERE "description|fabriquant|version",# champs Identification BIOS "description|produit|bits|configuration",# champs Identification CPU "description|produit|fabriquant", # champs Identification CARTE GRAPHIQUE "description|produit|fabriquant|capacité",# champs Identification RESEAU "description|produit|fabriquant",# champs Identification RESEAU "produit|fabriquant|capacité|configuration"# champs Identification BATTERIE ); my @LshwTitres=("\n########## Identification ORDINATEUR ##########\n", "\n########## Identification CARTE MERE ##########\n", "\n########## Identification BIOS #########\n", "\n########## Identification CPU ##########\n", "\n########## Identification CARTE GRAPHIQUE ##########\n", "\n########## Identification RESEAU ##########\n", "\n########## Identification BATTERIE ##########\n"); # Descripteur de l'item ordinateur my @DescOrdi=("0", # titre du chapitre general (@LshwTitres) "0", # champs (@ChampsLshw) de donnees à extraire "localhost", # debut du bloc a extraire "\\*\\-" # fin du bloc a extraire ); # Descripteur de l'item carte mère my @DescCM=("1", # titre du chapitre general (@LshwTitres) "1", # champs (@ChampsLshw) de donnees à extraire "\\*\\-core", # debut du bloc a extraire "\\*\\-" # fin du bloc a extraire ); # Descripteur de l'item BIOS my @DescBios=("2", # titre du chapitre general (@LshwTitres) "2", # champs (@ChampsLshw) de donnees à extraire "\\*\\-firmware", # debut du bloc a extraire "\\*\\-" # fin du bloc a extraire ); # Descripteur de l'item CPU my @DescCPU=("3", # titre du chapitre general (@LshwTitres) "3", # champs (@ChampsLshw) de donnees à extraire "\\*\\-cpu", # debut du bloc a extraire "\\*\\-" # fin du bloc a extraire ); # Descripteur de l'item Affichage my @DescDisp=("4", # titre du chapitre general (@LshwTitres) "4", # champs (@ChampsLshw) de donnees à extraire "\\*\\-display", # debut du bloc a extraire "\\*\\-" # fin du bloc a extraire ); # Descripteur de l'item reseau my @DescNet=("5", # titre du chapitre general (@LshwTitres) "5", # champs (@ChampsLshw) de donnees à extraire "\\*\\-network", # debut du bloc a extraire "\\*\\-" # fin du b loc a extraire ); # Descripteur de l'item battery my @DescBat=("6", # titre du chapitre general (@LshwTitres) "7", # champs (@ChampsLshw) de donnees à extraire "\\*\\-battery", # debut du bloc a extraire "\\*\\-" # fin du bloc a extraire ); my @RefItems=("PC","CM","BIOS","CPU","DISP","NET","BAT"); #my @RefItems=("PC","CM","BIOS"); my @temp; my @ident; my $flag=0; my $titre; my $start; my $end; my $data; #********** INITIALISATION DES INFORMATIONS USB (lsusb) ********* #********** INITIALISATION DES INFORMATIONS MEMOIRES (DMIDECODE) ********* # copie de la commande dans un tableau pour dmidecode my @tabdmidecode=`dmidecode -t memory`; my @ChampsMem=("Data|Size|Bank Locator:|Type:|Speed:|Manufacturer"); my @MemTitres=("\n########## Identification MEMOIRE ##########\n"); my @DescMem=("0", # titre du chapitre general (@SmartTitres) "0", # champs (@ChampsMem) de donnees à extraire "Memory Device", # debut du bloc a extraire "Part" # fin du bloc a extraire ); #*********** INITIALISATION DES INFORMATIONS DISK (SMARTCTL) ************** my @champsdisk=("Family|Model:|Serial|Capacity|Form|SATA"); my @ListDisk=`ls -l /dev/sd?`; my @DescDisk=("0", # titre du chapitre general (@SmartTitres) "0" # champs (@champsdisk) de donnees à extraire ); my @DiskTitres=("\n########## Identification DISK ##########\n"); my $D; my @tabsmart; #********** INITIALISATION DE LA GENERATION FICHIER RESULTAT ********* my @RefMachine=("PC", "CM"); my @ChampsRef=("numéro", # champs Identification ORDINATEUR "numéro" # champs Identification CARTE MERE ); # Descripteur de l'item ordinateur my @DescOrdi2=("0", # titre du chapitre general (@LshwTitres) "0", # chamextraireps (@ChampsLshw) de donnees à extraire "localhost", # debut du bloc a extraire "\\*\\-" # fin du bloc a extraire ); # Descripteur de l'item carte mère my @DescCM2=("1", # titre du chapitre general (@LshwTitres) "1", # champs (@ChampsLshw) de donnees à extraire "\\*\\-core", # debut du bloc a extraire "\\*\\-" # fin du bloc a extraire ); my @FicTab=@LshwTab; my $RefPC=undef; my $RefCM=undef; my $NomFic=undef; my $A; my $item; ######################################################################### # PROGRAMME RENSEIGNEMENT DU FICHIER CHECKLIST ######################################################################### # Renseignement du fichier checklist.txt de l'ordinateur par l'opérateur system("su -c 'kwrite $CheckFile' lalis"); ######################################################################### # PROGRAMME DES INFORMATIONS GENERALES (LSHW) ######################################################################### foreach (@RefItems) { # foreach @RefItems # Pour chaque item a afficher if ($_ eq "PC"){($titre, $data, $start, $end)=@DescOrdi;} if ($_ eq "CM"){($titre, $data, $start, $end)=@DescCM;} if ($_ eq "BIOS"){($titre, $data, $start, $end)=@DescBios;} if ($_ eq "CPU"){($titre, $data, $start, $end)=@DescCPU;} if ($_ eq "DISP"){($titre, $data, $start, $end)=@DescDisp;} if ($_ eq "NET"){($titre, $data, $start, $end)=@DescNet;} if ($_ eq "BAT"){($titre, $data, $start, $end)=@DescBat;} #print("$end\n"); $flag=0; foreach (@LshwTab) { # foreach @LshwTab # vidage buffer temporaire @temp=(); # extraction d'un bloc memoire dans @temp if ( $flag==0 ){ # attente debut du bloc vu if ( m/$start/ ){ # debut du bloc vu s/$_//; $flag=1; push(@ident,$LshwTitres[$titre]); } }else{ # attente fin du bloc vu push(@temp,$_); if ( m/$end/ ){ # fin du bloc vu $flag=0; } } # Extraction des champs d'un bloc memoire contenu dans @temp foreach (@temp) { # foreach temp if ( m/$ChampsLshw[$data]/ ){ s/\s+/ /; push(@ident,$_); } } # fin boucle foreach temp } # fin boucle foreach @LshwTab } # fin boucle foreach @LshwTitres ######################################################################### # PROGRAMME DES INFORMATIONS GENERALES (LSUSB) ######################################################################### # vidage buffer temporaire @temp=(); @temp=`lsusb`; push(@ident,"\n########## Identification USB ##########\n"); # Extraction des champs d'un bloc memoire contenu dans @temp foreach (@temp) { # foreach temp $_=" ".$_; push(@ident,$_); } ######################################################################### # PROGRAMME DES INFORMATIONS DES MEMOIRES (DMIDECODE) ######################################################################### # titre Identification MEMOIRE push(@ident,$MemTitres[$DescMem[0]]); # initialisation des variables $flag=0; # vidage des tableaux temporaires @temp=(); # Pour chaque item a afficher foreach (@tabdmidecode) { # foreach @tabdmidecode #print"@tabdmidecode \n"; # vidage des tableaux temporaires @temp=(); # extraction de la capacite maxi if ( m/Capacity/ ){ s/\s+/ /; push(@ident,$_); #s/Capacity//; } # extraction d'un bloc memoire dans @temp if ( $flag==0 ){ # attente debut du bloc vu if ( m/$DescMem[2]/ ){ # debut du bloc vu $flag=1; push(@ident,"\n************* BANK ***************\n"); } }else{ # attente fin du bloc vu push(@temp,$_); if ( m/$DescMem[3]/ ){ # fin du bloc vu $flag=0; } } # Extraction des champs d'un bloc memoire contenu dans @temp foreach (@temp) { # foreach temp if ( m/$ChampsMem[$DescMem[1]]/ ){ s/\s+/ /; #print; push(@ident,$_); } } # fin boucle foreach temp } # fin boucle foreach @tabdmidecode ######################################################################### # PROGRAMME DES INFORMATIONS DISK (SMARTCTL) ######################################################################### # titre Identification DISK push(@ident,$DiskTitres[$DescDisk[0]]); # pour chaque disque foreach (@ListDisk) { # foreach disk (my $A, my $B, $D)=split /\//; chop($D); @tabsmart=`smartctl -i /dev/$D`; push(@ident,"\n*************** disk ".$D." *************\n"); # pour chaque disque extraction des champs description foreach (@tabsmart) { # foreach tabsmart if ( m/$champsdisk[$DescDisk[1]]/ ){ $_=" ".$_; #print; push(@ident,$_); } } # fin boucle foreach tabsmart } # fin foreach disk ######################################################################### # PROGRAMME DE LA GENERATION FICHIER RESULTAT ######################################################################### # initialisation des variables $flag=0; foreach (@RefMachine) { # foreach @RefMachine @temp=(); # Pour chaque item a afficher if ($_ eq "PC"){($A, $data, $start, $end)=@DescOrdi2;} if ($_ eq "CM"){($A, $data, $start, $end)=@DescCM2;} $item=$_; #print "$A\n"; #print "$data\n"; #print "$start\n"; #print "$fin\n"; foreach (@FicTab) { # foreach @FicTab # extraction d'un bloc memoire dans @temp if ( $flag==0 ){ # attente debut du bloc vu if ( m/$start/ ){ # debut du bloc vu s/$_//; $flag=1; } }else{ # attente fin du bloc vu push(@temp,$_); if ( m/$end/ ){ # fin du bloc vu $flag=0; } } # Extraction des champs d'un bloc memoire contenu dans @temp foreach (@temp) { # foreach temp if ( m/$ChampsRef[$data]/ ){ #s/\s+//; #print"$_"; (my $E, my $Ref)=split(/:/,$_); $_=$Ref; s/\s+//; chop($_); #print"$_"; if ($item eq "PC"){$RefPC=$_;} if ($item eq "CM"){$RefCM=$_;} } } # fin boucle foreach temp } # fin boucle foreach @FicTab } # fin boucle foreach @RefMachine #print "$RefPC"; #print "$RefCM"; # patern pour test de la validite du test de la reference PC et CM #$RefPC="CZC1194MME"; #$RefPC=undef; #$RefPC=""; #$RefCM="CZC1194MMF"; #$RefCM=undef; #$RefCM=""; # fin patern pour test de la validite du test de la reference PC et CM # Test si $RefPC est: defini ET n'est pas une chaine vide ET ne contient pas d'espace # Test si $RefCM est: defini ET n'est pas une chaine vide ET ne contient pas d'espace if ((defined $RefPC) && ($RefPC ne "") && !($RefPC =~ m/\s+/)) { $NomFic="PC_".$RefPC.".txt"; }elsif((defined $RefCM) && ($RefCM ne "") && !($RefCM =~ m/\s+/)){ $NomFic="CM_".$RefCM.".txt"; }else{ $NomFic="ERROR.txt"; } ######################################################################### # PROGRAMME DE CONCATENATION DES FICHIERS CHECKLIST PLUS CARACTERISTIQUES ######################################################################### # La concatenation des fichiers checklist suivi de caractéristiques # se trouve dans un fichier nommé avec la référence du PC ou de la carte # Enregistrement du tableau @ident dans le fichier de nom $NomFic open(my $FIN, "<",$CheckFile) or die "Ouverture du fichier $CheckFile impossible\n"; open(my $FOUT, ">",$PathFicout.$NomFic) or die "Ouverture du fichier $NomFic impossible\n"; # Recopie du fichier checklist dans le fichier ref PC ou carte $NomFic while(<$FIN>){ print ($FOUT $_); # ecrit la ligne dans le fichier $NomFic #print("$_"); } #print ($Fout "TOTO\n"); #print "\n"; # Recopie du tableau caracteristiques PC dans le fichier ref PC ou carte $NomFic foreach(@ident){ print ($FOUT $_); #print("$_"); } close ($FIN); close ($FOUT); # Concaténation des fichiers checklist et caracteristique (identPC) #open(my $FIN, "<",$NomFic) or die "Ouverture du fichier $NomFic impossible\n"; #open(my $FOUT, ">>",$CheckFile) or die "Ouverture du fichier $CheckFile impossible\n"; #print ($Fout "TOTO\n"); #print "\n"; #while(<$FIN>){ #print ($FOUT $_); # ecrit la ligne dans le fichier $CheckFile #print("$_"); #} #close ($FIN); #close ($FOUT); ######################################################################### # PROGRAMME D'ENVOI DU FICHIER RESULTAT VERS LE SERVEUR ######################################################################### # Envoi du fichier concatené checklist plus caracteristiques PC sur le serveur system("rsync --port 10073 -aP " . $PathFicout.$NomFic . " 'lalis69.ddns.net::lalis-ordis/'"); print "\n########## Nom fichier resultat: $NomFic ##########\n"; print "\n################ Traitement terminé ################\n"; print "\n"; ################################ FIN PROGRAMME ################################