Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package inxi for openSUSE:Factory checked in 
at 2022-09-03 23:18:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/inxi (Old)
 and      /work/SRC/openSUSE:Factory/.inxi.new.2083 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "inxi"

Sat Sep  3 23:18:58 2022 rev:23 rq:1000975 version:3.3.21

Changes:
--------
--- /work/SRC/openSUSE:Factory/inxi/inxi.changes        2022-08-18 
16:49:46.393530574 +0200
+++ /work/SRC/openSUSE:Factory/.inxi.new.2083/inxi.changes      2022-09-03 
23:19:13.491838656 +0200
@@ -1,0 +2,6 @@
+Fri Sep  2 23:17:25 UTC 2022 - malcolmle...@opensuse.org
+
+- Updated to version 3.3.21:
+  * /usr/share/doc/packages/inxi/inxi.changelog.
+
+-------------------------------------------------------------------

Old:
----
  3.3.20-1.tar.gz

New:
----
  3.3.21-1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ inxi.spec ++++++
--- /var/tmp/diff_new_pack.THnrlV/_old  2022-09-03 23:19:14.043840107 +0200
+++ /var/tmp/diff_new_pack.THnrlV/_new  2022-09-03 23:19:14.047840118 +0200
@@ -17,9 +17,9 @@
 #
 
 
-%define _version 3.3.20-1
+%define _version 3.3.21-1
 Name:           inxi
-Version:        3.3.20
+Version:        3.3.21
 Release:        0
 Summary:        A system information script
 License:        GPL-3.0-or-later

++++++ 3.3.20-1.tar.gz -> 3.3.21-1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inxi-3.3.20-1/inxi new/inxi-3.3.21-1/inxi
--- old/inxi-3.3.20-1/inxi      2022-07-27 23:10:52.000000000 +0200
+++ new/inxi-3.3.21-1/inxi      2022-08-23 04:33:40.000000000 +0200
@@ -48,8 +48,8 @@
 
 ## INXI INFO ##
 my $self_name='inxi';
-my $self_version='3.3.20';
-my $self_date='2022-07-27';
+my $self_version='3.3.21';
+my $self_date='2022-08-22';
 my $self_patch='00';
 ## END INXI INFO ##
 
