1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
package Ocsinventory::Agent::Backend::OS::Generic::Dmidecode::Bios;
use strict;
sub run {
my $params = shift;
my $common = $params->{common};
# Parsing dmidecode output
# Using "type 0" section
my( $SystemSerial , $SystemModel, $SystemManufacturer,
$SystemVersion, $BiosManufacturer, $BiosVersion,
$BiosDate, $AssetTag, $MotherboardManufacturer,
$MotherboardModel, $MotherboardSerial, $Type );
#System DMI
$SystemManufacturer = `dmidecode -s system-manufacturer`;
$SystemModel = `dmidecode -s system-product-name`;
$SystemSerial = `dmidecode -s system-serial-number`;
$SystemVersion = `dmidecode -s system-version`;
$AssetTag = `dmidecode -s chassis-asset-tag`;
$Type = `dmidecode -s chassis-type`;
#Motherboard DMI
$MotherboardManufacturer = `dmidecode -s baseboard-manufacturer`;
$MotherboardModel = `dmidecode -s baseboard-product-name`;
$MotherboardSerial = `dmidecode -s baseboard-serial-number`;
#BIOS DMI
$BiosManufacturer = `dmidecode -s bios-vendor`;
$BiosVersion = `dmidecode -s bios-version`;
$BiosDate = `dmidecode -s bios-release-date`;
foreach my $info ( $SystemSerial , $SystemModel, $SystemManufacturer,
$SystemVersion, $BiosManufacturer, $BiosVersion,
$BiosDate, $AssetTag, $MotherboardManufacturer,
$MotherboardModel, $MotherboardSerial, $Type ) {
# Remove lines starting with #
$info =~ s/(\s*#.*\n)+//g;
# Remove error msg 'Invalid entry length (0). DMI table is broken! Stop.'
$info =~ s/Invalid.*//g;
# Remove break lines
$info =~ s/\n//g;
# Remove whitespaces at start/end
$info =~ s/^\s+|\s+$//g;
}
#System DMI
if ($SystemModel && $SystemManufacturer && $SystemManufacturer =~ /^LENOVO$/i && $SystemVersion =~ /^(Think|Idea|Yoga|Netfinity|Netvista|Intelli)/i) {
my $product_name = $SystemVersion;
$SystemVersion = $SystemModel;
$SystemModel = $product_name;
}
# If serial number is empty, assign mainboard serial (e.g Intel NUC)
if (!$SystemSerial) {
$SystemSerial = $MotherboardSerial;
}
# Some bioses don't provide a serial number so I check for CPU ID (e.g: server from dedibox.fr)
my @cpu;
if (!$SystemSerial || $SystemSerial =~ /^0+$/) {
@cpu = `dmidecode -t processor`;
for (@cpu){
if (/ID:\s*(.*)/i){
$SystemSerial = $1;
}
}
}
# Writing data
$common->setBios ({
ASSETTAG => $AssetTag,
SMANUFACTURER => $SystemManufacturer,
SMODEL => $SystemModel,
SSN => $SystemSerial,
BMANUFACTURER => $BiosManufacturer,
BVERSION => $BiosVersion,
BDATE => $BiosDate,
MMANUFACTURER => $MotherboardManufacturer,
MMODEL => $MotherboardModel,
MSN => $MotherboardSerial,
TYPE => $Type,
});
}
1;
|