#!/bin/bash
#
# send_inventory
# sendet einige HW-Infos in der Form
#
# SCHLUESSEL;Wert[;weitere Werte]
#
# HOSTNAME;<Short>;<FQDN>
# NET;<MAC-Addr>;<IP-Addr/Len>[;<IP-Addr/Len>...]   pro Netzkarte
# NETCARD;<Vendor>;<Model>;<Device>;<MAC-Addr>
# MEM;<Memory in MByte>
# MEMSOCK;<Num Memory Slots>;<Filled Memory Slots>
# CPUS;<CPU Sockets>;<CPU Model>;<Cores per CPU>;<HT Cores per CPU>
# CPUC;<CPU Cores>;<MHz>;<kB Cach>;<HT Cores>
# CPUSOCK;<Num Sockets>;<Filled Sockets>
# [VM;yes]
# PARTITION;<Mountpoint|Swap>;<total>;<used>;<free>[;<mountopts>]    pro Partition
# DASDISK;<SerialNumber>;<total>;<alloc>;<free from alloc>
# SANDISK;<SerialNumber>;<total>;<alloc>;<free from alloc>
# DAS;<total GByte>;<alloc>;<used>;<free from alloc>;<free from alloc - adj>
# SAN;<total GByte>;<alloc>;<used>;<free from alloc>;<free from alloc - adj>
# FC;<WWN>                                         pro FC-Karte
# FCCARD;<Vendor>;<Model>;<Device>;<WWN>
# SCSICARD;<Vendor>;<Model>;<Device>
# IDEINTERFACE;<Vendor>;<Model>;<Device>
# TAPE;<Vendor>;<Model>;<Device>;[<Serial>]
# HOSTID;<hostid>
# BS;<BS Name>;<BS Version>;<Patchlevel>
# FIREWALL;on|off;<open Ports>
# SYSTEM|BOARD;Manufacturer;Product;Version;Serial
# CHASSIS;Manufacturer;Version;Serial;Type
# BIOS;Vendor;Version;Date
# SERVICEBOARD;<MAC-Addr>;<IP-Addr/Len>;<def-GW>
# ANTIVIR;<rpm>[;...]
# DBMS;[Informix;][Oracle;][MySQL;][MariaDB;]
# CLUSTER;<Cluster-Software>;<Clustername>;<node1>[;<noden>...]
# CLUSTERRES;<name>[;IP:<ip>...][;FS:<mountpkt>...]                pro Paket
# CLUSTERRESNODES;<name>;<defnode>[;<altnode>]                     pro Paket
# LDAP;<base>;<host>[;...]
# KERBEROS;<realm>;<kdc>[;...]
# GRUBPWD;<yes|no>
# POSTFIXRELAYHOST;<relayhost>
# BANNER;<RZ-Nummer|->
# SOFTWARE;<longname>;<name>;<version>;<release>;<vendor>          pro rpm/deb-package
######################################################################################
#
if [[ $# -lt 2 ]]
 then
  DT="`date '+%F %H:%M:00%:z'`"
else
  DT="$1 $2"
fi
#
DAT=/tmp/Inventory-`hostname`.csv
#
export LANG=C
#
export PATH=/bin:/sbin:/usr/sbin:/usr/bin:$PATH
#
(
echo "HOSTNAME;`hostname`;`hostname -f`"
#
ip addr | awk '
/^[0-9]*: / { i = $1 + 0
              if( m < i )
                m = i
            }
$1 == "link/ether" { hw[i] = $2 }
$1 == "inet"       { if( ip[i] != "" )
                       ip[i] = ip[i] ";" $2
                     else
                       ip[i] = $2
                   }
END { for( i = 0; i <= m; i++ )
      { if( hw[i] != "" )
          print "NET;" hw[i] ";" ip[i]
      }
    }'
#
(
if cd /sys/class
 then
  if [[ -f /usr/share/pci.ids ]]
   then
    PCIIDSCMD='cat /usr/share/pci.ids'
  elif [[ -f /usr/share/pci.ids.gz ]]
   then
    PCIIDSCMD='zcat /usr/share/pci.ids.gz'
  elif [[ -f /usr/share/hwdata/pci.ids ]]
   then
    PCIIDSCMD='cat /usr/share/hwdata/pci.ids'
  elif [[ -f /usr/share/hwdata/pci.ids.gz ]]
   then
    PCIIDSCMD='zcat /usr/share/hwdata/pci.ids.gz'
  elif [[ -f /usr/share/misc/pci.ids ]]
   then
    PCIIDSCMD='cat /usr/share/misc/pci.ids'
  elif [[ -f /usr/share/misc/pci.ids.gz ]]
   then
    PCIIDSCMD='zcat /usr/share/misc/pci.ids.gz'
  fi
  if [[ -n "$PCIIDSCMD" ]]
   then
    for i in net/* fc_host/* scsi_host/*
     do
      readlink -f $i
    done | awk '
{ if( match($0, "(/sys/devices/pci[^/]*/[^/]*/)([^/]*/)(.*)", a) )
  { if( card[a[1]] )
    { if( !pf[a[1]a[2]]++ )
        path[a[1]":"++pn[a[1]]] = a[1] a[2] a[3]
    }
    else
    { card[a[1]] = a[1] a[2]
      i = split(a[3], b, "/")
      type[a[1]] = b[i-1]
      pn[a[1]] = 1
      if( !pf[a[1]a[2]]++ )
        path[a[1]":"1] = a[1] a[2] a[3]
    }
  }
}
END { for( i in card )
      { if( type[i] == "net" )
        { printf("NETCARD %s %s", i, card[i])
          for( n = 1; n <= pn[i]; n++ )
            printf(" %s/address", path[i":"n])
          printf("\n")
        }
        else if( type[i] == "scsi_host" )
        { if( card[i] ~ "ata" )
            print "IDEINTERFACE " i " " card[i]
          else
            print "SCSICARD " i " " card[i]
        }
        else if( type[i] == "fc_host" )
        { printf("FCCARD %s %s", i, card[i])
          for( n = 1; n <= pn[i]; n++ )
            printf(" %s/port_name", path[i":"n])
          printf("\n")
        }
      }
    }
' | while read t s c d
     do
      if [[ $t = 'NETCARD' || $t = 'FCCARD' ]]
       then
        DETS=`awk 'BEGIN{ORS=";"};{print}' $d | sort -u`
      else
        DETS=''
      fi
      if [[ -f $c/vendor ]]
       then
        echo "$t `cat $c/vendor` `cat $c/device` `cat $c/subsystem_vendor` `cat $c/subsystem_device` ${DETS%;}"
      else
        echo "$t `cat $s/vendor` `cat $s/device` `cat $s/subsystem_vendor` `cat $s/subsystem_device` ${DETS%;}"
      fi
    done | awk -v pcicmd="$PCIIDSCMD" '
BEGIN { while( (pcicmd | getline p) > 0 )
        { if( match(p, /^([0-9a-f][0-9a-f][0-9a-f][0-9a-f]) *(.*)/, v) )
          { vc = v[1]
            vend[vc] = v[2]
            vdc = ""
          }
          else if( match(p, /^\t([0-9a-f][0-9a-f][0-9a-f][0-9a-f]) *(.*)/, d) )
          { if( vc != "" )
            { vdc = vc d[1]
              dev[vdc] = d[2]
            }
          }
          else if( match(p, /^\t\t([0-9a-f][0-9a-f][0-9a-f][0-9a-f]) *([0-9a-f][0-9a-f][0-9a-f][0-9a-f]) *(.*)/, s) )
          { if( vdc != "" )
              subc[vdc s[1] s[2]] = s[3]
          }
        }
        close(pcicmd)
      }
{ gsub("0x", "")
  if( vend[$4] && subc[$2 $3 $4 $5] )
    print $1 ";" vend[$2] ";" vend[$4] " " subc[$2 $3 $4 $5] ";" dev[$2 $3] ";" $6
  else if( subc[$2 $3 $4 $5] )
    print $1 ";" vend[$2] ";" subc[$2 $3 $4 $5] ";" dev[$2 $3] ";" $6
  else if( vend[$4] && dev[$4 $5] )
    print $1 ";" vend[$2] ";" vend[$4] " " dev[$4 $5] ";" dev[$2 $3] ";" $6
  else
    print $1 ";" vend[$2] ";" vend[$4] dev[$4 $5] " Device;" dev[$2 $3] ";" $6
}'
  fi
fi
)
#
/usr/bin/free -m | awk '$1 == "Mem:" {print "MEM;"$2}'
#
# damit wenigstens eine CPU auf Vollast laeuft:
awk 'BEGIN {for(i=1;i<=100000;i++)s+=1/i}'
awk 'BEGIN    { pr = 0
                mhz = 0
              }
