From b7a51773c19f71b1a1418a9e793417b137f2c09f Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 10:48:08 +0100 Subject: [PATCH 01/14] rc.libvirt: skip non-existing XML files --- etc/rc.d/rc.libvirt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/etc/rc.d/rc.libvirt b/etc/rc.d/rc.libvirt index 41236c822..c6a3935a7 100755 --- a/etc/rc.d/rc.libvirt +++ b/etc/rc.d/rc.libvirt @@ -181,14 +181,15 @@ libvirtd_start(){ return 1 fi # convert libvirt 1.3.1 w/ eric's hyperv vendor id patch to how libvirt does it in libvirt 1.3.3+ - sed -ri "s///g" /etc/libvirt/qemu/*.xml &>/dev/null + sed -ri "s///g" /etc/libvirt/qemu/*.xml 2>/dev/null # remove from xml because libvirt + virlogd + virlockd has an issue with locked - sed -ri "//d" /etc/libvirt/qemu/*.xml &>/dev/null + sed -ri "//d" /etc/libvirt/qemu/*.xml 2>/dev/null # Remove "" if reverting from later release. . /etc/unraid-version - [[ $(version $version) -le $(version "6.12") ]] && sed -ri "//d" /etc/libvirt/qemu/*.xml &>/dev/null + [[ $(version $version) -le $(version "6.12") ]] && sed -ri "//d" /etc/libvirt/qemu/*.xml 2>/dev/null # update interface section((s) of VM configuration files for XML in /etc/libvirt/qemu/*.xml; do + [[ -f "$XML" ]] || continue # get all interface sections ROW=($(grep -nhP ' Date: Sat, 9 Dec 2023 14:52:36 +0100 Subject: [PATCH 02/14] remove leading zeros in IPv4 address --- emhttp/plugins/dynamix/Eth0.page | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/emhttp/plugins/dynamix/Eth0.page b/emhttp/plugins/dynamix/Eth0.page index 1d614fec2..621c62eb6 100644 --- a/emhttp/plugins/dynamix/Eth0.page +++ b/emhttp/plugins/dynamix/Eth0.page @@ -76,6 +76,7 @@ array_multisort($sort_eth0,$vlan_eth0); refresh(); // automatically include new ethernet ports Array.prototype.same = function(){return this.sort().filter(function(v,i,o){return i&&v===o[i-1]?v:0;}).length;} +String.prototype.peel = function(){return this.split('.').map(Number).join('.');} function prepareSettings(form) { var bondnics = [], brnics = []; @@ -109,6 +110,10 @@ function prepareSettings(form) { swal({title:'Duplicate metrics',text:'List of default gateways contains duplicate metric values',type:'error',html:true,confirmButtonText:"_(Ok)_"}); return false; } + // remove leading zeros in IPv4 address + $(form).find('input[name^="IPADDR:"]').each(function(){ + $(this).val($(this).val().peel()); + }); if (form.TYPE.value == 'access') { $(form).find('input[name^="VLANID:"]').prop('disabled',false).val(''); $(form).find('input[name^="DESCRIPTION:"]').not('input[name$=":0"]').prop('disabled',false).val(''); From 20db70bc3a6717341f0dd5bd16b22028c6e2726b Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 15:04:15 +0100 Subject: [PATCH 03/14] Dashboard: allow negative temps to show --- emhttp/plugins/dynamix/nchan/update_2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emhttp/plugins/dynamix/nchan/update_2 b/emhttp/plugins/dynamix/nchan/update_2 index c0d0a6a65..e7915bb98 100755 --- a/emhttp/plugins/dynamix/nchan/update_2 +++ b/emhttp/plugins/dynamix/nchan/update_2 @@ -176,7 +176,7 @@ function device_temp(&$disk, &$red, &$orange) { } elseif (exceed($temp,$hot,$top)) { $color = 'orange'; $orange++; } - return (($spin && $temp>0) ? "".my_temp($temp)."" : "*").($nvme ? my_power($dev) : ""); + return ($spin ? "".my_temp($temp)."" : "*").($nvme ? my_power($dev) : ""); } function device_smart(&$disk, &$fail, &$smart) { global $numbers,$saved; From 46726bfa2e0e2f82443cd4800a1d841e965954ce Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 15:07:01 +0100 Subject: [PATCH 04/14] Dashboard: allow negative temps to show --- emhttp/plugins/dynamix/nchan/update_2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emhttp/plugins/dynamix/nchan/update_2 b/emhttp/plugins/dynamix/nchan/update_2 index e7915bb98..2ff62adbd 100755 --- a/emhttp/plugins/dynamix/nchan/update_2 +++ b/emhttp/plugins/dynamix/nchan/update_2 @@ -171,7 +171,7 @@ function device_temp(&$disk, &$red, &$orange) { $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max'])); $top = $display['top'] ?? 120; $color= 'green'; - if (exceed($temp,$max,$top)) { + if (exceed($temp,$max,$top) || $temp<0) { $color = 'red'; $red++; } elseif (exceed($temp,$hot,$top)) { $color = 'orange'; $orange++; From 7638cdac4a9b7b90fabc6441dbcd8d2bf1a136b2 Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 15:29:44 +0100 Subject: [PATCH 05/14] Dashboard: fix smart health detection --- emhttp/plugins/dynamix/nchan/update_2 | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emhttp/plugins/dynamix/nchan/update_2 b/emhttp/plugins/dynamix/nchan/update_2 index 2ff62adbd..849b6422a 100755 --- a/emhttp/plugins/dynamix/nchan/update_2 +++ b/emhttp/plugins/dynamix/nchan/update_2 @@ -192,7 +192,8 @@ function device_smart(&$disk, &$fail, &$smart) { $text = _('healthy'); $color = 'green'; $file = "state/smart/$name"; - if (file_exists("$file") && exec("grep -Pom1 '^SMART.*: \K[A-Z]+' ".escapeshellarg($file)." |tr -d '\n' 2>/dev/null", $ssa) && in_array("$ssa",$failed)) { + $ssa = file_exists($file) ? exec("grep -Pom1 '^SMART.+: \K[A-Z]+' ".escapeshellarg($file)) : ""; + if (in_array($ssa,$failed)) { $title = _('SMART health-check failed')."\n"; $thumb = 'thumbs-o-down'; $color = 'red'; $text = 'fail'; $fail++; } else { if (empty($saved["smart"]["$named.ack"])) { From bb29436280af2c40986ba3e2e69ea7dca78ea626 Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 15:51:32 +0100 Subject: [PATCH 06/14] Dashboard: allow negative temps to show --- emhttp/plugins/dynamix/nchan/update_2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/emhttp/plugins/dynamix/nchan/update_2 b/emhttp/plugins/dynamix/nchan/update_2 index 849b6422a..ccb68565f 100755 --- a/emhttp/plugins/dynamix/nchan/update_2 +++ b/emhttp/plugins/dynamix/nchan/update_2 @@ -163,7 +163,7 @@ function device_status(&$disk, &$error, &$warning) { function device_temp(&$disk, &$red, &$orange) { global $display; $spin = strpos(_var($disk,'color'),'blink')===false; - $temp = _var($disk,'temp','*'); + $temp = _var($disk,'temp'); $dev = _var($disk,'device'); $nvme = _var($disk,'transport')=='nvme'; [$hotNVME,$maxNVME] = $nvme ? get_nvme_info($dev,'temp') : [-1,-1]; @@ -171,7 +171,7 @@ function device_temp(&$disk, &$red, &$orange) { $max = _var($disk,'maxTemp',-1)>=0 ? $disk['maxTemp'] : ($maxNVME>=0 ? $maxNVME : (_var($disk,'rotational',1)==0 && $display['maxssd']>=0 ? $display['maxssd'] : $display['max'])); $top = $display['top'] ?? 120; $color= 'green'; - if (exceed($temp,$max,$top) || $temp<0) { + if (exceed($temp,$max,$top) || (is_numeric($temp) && $temp<0)) { $color = 'red'; $red++; } elseif (exceed($temp,$hot,$top)) { $color = 'orange'; $orange++; From 4a8dafea3319d8ee2e98e38e9dd856d0265f87df Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 16:01:09 +0100 Subject: [PATCH 07/14] Fix exceed function --- emhttp/plugins/dynamix/include/Wrappers.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/emhttp/plugins/dynamix/include/Wrappers.php b/emhttp/plugins/dynamix/include/Wrappers.php index 9a9adf114..d969236d8 100644 --- a/emhttp/plugins/dynamix/include/Wrappers.php +++ b/emhttp/plugins/dynamix/include/Wrappers.php @@ -86,7 +86,7 @@ function port_name($port) { return substr($port,-2)!='n1' ? $port : substr($port,0,-2); } function exceed($value, $limit, $top=100) { - return $limit>0 ? ($value>$limit && $value<=$top) : false; + return is_numeric($value) && $limit>0 ? ($value>$limit && $value<=$top) : false; } function ipaddr($ethX='eth0', $prot=4) { global $$ethX; From 3701a50c5bc29527536aa4c1ccb569e4a5bb9eb2 Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 16:21:22 +0100 Subject: [PATCH 08/14] Revert "remove leading zeros in IPv4 address" This reverts commit 030f79e69e59bcae4299dba655f178970ed820e7. --- emhttp/plugins/dynamix/Eth0.page | 5 ----- 1 file changed, 5 deletions(-) diff --git a/emhttp/plugins/dynamix/Eth0.page b/emhttp/plugins/dynamix/Eth0.page index 621c62eb6..1d614fec2 100644 --- a/emhttp/plugins/dynamix/Eth0.page +++ b/emhttp/plugins/dynamix/Eth0.page @@ -76,7 +76,6 @@ array_multisort($sort_eth0,$vlan_eth0); refresh(); // automatically include new ethernet ports Array.prototype.same = function(){return this.sort().filter(function(v,i,o){return i&&v===o[i-1]?v:0;}).length;} -String.prototype.peel = function(){return this.split('.').map(Number).join('.');} function prepareSettings(form) { var bondnics = [], brnics = []; @@ -110,10 +109,6 @@ function prepareSettings(form) { swal({title:'Duplicate metrics',text:'List of default gateways contains duplicate metric values',type:'error',html:true,confirmButtonText:"_(Ok)_"}); return false; } - // remove leading zeros in IPv4 address - $(form).find('input[name^="IPADDR:"]').each(function(){ - $(this).val($(this).val().peel()); - }); if (form.TYPE.value == 'access') { $(form).find('input[name^="VLANID:"]').prop('disabled',false).val(''); $(form).find('input[name^="DESCRIPTION:"]').not('input[name$=":0"]').prop('disabled',false).val(''); From f4ec4db8e55629ed34e0f1c600629e81143e1ccf Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 16:37:57 +0100 Subject: [PATCH 09/14] rc.inet1: remove leading zeros in IPv4 address --- etc/rc.d/rc.inet1 | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/etc/rc.d/rc.inet1 b/etc/rc.d/rc.inet1 index fe73721a1..d474ced9f 100755 --- a/etc/rc.d/rc.inet1 +++ b/etc/rc.d/rc.inet1 @@ -66,7 +66,10 @@ # - added interface carrier check before assigning IP address (DHCP or static) # - added "status" command -# Bergware - modified for Unraid OS, October 2023 +# Adapted by Bergware for use in Unraid OS - December 2023 +# - remove leading zeros from IPv4 address + +# Bergware - modified for Unraid OS, December 2023 ########### # LOGGING # @@ -376,6 +379,11 @@ ipaddr_up(){ if [[ $IP != ipv6 ]]; then [[ $j -eq 0 ]] && ADDR=${IPADDR[$i]} || ADDR=${IPADDR[$i,$j]} if [[ -n $ADDR ]]; then + A=(${ADDR//./ }) + # remove leading zeros + for x in {0..3}; do A[$x]=$((10#${A[$x]})); done + A=${A[@]} + ADDR=${A// /.} [[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]} [[ -n $MASK ]] && run ip -4 addr add $ADDR/$MASK dev $IFACE metric 1 fi From 95e8b53cabb58e5ba8cbecf22e992117f4c01b2f Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 16:45:23 +0100 Subject: [PATCH 10/14] rc.inet1: remove leading zeros in IPv4 address --- etc/rc.d/rc.inet1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/etc/rc.d/rc.inet1 b/etc/rc.d/rc.inet1 index d474ced9f..e1d27fd2c 100755 --- a/etc/rc.d/rc.inet1 +++ b/etc/rc.d/rc.inet1 @@ -381,7 +381,7 @@ ipaddr_up(){ if [[ -n $ADDR ]]; then A=(${ADDR//./ }) # remove leading zeros - for x in {0..3}; do A[$x]=$((10#${A[$x]})); done + for x in ${!A[@]}; do A[$x]=$((10#${A[$x]})); done A=${A[@]} ADDR=${A// /.} [[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]} From 921f7a8e085e83a112fafb8287acd28ce2506a5f Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 16:57:30 +0100 Subject: [PATCH 11/14] rc.inet1: remove leading zeros in IPv4 address --- etc/rc.d/rc.inet1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/etc/rc.d/rc.inet1 b/etc/rc.d/rc.inet1 index e1d27fd2c..5b9ef34d0 100755 --- a/etc/rc.d/rc.inet1 +++ b/etc/rc.d/rc.inet1 @@ -379,9 +379,9 @@ ipaddr_up(){ if [[ $IP != ipv6 ]]; then [[ $j -eq 0 ]] && ADDR=${IPADDR[$i]} || ADDR=${IPADDR[$i,$j]} if [[ -n $ADDR ]]; then - A=(${ADDR//./ }) + A=() # remove leading zeros - for x in ${!A[@]}; do A[$x]=$((10#${A[$x]})); done + for x in ${ADDR//./ }; do A+=($((10#$x))); done A=${A[@]} ADDR=${A// /.} [[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]} From 5271163b319292c45e6b1b61f74101893890aec5 Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 17:35:09 +0100 Subject: [PATCH 12/14] rc.inet1: remove leading zeros in IPv4 address --- etc/rc.d/rc.inet1 | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/etc/rc.d/rc.inet1 b/etc/rc.d/rc.inet1 index 5b9ef34d0..70d427020 100755 --- a/etc/rc.d/rc.inet1 +++ b/etc/rc.d/rc.inet1 @@ -140,6 +140,15 @@ lo_down(){ # INTERFACE FUNCTIONS # ####################### +# function to remove leading zeros in IPv4 address +pact(){ + local A=() + local n + for n in ${1//./ }; do A+=($((10#$n))); done + A=${A[@]} + echo -n ${A// /.} +} + # function to get link mtu size get_mtu(){ ip link show $1 | grep -Po 'mtu \K\d+' @@ -379,13 +388,8 @@ ipaddr_up(){ if [[ $IP != ipv6 ]]; then [[ $j -eq 0 ]] && ADDR=${IPADDR[$i]} || ADDR=${IPADDR[$i,$j]} if [[ -n $ADDR ]]; then - A=() - # remove leading zeros - for x in ${ADDR//./ }; do A+=($((10#$x))); done - A=${A[@]} - ADDR=${A// /.} [[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]} - [[ -n $MASK ]] && run ip -4 addr add $ADDR/$MASK dev $IFACE metric 1 + [[ -n $MASK ]] && run ip -4 addr add $(pact $ADDR)/$MASK dev $IFACE metric 1 fi fi if [[ $IP != ipv4 ]]; then From 010eaceba7b58063d0e8940aab5b006f55e9f1e3 Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 18:48:38 +0100 Subject: [PATCH 13/14] rc.inet1: remove leading zeros in IPv4 and IPv6 addresses --- etc/rc.d/rc.inet1 | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/etc/rc.d/rc.inet1 b/etc/rc.d/rc.inet1 index 70d427020..0d165ba16 100755 --- a/etc/rc.d/rc.inet1 +++ b/etc/rc.d/rc.inet1 @@ -67,7 +67,7 @@ # - added "status" command # Adapted by Bergware for use in Unraid OS - December 2023 -# - remove leading zeros from IPv4 address +# - added function to remove leading zeros in IPv4 and IPv6 addresses # Bergware - modified for Unraid OS, December 2023 @@ -140,13 +140,15 @@ lo_down(){ # INTERFACE FUNCTIONS # ####################### -# function to remove leading zeros in IPv4 address -pact(){ - local A=() - local n - for n in ${1//./ }; do A+=($((10#$n))); done - A=${A[@]} - echo -n ${A// /.} +# function to remove leading zeros in IPv4 and IPv6 addresses +unzero(){ + local A M Q + case "$1" in + -4) echo -n $(for Q in ${2//./ }; do printf "$M%x" "0x$Q"; M=.; done) ;; + -6) A=${2/::/:-:} + echo -n $(for Q in ${A//:/ }; do [[ $Q != - ]] && printf "$M%x" "0x$Q" || printf ":"; M=:; done) ;; + *) echo -n $2 ;; + esac } # function to get link mtu size @@ -389,14 +391,14 @@ ipaddr_up(){ [[ $j -eq 0 ]] && ADDR=${IPADDR[$i]} || ADDR=${IPADDR[$i,$j]} if [[ -n $ADDR ]]; then [[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]} - [[ -n $MASK ]] && run ip -4 addr add $(pact $ADDR)/$MASK dev $IFACE metric 1 + [[ -n $MASK ]] && run ip -4 addr add $(unzero -4 $ADDR)/$MASK dev $IFACE metric 1 fi fi if [[ $IP != ipv4 ]]; then [[ $j -eq 0 ]] && ADDR6=${IPADDR6[$i]} || ADDR6=${IPADDR6[$i,$j]} if [[ -n $ADDR6 ]]; then [[ $j -eq 0 ]] && MASK6=${NETMASK6[$i]} || MASK6=${NETMASK6[$i,$j]} - [[ -n $MASK6 ]] && run ip -6 addr add $ADDR6/$MASK6 dev $IFACE metric 1 + [[ -n $MASK6 ]] && run ip -6 addr add $(unzero -6 $ADDR6)/$MASK6 dev $IFACE metric 1 [[ -n $PRIV6 && -d $CONF6/$IFACE ]] && echo 0 >$CONF6/$IFACE/use_tempaddr fi fi From e10590bb9cc808c8caae414523bdf2c15a259cac Mon Sep 17 00:00:00 2001 From: bergware Date: Sat, 9 Dec 2023 19:00:10 +0100 Subject: [PATCH 14/14] rc.inet1: remove leading zeros in IPv4 and IPv6 addresses --- etc/rc.d/rc.inet1 | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/etc/rc.d/rc.inet1 b/etc/rc.d/rc.inet1 index 0d165ba16..62241f160 100755 --- a/etc/rc.d/rc.inet1 +++ b/etc/rc.d/rc.inet1 @@ -67,7 +67,7 @@ # - added "status" command # Adapted by Bergware for use in Unraid OS - December 2023 -# - added function to remove leading zeros in IPv4 and IPv6 addresses +# - added functions to remove leading zeros in IPv4 and IPv6 addresses # Bergware - modified for Unraid OS, December 2023 @@ -140,15 +140,17 @@ lo_down(){ # INTERFACE FUNCTIONS # ####################### -# function to remove leading zeros in IPv4 and IPv6 addresses +# function to remove leading zeros in IPv4 address unzero(){ + local M Q + echo -n $(for Q in ${1//./ }; do printf "$M%x" "0x$Q"; M=.; done) +} + +# function to remove leading zeros in IPv6 address +unzero6(){ local A M Q - case "$1" in - -4) echo -n $(for Q in ${2//./ }; do printf "$M%x" "0x$Q"; M=.; done) ;; - -6) A=${2/::/:-:} - echo -n $(for Q in ${A//:/ }; do [[ $Q != - ]] && printf "$M%x" "0x$Q" || printf ":"; M=:; done) ;; - *) echo -n $2 ;; - esac + A=${1/::/:-:} + echo -n $(for Q in ${A//:/ }; do [[ $Q != - ]] && printf "$M%x" "0x$Q" || printf ":"; M=:; done) } # function to get link mtu size @@ -391,14 +393,14 @@ ipaddr_up(){ [[ $j -eq 0 ]] && ADDR=${IPADDR[$i]} || ADDR=${IPADDR[$i,$j]} if [[ -n $ADDR ]]; then [[ $j -eq 0 ]] && MASK=${NETMASK[$i]} || MASK=${NETMASK[$i,$j]} - [[ -n $MASK ]] && run ip -4 addr add $(unzero -4 $ADDR)/$MASK dev $IFACE metric 1 + [[ -n $MASK ]] && run ip -4 addr add $(unzero $ADDR)/$MASK dev $IFACE metric 1 fi fi if [[ $IP != ipv4 ]]; then [[ $j -eq 0 ]] && ADDR6=${IPADDR6[$i]} || ADDR6=${IPADDR6[$i,$j]} if [[ -n $ADDR6 ]]; then [[ $j -eq 0 ]] && MASK6=${NETMASK6[$i]} || MASK6=${NETMASK6[$i,$j]} - [[ -n $MASK6 ]] && run ip -6 addr add $(unzero -6 $ADDR6)/$MASK6 dev $IFACE metric 1 + [[ -n $MASK6 ]] && run ip -6 addr add $(unzero6 $ADDR6)/$MASK6 dev $IFACE metric 1 [[ -n $PRIV6 && -d $CONF6/$IFACE ]] && echo 0 >$CONF6/$IFACE/use_tempaddr fi fi