File: Bios.pm

package info (click to toggle)
ocsinventory-agent 2%3A2.10.0-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 5,424 kB
  • sloc: perl: 26,492; xml: 773; objc: 528; sh: 386; ansic: 333; makefile: 12
file content (87 lines) | stat: -rw-r--r-- 2,963 bytes parent folder | download | duplicates (2)
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;