/^processor/  { pr++ }
/vendor_id/   { gsub(".*: *", "")
                v = $0
              }
/physical id/ { p[$NF] = 1
                pi = $NF
              }
/core id/     { c[$NF] = 1
                gc[pi":"$NF] = 1
              }
/model name/  { gsub(".*: *", "")
                m = $0
              }
/cache size/  { if( $NF == "KB" )
                  cs = $(NF-1)
                if( $NF == "MB" )
                  cs = $(NF-1)*1024
              }
/cpu MHz/     { if( $NF > mhz )
                  mhz = $NF
              }
END { for( i in p )
        pa++
      for( i in c )
        ca++
      for( i in gc )
        gca++
      if( pa > 0 && ca > 0 )
      { printf("CPUS;%d;%s;%d;%d\n", pa, m ? m : v, ca, pr/pa)
        printf("CPUC;%d;%d;%d;%d\n", gca, mhz, cs, pr)
      }
      else
      { print "CPUS;" pr ";" m
        printf("CPUC;%d;%d;%d\n", pr, mhz, cs)
      }
    }' /proc/cpuinfo
#
if lspci | grep -qi 'System peripheral: .*Virtual'
 then
  echo "VM;yes"
elif grep -qi 'model name.*: QEMU'
 then
  echo "VM;yes"
