diff --git a/build.gradle b/build.gradle index 1556630..c676516 100644 --- a/build.gradle +++ b/build.gradle @@ -127,13 +127,14 @@ ospackage { os=LINUX arch=NOARCH version='1.1.3' - release='3' + release='4' into '/opt/paccor' user 'root' fileMode=0755 requires('dmidecode', '3.2', GREATER | EQUAL) + requires('ethtool') requires('jq') requires('lshw') requires('vim-common') diff --git a/scripts/allcomponents.sh b/scripts/allcomponents.sh index aa45a3a..dae51ea 100755 --- a/scripts/allcomponents.sh +++ b/scripts/allcomponents.sh @@ -570,11 +570,12 @@ parseNicData () { for ((i = 0 ; i < numHandles ; i++ )); do manufacturer=$(lshwGetVendorIDFromBusItem "$i") - model=$(lshwGetProductIDFromBusItem "$i") - serialConstant=$(lshwGetSerialFromBusItem "$i") + model=$(lshwGetProductIDFromBusItem "$i") + serialConstant=$(lshwGetLogicalNameFromBusItem "$i") + serialConstant=$(ethtoolPermAddr "$serialConstant") serialConstant=$(standardizeMACAddr "${serialConstant}") serial="" - revision=$(lshwGetVersionFromBusItem "$i") + revision=$(lshwGetVersionFromBusItem "$i") if [[ -z "${manufacturer// }" ]] && [[ -z "${model// }" ]] && (! [[ -z "${serialConstant// }" ]] || ! [[ -z "${revision// }" ]]); then manufacturer=$(lshwGetVendorNameFromBusItem "$i") @@ -644,9 +645,9 @@ parseHddData () { for ((i = 0 ; i < numHandles ; i++ )); do manufacturer=$(lshwGetVendorIDFromBusItem "$i") - model=$(lshwGetProductIDFromBusItem "$i") - serial=$(lshwGetSerialFromBusItem "$i") - revision=$(lshwGetVersionFromBusItem "$i") + model=$(lshwGetProductIDFromBusItem "$i") + serial=$(lshwGetSerialFromBusItem "$i") + revision=$(lshwGetVersionFromBusItem "$i") if [[ -z "${manufacturer// }" ]] && [[ -z "${model// }" ]] && (! [[ -z "${serial// }" ]] || ! [[ -z "${revision// }" ]]); then model=$(lshwGetProductNameFromBusItem "$i") @@ -705,7 +706,7 @@ parseGfxData () { if [[ -z "${manufacturer// }" ]] && [[ -z "${model// }" ]] && (! [[ -z "${serial// }" ]] || ! [[ -z "${revision// }" ]]); then manufacturer=$(lshwGetVendorNameFromBusItem "$i") - model=$(lshwGetProductNameFromBusItem "$i") + model=$(lshwGetProductNameFromBusItem "$i") fi if [[ -z "${manufacturer// }" ]]; then diff --git a/scripts/hw.sh b/scripts/hw.sh index de0207d..537067a 100644 --- a/scripts/hw.sh +++ b/scripts/hw.sh @@ -56,7 +56,7 @@ lshwNumBusItems () { lshwGetVendorIDFromBusItem () { itemnumber="${1}" result="" - str=$(echo "${busitems[$itemnumber]}" | grep -e "^vendor:.*[^\[]\[.\+$" | sed 's/^vendor:.*[^\[]\[\([0-9A-Fa-f]\{4\}\)\]$/\1/') + str=$(echo "${busitems[$itemnumber]}" | grep -e "^vendor:.*[^\[]\[.\+$" | sed 's/^vendor:.*[^\[]\[\([0-9A-Fa-f]\+\)\]$/\1/') if [ -n "$str" ]; then result=$str fi @@ -65,7 +65,7 @@ lshwGetVendorIDFromBusItem () { lshwGetProductIDFromBusItem () { itemnumber="${1}" result="" - str=$(echo "${busitems[$itemnumber]}" | grep -e "^product:.*[^\[]\[.\+$" | sed 's/^product:.*[^\[]\[[0-9A-Fa-f]\{4\}:\([0-9A-Fa-f]\{4\}\)\]$/\1/') + str=$(echo "${busitems[$itemnumber]}" | grep -e "^product:.*[^\[]\[.\+$" | sed 's/^product:.*[^\[]\[[0-9A-Fa-f]\+:\([0-9A-Fa-f]\+\)\]$/\1/') if [ -n "$str" ]; then result=$str fi @@ -89,6 +89,15 @@ lshwGetSerialFromBusItem () { fi printf "$result" } +lshwGetLogicalNameFromBusItem () { + itemnumber="${1}" + result="" + str=$(echo "${busitems[$itemnumber]}" | grep -e "^logical name:.*$" | sed 's/^logical name: \(.\+\)$/\1/') + if [ -n "$str" ]; then + result=$str + fi + printf "$result" +} lshwGetVendorNameFromBusItem () { itemnumber="${1}" result="" @@ -131,6 +140,12 @@ lshwBusItemWirelessCap () { fi printf "$result" } +ethtoolPermAddr () { + iface="${1}" + result="" + str=$(ethtool -P "$iface" 2> /dev/null | grep -e "^Perm.*$" | sed 's/^Permanent address: \([0-9a-f:]\+\)$/\1/') + printf "$result" +} #lshwParse "disk" #lshwNetwork #echo ${items[0]} diff --git a/scripts/smbios.sh b/scripts/smbios.sh index eba124f..a3e0e74 100644 --- a/scripts/smbios.sh +++ b/scripts/smbios.sh @@ -9,19 +9,23 @@ dmidecodeHandles () { } dmidecodeData () { handle="${1}" - str=$(dmidecode -H "$handle" -u | awk '/Header and Data:/{f=1;next} /Strings/{f=0} f' | tr "\n\r\t" ' ' | tr -s ' ' | sed -e 's/^[[:space:]]*//' | sed -e 's/[[:space:]]*$//') - old="$IFS" - IFS=' ' - tableData=($str) - IFS="$old" + if [[ $handle =~ ^0x[0-9A-Fa-f]+$ ]]; then + str=$(dmidecode -H "$handle" -u | awk '/Header and Data:/{f=1;next} /Strings/{f=0} f' | tr "\n\r\t" ' ' | tr -s ' ' | sed -e 's/^[[:space:]]*//' | sed -e 's/[[:space:]]*$//') + old="$IFS" + IFS=' ' + tableData=($str) + IFS="$old" + fi } dmidecodeStrings () { handle="${1}" - str=$(dmidecode -H "$handle" -u | awk '/Strings/{f=1;next} /^\w+$/{f=0} f' | sed 's/^[^"]*$//g' | sed 's/^\w+//g' | sed '/^[[:space:]]*$/d') - old="$IFS" - IFS=$'\n' - tableStrings=($str) - IFS="$old" + if [[ $handle =~ ^0x[0-9A-Fa-f]+$ ]]; then + str=$(dmidecode -H "$handle" -u | awk '/Strings/{f=1;next} /^\w+$/{f=0} f' | sed 's/^[^"]*$//g' | sed 's/^\w+//g' | sed '/^[[:space:]]*$/d') + old="$IFS" + IFS=$'\n' + tableStrings=($str) + IFS="$old" + fi } dmidecodeParseHandle () { handle="${1}" @@ -44,11 +48,13 @@ dmidecodeGetByte () { dmidecodeGetString () { strref="${1}" str="" - strrefDec=$(printf "%d" "0x""$strref") - lenDec=$(printf "%d" "0x"${#tableStrings[@]}) - if [ $strrefDec -le $lenDec ] && [ $strrefDec -gt 0 ]; then - str="${tableStrings[$strrefDec-1]}" - str=$(printf "$str" | sed 's/^[ \t]*"\?//;s/"\?[ \t]*$//') + if [[ $strref =~ ^[0-9A-Fa-f]+$ ]]; then + strrefDec=$(printf "%d" "0x""$strref") + lenDec=$(printf "%d" "0x"${#tableStrings[@]}) + if [ $strrefDec -le $lenDec ] && [ $strrefDec -gt 0 ]; then + str="${tableStrings[$strrefDec-1]}" + str=$(printf "$str" | sed 's/^[ \t]*"\?//;s/"\?[ \t]*$//') + fi fi printf "$str" }