@@ -3535,9 +3535,9 @@
        'JSON::PP' => {
        'info' => '--output json (in CoreModules, but slower).',
        'info-bsd' => '--output json (in CoreModules, but slower).',
-       'apt' => 'libcpanel-json-xs-perl',
-       'pacman' => 'perl-cpanel-json-xs',
-       'rpm' => 'perl-Cpanel-JSON-XS',
+       'apt' => 'libjson-pp-perl',
+       'pacman' => 'perl-json-pp',
+       'rpm' => 'perl-JSON-PP',
        },
        'JSON::XS' => {
        'info' => '--output json (legacy).',
@@ -3904,6 +3904,7 @@
        'calmwm' => ['^calmwm',0,'0','CalmWM',0,1,0,'',''], # unverified
        'cardboard' => ['^cardboard',0,'0','Cardboard',0,1,0,'',''], # 
unverified
        'catwm' => ['^catwm',0,'0','catwm',0,1,0,'',''], # unverified
+       'cde' => ['^cde',0,'0','CDE',0,1,0,'',''], # unverified
        'chameleonwm' => ['^chameleon',0,'0','ChameleonWM',0,1,0,'',''], # 
unverified
        'cinnamon' => ['^cinnamon',2,'--version','Cinnamon',0,1,0,'',''],
        'clfswm' => ['^clsfwm',0,'0','clfswm',0,1,0,'',''], # no version
@@ -4009,6 +4010,7 @@
        'nawm' => ['^nawm',0,'0','nawm',0,1,0,'',''],# unverified
        'newm' => ['^newm',0,'0','newm',0,1,0,'',''], # unverified
        'notion' => ['^.',1,'--version','Notion',0,1,0,'',''],
+       'nscde' => ['^nscde',0,'0','NsCDE',0,1,0,'',''], # unverified
        'nucleus' => ['^nucleus',0,'0','Nucleus',0,1,0,'',''], # unverified
        'openbox' => ['^openbox',2,'--version','Openbox',0,1,0,'',''],
        'orbital' => ['^orbital',0,'0','Orbital',0,1,0,'',''],# unverified
@@ -4897,6 +4899,7 @@
                        if ($arg >= 8){
                                $b_admin = 1;
                                # $use{'downloader'} = 1; # only if weather
+                               $force{'pkg'} = 1;
                                $show{'edid'} = 1;
                                $show{'process'} = 1;
                                $show{'ps-cpu'} = 1;
@@ -5217,7 +5220,8 @@
                my ($opt,$arg) = @_;
                if ($arg){
                        my $wl = 
'colors|cpuinfo|display|dmidecode|hddtemp|lsusb|man|meminfo|';
-                       $wl .= 
'no-dig|no-doas|no-html-wan|no-sudo|pkg|usb-sys|vmstat|wayland|wmctrl';
+                       $wl .= 
'no-dig|no-doas|no-html-wan|no-sudo|pkg|rpm||usb-sys|';
+                       $wl .= 'vmstat|wayland|wmctrl';
                        for (split(',',$arg)){
                                if ($_ =~ /\b($wl)\b/){
                                        $force{lc($1)} = 1;
@@ -5314,7 +5318,7 @@
                else {
                        main::error_handler('bad-arg', $opt, $arg);
                }},
-       'pkg' => sub {
+       'pkg|rpm' => sub {
                $force{'pkg'} = 1;},
        'ppc' => sub {
                undef %risc;
@@ -5424,6 +5428,10 @@
        }
        $extra = 3 if $b_admin;
        $show{'graphic-basic'} = 0 if $show{'graphic-full'} && $extra > 1;
+       if ($force{'rpm'}){
+               $force{'pkg'} = 1;
+               delete $force{'rpm'};
+       }
        if ($use{'sensors-default'}){
                @sensors_exclude = ();
                @sensors_use = ();
@@ -5447,7 +5455,12 @@
                $use{'logical'} = 1;
        }
        main::set_sudo() if ($show{'unmounted'} || ($extra > 0 && 
$show{'disk'}));
-       $use{'filter'} = 0 if $use{'filter-override'};
+       if ($use{'filter-override'}){
+               $use{'filter'} = 0;
+               $use{'filter-label'} = 0;
+               $use{'filter-uuid'} = 0;
+               $use{'filter-vulnerabilities'} = 0;
+       }
        # override for things like -b or -v2 to -v3
        $show{'cpu-basic'} = 0 if $show{'cpu'};
        $show{'optical-basic'} = 0 if $show{'optical'};
@@ -5754,43 +5767,6 @@
        height. Greater than 0 shows x lines at a time."],
        ['0', '', '', "$line"],
        ['0', '', '', "Extra Data Options:"],
-       ['1', '-a', '--admin', "Adds advanced sys admin data (only works with 
-       verbose or line output, not short form); check man page for 
explanations!; 
-       also sets --extra=3:"],
-       ['2', '-A', '', "If available: list of alternate kernel modules/drivers 
-       for device(s); PCIe lanes-max: gen, speed, lanes (if relevant)."],
-       ['2', '-C', '', "If available: CPU generation, process node, built 
years; CPU 
-       socket type, base/boost speeds (dmidecode+root/sudo/doas required); 
Full 
-       topology line, with cores, threads, threads per core, granular cache 
data, 
-       smt status; CPU vulnerabilities (bugs); family, model-id, stepping - 
format: 
-       hex (decimal) if greater than 9; microcode format: hex."],
-       ['2', '-d,-D', '', "If available: logical and physical block sizes; 
drive 
-       family; maj:min, USB drive specifics; SMART report."],
-       ['2', '-E', '', "If available: in Report:, adds Info: line: acl-mtu, 
-       sco-mtu, link-policy, link-mode, service-classes."],
-       ['2', '-G', '', "GPU process node, built year (AMD/Intel/Nvidia only); 
-       non-free driver info (Nvidia only); PCIe lanes-max: gen, speed, lanes 
(if 
-       relevant); list of alternate kernel modules/drivers for device(s) (if 
-       available); Monitor built year, gamma, screen ratio (if available)."],
-       ['2', '-I', '', "As well as per package manager counts, also adds total
-       number of lib files found for each package manager if not -r; adds init
-       service tool."],
-       ['2', '-j,-p,-P', '', "For swap (if available): swappiness and vfs 
cache 
-       pressure, and if values are default or not."],
-       ['2', '-L', '', "LV, Crypto, devices, components: add maj:min; show
-       full device/components report (speed, mapped names)."],
-       ['2', '-m', '', "Show full volts report, current, min, max, even if 
-       identical."],
-       ['2', '-n,-N', '', "If available: list of alternate kernel 
modules/drivers 
-       for device(s); PCIe lanes-max: gen, speed, lanes (if relevant)."],
-       ['2', '-o', '', "If available: maj:min of device."],
-       ['2', '-p,-P', '', "If available: raw size of ${partition_string}s, 
maj:min, 
-       percent available for user, block size of file system (root 
required)."],
-       ['2', '-r', '', "Packages, see -Ia."],
-       ['2', '-R', '', "mdraid: device maj:min; per component: size, maj:min, 
state."],
-       ['2', '-S', '', "If available: kernel boot parameters."],
-       ['2', '', '--slots', "If available: slot bus ID children."],
-       ['0', '', '', ''],
        ['1', '-x', '--extra', "Adds the following extra data (only works with 
        verbose or line output, not short form):"],
        ['2', '-A', '', "Specific vendor/product information (if relevant); 
@@ -5820,7 +5796,7 @@
        ['2', '-I', '', "Default system GCC. With -xx, also shows other 
installed 
        GCC versions. If running in shell, not in IRC client, shows shell 
version 
        number, if detected. Init/RC type and runlevel/target (if available). 
Total
-       count of all packages discovered in system and not -r."],
+       count of all packages discovered in system (if not -r)."],
        ['2', '-j', '', "Add mapped: name if partition mapped."],
        ['2', '-J', '', "For Device: driver."],
        ['2', '-L', '', "For VG > LV, and other Devices, dm:"],
@@ -5852,6 +5828,7 @@
        ['2', '-A', '', "Chip vendor:product ID for each audio device; PCIe 
speed,
        lanes (if found)."],
        ['2', '-B', '', "Serial number."],
+       ['2', '-C', '', "Add microarchitecture level."],
        ['2', '-D', '', "Disk transfer speed; NVMe lanes; Disk serial number; 
LVM 
        volume group free space (if available); disk duid (some BSDs)."],
        ['2', '-E', '', "Chip vendor:product ID, LMP subversion; PCIe speed, 
lanes 
@@ -5866,7 +5843,7 @@
        ['2', '-I', '', "Other detected installed gcc versions (if present). 
System 
        default target/runlevel. Adds parent program (or pty/tty) for shell 
info if 
        not in IRC. Adds Init version number, RC (if found). Adds per package 
manager
-       installed package counts if not -r."],
+       installed package counts (if not -r)."],
        ['2', '-j,-p,-P', '', "Swap priority."],
        ['2', '-J', '', "Vendor:chip-ID."],
        ['2', '-L', '', "Show internal LVM volumes, like raid image/meta 
volumes;
@@ -5928,6 +5905,44 @@
                );
        }
        push(@$rows, 
+       ['0', '', '', ''],
+       ['1', '-a', '--admin', "Adds advanced sys admin data (only works with 
+       verbose or line output, not short form); check man page for 
explanations!; 
+       also sets --extra=3:"],
+       ['2', '-A', '', "If available: list of alternate kernel modules/drivers 
+       for device(s); PCIe lanes-max: gen, speed, lanes (if relevant)."],
+       ['2', '-C', '', "If available: CPU generation, process node, built 
years; CPU 
+       socket type, base/boost speeds (dmidecode+root/sudo/doas required); 
Full 
+       topology line, with cores, threads, threads per core, granular cache 
data, 
+       smt status; CPU vulnerabilities (bugs); family, model-id, stepping - 
format: 
+       hex (decimal) if greater than 9; microcode format: hex."],
+       ['2', '-d,-D', '', "If available: logical and physical block sizes; 
drive 
+       family; maj:min, USB drive specifics; SMART report."],
+       ['2', '-E', '', "If available: in Report:, adds Info: line: acl-mtu, 
+       sco-mtu, link-policy, link-mode, service-classes."],
+       ['2', '-G', '', "GPU process node, built year (AMD/Intel/Nvidia only); 
+       non-free driver info (Nvidia only); PCIe lanes-max: gen, speed, lanes 
(if 
+       relevant); list of alternate kernel modules/drivers for device(s) (if 
+       available); Monitor built year, gamma, screen ratio (if available)."],
+       ['2', '-I', '', "Adds to Packages total number of lib files found for 
each 
+       package manager and pm tools (if not -r); adds init service tool."],
+       ['2', '-j,-p,-P', '', "For swap (if available): swappiness and vfs 
cache 
+       pressure, and if values are default or not."],
+       ['2', '-L', '', "LV, Crypto, devices, components: add maj:min; show
+       full device/components report (speed, mapped names)."],
+       ['2', '-m', '', "Show full volts report, current, min, max, even if 
+       identical."],
+       ['2', '-n,-N', '', "If available: list of alternate kernel 
modules/drivers 
+       for device(s); PCIe lanes-max: gen, speed, lanes (if relevant)."],
+       ['2', '-o', '', "If available: maj:min of device."],
+       ['2', '-p,-P', '', "If available: raw size of ${partition_string}s, 
maj:min, 
+       percent available for user, block size of file system (root 
required)."],
+       ['2', '-r', '', "Packages, see -Ia."],
+       ['2', '-R', '', "mdraid: device maj:min; per component: size, maj:min, 
state."],
+       ['2', '-S', '', "If available: kernel boot parameters."],
+       ['2', '', '--slots', "If available: slot bus ID children."],
+       );
+       push(@$rows, 
        [0, '', '', "$line"],
        [0, '', '', "Additional Options:"],
        ['1', '-h', '--help', "This help menu."],
@@ -6002,9 +6017,9 @@
        (Wget/Fetch/Curl/Perl-HTTP::Tiny)."],
        ['1', '', '--no-sudo', "Skip internal program use of sudo features (not 
        related to starting $self_name with sudo)."],
-       ['1', '', '--pkg', "Force use of disabled package manager counts for 
packages 
-       feature. RPM disabled by default due to possible massive rpm package 
query 
-       times."],
+       ['1', '', '--rpm', "Force use of disabled package manager counts for 
packages 
+       feature with -rx/-Ix. RPM disabled by default due to slow to massive 
RPM 
+       package query times."],
        ['1', '', '--sensors-default', "Removes configuration item SENSORS_USE 
and 
        SENSORS_EXCLUDE. Same as default behavior."],
        ['1', '', '--sensors-exclude', "[sensor[s] name, comma separated] 
Exclude 
@@ -6787,7 +6802,7 @@
        'pci-card-data' => 'No PCI device data found.',
        'pci-card-data-root' => 'PCI device data requires root.',
        'pci-slot-data' => 'No PCI Slot data found.',
-       'pm-disabled' => 'see --pkg',
+       'pm-rpm-disabled' => 'see --rpm',
        'ps-data-null' => 'No process data available.',
        'raid-data' => 'No RAID data found.',
        'ram-data' => 'No RAM data found.',
@@ -7240,7 +7255,7 @@
                                                foreach (@values){
                                                        # my $l =  (length("$_ 
") + $length);
                                                        # print "$l\n";
-                                                       $indent_use = ($b_row1) 
? $indent : $indent_2;
+                                                       $indent_use = ($b_row1 
|| $b_ni2) ? $indent : $indent_2;
                                                        if ((length("$_ ") + 
$length) < $size{'max-cols'}){
                                                                # print "h-2: 
r1: $b_row1 iu: $indent_use\n";
                                                                # print "a\n";
@@ -8726,10 +8741,13 @@
                if ($cpu->{'arch-note'}){
                        $rows->[$j]{main::key($num++,0,3,'note')} = 
$cpu->{'arch-note'};
                }
+               if ($b_admin && $cpu->{'gen'}){
+                       $rows->[$j]{main::key($num++,0,3,'gen')} = 
$cpu->{'gen'};
+               }
+               if ($extra > 1 && $properties->{'arch-level'}){
+                       $rows->[$j]{main::key($num++,0,2,'level')} = 
$properties->{'arch-level'};
+               }
                if ($b_admin){
-                       if ($cpu->{'gen'}){
-                               $rows->[$j]{main::key($num++,0,3,'gen')} = 
$cpu->{'gen'};
-                       }
                        if ($cpu->{'year'}){
                                $rows->[$j]{main::key($num++,0,2,'built')} = 
$cpu->{'year'};
                        }
@@ -8752,7 +8770,6 @@
                elsif (defined $cpu->{'revision'}){
                        $rows->[$j]{main::key($num++,0,2,'rev')} = 
$cpu->{'revision'};
                }
-               
                if (!%risc && $cpu->{'type'} ne 'elbrus'){
                        $cpu->{'microcode'} = ($cpu->{'microcode'}) ? '0x' . 
$cpu->{'microcode'} :  'N/A';
                        $rows->[$j]{main::key($num++,0,2,'microcode')} = 
$cpu->{'microcode'};
@@ -10141,7 +10158,7 @@
 ## CPU PROPERTIES MAIN ##
 sub cpu_properties {
        my ($cpu) = @_;
-       my ($cpu_sys);
+       my ($cpu_sys,$arch_level);
        my $dmi_data = {};
        my $tests = {};
        my $caches = {
@@ -10269,13 +10286,21 @@
        
        ## START SPEED/BITS ##
        my $speed_info = cp_speed_data($cpu,$cpu_sys);
-       if (!$bits_sys && !%risc && $cpu->{'flags'}){
+       # seen case where 64 bit cpu with lm flag shows as i686 (tinycore)
+       if (!%risc && $cpu->{'flags'} && (!$bits_sys || $bits_sys == 32)){
                $bits_sys = ($cpu->{'flags'} =~ /\blm\b/) ? 64 : 32;
        }
+       # must run after to make sure we have cpu bits
+       if (!%risc && $bits_sys && $bits_sys == 64 && $cpu->{'flags'}){
+               $arch_level = cp_cpu_level(
+               $cpu->{'flags'}
+               );
+       }
        ## END SPEED/BITS ##
        
        ## LOAD %cpu_properties
        my $cpu_properties = {
+       'arch-level' => $arch_level,
        'avg-speed-key' => $speed_info->{'avg-speed-key'},
        'bits-sys' => $bits_sys,
        'cache' => $caches->{'cache'},
@@ -10995,7 +11020,7 @@
                elsif ($family eq '19'){
                        # ext model 6,7, but no base models yet
                        # 10 engineering sample
-                       if ($model =~ /^(10|6\d|7\d)$/){
+                       if ($model =~ /^(10|[67][0-9A-F])$/){
                                $arch = 'Zen 4';
                                $gen = '5';
                                $process = 'TSMC n5 (5nm)';
@@ -11418,16 +11443,16 @@
                        elsif ($model =~ /^(8F)$/){
                                $arch = 'Sapphire Rapids';
                                $process = 'Intel 7 (10nm ESF)';
-                               $year = '2021';} # server
+                               $year = '2021+';} # server
                        elsif ($model =~ /^(97|9A)$/){
                                $arch = 'Alder Lake'; # socket LG 1700
                                $process = 'Intel 7 (10nm ESF)';
-                               $year = '2021';}
+                               $year = '2021+';}
                        ## IDS UNKNOWN, release late 2022
                        # elsif ($model =~ /^()$/){
                        #       $arch = 'Raptor Lake'; # 13 gen, socket LG 
1700,1800
                        #       $process = 'Intel 7 (10nm)';
-                       # $year = '2022';}
+                       # $year = '2022+';}
                        # elsif ($model =~ /^()$/){
                        #       $arch = 'Meteor Lake'; # 14 gen
                        #       $process = 'Intel 4';}
@@ -11530,6 +11555,30 @@
        return [$arch,$note,$process,$gen,$year];
 }
 ## END CPU ARCH ##
+
+# Only AMD/Intel 64 bit cpus
+sub cp_cpu_level {
+       eval $start if $b_log;
+       my ($flags) = @_;
+       my $level;
+       if ($flags =~ /AVX512/i){
+               $level = 'v4';
+       }
+       # ~2015: Haswell and Excavator
+       elsif ($flags =~ /\b(AVX2|BMI[12]|F16C|FMA|LZCNT|MOVBE|OSXSAVE)\b/i){
+               $level = 'v3';
+       }
+       # !2009: Nehalem and Jaguar
+       elsif ($flags =~ /\b(CMPXCHG16B|[LS]AHF|POPCNT|SSS?E3|SSE4_[12])\b/i){
+               $level = 'v2';
+       }
+       # baseline: all x86_64 cpus
+       elsif ($flags =~ /\b(CX8|FPU|FXSR|MMX|OSFXSR|SCE|SSE2?)\b/i){
+               $level = 'v1';
+       }
+       eval $end if $b_log;
+       return $level;
+}
 sub cp_cpu_topology {
        my ($counts,$topology) = @_;
        my @alpha = qw(Single Dual Triple Quad);
@@ -15937,10 +15986,11 @@
        'years' => '2010-13',
        },
        {'arch' => 'GCN-1',
-       'ids' => 
'154c|6600|6601|6604|6605|6606|6607|6608|6609|6610|6611|6613|6631|' .
-       
'6660|6663|6664|6665|6667|666f|6780|6784|6788|678a|6798|679a|679b|679e|679f|' .
-       
'6800|6801|6802|6806|6808|6809|6810|6811|6816|6817|6818|6819|6820|6821|6822|' .
-       
'6823|6825|6826|6827|6828|6829|682a|682b|682c|682d|682f|6835|6837|683d|683f',
+       'ids' => 
'154c|6600|6601|6604|6605|6606|6607|6608|6609|6610|6611|6613|6617|' .
+       
'6631|6660|6663|6664|6665|6667|666f|6780|6784|6788|678a|6798|679a|679b|679e|' .
+       
'679f|6800|6801|6802|6806|6808|6809|6810|6811|6816|6817|6818|6819|6820|6821|' .
+       
'6822|6823|6825|6826|6827|6828|6829|682a|682b|682c|682d|682f|6835|6837|683d|' .
+       '683f',
        'code' => 'Southern Islands',
        'process' => 'TSMC 28nm',
        'years' => '2011-20',
@@ -16139,7 +16189,7 @@
        'years' => '2019-21',
        },
        {'arch' => 'Gen-12.1',
-       'ids' => '4905|4908|4c8a|4c8b|4c90|4c9a|9a40|9a49|9a60|9a68|9a70|9a78',
+       'ids' => 
'4905|4908|4909|4c8a|4c8b|4c90|4c9a|9a40|9a49|9a60|9a68|9a70|9a78',
        'code' => '',
        'process' => 'Intel 10nm',
        'years' => '2020-21',
@@ -22049,7 +22099,7 @@
        # before patriot just in case
        ['^(MN\d|PNY)','PNY\s','PNY',''],
        ['^(P[A-Z]|Patriot)','Patriot','Patriot',''],
-       
['^(K[1-6][ABT]|K[1-6][\d]{3}|M[\d]{3}[A-Z]|Samsung)','Samsung','Samsung',''],
+       ['^(K[1-6][ABLT]|K\d|M[\d]{3}[A-Z]|Samsung)','Samsung','Samsung',''],
        ['^(SP|Silicon[\s-]?Power)','Silicon[\s-]?Power','Silicon Power',''],
        ['^(STK|Simtek)','Simtek','Simtek',''],
        ['^(HM[ACT]|SK[\s-]?Hynix)','SK[\s-]?Hynix','SK-Hynix',''],
@@ -22058,7 +22108,7 @@
        ['^(T[^\dR]|Team[\s-]?Group)','Team[\s-]?Group','TeamGroup',''],
        ['^(TR\d|JM\d|Transcend)','Transcend','Transcend',''],
        ['^(VK\d|Vaseky)','Vaseky','Vaseky',''],
-       ['^(Yangtze|Zhitai)','Yangtze(\s*Memory)?','Yangtze Memory',''],
+       ['^(Yangtze|Zhitai|YMTC)','(Yangtze(\s*Memory)?|YMTC)','YMTC',''],
        ];
 }
 # note: many of these are pci ids, not confirmed valid for ram
@@ -22067,6 +22117,7 @@
        '01f4' => 'Transcend',# confirmed
        '02fe' => 'Elpida',# confirmed
        '0314' => 'Mushkin',# confirmed
+       '0420' => 'Chips and Technologies',
        '1014' => 'IBM',
        '1099' => 'Samsung',
        '10c3' => 'Samsung',
@@ -22080,6 +22131,7 @@
        '1b85' => 'OCZ',
        '1c5c' => 'SK-Hynix',
        '1cc1' => 'A-Data',
+       '1e49' => 'YMTC',# Yangtze Memory confirmed
        '0215' => 'Corsair',# confirmed
        '2646' => 'Kingston',
        '2c00' => 'Micron',# confirmed
@@ -22892,8 +22944,8 @@
        'portsnap-missing' => 'No ports servers in',
        'scratchpkg-active' => 'scratchpkg repos in',
        'scratchpkg-missing' => 'No active scratchpkg repos in',
-       'slackpkg-active' => 'slackpkg repos in',
-       'slackpkg-missing' => 'No active slackpkg repos in',
+       'slackpkg-active' => 'slackpkg mirror in',
+       'slackpkg-missing' => 'No slackpkg mirror set in',
        'slackpkg+-active' => 'slackpkg+ repos in',
        'slackpkg+-missing' => 'No active slackpkg+ repos in',
        'slaptget-active' => 'slapt-get repos in',
@@ -22973,9 +23025,8 @@
 sub get {
        eval $start if $b_log;
        my ($b_data,$key1,$program,$val1,$sensors);
-       my $rows = [];
-       my $num = 0;
-       my $source = 'sensors';
+       my ($num,$rows) = (0,[]);
+       my $source = 'sensors'; # will trip some type output if ipmi + another 
type
        # we're allowing 1 or 2 ipmi tools, first the gnu one, then the 
        # almost certain to be present in BSDs
        if ($fake{'ipmi'} || (main::globber('/dev/ipmi**') && 
@@ -23030,6 +23081,7 @@
                                $val1 = main::message('sensors-data-linux');
                                push(@$rows,{main::key($num++,0,1,$key1) => 
$val1});
                        }
+                       
                }
        }
        eval $end if $b_log;
@@ -23039,10 +23091,9 @@
        eval $start if $b_log;
        my ($rows,$source,$sensors) = @_;
        my ($b_result,@fan_default,@fan_main);
-       my ($data_source) = ('');
        my $fan_number = 0;
        my $num = 0;
-       my $j = 0;
+       my $j = scalar @$rows;
        if (!$loaded{'gpu-data'} && 
        ($source eq 'sensors' || $source eq 'lm-sensors')){
                gpu_sensor_data();
@@ -23054,7 +23105,7 @@
        my $cpu_temp = (defined $sensors->{'cpu-temp'}) ? 
$sensors->{'cpu-temp'} . $temp_unit: 'N/A';
        my $mobo_temp = (defined $sensors->{'mobo-temp'}) ? 
$sensors->{'mobo-temp'} . $temp_unit: 'N/A';
        my $cpu1_key = ($sensors->{'cpu2-temp'}) ? 'cpu-1': 'cpu' ;
-       $data_source = $source if ($source eq 'ipmi' || $source eq 
'lm-sensors');
+       my $data_source = ($source eq 'ipmi' || $source eq 'lm-sensors') ? 
$source : '';
        push(@$rows, {
        main::key($num++,1,1,'System Temperatures') => $data_source,
        main::key($num++,0,2,$cpu1_key) => $cpu_temp,
@@ -23209,18 +23260,22 @@
        my ($b_ipmitool,$i_key,$i_value,$i_unit);
        my $sensors = {};
        if ($fake{'ipmi'}){
+               ## ipmitool ##
                # $file = 
"$fake_data_dir/ipmitool/ipmitool-sensors-archerseven-1.txt";$program='ipmitool';
-               # $file = 
"$fake_data_dir/ipmitool/ipmitool-sensors-crazy-epyc-1.txt";$program='ipmitool';
+               # $file = 
"$fake_data_dir/ipmitool/ipmitool-sensors-epyc-1.txt";$program='ipmitool';
                # $file = 
"$fake_data_dir/ipmitool/ipmitool-sensors-RK016013.txt";$program='ipmitool';
                # $file = 
"$fake_data_dir/ipmitool/ipmitool-sensors-freebsd-offsite-backup.txt";
-               # $file = "$fake_data_dir/ipmitool/ipmitool-sensor-tyan-1.txt";
-               # $file = 
"$fake_data_dir/ipmitool/ipmi-sensors-crazy-epyc-1.txt";
-               # $file = "$fake_data_dir/ipmitool/ipmi-sensors-lathander.txt";
-               # $file = "$fake_data_dir/ipmitool/ipmi-sensors-zwerg.txt";
-               # $file = 
"$fake_data_dir/ipmitool/ipmi-sensors-arm-server-1.txt";
-               # @data = main::reader($file);
-               # ($b_ipmitool,$i_key,$i_value,$i_unit) = (0,1,3,4); # 
ipmi-sensors
+               # $file = 
"$fake_data_dir/ipmitool/ipmitool-sensor-shom-1.txt";$program='ipmitool';
+               # $file = 
"$fake_data_dir/ipmitool/ipmitool-sensor-shom-2.txt";$program='ipmitool';
+               # $file = 
"$fake_data_dir/ipmitool/ipmitool-sensor-tyan-1.txt";$program='ipmitool';
                # ($b_ipmitool,$i_key,$i_value,$i_unit) = (1,0,1,2); # ipmitool 
sensors
+               ## ipmi-sensors ##
+               # $file = 
"$fake_data_dir/ipmitool/ipmi-sensors-epyc-1.txt";$program='ipmi-sensors';
+               # $file = 
"$fake_data_dir/ipmitool/ipmi-sensors-lathander.txt";$program='ipmi-sensors';
+               # $file = 
"$fake_data_dir/ipmitool/ipmi-sensors-zwerg.txt";$program='ipmi-sensors';
+               # $file = 
"$fake_data_dir/ipmitool/ipmi-sensors-arm-server-1.txt";$program='ipmi-sensors';
+               # ($b_ipmitool,$i_key,$i_value,$i_unit) = (0,1,3,4); # 
ipmi-sensors
+               # @data = main::reader($file);
        }
        else {
                if ($program =~ /ipmi-sensors$/){
@@ -23228,7 +23283,7 @@
                        ($b_ipmitool,$i_key,$i_value,$i_unit) = (0,1,3,4);
                }
                else { # ipmitool
-                       $cmd = "$program sensors";
+                       $cmd = "$program sensor"; # note: 'sensor' NOT 
'sensors' !!
                        ($b_ipmitool,$i_key,$i_value,$i_unit) = (1,0,1,2);
                }
                @data = main::grabber("$cmd 2>/dev/null");
@@ -23236,7 +23291,7 @@
        # print join("\n", @data), "\n";
        # shouldn't need to log, but saw a case with debugger ipmi data, but 
none here apparently
        main::log_data('dump','ipmi @data',\@data) if $b_log;
-       return if !@data;
+       return $sensors if !@data;
        foreach (@data){
                next if /^\s*$/;
                # print "$_\n";
@@ -23244,13 +23299,13 @@
                # print "$row[$i_value]\n";
                next if !main::is_numeric($row[$i_value]);
                # print "$row[$i_key] - $row[$i_value]\n";
-               if (!$sensors->{'mobo-temp'} && $row[$i_key] =~ 
/^(MB_TEMP[0-9]|System[\s_]Temp|System[\s_]?Board([\s_]Temp)?)$/i){
+               if (!$sensors->{'mobo-temp'} && $row[$i_key] =~ 
/^(MB[\s_-]?TEMP[0-9]|System[\s_-]?Temp|System[\s_-]?Board([\s_-]?Temp)?)$/i){
                        $sensors->{'mobo-temp'} = int($row[$i_value]);
                        $working_unit = $row[$i_unit];
                        $working_unit =~ s/degrees\s// if $b_ipmitool; 
                        $sensors->{'temp-unit'} = 
set_temp_unit($sensors->{'temp-unit'},$working_unit) if $working_unit;
                }
-               elsif ($row[$i_key] =~ /^(System\s)?(Ambient)([\s_]Temp)?$/i){
+               elsif ($row[$i_key] =~ 
/^(System[\s_-]?)?(Ambient)([\s_-]?Temp)?$/i){
                        $sensors->{'ambient-temp'} = int($row[$i_value]);
                        $working_unit = $row[$i_unit];
                        $working_unit =~ s/degrees\s// if $b_ipmitool; 
@@ -23259,14 +23314,14 @@
                # Platform Control Hub (PCH), it is the X370 chip on the 
Crosshair VI Hero.
                # VRM: voltage regulator module
                # NOTE: CPU0_TEMP CPU1_TEMP is possible, unfortunately; CPU 
Temp Interf 
-               elsif (!$sensors->{'cpu-temp'} && $row[$i_key] =~ 
/^CPU([01])?([\s_](below[\s_]Tmax|Temp))?$/i){
+               elsif (!$sensors->{'cpu-temp'} && $row[$i_key] =~ 
/^CPU[\s_-]?([01])?([\s_](below[\s_]Tmax|Temp))?$/i){
                        $b_cpu_0 = 1 if defined $1 && $1 == 0;
                        $sensors->{'cpu-temp'} = int($row[$i_value]);
                        $working_unit = $row[$i_unit];
                        $working_unit =~ s/degrees\s// if $b_ipmitool; 
                        $sensors->{'temp-unit'} = 
set_temp_unit($sensors->{'temp-unit'},$working_unit) if $working_unit;
                }
-               elsif ($row[$i_key] =~ 
/^CPU([1-4])([\s_](below[\s_]Tmax|Temp))?$/i){
+               elsif ($row[$i_key] =~ 
/^CPU[\s_-]?([1-4])([\s_](below[\s_]Tmax|Temp))?$/i){
                        $temp_working = $1;
                        $temp_working++ if $b_cpu_0;
                        $sensors->{"cpu${temp_working}-temp"} = 
int($row[$i_value]);
@@ -23275,7 +23330,7 @@
                        $sensors->{'temp-unit'} = 
set_temp_unit($sensors->{'temp-unit'},$working_unit) if $working_unit;
                }
                # for temp1/2 only use temp1/2 if they are null or greater than 
the last ones
-               elsif ($row[$i_key] =~ /^(MB[_]?TEMP1|Temp[\s_]1)$/i){
+               elsif ($row[$i_key] =~ /^(MB[\s_-]?TEMP1|Temp[\s_]1)$/i){
                        $temp_working = int($row[$i_value]);
                        $working_unit = $row[$i_unit];
                        $working_unit =~ s/degrees\s// if $b_ipmitool; 
@@ -23303,8 +23358,8 @@
                        }
                        $sensors->{'temp-unit'} = 
set_temp_unit($sensors->{'temp-unit'},$working_unit) if $working_unit;
                }
-               elsif (!$sensors->{'sodimm-temp'} && ($row[$i_key] =~ 
/^(DIMM[-_]([A-Z][0-9][-_])?[A-Z]?[0-9][A-Z]?)$/i ||
-               $row[$i_key] =~ /^DIMM[0-9] Area.*/)){
+               elsif (!$sensors->{'sodimm-temp'} && ($row[$i_key] =~ 
/^(DIMM[-_]([A-Z][0-9]+[-_])?[A-Z]?[0-9]+[A-Z]?)$/i ||
+               $row[$i_key] =~ /^DIMM\s?[0-9]+ (Area|Temp).*/)){
                        $sensors->{'sodimm-temp'} = int($row[$i_value]);
                        $working_unit = $row[$i_unit];
                        $working_unit =~ s/degrees\s// if $b_ipmitool; 
@@ -23346,13 +23401,13 @@
                        $sensors->{'fan-psu-2'} = int($row[$i_value]);
                }
                if ($extra > 0){
-                       if ($row[$i_key] =~ 
/^((MAIN\s|P[_]?)?\+?12V|PSU[12]_VOUT)$/i){
+                       if ($row[$i_key] =~ 
/^((.+\s|P[_]?)?\+?12V|PSU[12]_VOUT)$/i){
                                $sensors->{'volts-12'} = $row[$i_value];
                        }
-                       elsif ($row[$i_key] =~ /^(MAIN\s5V|P5V|5VCC|5V( 
PG)?|5V_SB)$/i){
+                       elsif ($row[$i_key] =~ /^(.+\s5V|P5V|5VCC|5V( 
PG)?|5V_SB)$/i){
                                $sensors->{'volts-5'} = $row[$i_value];
                        }
-                       elsif ($row[$i_key] =~ 
/^(MAIN\s3\.3V|P3V3|3\.3VCC|3\.3V( PG)?|3V3_SB)$/i){
+                       elsif ($row[$i_key] =~ /^(.+\s3\.3V|P3V3|3\.3VCC|3\.3V( 
PG)?|3V3_SB)$/i){
                                $sensors->{'volts-3.3'} = $row[$i_value];
                        }
                        elsif ($row[$i_key] =~ /^((P_)?VBAT|CMOS Battery|BATT 
3.0V)$/i){
@@ -23943,7 +23998,7 @@
        for ($j = 1; $j <= $index_count_fan_default; $j++){
                if (defined $fan_default[$j] && $fan_default[$j] > 5000 && 
!$fan_main[2]){
                        $fan_main[2] = $fan_default[$j];
-                       $fan_default[$j] = '';
+                       $fan_default[$j] = undef;
                        # then add one if required for output
                        if ($index_count_fan_main < 2){
                                $index_count_fan_main = 2;
@@ -26388,9 +26443,9 @@
                # unverfied: 2bwm catwm mcwm penrose snapwm uwm wmfs wmfs2 
wingo wmii2
                # xfdesktoo is fallback in case not in xprop
                my @wms = qw(icewm 2bwm 9wm aewm aewm\+\+ afterstep amiwm 
antiwm awesome 
-               blackbox bspwm calmwm catwm ctwm dwm echinus evilwm fluxbox 
fvwm 
+               blackbox bspwm calmwm catwm cde ctwm dwm echinus evilwm fluxbox 
fvwm 
                hackedbox herbstluftwm instantwm i3 ion3 jbwm jwm larswm leftwm 
lwm 
-               matchbox-window-manager mcwm mini musca mvwm mwm nawm notion 
+               matchbox-window-manager mcwm mini musca mvwm mwm nawm notion 
nscde
                openbox pekwm penrose qvwm ratpoison 
                sawfish scrotwm snapwm spectrwm tinywm tvtwm twm uwm 
                windowlab wmfs wmfs2 wingo wmii2 wmii wmx xmonad yeahwm);
@@ -27853,8 +27908,8 @@
        my @derived = qw(antix-version aptosid-version bodhibuilder.conf 
kanotix-version 
        knoppix-version pclinuxos-release mandrake-release manjaro-release 
mx-version 
        pardus-release porteus-version q4os_version sabayon-release 
siduction-version 
-       sidux-version slint-version slitaz-release solusos-release 
turbolinux-release 
-       zenwalk-version);#
+       sidux-version slax-version slint-version slitaz-release solusos-release 
+       turbolinux-release zenwalk-version);
        my $derived_s = join('|', @derived);
        my @primary = qw(altlinux-release arch-release gentoo-release 
redhat-release 
        slackware-version SuSE-release);
@@ -28128,13 +28183,15 @@
 
 sub system_base {
        eval $start if $b_log;
-       my $base_arch_distro = 
'anarchy|antergos|arch(bang|craft|labs|man|strike)|arco|artix';
+       my $base_distro_arch = 
'anarchy|antergos|arch(bang|craft|labs|man|strike)|arco|artix';
        # note: arch linux derived distro page claims kaos as arch derived but 
it is NOT
-       $base_arch_distro .= 
'|blackarch|bluestar|chakra|ctios|endeavour|garuda|hyperbola|linhes';
-       $base_arch_distro .= 
'|mabox|manjaro|mysys2|netrunner\s?rolling|ninja|obarun|parabola';
-       $base_arch_distro .= '|puppyrus-?a|reborn|snal|talkingarch|ubos';
-       my $base_debian_version_distro = 'sidux';
-       my $base_debian_version_osr = 
'\belive|lmde|neptune|parrot|pureos|rescatux|septor|sparky|tails';
+       $base_distro_arch .= 
'|blackarch|bluestar|chakra|ctios|endeavour|garuda|hyperbola|linhes';
+       $base_distro_arch .= 
'|mabox|manjaro|mysys2|netrunner\s?rolling|ninja|obarun|parabola';
+       $base_distro_arch .= 
'|puppyrus-?a|reborn|snal|steamos|talkingarch|ubos';
+       my $base_file_debian_version = 'sidux';
+       # detect debian steamos before arch steamos
+       my $base_osr_debian_version = 
'\belive|lmde|neptune|parrot|pureos|rescatux|';
+       $base_osr_debian_version .= 'septor|sparky|steamos|tails';
        # osr has base ids
        my $base_default = 'antix-version|mx-version'; 
        # base only found in issue
@@ -28142,12 +28199,12 @@
        # synthesize, no direct data available
        my $base_manual = 'blankon|deepin|kali'; 
        # osr base, distro id in list of distro files
-       my $base_osr = 'aptosid|grml|q4os|siduction|bodhi'; 
+       my $base_osr = 'aptosid|bodhi|grml|q4os|siduction|slax'; 
        # osr base, distro id in issue
        my $base_osr_issue = 'grml|linux lite|openmediavault'; 
        # osr has distro name but has fedora centos redhat ID_LIKE and 
VERSION_ID same
        my $base_osr_redhat = 'almalinux|centos|rocky'; 
-       # osr has distro name but has ubuntu  ID_LIKE/UBUNTU_CODENAME
+       # osr has distro name but has ubuntu ID_LIKE/UBUNTU_CODENAME
        my $base_osr_ubuntu = 'mint|neon|nitrux|pop!_os|zorin'; 
        my $base_upstream_lsb = '/etc/upstream-release/lsb-release';
        my $base_upstream_osr = '/etc/upstream-release/os-release';
@@ -28171,6 +28228,7 @@
        elsif (-r $base_upstream_lsb){
                $system_base = get_lsb_release($base_upstream_lsb);
        }
+       # probably no need for these @osr greps, just grep $distro instead?
        if (!$system_base && @osr){
                my ($base_type) = ('');
                if ($etc_issue && (grep {/($base_issue)/i} @osr)){
@@ -28180,8 +28238,8 @@
                elsif (@distro_files && (grep {/($base_default)/} 
@distro_files)){
                        $base_type = 'default';
                }
-               # must go before base_osr_ubuntu test
-               elsif (grep {/($base_debian_version_osr)/i} @osr){
+               # must go before base_osr_arch,ubuntu tests. For steamos, use 
fallback arch
+               elsif (grep {/($base_osr_debian_version)/i} @osr){
                        $system_base = debian_id();
                }
                elsif (grep {/($base_osr_redhat)/i} @osr){
@@ -28200,7 +28258,7 @@
                }
        }
        if (!$system_base && @distro_files && 
-        (grep {/($base_debian_version_distro)/i} @distro_files)){
+        (grep {/($base_file_debian_version)/i} @distro_files)){
                $system_base = debian_id();
        }
        if (!$system_base && $lc_issue && $lc_issue =~ /($base_manual)/){
@@ -28212,7 +28270,7 @@
                );
                $system_base = $manual{$id};
        }
-       if (!$system_base && $distro && $distro =~ /^($base_arch_distro)/i){
+       if (!$system_base && $distro && $distro =~ /^($base_distro_arch)/i){
                $system_base = 'Arch Linux';
        }
        if (!$system_base && $distro){
@@ -28286,8 +28344,9 @@
 sub get_os_release {
        eval $start if $b_log;
        my ($base_type) = @_;
-       my ($base_id,$base_name,$base_version,$distro,$distro_name,$pretty_name,
-       $lc_name,$name,$version_name,$version_id) = 
('','','','','','','','','','');
+       my ($base_id,$base_name,$base_version,$distro,$distro_name,
+       $name,$name_lc,$name_pretty,
+       $version_codename,$version_name,$version_id) = 
('','','','','','','','','','','');
        my @content = @osr;
        main::log_data('dump','@content',\@content) if $b_log;
        @content = map {s/\\||\"|[:\47]|^\s+|\s+$|n\/a//ig; $_} @content if 
@content;
@@ -28296,11 +28355,14 @@
                my @working = split(/\s*=\s*/, $_);
                next if !$working[0];
                if ($working[0] eq 'PRETTY_NAME' && $working[1]){
-                       $pretty_name = $working[1];
+                       $name_pretty = $working[1];
                }
                elsif ($working[0] eq 'NAME' && $working[1]){
                        $name = $working[1];
-                       $lc_name = lc($name);
+                       $name_lc = lc($name);
+               }
+               elsif ($working[0] eq 'VERSION_CODENAME' && $working[1]){
+                       $version_codename = $working[1];
                }
                elsif ($working[0] eq 'VERSION' && $working[1]){
                        $version_name = $working[1];
@@ -28321,6 +28383,9 @@
                                        $base_name = 'RHEL';
                                        $base_version = $version_id if 
$version_id;
                                }
+                               elsif ($base_type eq 'arch' && $working[1] =~ 
/$base_type/i){
+                                       $base_name = 'Arch Linux';
+                               }
                                else {
                                        $base_name = ucfirst($working[1]);
                                }
@@ -28339,14 +28404,14 @@
        if (!$base_type){
                if ($name && $version_name){
                        $distro = $name;
-                       $distro = 'Arco Linux' if $lc_name =~ /^arco/;
+                       $distro = 'Arco Linux' if $name_lc =~ /^arco/;
                        if ($version_id && $version_name !~ /$version_id/){
                                $distro .= ' ' . $version_id;
                        }
                        $distro .= " $version_name";
                }
-               elsif ($pretty_name && ($pretty_name !~ /tumbleweed/i && 
$lc_name ne 'arcolinux')){
-                       $distro = $pretty_name;
+               elsif ($name_pretty && ($name_pretty !~ /tumbleweed/i && 
$name_lc ne 'arcolinux')){
+                       $distro = $name_pretty;
                }
                elsif ($name){
                        $distro = $name;
@@ -28354,26 +28419,32 @@
                                $distro .= ' ' . $version_id;
                        }
                }
+               if ($version_codename && $distro !~ /$version_codename/i){
+                       $distro .= " $version_codename";
+               }
        }
        # note: mint has varying formats here, some have ubuntu as name, 17 and 
earlier
        else {
-               # mint 17 used ubuntu os-release, so won't have $base_version
+               # mint 17 used ubuntu os-release, so won't have $base_version, 
steamos holo
                if ($base_name && $base_type eq 'rhel'){
                        $distro = $base_name;
                        $distro .= ' ' . $version_id if $version_id; 
                }
+               elsif ($base_name && $base_type eq 'arch'){
+                       $distro = $base_name;
+               }
                elsif ($base_name && $base_version){
                        $base_id = ubuntu_id($base_version) if $base_type eq 
'ubuntu' && $base_version;
                        $base_id = '' if $base_id && "$base_name$base_version" 
=~ /$base_id/;
                        $base_id .= ' ' if $base_id;
                        $distro = "$base_name $base_id$base_version";
                }
-               elsif ($base_type eq 'default' && ($pretty_name || ($name && 
$version_name))){
-                       $distro = ($name && $version_name) ? "$name 
$version_name" : $pretty_name;
+               elsif ($base_type eq 'default' && ($name_pretty || ($name && 
$version_name))){
+                       $distro = ($name && $version_name) ? "$name 
$version_name" : $name_pretty;
                }
                # LMDE 2 has only limited data in os-release, no _LIKE values. 
3 has like and debian_codename
-               elsif ($base_type eq 'ubuntu' && $lc_name =~ /^(debian|ubuntu)/ 
&& ($pretty_name || ($name && $version_name))){
-                       $distro = ($name && $version_name) ? "$name 
$version_name": $pretty_name;
+               elsif ($base_type eq 'ubuntu' && $name_lc =~ /^(debian|ubuntu)/ 
&& ($name_pretty || ($name && $version_name))){
+                       $distro = ($name && $version_name) ? "$name 
$version_name": $name_pretty;
                }
                elsif ($base_type eq 'debian' && $base_version){
                        $distro = debian_id($base_version);
@@ -28428,27 +28499,27 @@
        my ($codename) = @_;
        $codename = lc($codename);
        my ($id) = ('');
+       # xx.04, xx.10
        my %codenames = (
-       'kinetic' => '22.10',
-       'jammy' => '22.04 LTS',
-       'impish' => '21.10','hirsute' => '21.04',
-       'groovy' => '20.10','focal' => '20.04 LTS',
-       'eoan' => '19.10','disco' => '19.04',
-       'cosmic' => '18.10','bionic' => '18.04 LTS',
-       'artful' => '17.10','zesty' => '17.04',
-       'yakkety' => '16.10','xenial' => '16.04 LTS',
-       'wily' => '15.10','vivid' => '15.04',
-       'utopic' => '14.10','trusty' => '14.04 LTS ',
-       'saucy' => '13.10','raring' => '13.04',
-       'quantal' => '12.10','precise' => '12.04 LTS ',
-       #       'oneiric' => '11.10','natty' => '11.04',
-       #       'maverick' => '10.10','lucid' => '10.04',
-       #       'karmic' => '9.10','jaunty' => '9.04',
-       #       'intrepid' => '8.10','hardy' => '8.04',
-       #       'gutsy' => '7.10','feisty' => '7.04',
-       #       'edgy' => '6.10', 'dapper' => '6.06', 
-       #       'breezy' => '5.10', 'hoary' => '5.04', 
-       #       'warty' => '4.10', 
+       'jammy' => '22.04 LTS','kinetic' => '22.10',
+       'hirsute' => '21.04','impish' => '21.10',
+       'focal' => '20.04 LTS','groovy' => '20.10',
+       'disco' => '19.04','eoan' => '19.10',
+       'bionic' => '18.04 LTS','cosmic' => '18.10',
+       'zesty' => '17.04','artful' => '17.10',
+       'xenial' => '16.04 LTS','yakkety' => '16.10',
+       'vivid' => '15.04','wily' => '15.10',
+       'trusty' => '14.04 LTS ','utopic' => '14.10',
+       'raring' => '13.04','saucy' => '13.10',
+       'precise' => '12.04 LTS ','quantal' => '12.10',
+       #       'natty' => '11.04','oneiric' => '11.10',
+       #       'lucid' => '10.04','maverick' => '10.10',
+       #       'jaunty' => '9.04','karmic' => '9.10',
+       #       'hardy' => '8.04','intrepid' => '8.10',
+       #       'feisty' => '7.04','gutsy' => '7.10',
+       #       'dapper' => '6.06','edgy' => '6.10',
+       #       'hoary' => '5.04','breezy' => '5.10',
+       #       'warty' => '4.10', # warty was the first ubuntu release
        );
        $id = $codenames{$codename} if defined $codenames{$codename};
        eval $end if $b_log;
@@ -29378,8 +29449,8 @@
 # called from either -r or -Ix, -r precedes. 
 {
 package PackageData;
-my ($count,%counts,@list,$num,$program,$type);
-$counts{'total'} = 0;
+my ($count,$num,%pms,$type);
+$pms{'total'} = 0;
 sub get {
        eval $start if $b_log;
        # $num passed by reference to maintain incrementing where requested
@@ -29395,24 +29466,24 @@
 sub create_output {
        eval $start if $b_log;
        my $output = $_[0];
-       my $total;
-       if ($counts{'total'}){
-               $total = $counts{'total'};
+       my $total = '';
+       if ($pms{'total'}){
+               $total = $pms{'total'};
        }
        else {
-               if ($type eq 'inner' || $counts{'note'}){
-                       $total = 'N/A';
+               if ($type eq 'inner' || $pms{'note'}){
+                       $total = 'N/A' if $extra < 2;
                }
                else {
                        $total = main::message('package-data');
                }
        }
-       if ($counts{'total'} && $extra > 1){
-               delete $counts{'total'};
+       if ($pms{'total'} && $extra > 1){
+               delete $pms{'total'};
                my $b_mismatch;
-               foreach (keys %counts){
+               foreach (keys %pms){
                        next if $_ eq 'note';
-                       if ($counts{$_}->[0] && $counts{$_}->[0] != $total){
+                       if ($pms{$_}->{'pkgs'} && $pms{$_}->{'pkgs'} != $total){
                                $b_mismatch = 1;
                                last;
                        }
@@ -29420,22 +29491,32 @@
                $total = '' if !$b_mismatch;
        }
        $output->{main::key($$num++,1,1,'Packages')} = $total;
-       # if blocked pm secondary, only show if admin
-       if ($counts{'note'} && (!$counts{'total'} || $b_admin || $total < 100)){
-               $output->{main::key($$num++,0,2,'note')} = $counts{'note'};
+       # if blocked pm secondary, only show if no total or improbable total
+       if ($pms{'note'} && $extra < 2 && (!$pms{'total'} || $total < 100)){
+               $output->{main::key($$num++,0,2,'note')} = $pms{'note'};
        }
-       if ($extra > 1 && %counts){
-               foreach (sort keys %counts){
+       if ($extra > 1 && %pms){
+               foreach my $pm (sort keys %pms){
                        my ($cont,$ind) = (1,2);
-                       # if package mgr command returns error, this will not 
be an array
-                       next if ref $counts{$_} ne 'ARRAY';
-                       if ($counts{$_}->[0] || $b_admin){
-                               my $key = $_;
-                               $key =~ s/^zzz-//; # get rid of the special 
sorters for items to show last
-                               $output->{main::key($$num++,$cont,$ind,$key)} = 
$counts{$_}->[0];
-                               if ($b_admin && $counts{$_}->[1]){
-                                       ($cont,$ind) = (0,3);
-                                       
$output->{main::key($$num++,$cont,$ind,'lib')} = $counts{$_}->[1];
+                       # if package mgr command returns error, this will not 
be a hash
+                       next if ref $pms{$pm} ne 'HASH';
+                       if ($pms{$pm}->{'pkgs'} || $b_admin || ($extra > 1 && 
$pms{$pm}->{'note'})){
+                               my $type = $pm;
+                               $type =~ s/^zzz-//; # get rid of the special 
sorters for items to show last
+                               $output->{main::key($$num++,$cont,$ind,'pm')} = 
$type;
+                               ($cont,$ind) = (0,3);
+                               $pms{$pm}->{'pkgs'} = 'N/A' if 
$pms{$pm}->{'note'};
+                               
$output->{main::key($$num++,($cont+1),$ind,'pkgs')} = $pms{$pm}->{'pkgs'};
+                               if ($pms{$pm}->{'note'}){
+                                       
$output->{main::key($$num++,$cont,$ind,'note')} = $pms{$pm}->{'note'};
+                               }
+                               if ($b_admin ){
+                                       if ($pms{$pm}->{'libs'}){
+                                               
$output->{main::key($$num++,$cont,($ind+1),'libs')} = $pms{$pm}->{'libs'};
+                                       }
+                                       if ($pms{$pm}->{'tools'}){
+                                               
$output->{main::key($$num++,$cont,$ind,'tools')} = $pms{$pm}->{'tools'};
+                                       }
                                }
                        }
                }
@@ -29446,17 +29527,23 @@
 sub package_counts {
        eval $start if $b_log;
        my ($type) = @_;
+       # note: there is a program called discover which has nothing to do with 
kde
+       # apt systems: plasma-discover, non apt, discover, but can't use due to 
conflict
+       # my $disc = 'plasma-discover';
+       my $gs = 'gnome-software';
        # 0: key; 1: program; 2: p/d; 3: arg/path; 4: 0/1 use lib; 
-       # 5: lib slice; 6: lib splitter; 7 - optional eval test
+       # 5: lib slice; 6: lib splitter; 7 - optional eval test; 
+       # 8: optional installed tool tests for -ra
        # needed: cards [nutyx], urpmq [mageia]
        my @pkg_managers = (
        ['alps','alps','p','showinstalled',1,0,''],
        ['apk','apk','p','info',1,0,''],
-       # older dpkg-query do not support -f values consistently: eg 
${binary:Package}
-       ['apt','dpkg-query','p','-W -f=\'${Package}\n\'',1,0,''],
        # ['aptd','dpkg-query','d','/usr/lib/*',1,3,'\\/'],
        # mutyx. do cards test because there is a very slow pkginfo python pkg 
mgr
        ['cards','pkginfo','p','-i',1,1,'','main::check_program(\'cards\')'], 
+       # older dpkg-query do not support -f values consistently: eg 
${binary:Package}
+       ['dpkg','dpkg-query','p','-W -f=\'${Package}\n\'',1,0,'','',
+        ['apt','apt-get','aptitude','synaptic']],
        ['emerge','emerge','d','/var/db/pkg/*/*/',1,5,'\\/'],
        ['eopkg','eopkg','d','/var/lib/eopkg/package/*',1,5,'\\/'],
        ['guix-sys','guix','p','package -p "/run/current-system/profile" 
-I',1,0,''],
@@ -29466,30 +29553,38 @@
        ['nix-sys','nix-store','p','-qR /run/current-system/sw',1,1,'-'], 
        ['nix-usr','nix-store','p','-qR ~/.nix-profile',1,1,'-'], 
        ['nix-default','nix-store','p','-qR 
/nix/var/nix/profiles/default',1,2,'-'], 
+       ['opkg','opkg','p','list',1,0,''], # ubuntu based Security Onion
        ['pacman','pacman','p','-Qq --color never',1,0,'',
-        '!main::check_program(\'pacman-g2\')'], # pacman-g2 has sym link to 
pacman
-       ['pacman-g2','pacman-g2','p','-Q',1,0,''],
+        '!main::check_program(\'pacman-g2\')', # pacman-g2 has sym link to 
pacman
+        # these may need to be trimmed down depending on how useful/less some 
are
+        
['argon','aura','aurutils','cylon','octopi','pacaur','pakku','pamac','paru',
+        'pikaur','trizen','yaourt','yay','yup']], 
+       ['pacman-g2','pacman-g2','p','-Q',1,0,'','',],
        ['pkg','pkg','d','/var/db/pkg/*',1,0,''], # 'pkg list' returns non 
programs
        ['pkg_info','pkg_info','p','',1,0,''],
        # like cards, avoid pkginfo directly due to python pm being so slow
        # but pkgadd is also found in scratch
        
['pkgutils','pkginfo','p','-i',1,0,'','main::check_program(\'pkgadd\')'],
        # slack 15 moves packages to /var/lib/pkgtools/packages but links to 
/var/log/packages
-       ['pkgtool','pkgtool','d','/var/lib/pkgtools/packages',1,4,'\\/',
-        '-d \'/var/lib/pkgtools/packages\''],
-       ['pkgtool','pkgtool','d','/var/log/packages/',1,5,'\\/',
-        '! -d \'/var/lib/pkgtools/packages\' && -d \'/var/log/packages/\''],
+       ['pkgtool','installpkg','d','/var/lib/pkgtools/packages/*',1,5,'\\/',
+       '-d \'/var/lib/pkgtools/packages\'',
+        ['slackpkg','slapt-get','slpkg','swaret']],
+       ['pkgtool','installpkg','d','/var/log/packages/*',1,4,'\\/',
+       '! -d \'/var/lib/pkgtools/packages\' && -d \'/var/log/packages/\'',
+        ['slackpkg','slapt-get','slpkg','swaret']],
        # rpm way too slow without nodigest/sig!! confirms packages exist
        # but even with, MASSIVELY slow in some cases, > 20, 30 seconds!!!!
        # find another way to get rpm package counts or don't show this feature 
for rpm!!
-       ['rpm','rpm','pkg','-qa --nodigest --nosignature',1,0,''],
+       ['rpm','rpm','force','-qa --nodigest --nosignature',1,0,'','',
+        ['dnf','packagekit','up2date','urpmi','yast','yum','zypper']],
        # scratch is a programming language too, with software called scratch
        
['scratch','pkgbuild','d','/var/lib/scratchpkg/index/*/.pkginfo',1,5,'\\/',
         '-d \'/var/lib/scratchpkg\''],
-       # note',' slapt-get, spkg, and pkgtool all return the same count
+       # note: slackpkg, slapt-get, spkg, and pkgtool all return the same count
+       # ['slackpkg','pkgtool','slapt-get','slpkg','swaret']],
        # ['slapt-get','slapt-get','p','--installed',1,0,''],
        # ['spkg','spkg','p','--installed',1,0,''],
-       ['tce','tce-status','p','-i',1,0,''],
+       ['tce','tce-status','p','-i',1,0,'','',['apps','tce-load']],
        # note: I believe mageia uses rpm internally but confirm
        # ['urpmi','urpmq','p','??',1,0,''], 
        ['xbps','xbps-query','p','-l',1,1,''],
@@ -29497,47 +29592,88 @@
        ['zzz-flatpak','flatpak','p','list',0,0,''],
        ['zzz-snap','snap','p','list',0,0,'','@ps_cmd && (grep {/\bsnapd\b/} 
@ps_cmd)'],
        );
-       my $libs;
-       foreach (@pkg_managers){
-               if ($program = main::check_program($_->[1])){
-                       next if $_->[7] && !eval $_->[7];
-                       my $error;
-                       if ($_->[2] eq 'p' || ($_->[2] eq 'pkg' && 
$force{'pkg'})){
-                               chomp(@list = qx($program $_->[3] 2>/dev/null));
+       my ($program);
+       foreach my $pm (@pkg_managers){
+               if ($program = main::check_program($pm->[1])){
+                       next if $pm->[7] && !eval $pm->[7];
+                       my ($error,$libs,@list,$pmts);
+                       if ($pm->[2] eq 'p' || ($pm->[2] eq 'force' && 
check_run($pm))){
+                               chomp(@list = qx($program $pm->[3] 
2>/dev/null));
                        }
-                       elsif ($_->[2] eq 'd'){
-                               @list = main::globber($_->[3]);
+                       elsif ($pm->[2] eq 'd'){
+                               @list = main::globber($pm->[3]);
                        }
                        else {
-                               undef @list;
-                               $error = main::message('pm-disabled');
+                               # update message() if pm other than rpm 
disabled by default
+                               $error = main::message('pm-' . $pm->[1] . 
'-disabled');
                        }
-                       undef $libs;
+                       $count = scalar @list if !$error;
                        # print Data::Dumper::Dumper \@list;
                        if (!$error){
-                               $count = scalar @list;
-                               if ($b_admin && $count && $_->[4]){
-                                       $libs = 
count_libs(\@list,$_->[5],$_->[6]);
+                               if ($b_admin && $count && $pm->[4]){
+                                       $libs = 
count_libs(\@list,$pm->[5],$pm->[6]);
                                }
-                               $counts{$_->[0]} = [$count,$libs];
-                               $counts{'total'} += $count;
                        }
                        else {
-                               $counts{'note'} = $error;
+                               $pms{'note'} = $error;
+                       }
+                       # if there is ambiguity about actual program installed, 
use this loop
+                       if ($b_admin && $pm->[8]){
+                               my @tools;
+                               foreach my $tool (@{$pm->[8]}){
+                                       if (main::check_program($tool)){
+                                               push(@tools,$tool);
+                                       }
+                               }
+                               # only show gs if tools found, and if not added 
before
+                               if (@tools){
+                                       if ($gs && main::check_program($gs)){
+                                               push(@tools,$gs);
+                                               $gs = '';
+                                       }
+                               }
+                               $pmts = join(',',sort @tools) if @tools;
                        }
-                       # print Data::Dumper::Dumper \%counts;
+                       $pms{$pm->[0]} = {
+                       'pkgs' => $count,
+                       'libs' => $libs,
+                       'note' => $error,
+                       'tools' => $pmts,
+                       };
+                       $pms{'total'} += $count if defined $count;
+                       # print Data::Dumper::Dumper \%pms;
                }
        }
-       # print Data::Dumper::Dumper \%counts;
-       main::log_data('dump','Package managers: %counts',\%counts) if $b_log;
+       # print Data::Dumper::Dumper \%pms;
+       main::log_data('dump','Package managers: %pms',\%pms) if $b_log;
        eval $end if $b_log;
 }
 sub appimage_counts {
        if (@ps_cmd && (grep {/\bappimaged\b/} @ps_cmd)){
-               @list = main::globber($ENV{'HOME'} . '/.local/bin/*.appimage');
+               my @list = main::globber($ENV{'HOME'} . 
'/.local/bin/*.appimage');
                $count = scalar @list;
-               $counts{'zzz-appimage'} = [$count,undef] if $count;
-               $counts{'total'} += $count;
+               $pms{'zzz-appimage'} = {
+               'pkgs' => $count,
+               'libs' => undef,
+               };
+               $pms{'total'} += $count;
+       }
+}
+sub check_run {
+       if ($force{'pkg'}){
+               return 1;
+       }
+       elsif (${_[0]}->[1] eq 'rpm'){
+               # testing for core wrappers for rpm, these should not be 
present in non
+               # redhat/suse based systems. mageia has urpmi, dnf, yum
+               foreach my $tool (('dnf','up2date','urpmi','yum','zypper')){
+                       return 0 if main::check_program($tool);
+               }
+               # Note: test fails: apt-rpm (pclinuxos,alt linux), unknown how 
to detect
+               # Add pm test if known to have rpm available.
+               foreach my $tool (('dpkg','pacman','pkgtool','tce-load')){
+                       return 1 if main::check_program($tool);
+               }
        }
 }
 sub count_libs {
@@ -30428,11 +30564,12 @@
                tdelauncher tdeinit_phase1);
                push(@match,@temp);
                @temp=qw(2bwm 3dwm 9wm afterstep aewm aewm\+\+ amiwm antiwm 
awesome
-               blackbox bspwm calmwm catwm (sh|c?lisp).*clfswm ctwm 
(openbsd-)?cwm dwm evilwm 
+               blackbox bspwm calmwm catwm cde (sh|c?lisp).*clfswm ctwm 
(openbsd-)?cwm 
+               dwm evilwm 
                fluxbox flwm flwm_topside fvwm.*-crystal fvwm1 fvwm2 fvwm3 
fvwm95 fvwm 
                herbstluftwm i3 icewm instantwm ion3 jbwm jwm larswm leftwm lwm 
                matchbox-window-manager mcwm mini monsterwm musca mwm nawm 
notion 
-               openbox pekwm penrose python.*qtile qvwm ratpoison 
+               openbox nscde pekwm penrose python.*qtile qvwm ratpoison 
                sawfish scrotwm snapwm spectrwm (sh|c?lisp).*stumpwm
                tinywm tvtwm twm uwm windowlab WindowMaker wingo wm2 wmfs wmfs2 
wmii2 wmii 
                wmx xfdesktop xmonad yeahwm);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inxi-3.3.20-1/inxi.1 new/inxi-3.3.21-1/inxi.1
--- old/inxi-3.3.20-1/inxi.1    2022-07-27 23:10:52.000000000 +0200
+++ new/inxi-3.3.21-1/inxi.1    2022-08-23 04:33:40.000000000 +0200
@@ -15,17 +15,17 @@
 .\"  with this program; if not, write to the Free Software Foundation, Inc.,
 .\"  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 .\"  
-.TH INXI 1 "2022\-07\-27" "inxi" "inxi manual"
+.TH INXI 1 "2022\-08\-06" "inxi" "inxi manual"
 
 .SH NAME
-inxi  \- Command line system information script for console and IRC
+inxi \- Command line system information script for console and IRC
 
 .SH SYNOPSIS
 \fBinxi\fR
 
 \fBinxi\fR [\fB\-AbBCdDEfFGhiIjJlLmMnNopPrRsSuUVwyYzZ\fR]
 
-\fBinxi\fR [\fB\-c NUMBER\fR]
+\fBinxi\fR [\fB\-c -NUMBER\fR]
 [\fB\-\-sensors\-exclude SENSORS\fR] [\fB\-\-sensors\-use SENSORS\fR] 
 [\fB\-t\fR [\fBc\fR|\fBm\fR|\fBcm\fR|\fBmc\fR][\fBNUMBER\fR]] 
 [\fB\-v NUMBER\fR] [\fB\-W LOCATION\fR] 
@@ -1403,6 +1403,12 @@
 \- Adds serial number.
 
 .TP
+.B \-xx \-C\fR
+\- Adds microarchitecture level (v1,v2,v3,v4) (Intel and AMD 64 bit CPUs 
only). 
+This information is used for setting compile time optimization switches in for 
+example GCC. These levels were introduced in 2020.
+
+.TP
 .B \-xx \-D\fR
 \- Adds disk serial number.
 
@@ -1538,9 +1544,9 @@
 \- Adds system default runlevel/target, if detected. Supports Systemd / 
Upstart 
 /SysVinit type defaults.
 
-\- Shows \fBPackages:\fR counts by discovered package manager types. In cases 
-where only 1 type had results, does not show total after \fBPackages:\fR. Does 
-not show installed package managers wtih 0 packages. See \fB\-a\fR for full 
+\- Shows \fBPackages:\fR counts by discovered package manager types 
(\fBpm:\fR). 
+In cases where only 1 pm had results, does not show total after 
\fBPackages:\fR. 
+Does not show installed package managers with 0 packages. See \fB\-a\fR for 
full 
 output. Moves to \fBRepos\fR if \fB\-rxx\fR.
 
 \- Adds parent program (or pty/tty) that started shell, if not IRC client.
@@ -1594,7 +1600,7 @@
 
 .TP
 .B \-xx \-r\fR
-\- Adds Packages info. See \fB\-Ixx\fR
+\- Adds to \fBPackages:\fR info. See \fB\-Ixx\fR
 
 .TP
 .B \-xx \-R\fR
@@ -2011,7 +2017,7 @@
 found and not the same as \fBarch:\fR.
 
 .nf
-\fBinxi \-GIaz
+\fBinxi \-Gaz
 Graphics:
   Device\-1: NVIDIA NV34 [GeForce FX 5200] driver: nouveau v: kernel
     non\-free: 173.14.xx status: legacy (EOL) last: kernel: 3.12 xorg: 1.15
@@ -2026,7 +2032,7 @@
 With \fB\-y1\fR:
 
 .nf
-\fBinxi \-Ga \-y1
+\fBinxi \-Gaz \-y1
 Graphics:
   Device\-1: NVIDIA NV34 [GeForce FX 5200]
     driver: nouveau
@@ -2106,18 +2112,18 @@
 .fi
 .TP
 .B \-a \-I\fR
-\- Adds Packages, totals, per package manager totals, and number of lib 
packages 
-detected per package manager. Also adds detected package managers with 0 
-packages listed. Moves to \fBRepos\fR if \fB\-ra\fR.
+\- Adds to Packages number of lib packages detected per package manager. Also 
+adds detected package managers with 0 packages listed. Adds package manager 
+tools (supported: rpm, dpkg, pkgtool) Moves to \fBRepos\fR if \fB\-ra\fR.
 
 .nf
 \fBinxi \-aI
 Info:
   ....
   Init: systemd v: 245 target: graphical.target (5) default: graphical.target 
-  Compilers: gcc: 9.3.0 alt: 5/6/7/8/9 Packages: apt: 3681 lib: 2096 rpm: 0 
-  Shell: ksh v: A_2020.0.0 default: Bash v: 5.0.16 running\-in: kate 
-  inxi: 3.1.04\fR
+  Compilers: gcc: 9.3.0 alt: 5/6/7/8/9 Packages: pm: apt pkgs: 3681 libs: 2096 
+  tools: apt, apt\-get,aptitude pm: rpm pkgs: 0 Shell: ksh v: A_2020.0.0 
+  default: Bash v: 5.0.16 running\-in: kate inxi: 3.1.04\fR
 .fi
 
 \- Adds service control tool, tested for in the following order: \fBsystemctl 
@@ -2187,7 +2193,7 @@
 
 .TP
 .B \-a \-r\fR
-\- Adds Packages. See \fB\-Ia\fR
+\- Adds to \fBPackages:\fR report. See \fB\-Ia\fR
 
 .TP
 .B \-a \-R\fR
@@ -2288,7 +2294,7 @@
 Force inxi to use Curl, Fetch, Perl, or Wget for downloads.
 
 .TP
-.B \-\-force 
[colors|dmidecode|hddtemp|lsusb|pkg|usb-sys|wayland|vmstat|wmctrl]\fR 
+.B \-\-force 
[colors|dmidecode|hddtemp|lsusb|rpm|usb-sys|wayland|vmstat|wmctrl]\fR 
 Various force options to allow users to override defaults. Values can be given 
 as a comma separated list:
 
@@ -2305,16 +2311,24 @@
 \- \fBlsusb\fR \- Forces the USB data generator to use \fBlsusb\fR as data 
 source (default). Overrides \fBUSB_SYS\fR in user configuration file(s).
 
-\- \fBpkg\fR \- Force override of disabled package counts. Known package 
-managers with non\-resolvable issues: 
+\- \fBrpm\fR, \fBpkg\fR \- Force override of disabled RPM package counts on 
+primarily RPM run systems due to unacceptably slow execution times for this 
+command:
 
-rpm: Due to up to 30 seconds delays executing 
 .nf
 \fBrpm \-qa \-\-nodigest \-\-nosignature\fR
 .fi
-on older hardware (and over 1 second on new hardware with some rpm versions) 
-package counts are disabled by default because of the unacceptable slowdowns 
to 
-execute a simple package list command. 
+
+Even on newer RPM systems, in virtual machines, running rpm package list query 
+takes more than 0.15 seconds (compared to 0.01 to 0.05 for dpkg, pacman, 
pkgtool 
+etc) for just this single feature, which is north of 10% of total execution 
time 
+for \fBinxi \-bar\fR. On bare metal this can hit 1 second or more in our 
tests. 
+Older systems have taken up to 30 seconds to run this command! 
+
+For systems that support running rpm along with the primary package installer 
+(dpkg/apt, pacman, and pkgtool/slackpkg), there are not going to be many rpms, 
+if any, installed, so the command runs in those cases (if inxi can determine 
it 
+is running in that type of system).
 
 \- \fBusb-sys\fR \- Forces the USB data generator to use \fB/sys\fR as data 
 source instead of \fBlsusb\fR (Linux only).
@@ -2393,16 +2407,16 @@
 or \fBNO_SUDO\fR configuration item.
 
 .TP
-.B \-\-pkg\fR
-Shortcut. See \fB\-\-force pkg\fR.
-
-.TP
 .B \-\-pm\-type [package manager name]\fR
 For distro package maintainers only, and only for non apt, rpm, or pacman 
 based systems. To be used to test replacement package lists for recommends 
 for that package manager.
 
 .TP
+.B \-\-rpm\fR, \fB\-\-pkg\fR
+Shortcut. See \fB\-\-force rpm\fR.
+
+.TP
 .B \-\-sensors\-default\fR
 Overrides configuration values \fBSENSORS_USE\fR or \fBSENSORS_EXCLUDE\fR
 on a one time basis. 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/inxi-3.3.20-1/inxi.changelog 
new/inxi-3.3.21-1/inxi.changelog
--- old/inxi-3.3.20-1/inxi.changelog    2022-07-27 23:10:52.000000000 +0200
+++ new/inxi-3.3.21-1/inxi.changelog    2022-08-23 04:33:40.000000000 +0200
@@ -1,4 +1,184 @@
 
================================================================================
+Version: 3.3.21
+Patch: 00
+Date: 2022-08-22
+--------------------------------------------------------------------------------
+RELEASE NOTES:
+--------------------------------------------------------------------------------
+
+A small point release, some nice enhancements, a few bug fixes, and some fixes
+to correct or update some issues. Main new features: 
+* -rx,-rxx,-ra/-Ix,-Ixx,-Ia: enhanced Packages: report
+* -Cxx: microarchitecture level. This is a relatively new convention, used to 
+set various compile flags.
+
+--------------------------------------------------------------------------------
+KNOWN ISSUES:
+
+1. Can't safely look for pm tool KDE Discover because apt calls it 
+plasma-discover, but other packaging systems call it discover, which is 
already 
+a non-related program (hardware data). Since it's not really core to any 
package 
+manager, it's not really a necessary thing to report anyway, though 
+gnome-software is added because that appears to be more like syntaptic than 
+anything else. 
+
+There's also a qt variant of the rpm packagekit, packagekit-qt, which is 
+available in for example Arch, but again, it's too granular, and not really 
+core.
+
+2. At some point, sensors should add /sys hwmon sensor data, then switch to 
+using lm-sensors as a fallback, and remove one recommended tool from newer 
linux 
+systems. I don't think that's too hard, just a bunch of little steps to 
+integrate that into the main logic.
+
+--------------------------------------------------------------------------------
+BUGS:
+
+1. For Slackware slackpkg/pkgtool:
+a: Failed to show package counts at all because of bad globbing path, forgot 
/*.
+b. Failed to show lib counts for packages due to having wrong counter for 
path. 
+
+2. If no ipmi sensor data was found but the tools are present, could result in 
+an undefined hash reference error for sensors. The most likely cause for this 
is 
+that one of the ipmi commands:
+"ipmi-tool sensors" or "ipmi-sensors"
+had an error, and since errors are sent to /dev/null, inxi saw null data, then 
+returned an undefined value instead of the hash reference it was supposed to. 
+This is the first time I've seen this happen with ipmi, but there have not 
been 
+a lot of ipmi samples.
+
+[update: the bug was running ipmitool sensors instead of ipmitool sensor]
+
+Thanks issue poster #274 for having systems that triggered this scenario.
+
+3. $source for ipmi was set to lm-sensors by accident.
+
+4. For sensors, with > 1 sensor type, like lm-sensors + ipmi, sensor data from 
+second sensor type was getting written to first sensor type row. See Fixes 9 
for
+more sensors fixes.
+
+--------------------------------------------------------------------------------
+FIXES:
+
+1. Force CPU bits to 64 if LM flag is present, if it reports as i686. This fix 
+only runs for non RISC CPUs that show as 32 bit, so it won't run very often. 
If 
+no LM found, remains 32 bit.
+
+This fix goes along with enhancement 1, which only applies to 64 bit CPUs.
+
+2. In --recommends, JSON::PP module package names were wrong, they were copied
+from JSON::Cpanel::XS and hadn't been changed to the right package names. Note 
+that for most distros, this is in Perl Core Modules, but not all.
+
+3. Samsung ram vendor id was too tight, loosened it up a bit. Missed this one:
+K3LK7K70BM
+
+4. With Bug 1, extended possible package manager tool detection for slackware 
+type systems. Slackware is kind of unique in that it is not actually made out 
of 
+a core package manager as a collection of packages, but uses package managers 
as 
+a kind of layer on top of that, but none of those tools is required to run the 
+system.
+
+5. Found another corner case indentation glitch, was adding in level 2 on -I
+which is has no second level indentation.
+
+6. Forgot to add $force{'pkg'} to -v8.
+
+7. Small fix, if -Z is used, forgot to force --zl, --zu, --zv to false as well
+as -z.
+
+8. Small fix, for saphire rapids, alder lake, added + to year built, since 
those
+are ongoing.
+
+9. Sensors:
+a. in one case, with an array of fan speeds, set to '' instead of undef, which 
+made test fail, and showed empty fan item. 
+b. added wildcards for possible voltage/power matches, was too restrictive for 
+ipmi sensors values.
+c. added better space regex for ipmi temps [\s_-]?
+d. DIMM voltage/temp excluded > 9 numbering, like DIMM 19
+
+--------------------------------------------------------------------------------
+ENHANCEMENTS:
+
+1. New feature: -Cxx shows for AMD / Intel 64 bit CPUs the microarchitecture 
+level (v1,v2,v3,v4). v1 is baseline. GCC supports this I believe in latest 
+versions, and some distros use it to determine CPU support levels for compile 
+time optimizations. This was introduced in 2020 via a collaboration between 
AMD, 
+Intel, SUSE, and Redhat. Now you know. This is a simple test based on which 
CPU 
+flags/features are present.
+
+These levels can be used for Go language optimization (GOAMD64), GCC 
+optimization switches (GCC -O2 for example), and probably more. 
+
+2. Expanded YMTC (Yangtze Memory) RAM vendor ids and detections.
+
+3. Added [unverified] window managers CDE and NsCDE. No data, only using ps aux
+method.
+
+4a. Added slax ID to distro id, added slax to system base support. Currently 
+only work on slackware based 15.0, not debian based 11.4.
+
+4b. Added SteamOS debian/arch for system  base.
+
+4c. Added os-release VERSION_CODENAME to enhance distro ID data (eg steamos)
+
+5. Added to -ra/-Ia package tools installed report, this goes along with 
change 
+2, which changes apt to dpkg, the low level tool. Now with -a, shows the 
package 
+manager tools installed, like slackpkg, apt, apt-get, dnf, yum, zypper, etc.
+
+rpm installed as secondary pm requires some further tests. Currently known pm
+that have tools (and rpm tests if detected):
+All these are known to support rpm secondary pm:
+* dpkg - Debian, Ubuntu, and apt-rpm based distros like PCLinuxOS, Alt Linux 
+* pacman - Arch based distros 
+* pkgtool - Slackware based distros
+* tce - TinyCore Linux
+
+6. A few more pci product IDs for GPU matches. Slow going.
+
+--------------------------------------------------------------------------------
+CHANGES:
+
+1. Changed --pkg to --rpm, the original intention was that this could apply to
+more than RPM package manager, but that's the only one that it's used for. 
This 
+leads to unclear output for other distributions where the user might have rpm 
+installed alongside their standard package manager.
+
+2. Changed package pm: 'apt' to 'dpkg', to go along with type rpm 
(suse,redhat) 
+and pkgtool (slackware). Note that dpkg is the actual package manager of 
Debian,
+inxi had this wrong, apt interacts with dpkg.
+
+3. Changed -h -a section, to follow after -x, -xx, -xxx, like on man page.
+
+4. For rpm notes, after running some tests to determine whether to use rpm or 
+not, will show the rpm note: see --rpm in pm: rpm note:... This allows for 
+more granular errors which will be more useful to users.
+
+--------------------------------------------------------------------------------
+DOCUMENTATION:
+
+1. Docs were wrong for -ra/-Ia packages, from original when the package report
+was only an -a option, but it got moved to -rx, -rxx for basic features, and -a
+for advanced features.
+
+2. Updated for --pkg/--rpm and --force rpm/pkg
+
+3. See change 3, I think people tend to miss the sequence of -x, -xx, -xxx, -a
+because -a came before -x, -xx, -xxx in -h menu, but on man page, -a correctly 
+comes after the -xxx options. Better to be consistent.
+
+--------------------------------------------------------------------------------
+CODE:
+
+1. Added convert to change --force rpm/--rpm to switch on $force{pkg}.
+
+2. Refactored package PackageData to be more granular.
+
+--------------------------------------------------------------------------------
+-- Harald Hope - Mon, 22 Aug 2022 18:46:23 -0700
+
+================================================================================
 Version: 3.3.20
 Patch: 00
 Date: 2022-07-27

Reply via email to