fi
#
`dirname $0`/inventory_get_disks.sh
#
sed 's/0x/FC;/' /sys/class/fc_host/host?/port_name 2>/dev/null
#
echo "HOSTID;`/usr/bin/hostid`"
#
if [[ `uname -m` = 'x86_64' ]]
 then
  BITS='64bit'
else
  BITS='32bit'
fi
if [[ -f /etc/os-release ]]
 then
  awk -F '=' '
        { gsub("\"", "", $2)
          a[$1] = $2
        }
    END { split(a["VERSION_ID"], va, ".")
          printf("BS;%s;%s;%s;%s;'$BITS'\n", a["NAME"], va[1], va[2], a["PRETTY_NAME"])
        }' /etc/os-release
elif [[ -f /etc/SuSE-release ]]
 then
  awk -F ' *= *' '
  /SUSE/ { ln = $0
           if( $NF ~ "x86_64" || $NF ~ "s390x" )
             a = "64bit"
           else
             a = "32bit"
           if( $0 ~ "Enterprise Server" )
             n = "SLES"
           else
           { gsub(" [0-9].*", "")
             n = $0
           }
         }
  $1 == "VERSION" { v = $2 }
  $1 == "PATCHLEVEL" { p = $2 }
  END { printf("BS;%s;%s;%s;%s;%s\n", n, v, p, ln, a) }
  ' /etc/SuSE-release
elif which lsb_release >/dev/null
 then
  lsb_release -a 2>/dev/null | awk -F '[ \t]*:[ \t]*' '
  /Distributor ID/ { n = $2 }
  /Release/ { v = $2 }
  /Description/ { gsub("\"", "", $2); d = $2 }
  END { print "BS;" n ";" v ";;" d ";'$BITS'" }
  '
elif [[ -f /etc/lsb-release ]]
 then
  awk -F ' *= *' '
  /DISTRIB_ID/ { n = $2 }
  /DISTRIB_RELEASE/ { v = $2 }
  /DISTRIB_DESCRIPTION/ { gsub("\"", "", $2); d = $2 }
  END { print "BS;" n ";" v ";;" d ";'$BITS'" }
  ' /etc/lsb-release
elif [[ -f /etc/redhat-release ]]
 then
  V=`sed 's/^Red Hat .* release \([^ ]*\) .*$/\1/' /etc/redhat-release`
  if [[ -n "$V" ]]
   then
    echo "BS;Red Hat;$V;;`head -1 /etc/redhat-release`;$BITS"
  else
    echo "BS;;;;`head -1 /etc/redhat-release`;$BITS"
  fi
elif [[ -f /etc/debian_version ]]
 then
  R=`head -1 /etc/debian_version`
  echo "BS;Debian;;;$R;$BITS"
