396 lines
15 KiB
Perl
Executable File
396 lines
15 KiB
Perl
Executable File
#!/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 ################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|