summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xinxi86
-rw-r--r--inxi.18
-rw-r--r--inxi.changelog58
3 files changed, 120 insertions, 32 deletions
diff --git a/inxi b/inxi
index 0ce2026..f06be9c 100755
--- a/inxi
+++ b/inxi
@@ -26,7 +26,7 @@ use 5.008;
# no multidimensional;
# no bareword::filehandle;
-use Cwd qw(abs_path); # qw(abs_path);#abs_path realpath getcwd
+use Cwd qw(abs_path); # #abs_path realpath getcwd
use Data::Dumper qw(Dumper); # print_r
use File::Find;
use File::stat; # needed for Xorg.0.log file mtime comparisons
@@ -39,8 +39,8 @@ use POSIX qw(uname strftime ttyname);
## INXI INFO ##
my $self_name='inxi';
-my $self_version='3.1.06';
-my $self_date='2020-08-17';
+my $self_version='3.1.07';
+my $self_date='2020-09-29';
my $self_patch='00';
## END INXI INFO ##
@@ -1386,11 +1386,11 @@ sub new {
sub run_debugger {
#require File::Find;
- #import File::Find::Functions;
+ #File::Find::Functions->import;
require File::Copy;
- import File::Copy;
+ File::Copy->import;
require File::Spec::Functions;
- import File::Spec::Functions;
+ File::Spec::Functions->import;
print "Starting $self_name debugging data collector...\n";
create_debug_directory();
@@ -2179,7 +2179,7 @@ sub wanted {
# NOTE: must be in format: ftp.site.com/incoming
sub upload_file {
require Net::FTP;
- import Net::FTP;
+ Net::FTP->import;
my ($self, $ftp_url) = @_;
my ($ftp, $domain, $host, $user, $pass, $dir, $error);
$ftp_url ||= main::get_defaults('ftp-upload');
@@ -2350,8 +2350,8 @@ sub set_downloader {
# For some https connections so only use tiny as option if both present
if ($dl{'tiny'}){
if (check_module('HTTP::Tiny') && check_module('IO::Socket::SSL')){
- import HTTP::Tiny;
- import IO::Socket::SSL;
+ HTTP::Tiny->import;
+ IO::Socket::SSL->import;
$dl{'tiny'} = 1;
}
else {
@@ -3216,6 +3216,14 @@ sub compare_versions {
if ($pad1 ge $pad2){return $one}
elsif ($pad2 gt $pad1){return $two}
}
+
+# some things randomly use hex with 0x starter, return always integer
+# warning: perl will generate a 32 bit too big number warning if you pass it
+# random values that exceed 2^32 in hex, even if the base system is 64 bit.
+# sample: convert_hex(0x000b0000000b);
+sub convert_hex {
+ return (defined $_[0] && $_[0] =~ /^0x/) ? hex($_[0]) : $_[0];
+}
# returns count of files in directory, if 0, dir is empty
sub count_dir_files {
return unless -d $_[0];
@@ -3265,6 +3273,10 @@ sub globber {
eval $end if $b_log;
return @files;
}
+# arg MUST be quoted when inserted, otherwise perl takes it for a hex number
+sub is_hex {
+ return (defined $_[0] && $_[0] =~ /^0x/) ? 1 : 0;
+}
## NOTE: for perl pre 5.012 length(undef) returns warning
# receives string, returns boolean 1 if integer
@@ -4842,9 +4854,10 @@ sub show_options {
PCI Bus ID/USB ID number of card; Version/port(s)/driver version (if available)." ],
['2', '-B', '', "Vendor/model, status (if available); attached devices
(e.g. wireless mouse, keyboard, if present)." ],
- ['2', '-C', '', "CPU $flags (short list, use -f to see full list), Bogomips
- on CPU; CPU microarchitecture + revision (if found, or unless --admin,
- then shows as 'stepping')." ],
+ ['2', '-C', '', "CPU $flags (short list, use -f to see full list);
+ CPU boost (turbo) enabled/disabled, if present;
+ Bogomips on CPU; CPU microarchitecture + revision (if found, or
+ unless --admin, then shows as 'stepping')." ],
['2', '-d', '', "Extra optical drive features data; adds rev version to
optical drive." ],
['2', '-D', '', "HDD temp with disk data if you have hddtemp installed,
@@ -4920,8 +4933,7 @@ sub show_options {
with verbose or line output, not short form):" ],
['2', '-A', '', "Serial number." ],
['2', '-B', '', "Chemistry, cycles, location (if available)." ],
- ['2', '-C', '', "CPU boost (turbo) enabled/disabled, if present;
- CPU voltage, external clock speed (if root and dmidecode installed)." ],
+ ['2', '-C', '', "CPU voltage, external clock speed (if root and dmidecode installed)." ],
['2', '-D', '', "Firmware rev. if available; partition scheme, in some cases; disk
rotation speed (if detected)." ],
['2', '-I', '', "For 'Shell:' adds ([su|sudo|login]) to shell name if present;
@@ -5086,11 +5098,10 @@ sub show_options {
}
sub show_version {
- require Cwd;
- import Cwd;
# if not in PATH could be either . or directory name, no slash starting
my $working_path=$self_path;
my (@data, @row, @rows, $link, $self_string);
+ Cwd->import('getcwd'); # no point loading this on top use, we only use getcwd here
if ( $working_path eq '.' ){
$working_path = getcwd();
}
@@ -5853,11 +5864,11 @@ sub generate_json {
error_handler('not-in-irc', 'help') if $b_irc;
#print Dumper \%data if $b_debug;
if (check_module('Cpanel::JSON::XS')){
- import Cpanel::JSON::XS;
+ Cpanel::JSON::XS->import;
$json = Cpanel::JSON::XS::encode_json(\%data);
}
elsif (check_module('JSON::XS')){
- import JSON::XS;
+ JSON::XS->import;
$json = JSON::XS::encode_json(\%data);
}
else {
@@ -5891,7 +5902,7 @@ sub generate_xml {
error_handler('not-in-irc', 'help') if $b_irc;
#print Dumper \%data if $b_debug;
if (check_module('XML::Dumper')){
- import XML::Dumper;
+ XML::Dumper->import;
$xml = XML::Dumper::pl2xml(\%data);
#$xml =~ s/"[0-9]+#/"/g;
if ($output_file eq 'print'){
@@ -7043,9 +7054,11 @@ sub create_output_full {
if ($b_admin && $properties{'dmi-speed'} && $properties{'dmi-max-speed'}){
$rows[$j]{main::key($num++,0,2,'base/boost')} = $properties{'dmi-speed'} . '/' . $properties{'dmi-max-speed'};
}
- if ($extra > 2){
+ if ($extra > 0){
my $boost = get_boost_status();
$rows[$j]{main::key($num++,0,2,'boost')} = $boost if $boost;
+ }
+ if ($extra > 2){
if ($properties{'volts'}){
$rows[$j]{main::key($num++,0,2,'volts')} = $properties{'volts'} . ' V';
}
@@ -9452,7 +9465,10 @@ sub smartctl_data {
}
elsif ($split[$a] eq 'Media_Wearout_Indicator'){
# $data[$i]{'smart-media-wearout'} = $split[$r];
- if ($b_attributes && $split[$r] > 0){
+ # seen case where they used hex numbers becaause values
+ # were in 47 billion range in hex. You can't hand perl an unquoted
+ # hex number that is > 2^32 without tripping a perl warning
+ if ($b_attributes && $split[$r] && !main::is_hex("$split[$r]") && $split[$r] > 0){
$data[$i]{'smart-media-wearout-v'} = $split[$v];
$data[$i]{'smart-media-wearout-t'} = $split[$t];
$data[$i]{'smart-media-wearout-f'} = $split[$f] if $split[$f] ne '-';
@@ -9584,7 +9600,7 @@ sub smartctl_data {
}
}
}
- #print Data::Dumper::Dumper\@data;
+ print Data::Dumper::Dumper\@data if $test[19];
eval $end if $b_log;
return @data;
}
@@ -9752,7 +9768,8 @@ sub set_vendors {
@vendors = (
## These go first because they are the most likely and common ##
['(Crucial|^(FC)?CT|-CT|^M4\b|Gizmo!)','Crucial','Crucial',''],
- ['^(INTEL|SSD(PAM|SA2))','^INTEL','Intel',''],
+ # H10 HBRPEKNX0202A NVMe INTEL 512GB
+ ['(\bINTEL\b|^SSD(PAM|SA2))','\bINTEL\b','Intel',''],
# note: S[AV][1-9][0-9] can trigger false positives
['(KINGSTON|DataTraveler|DT\s?(DUO|Microduo|101)|^SMS|^SHS|^SS0|^SUV|^Ultimate CF|HyperX|^S[AV][1234]00|^SKYMEDI)','KINGSTON','Kingston',''], # maybe SHS: SHSS37A SKC SUV
# must come before samsung MU. NOTE: toshiba can have: TOSHIBA_MK6475GSX: mush: MKNSSDCR120GB_
@@ -10058,7 +10075,7 @@ sub device_vendor {
set_vendors() if !@vendors;
# 0 - match pattern; 1 - replace pattern; 2 - vendor print; 3 - serial pattern
# Data URLs: inxi-resources.txt Section: DiskData device_vendor()
- # $model = 'MEDIAMAX ';
+ # $model = 'H10 HBRPEKNX0202A NVMe INTEL 512GB';
# $model = 'Patriot Memory';
foreach my $row (@vendors){
if ($model =~ /$row->[0]/i || ($row->[3] && $serial && $serial =~ /$row->[3]/)){
@@ -12333,6 +12350,7 @@ sub wan_ip {
# dig +short @ns1-1.akamaitech.net ANY whoami.akamai.net
# this one can take forever, and sometimes requires explicit -4 or -6
# dig -4 TXT +short o-o.myaddr.l.google.com @ns1.google.com
+
if (!$b_skip_dig && (my $program = main::check_program('dig') )){
$ip = (main::grabber("$program +short +time=1 +tries=1 \@ns1-1.akamaitech.net ANY whoami.akamai.net 2>/dev/null"))[0];
$b_dig = 1;
@@ -12342,6 +12360,10 @@ sub wan_ip {
# smxi: 0.525, so almost 10x slower. Dig is fast too
# leaving smxi as last test because I know it will always be up.
# --wan-ip-url replaces values with user supplied arg
+ # 0.059s: http://whatismyip.akamai.com/
+ # 0.255s: https://get.geojs.io/v1/ip
+ # 0.371s: http://icanhazip.com/
+ # 0.430s: https://smxi.org/opt/ip.php
my @urls = (!$wan_url) ? qw( http://whatismyip.akamai.com/
http://icanhazip.com/ https://smxi.org/opt/ip.php) : ($wan_url);
foreach (@urls){
@@ -17869,14 +17891,18 @@ sub get_compiler_version_linux {
if ($result){
# $result = $result =~ /\*(gcc|clang)\*eval\*/;
# $result='Linux version 5.4.0-rc1 (sourav@archlinux-pc) (clang version 9.0.0 (tags/RELEASE_900/final)) #1 SMP PREEMPT Sun Oct 6 18:02:41 IST 2019';
+ #$result='Linux version 5.8.3-fw1 (fst@x86_64.frugalware.org) ( OpenMandriva 11.0.0-0.20200819.1 clang version 11.0.0 (/builddir/build/BUILD/llvm-project-release-11.x/clang 2a0076812cf106fcc34376d9d967dc5f2847693a), LLD 11.0.0)';
+ #$result='Linux version 5.8.0-18-generic (buildd@lgw01-amd64-057) (gcc (Ubuntu 10.2.0-5ubuntu2) 10.2.0, GNU ld (GNU Binutils for Ubuntu) 2.35) #19-Ubuntu SMP Wed Aug 26 15:26:32 UTC 2020';
+ # $result='Linux version 5.8.9-fw1 (fst@x86_64.frugalware.org) (gcc (Frugalware Linux) 9.2.1 20200215, GNU ld (GNU Binutils) 2.35) #1 SMP PREEMPT Tue Sep 15 16:38:57 CEST 2020';
+ # $result='Linux version 5.8.0-2-amd64 (debian-kernel@lists.debian.org) (gcc-10 (Debian 10.2.0-9) 10.2.0, GNU ld (GNU Binutils for Debian) 2.35) #1 SMP Debian 5.8.10-1 (2020-09-19)';
if ($result =~ /(gcc|clang).*version\s([\S]+)/){
$version = $2;
- $version ||= 'N/A'; # we don't really know what linux clang looks like!
+ $version ||= 'N/A';
@compiler = ($1,$version);
}
- elsif ($result =~ /\((gcc|clang)[^\(]*\([^\)]+\)\s+([0-9\.]+)\s.*,\s*/){
+ elsif ($result =~ /\((gcc|clang)[^\(]*\([^\)]+\)\s+([0-9\.]+)(\s[^.]*)?,\s*/){
$version = $2;
- $version ||= 'N/A'; # we don't really know what linux clang looks like!
+ $version ||= 'N/A';
@compiler = ($1,$version);
}
}
@@ -19178,7 +19204,7 @@ sub get_hostname {
# puppy removed this from core modules, sigh
# this is faster than subshell of hostname
elsif (check_module('Sys::Hostname')){
- import Sys::Hostname;
+ Sys::Hostname->import;
$hostname = Sys::Hostname::hostname();
}
elsif (my $program = check_program('hostname')) {
@@ -21087,10 +21113,14 @@ sub lsusb_data {
eval $start if $b_log;
my (@temp);
my @data = data_grabber('lsusb');
+
foreach (@data){
next if /^\s*$|^Couldn't/; # expensive second call: || /UNAVAIL/
@working = split /\s+/, $_;
$working[3] =~ s/:$//;
+ # Seen FreeBSD lsusb with:
+ # Bus /dev/usb Device /dev/ugen0.3: ID 24ae:1003 Shenzhen Rapoo Technology Co., Ltd.
+ next if !main::is_numeric($working[1]) || !main::is_numeric($working[3]);
$addr_id = int($working[3]);
$bus_id = int($working[1]);
$path_id = "$bus_id-$addr_id";
diff --git a/inxi.1 b/inxi.1
index 8ae052f..93205aa 100644
--- a/inxi.1
+++ b/inxi.1
@@ -1,4 +1,4 @@
-.TH INXI 1 "2020\-08\-17" inxi "inxi manual"
+.TH INXI 1 "2020\-09\-29" inxi "inxi manual"
.SH NAME
inxi \- Command line system information script for console and IRC
@@ -680,6 +680,9 @@ detected (keyboard, mouse, etc.).
.B \-x \-C\fR
\- Adds bogomips on CPU (if available)
+\- Adds \fBboost: [enabled|disabled]\fR if detected, aka \fBturbo\fR. Not all CPUs
+have this feature.
+
\- Adds CPU Flags (short list). Use \fB\-f\fR to see full flag/feature list.
\- Adds CPU microarchitecture + revision (e.g. Sandy Bridge, K8, ARMv8, P6,
@@ -976,9 +979,6 @@ data is simply not available as of 2018\-04\-03), location (only available from
.TP
.B \-xxx \-C\fR
-\- Adds \fBboost: [enabled|disabled]\fR if detected, aka \fBturbo\fR. Not all CPUs
-have this feature.
-
\- Adds CPU voltage and external clock speed (this is the motherboard speed).
Requires sudo/root and \fBdmidecode\fR.
diff --git a/inxi.changelog b/inxi.changelog
index 33fd5d8..f9a382c 100644
--- a/inxi.changelog
+++ b/inxi.changelog
@@ -1,4 +1,62 @@
=====================================================================================
+Version: 3.1.07
+Patch: 00
+Date: 2020-09-29
+-----------------------------------
+Changes:
+-----------------------------------
+
+Bug fixes, feature updates, changes!!
+
+Bugs:
+1. There was a glitch in the pattern that made -D samsung / seagate not ID right,
+fixed.
+
+2. I do not like calling this a bug, because it's not an inxi bug, it's an upstream
+regression in the syntax used in /proc/version, they changed a fully predictable
+gcc version .... to a random series of embedded/nested parentheses and other random
+junk. inxi tries to deal with this regression, which will be perceived as a bug in
+systems running kernel 5.8 or newer and inxi 3.1.06 or older, since it will fail to
+show the kernel build compiler version since it can't find it in the string.
+
+I really dislike these types of regressions caused by bad ideas done badly and
+without any thought to the transmitted knowledge base, but that's how it goes,
+no discipline, I miss the graybeards, who cared about things like this.
+
+Fixes:
+1. more -D nvme id changes, intel in this case.
+
+2. FreeBSD lsusb changed syntax, which triggered a series of errors when run.
+[hint bsd users, do NOT file issues that you want fixed and then not provide
+all the data required in a prompt and timely manner, otherwise, really,
+why did you file the issue?].
+
+Note: the fix basically just rejects any row from lsusb that does not have the
+expected syntax/value in the expected place, which was I think the right
+solution given that the change was random, broke expected syntax for lsusb, and
+wasn't really integrateable into existing inxi usb logic, so why fight it?
+Given that at least 99.99% of all lsusb output in the world, including by the
+way OpenBSD's [not sure about most recent version], shows the expected values in
+the expected place, I could see no value in creating a convoluted work-around
+for a non core bsd tool in the first place, so that's what I didn't do.
+
+See the README.txt for what to do to get issues really handed in BSDs.
+
+Changes:
+1. -C 'boost' option changed from -xxx feature to -x feature.
+Consider it a promotion!
+
+2. Added --dbg 19 switch to enable smart data debugging for -Da.
+
+3. Some new tools to handle impossible data values for some -D situations for SMART
+where the smart report contains gibberish values, that was issue #225 -- tools were
+convert_hex and is_Hex. The utility for these is limited, but might be of use in
+some cases, like handling the above gibberish data value.
+
+-----------------------------------
+-- Harald Hope - Tue, 29 Sep 2020 16:08:05 -0700
+
+=====================================================================================
Version: 3.1.06
Patch: 00
Date: 2020-08-16