else
  R=`cat /etc/*-release 2>/dev/null | head -1`
  if [[ -n "$R" ]]
   then
    echo "BS;;;;$R;$BITS"
  fi
fi
#
if /usr/sbin/iptables -L >/dev/null 2>&1
 then
  if /usr/sbin/iptables -L | egrep -q "DROP|REJECT"
   then
    echo "FIREWALL;on"
  else
    echo "FIREWALL;off"
  fi
fi
#
if which hwinfo >/dev/null 2>&1
 then
  hwinfo --bios | awk -F ' *: *' '
/BIOS Info/,/System Info/ { if( $1 ~ "Vendor" || $1 ~ "Version" )
                            { gsub("\"", "", $2)
                              gsub(" ", "", $1)
                              i[$1] = $2
                            }
                            else if( $1 ~ "Date" )
                            { gsub("[^0-9/.]","",$2)
                              cd = "date -d \""$2"\" \"+%F\""
                              cd | getline i["Date"]
                              close(cd)
                            }
                          }
/System Info/,/Board Info/{ if( $1 ~ "Manufacturer" || $1 ~ "Product" || $1 ~ "Version" || $1 ~ "Serial" )
                            { gsub("\"", "", $2)
                              gsub(" ", "", $1)
                              s[$1] = $2
                            }
                          }
/Board Info/,/Chassis Info/{ if( $1 ~ "Manufacturer" || $1 ~ "Product" || $1 ~ "Version" || $1 ~ "Serial" )
                             { gsub("\"", "", $2)
                               gsub(" ", "", $1)
                               b[$1] = $2
                             }
                           }
/Chassis Info/,/Processor Info/{ if( $1 ~ "Manufacturer" || $1 ~ "Version" || $1 ~ "Serial" || $1 ~ "Type" )
                                 { gsub("\"", "", $2)
                                   gsub(" ", "", $1)
                                   c[$1] = $2
                                 }
                               }
/Processor Info/,/Cache Info/ { if( $1 ~ "Socket Status" )
                                { psock++
                                  if( $2 ~ "Populated" )
                                    psockf++
                                }
                              }
/Memory Device/,/Memory Array Mapping/ { if( $1 ~ "Size" )
                                         { msock++
                                           if( $2 + 0 > 0 )
                                             msockf++
                                         }
                                       }
END { print "MEMSOCK;" msock ";" msockf
      print "CPUSOCK;" psock ";" psockf
      print "SYSTEM;" s["Manufacturer"] ";" s["Product"] ";" s["Version"] ";" s["Serial"]
      print "BOARD;" b["Manufacturer"] ";" b["Product"] ";" b["Version"] ";" b["Serial"]
      print "CHASSIS;" c["Manufacturer"] ";" c["Version"] ";" c["Serial"] ";" c["Type"]
      print "BIOS;" i["Vendor"] ";" i["Version"] ";" i["Date"]
    }
'
elif which lshal >/dev/null 2>&1
 then
  lshal --show /org/freedesktop/Hal/devices/computer | awk -F ' = ' '
/system.board.product/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           boproduct = $2
                         }
/system.board.serial/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           boserial = $2
                         }
/system.board.vendor/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           bovendor = $2
                         }
/system.board.version/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           boversion = $2
                         }
/system.chassis.manufacturer/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           chmanufacturer = $2
                         }
/system.chassis.version/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           chversion = $2
                         }
/system.chassis.serial/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           chserial = $2
                         }
/system.chassis.type/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           chtype = $2
                         }
/system.firmware.release_date/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           fwdate = $2
                         }
/system.firmware.vendor/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           fwvendor = $2
                         }
/system.firmware.version/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           fwversion = $2
                         }
/system.hardware.product/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           hwproduct = $2
                         }
/system.hardware.serial/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           hwserial = $2
                         }
/system.hardware.vendor/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           hwvendor = $2
                         }
/system.hardware.version/ { sub("'"'"'", "", $2)
                           sub("'"'"'.*", "", $2)
                           hwversion = $2
                         }
END { print "SYSTEM;" hwvendor ";" hwproduct ";" hwversion ";" hwserial
      print "BOARD;" bovendor ";" boproduct ";" boversion ";" boserial
      print "CHASSIS;" chmanufacturer ";" chversion ";" chserial ";" chtype
      print "BIOS;" fwvendor ";" fwversion ";" fwdate
    }'
#
fi
#
# Serviceboard
if [[ -x /usr/bin/ipmitool ]]
 then
  /usr/bin/ipmitool lan print 2>/dev/null | awk -F ' *: *' '
$1 == "IP Address"         { ip = $2 }
$1 == "Subnet Mask"        { split($2,a,".")
                             len=32-log(4294967296-a[1]*16777216-a[2]*65536-a[3]*256-a[4])/log(2) }
$1 == "MAC Address"        { gsub("MAC Address *: *", "", $0)
                             mac = $0
                           }
$1 == "Default Gateway IP" { gw = $2 }
END { if( ip mask mac != "" )
      { print "SERVICEBOARD;" mac ";" ip "/" len ";" gw
      }
    }
'
fi
#
#
# Ldap
[[ -f /etc/ldap.conf ]] && awk '$1 == "host" {for(i=2;i<=NF;i++)h=h";"$i}
     $1 == "base" {b=$2}
END {print "LDAP;" b h}' /etc/ldap.conf
#
#
# Kerberos
[[ -f /etc/krb5.conf ]] && sed 's/^[ \t]*//g;s/[ \t]*$//g' /etc/krb5.conf | awk -F '[ \t]*=[ \t]*' '
$1 == "[libdefaults]" { m = $1 }
$1 == "[realms]" { m = $1 }
$1 == "default_realm" && m == "[libdefaults]" { dr = $2 }
m == "[realms]" && $1 == dr { r = 1 }
$0 ~ "}" { r = 0 }
r == 1 && $1 == "kdc" { kdc = kdc ";" $2 }
END {if( dr && kdc ) print "KERBEROS;" dr kdc}'
#
if [[ -f /boot/grub/menu.lst ]]
 then
  if grep -q '^password' /boot/grub/menu.lst
   then
    echo "GRUBPWD;yes"
  else
    echo "GRUBPWD;no"
  fi
fi
#
[[ -f "/etc/postfix/main.cf" ]] && awk -F ' *= *' '$1 == "relayhost" { print "POSTFIXRELAYHOST;" $2}' /etc/postfix/main.cf
#
P=`grep '^Banner' /etc/ssh/sshd_config | awk '{print $2}'`
if [[ -z "$P" ]]
 then
  W="-"
else
  W=`grep -i 'RZ-Nummer' $P | sed 's/.*RZ-Nummer *: *\([^ ]*\).*$/\1/'`
fi
echo "BANNER;$W"
#
if ps -efa | grep -v grep | grep -q oninit
 then
   DBMS="${DBMS}Informix;"
fi
if ps -efa | grep -v grep | grep -q ora_
 then
  DBMS="${DBMS}Oracle;"
fi
#
if [[ `ls /var/lib/rpm 2>/dev/null | wc -l` -gt 3 ]]
 then
  ANTIVIR=`rpm -qa | egrep -i 'f-secure|fsav|mcafee' | awk 'BEGIN{ORS=";"};{print $1}'`
  if [[ -n "$ANTIVIR" ]]
   then
    echo "ANTIVIR;$ANTIVIR"
  fi
  #
  if rpm -qa | grep -iq 'mysql.*server'
   then
    DBMS="${DBMS}MySQL;"
  fi
  if rpm -qa | grep -iq 'mariadb.*server'
   then
    DBMS="${DBMS}MariaDB;"
  fi
  if rpm -qa | grep -iq 'postgresql.*server'
   then
    DBMS="${DBMS}Postgresql;"
  fi
  if [[ -n "$DBMS" ]]
   then
    echo "DBMS;$DBMS"
  fi
  #
  # SCCL - Cluster
  CLUSTERSW=`rpm -qa | grep -i '^sccl-'`
  if [[ -n "$CLUSTERSW" ]]
   then
    if [[ -f /etc/sccl/sccl.conf ]]
     then
      ( . /etc/sccl/sccl.conf
        if [[ `echo $NODES | wc -w` -gt 1 ]]
         then
          echo "CLUSTER;$CLUSTERSW;$CLUSTER;`echo $NODES | sed 's/ /;/g'`"
          if [[ -f "$PACKAGES" ]]
           then
            PKGS=`awk '!/^ *#/ && $1 != "" {print $1}' $PACKAGES | sort -u`
          elif [[ -f "$PAKETE" ]]
           then
            PKGS=`awk '!/^ *#/ && $1 != "" {print $1}' $PAKETE | sort -u`
            PACKAGES=$PAKETE
            RESOURCES=$RESOURCEN
          fi
          for p in $PKGS
           do
            awk 'BEGIN{ printf("CLUSTERRES;'$p'") }
!/^ *#/ && $1 == "'$p'" { for( i = 3; i <= NF; i++ )
                            if( $i ~ "IP:|FS:" )
                            { split($i, a, ":")
                              printf(";%s:%s", a[1], a[a[1]=="FS"?2:3])
                            }
                        }
END { printf("\n") } ' $RESOURCES
          awk 'BEGIN{ printf("CLUSTERRESNODES;'$p'") }
!/^ *#/ && $1 == "'$p'" { if( $2 == "-" )
                            printf(";")
                          else
                            printf(";%s", $2)
                          for( i = 3; i <= NF; i++ )
                            printf(";%s", $i)
                        }
END { printf("\n") } ' $PACKAGES
          done
        fi
      )
    fi
  fi
  # SOFTWARE Liste
  rpm -qa --qf 'SOFTWARE;%{NAME}-%{VERSION}-%{RELEASE};%{NAME};%{VERSION};%{RELEASE};%{ARCH};%{VENDOR}\n' | sort
elif [[ -x /usr/bin/dpkg-query ]]
 then
  if /usr/bin/dpkg-query -l | grep -iq 'mysql.*server'
   then
    DBMS="${DBMS}MySQL;"
  fi
  if /usr/bin/dpkg-query -l | grep -iq 'mariadb.*server'
   then
    DBMS="${DBMS}MariaDB;"
  fi
  if /usr/bin/dpkg-query -l | grep -iq 'postgresql.*server'
   then
    DBMS="${DBMS}Postgresql;"
  fi
  if [[ -n "$DBMS" ]]
   then
    echo "DBMS;$DBMS"
  fi
  /usr/bin/dpkg-query -f 'SOFTWARE;${Package}-${Version};${Package};${Version};;${Architecture};${Maintainer}\n' -W | sort -u
fi
#
) >$DAT
send_server_doku Inventory "Short System Status for ServerDB.
HOSTNAME;<Short>;<FQDN>
NET;<HW-Addr>;<IP-Addr/Len>[;<IP-Addr/Len>...]
NETCARD;<MAC-Addr>;<Vendor>;<Model>
MEM;<Memory in MByte>
MEMSOCK;<Num Memory Slots>;<Filled Memory Slots>
CPUS;<CPU Sockets>;<CPU Model>;<Cores per CPU>;<HT Cores per CPU>
CPUC;<CPU Cores>;<MHz>;<kB Cach>;<HT Cores>
[VM;yes]
CPUSOCK;<Num Sockets>;<Filled Sockets>
PARTITION;<Mountpoint|swap>;<total GByte>;<used GByte>;<free GByte>     per partition
DASDISK;<SerialNumber>;<total GByte>;<alloc LVM/FS GByte>;<free LVM/FS GByte>
SANDISK;<SerialNumber>;<total GByte>;<alloc LVM/FS GByte>;<free LVM/FS GByte>
DAS;<total GByte>;<alloc FS GByte>;<used FS GByte>;<free FS GByte>
SAN;<total GByte>;<alloc FS GByte>;<used FS GByte>;<free FS GByte>
FC;<WWN>
FCCARD;<WWN>;<Vendor>;<Model>
TAPE;<Vendor>;<Model>;[<Serial>]
HOSTID;<hostid>
BS;<BS Name>;<BS Version>;<Patchlevel>;<BS Longname>;32bit|64bit
FIREWALL;on|off;<open Ports>
SYSTEM|BOARD;Manufacturer;Product;Version;Serial
CHASSIS;Manufacturer;Version;Serial;Type
ANTIVIR;<rpm>[;...]
DBMS;[Informix;][Oracle;][MySQL;][MariaDB;]
CLUSTER;<Clustersoftware>;<Clustername>;<Nodes>;<Packages>
SOFTWARE;<rpm>" $DT $DAT
