mirror of
https://github.com/smxi/inxi.git
synced 2025-01-19 00:47:47 +00:00
New version, new tarball. Added an optional downloader: Perl HTTP::Tiny
Note that this is the last choice because it's slow, the order has been revised: 1. curl 2. wget 3. fetch 4. Perl 5 HTTP::Tiny 5. OpenBSD ftp wget has been downgraded due to the recent 1.19-2 bug with wget -O that did not get resolved quickly, and which should never have been released since that's a basic wget action, which means they aren't testing gnu wget the way they should be. All inxi downloaders can now use this option. However, in my tests it's signicantly slower to use HTTP::Tiny than curl or wget, so inxi will test for the downloaders in that order. While -i uses dig as it's primary IP tool, if dig is not installed, the IP will follow the same downloader priority. -U and -w/-W use downloaders. Because HTTP::Tiny is optional, and is merely used if wget/curl/fetch are not installed, I would not consider Perl to be a real dependency yet, just an option, so I guess for packager maintainers, Perl should be added as a recommends, or a dependency if you want to fully support the debugger options (Core Modules). While I'm still not sure which Perl modules I'm going to be using, I'm sticking for now to Core Modules, the standard, with some experimental exceptions that would only be used if the user had them present. Long term the goal is to get rid of as many dependencies as possible, replacing them were possible with Perl tools, but this is going to take forever, if it ever happens, so don't hold your breath. In the future, I expect more and more components that were gawk to be rewritten to Perl (Core Modules), slowly, however, very slowly. Updated --recommends to indicate the downloader options more clearly as well. Added new options for bypassing curl (-! 41), fetch (-! 42) wget (-! 43), or curl, fetch, and wget (-! 44) to disable all of them. This is in case one of those is broken or you want to test Perl downloader, mostly. Also cleaned up debugger output and made debugger portable to other scripts.
This commit is contained in:
parent
94fd334292
commit
e7903dc02c
426
inxi
426
inxi
|
@ -2,8 +2,8 @@
|
|||
########################################################################
|
||||
SELF_NAME='inxi'
|
||||
# don't quote the following, parsers grab these too
|
||||
SELF_VERSION=2.3.45
|
||||
SELF_DATE=2017-11-21
|
||||
SELF_VERSION=2.3.46
|
||||
SELF_DATE=2017-11-26
|
||||
SELF_PATCH=00
|
||||
########################################################################
|
||||
#### SPECIAL THANKS
|
||||
|
@ -61,8 +61,8 @@ SELF_PATCH=00
|
|||
####
|
||||
#### DEPENDENCIES
|
||||
#### * bash >=3.0 (bash); df, readlink, stty, tr, uname, wc (coreutils);
|
||||
#### gawk (gawk); grep (grep); lspci (pciutils);
|
||||
#### ps, find (findutils)
|
||||
#### gawk (gawk); grep (grep); lspci (pciutils); ps; find (findutils);
|
||||
#### perl (Modules: [HTTP::Tiny IF NO wget/curl/fetch/ftp]; Net::FTP; File::Find);
|
||||
#### * Also the proc filesystem should be present and mounted for Linux
|
||||
#### * Some features, like -M and -d will not work, or will work incompletely,
|
||||
#### if /sys is missing
|
||||
|
@ -290,6 +290,7 @@ B_COLOR_SCHEME_SET='false'
|
|||
B_CONSOLE_IRC='false'
|
||||
# triggers full display of cpu flags
|
||||
B_CPU_FLAGS_FULL='false'
|
||||
B_CURL='true'
|
||||
# test for dbus irc client
|
||||
B_DBUS_CLIENT='false'
|
||||
# kde dcop
|
||||
|
@ -303,6 +304,7 @@ B_DMIDECODE_SET='false'
|
|||
B_EXTRA_DATA='false'
|
||||
# triggered by -xx
|
||||
B_EXTRA_EXTRA_DATA='false'
|
||||
B_FETCH='true'
|
||||
B_FORCE_DMIDECODE='false'
|
||||
B_ID_SET='false'
|
||||
# override certain errors due to currupted data
|
||||
|
@ -381,6 +383,7 @@ B_USB_NETWORKING='false'
|
|||
# set to true here for debug logging from script start
|
||||
B_USE_LOGGING='false'
|
||||
B_UUID_SET='false'
|
||||
B_WGET='true'
|
||||
B_XORG_LOG='false'
|
||||
|
||||
## Directory/file exist flags; test as [[ $(boolean) ]] not [[ $boolean ]]
|
||||
|
@ -917,30 +920,12 @@ initialize_data()
|
|||
else
|
||||
error_handler 6
|
||||
fi
|
||||
|
||||
initialize_paths
|
||||
|
||||
if type -p dig &>/dev/null;then
|
||||
DNSTOOL='dig'
|
||||
fi
|
||||
# set downloaders.
|
||||
if ! type -p wget &>/dev/null;then
|
||||
# first check for bsd stuff
|
||||
if type -p fetch &>/dev/null;then
|
||||
DOWNLOADER='fetch'
|
||||
NO_SSL=' --no-verify-peer'
|
||||
elif type -p curl &>/dev/null;then
|
||||
DOWNLOADER='curl'
|
||||
NO_SSL=' --insecure'
|
||||
elif [[ $BSD_VERSION == 'openbsd' ]] && type -p ftp &>/dev/null;then
|
||||
DOWNLOADER='ftp'
|
||||
else
|
||||
DOWNLOADER='no-downloader'
|
||||
fi
|
||||
else
|
||||
NO_SSL=' --no-check-certificate'
|
||||
fi
|
||||
|
||||
set_downloader
|
||||
if [[ -n $BSD_TYPE ]];then
|
||||
if [[ -e $FILE_DMESG_BOOT ]];then
|
||||
B_DMESG_BOOT_FILE='true'
|
||||
|
@ -1007,6 +992,30 @@ initialize_data()
|
|||
fi
|
||||
eval $LOGFE
|
||||
}
|
||||
set_downloader()
|
||||
{
|
||||
# curl/wget are faster than HTTP::Tiny
|
||||
if $B_CURL == 'true' && type -p curl &>/dev/null;then
|
||||
DOWNLOADER='curl'
|
||||
NO_SSL=' --insecure'
|
||||
# wget has had some issues with not testing their code leading to -O failure
|
||||
elif $B_WGET == 'true' && type -p wget &>/dev/null;then
|
||||
DOWNLOADER='wget'
|
||||
NO_SSL=' --no-check-certificate'
|
||||
# check for bsd stuff
|
||||
elif $B_FETCH == 'true' && type -p fetch &>/dev/null;then
|
||||
DOWNLOADER='fetch'
|
||||
NO_SSL=' --no-verify-peer'
|
||||
# this is much slower than curl or wget
|
||||
elif type -p perl &>/dev/null && perl -MHTTP::Tiny -e 1 &>/dev/null;then
|
||||
DOWNLOADER='perl' # does not use ssl by default
|
||||
elif [[ $BSD_VERSION == 'openbsd' ]] && type -p ftp &>/dev/null;then
|
||||
DOWNLOADER='ftp'
|
||||
else
|
||||
DOWNLOADER='no-downloader'
|
||||
fi
|
||||
# echo $DOWNLOADER
|
||||
}
|
||||
|
||||
# args: $1 - default OR override default cols max integer count
|
||||
set_display_width()
|
||||
|
@ -1633,6 +1642,9 @@ script_self_updater()
|
|||
ftp)
|
||||
file_contents="$( ftp $NO_SSL_OPT -o - $1$SELF_NAME 2>/dev/null )" || downloader_error=$?
|
||||
;;
|
||||
perl)
|
||||
file_contents="$( download_file 'stdout' $1$SELF_NAME )" || downloader_error=$?
|
||||
;;
|
||||
wget)
|
||||
file_contents="$( wget $NO_SSL_OPT -q -O - $1$SELF_NAME )" || downloader_error=$?
|
||||
;;
|
||||
|
@ -1670,9 +1682,14 @@ script_self_updater()
|
|||
exec $( type -p mandb ) -q
|
||||
fi
|
||||
fi
|
||||
if [[ $DOWNLOADER == 'wget' ]];then
|
||||
wget $NO_SSL_OPT -q --spider $MAN_FILE_DOWNLOAD || downloader_man_error=$?
|
||||
fi
|
||||
case $DOWNLOADER in
|
||||
perl)
|
||||
download_file 'spider' $MAN_FILE_DOWNLOAD || downloader_man_error=$?
|
||||
;;
|
||||
wget)
|
||||
wget $NO_SSL_OPT -q --spider $MAN_FILE_DOWNLOAD || downloader_man_error=$?
|
||||
;;
|
||||
esac
|
||||
if [[ $downloader_man_error -eq 0 ]];then
|
||||
if [[ $DOWNLOADER == 'wget' ]];then
|
||||
print_screen_output "Man file download URL verified: $MAN_FILE_DOWNLOAD"
|
||||
|
@ -1688,6 +1705,9 @@ script_self_updater()
|
|||
ftp)
|
||||
ftp $NO_SSL_OPT -o $man_file_path $MAN_FILE_DOWNLOAD 2>/dev/null || downloader_man_error=$?
|
||||
;;
|
||||
perl)
|
||||
download_file 'file' $MAN_FILE_DOWNLOAD $man_file_path || downloader_man_error=$?
|
||||
;;
|
||||
wget)
|
||||
wget $NO_SSL_OPT -q -O $man_file_path $MAN_FILE_DOWNLOAD || downloader_man_error=$?
|
||||
;;
|
||||
|
@ -1763,9 +1783,10 @@ set_man_location()
|
|||
# args: $1 - debug data type: sys|xorg|disk
|
||||
debug_data_collector()
|
||||
{
|
||||
local sys_data_file='' error='' Debug_Data_Dir='' bsd_string=''
|
||||
local b_inxi='true' b_recommends='true' b_repo='true'
|
||||
local sys_data_file='' error='' bsd_string='' sys_traverse_data=''
|
||||
local xorg_d_files='' xorg_file='' a_distro_ids=''
|
||||
local completed_gz_file='' ftp_upload='ftp.techpatterns.com/incoming'
|
||||
local completed_gz_file='' Ftp_Upload='ftp.techpatterns.com/incoming'
|
||||
local Line='-------------------------'
|
||||
local start_directory=$( pwd )
|
||||
local host='' debug_i='' root_string='' b_traverse_worked='false' b_uploaded='false'
|
||||
|
@ -1789,25 +1810,29 @@ debug_data_collector()
|
|||
if [[ $( whoami ) == 'root' ]];then
|
||||
root_string='-root'
|
||||
fi
|
||||
Debug_Data_Dir="inxi$bsd_string-$host-$(date +%Y%m%d-%H%M%S)-$1$root_string"
|
||||
local Debug_Data_Dir="$SELF_NAME$bsd_string-$host-$(date +%Y%m%d-%H%M%S)-$1$root_string"
|
||||
local debug_gz="$Debug_Data_Dir.tar.gz"
|
||||
|
||||
if [[ $B_IRC == 'false' ]];then
|
||||
if [[ -n $ALTERNATE_FTP ]];then
|
||||
ftp_upload=$ALTERNATE_FTP
|
||||
Ftp_Upload=$ALTERNATE_FTP
|
||||
fi
|
||||
echo "Starting debugging data collection type: $1"
|
||||
echo "Starting $SELF_NAME debugging data collection type: $1"
|
||||
cd $SELF_DATA_DIR
|
||||
if [[ -d $SELF_DATA_DIR/$Debug_Data_Dir ]];then
|
||||
echo "Deleting previous $SELF_NAME debugger data directory..."
|
||||
rm -rf $SELF_DATA_DIR/$Debug_Data_Dir
|
||||
fi
|
||||
mkdir $SELF_DATA_DIR/$Debug_Data_Dir
|
||||
if [[ -f $SELF_DATA_DIR/$Debug_Data_Dir.tar.gz ]];then
|
||||
if [[ -f $SELF_DATA_DIR/$debug_gz ]];then
|
||||
echo 'Deleting previous tar.gz file...'
|
||||
rm -f $SELF_DATA_DIR/$Debug_Data_Dir.tar.gz
|
||||
rm -f $SELF_DATA_DIR/$debug_gz
|
||||
fi
|
||||
echo 'Collecting system info: sensors, lsusb, lspci, lspci -v data, plus /proc data'
|
||||
echo 'also checking for dmidecode data: note, you must be root to have dmidecode work.'
|
||||
echo "Data going into: $SELF_DATA_DIR/$Debug_Data_Dir"
|
||||
echo 'Note: for dmidecode data you must be root.'
|
||||
echo $Line
|
||||
echo "Collecting system data..."
|
||||
|
||||
# bsd tools http://cb.vu/unixtoolbox.xhtml
|
||||
# freebsd
|
||||
if type -p pciconf &>/dev/null;then
|
||||
|
@ -1849,19 +1874,6 @@ debug_data_collector()
|
|||
# diskinfo -v <disk>
|
||||
# fdisk <disk>
|
||||
dmidecode &> $Debug_Data_Dir/dmidecode.txt
|
||||
get_repo_data "$SELF_DATA_DIR/$Debug_Data_Dir"
|
||||
if type -p shopt &>/dev/null;then
|
||||
shopt -s nullglob
|
||||
a_distro_ids=(/etc/*[-_]{release,version})
|
||||
shopt -u nullglob
|
||||
echo ${a_distro_ids[@]} &> $Debug_Data_Dir/etc-distro-files.txt
|
||||
for distro_file in ${a_distro_ids[@]} /etc/issue
|
||||
do
|
||||
if [[ -f $distro_file ]];then
|
||||
cat $distro_file &> $Debug_Data_Dir/distro-file${distro_file//\//-}
|
||||
fi
|
||||
done
|
||||
fi
|
||||
dmesg &> $Debug_Data_Dir/dmesg.txt
|
||||
lscpu &> $Debug_Data_Dir/lscpu.txt
|
||||
lspci &> $Debug_Data_Dir/lspci.txt
|
||||
|
@ -1879,12 +1891,9 @@ debug_data_collector()
|
|||
else
|
||||
touch $Debug_Data_Dir/hciconfig-absent
|
||||
fi
|
||||
ls /sys &> $Debug_Data_Dir/ls-sys.txt
|
||||
ps aux &> $Debug_Data_Dir/ps-aux.txt
|
||||
ps -e &> $Debug_Data_Dir/ps-e.txt
|
||||
ps -p 1 &> $Debug_Data_Dir/ps-p-1.txt
|
||||
echo "Collecting init data..."
|
||||
cat /proc/1/comm &> $Debug_Data_Dir/proc-1-comm.txt
|
||||
runlevel &> $Debug_Data_Dir/runlevel.txt
|
||||
if type -p rc-status &>/dev/null;then
|
||||
rc-status -a &> $Debug_Data_Dir/rc-status-a.txt
|
||||
|
@ -1910,17 +1919,6 @@ debug_data_collector()
|
|||
else
|
||||
touch $Debug_Data_Dir/strings-absent
|
||||
fi
|
||||
local id_dir='/sys/class/power_supply/'
|
||||
local ids=$( ls $id_dir 2>/dev/null )
|
||||
if [[ -n $ids ]];then
|
||||
for batid in $ids
|
||||
do
|
||||
cat $id_dir$batid'/uevent' &> $Debug_Data_Dir/sys-power-supply-$batid.txt
|
||||
done
|
||||
else
|
||||
touch $Debug_Data_Dir/sys-power-supply-none
|
||||
fi
|
||||
|
||||
# leaving this commented out to remind that some systems do not
|
||||
# support strings --version, but will just simply hang at that command
|
||||
# which you can duplicate by simply typing: strings then hitting enter, you will get hang.
|
||||
|
@ -1931,12 +1929,6 @@ debug_data_collector()
|
|||
else
|
||||
touch $Debug_Data_Dir/nvidia-smi-absent
|
||||
fi
|
||||
head -n 1 /proc/asound/card*/codec* &> $Debug_Data_Dir/proc-asound-card-codec.txt
|
||||
if [[ -f /proc/version ]];then
|
||||
cat /proc/version &> $Debug_Data_Dir/proc-version.txt
|
||||
else
|
||||
touch $Debug_Data_Dir/proc-version-absent
|
||||
fi
|
||||
echo $CC &> $Debug_Data_Dir/cc-content.txt
|
||||
ls /usr/bin/gcc* &> $Debug_Data_Dir/gcc-sys-versions.txt
|
||||
if type -p gcc &>/dev/null;then
|
||||
|
@ -1954,11 +1946,46 @@ debug_data_collector()
|
|||
else
|
||||
touch $Debug_Data_Dir/systemd-detect-virt-absent
|
||||
fi
|
||||
echo "Collecting Perl module data..."
|
||||
if type -p perl &>/dev/null;then
|
||||
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC' &> $Debug_Data_Dir/perl-modules.txt
|
||||
perl -MFile::Find=find -MFile::Spec::Functions -Tlwe 'find { wanted => sub { print canonpath $_ if /\.pm\z/ }, no_chdir => 1 }, @INC' 2>/dev/null | sort &> $Debug_Data_Dir/perl-modules.txt
|
||||
else
|
||||
touch $Debug_Data_Dir/perl-missing.txt
|
||||
fi
|
||||
echo "Collecting system file data..."
|
||||
ls /sys &> $Debug_Data_Dir/ls-sys.txt
|
||||
cat /proc/1/comm &> $Debug_Data_Dir/proc-1-comm.txt
|
||||
if [[ $b_repo == 'true' ]];then
|
||||
get_repo_data "$SELF_DATA_DIR/$Debug_Data_Dir"
|
||||
fi
|
||||
head -n 1 /proc/asound/card*/codec* &> $Debug_Data_Dir/proc-asound-card-codec.txt
|
||||
if [[ -f /proc/version ]];then
|
||||
cat /proc/version &> $Debug_Data_Dir/proc-version.txt
|
||||
else
|
||||
touch $Debug_Data_Dir/proc-version-absent
|
||||
fi
|
||||
local id_dir='/sys/class/power_supply/'
|
||||
local ids=$( ls $id_dir 2>/dev/null )
|
||||
if [[ -n $ids ]];then
|
||||
for batid in $ids
|
||||
do
|
||||
cat $id_dir$batid'/uevent' &> $Debug_Data_Dir/sys-power-supply-$batid.txt
|
||||
done
|
||||
else
|
||||
touch $Debug_Data_Dir/sys-power-supply-none
|
||||
fi
|
||||
if type -p shopt &>/dev/null;then
|
||||
shopt -s nullglob
|
||||
a_distro_ids=(/etc/*[-_]{release,version})
|
||||
shopt -u nullglob
|
||||
echo ${a_distro_ids[@]} &> $Debug_Data_Dir/etc-distro-files.txt
|
||||
for distro_file in ${a_distro_ids[@]} /etc/issue
|
||||
do
|
||||
if [[ -f $distro_file ]];then
|
||||
cat $distro_file &> $Debug_Data_Dir/distro-file${distro_file//\//-}
|
||||
fi
|
||||
done
|
||||
fi
|
||||
cat /etc/src.conf &> $Debug_Data_Dir/bsd-etc-src-conf.txt
|
||||
cat /etc/make.conf &> $Debug_Data_Dir/bsd-etc-make-conf.txt
|
||||
cat /etc/issue &> $Debug_Data_Dir/etc-issue.txt
|
||||
|
@ -1977,8 +2004,9 @@ debug_data_collector()
|
|||
echo $XDG_CONFIG_DIRS &> $Debug_Data_Dir/xdg_config_dirs.txt
|
||||
echo $XDG_DATA_HOME &> $Debug_Data_Dir/xdg_data_home.txt
|
||||
echo $XDG_DATA_DIRS &> $Debug_Data_Dir/xdg_data_dirs.txt
|
||||
|
||||
check_recommends_user_output &> $Debug_Data_Dir/check-recommends-user-output.txt
|
||||
if [[ $b_recommends == 'true' ]];then
|
||||
check_recommends_user_output &> $Debug_Data_Dir/check-recommends-user-output.txt
|
||||
fi
|
||||
if [[ $1 == 'xorg' || $1 == 'all' ]];then
|
||||
if [[ $B_RUNNING_IN_DISPLAY != 'true' ]];then
|
||||
echo 'Warning: only some of the data collection can occur if you are not in X'
|
||||
|
@ -1988,7 +2016,7 @@ debug_data_collector()
|
|||
echo 'Warning: only some of the data collection can occur if you are running as Root user'
|
||||
touch $Debug_Data_Dir/warning-root-user
|
||||
fi
|
||||
echo 'Collecting Xorg log and xorg.conf files'
|
||||
echo 'Collecting Xorg log and xorg.conf files...'
|
||||
if [[ -e $FILE_XORG_LOG ]];then
|
||||
cat $FILE_XORG_LOG &> $Debug_Data_Dir/xorg-log-file.txt
|
||||
else
|
||||
|
@ -2180,55 +2208,7 @@ debug_data_collector()
|
|||
if type -p perl &>/dev/null;then
|
||||
echo "Parsing /sys files..."
|
||||
echo -n "Using Perl: " && perl --version | grep -oE 'v[0-9.]+'
|
||||
sys_traverse_data="$( perl -e '
|
||||
use File::Find;
|
||||
use strict;
|
||||
# use warnings;
|
||||
use 5.008;
|
||||
my @content = ();
|
||||
find( \&wanted, "/sys");
|
||||
process_data( @content );
|
||||
sub wanted {
|
||||
return if -d; # not directory
|
||||
return unless -e; # Must exist
|
||||
return unless -r; # Must be readable
|
||||
return unless -f; # Must be file
|
||||
# note: a new file in 4.11 /sys can hang this, it is /parameter/ then
|
||||
# a few variables. Since inxi does not need to see that file, we will
|
||||
# not use it. Also do not need . files or __ starting files
|
||||
return if $File::Find::name =~ /\/(\.[a-z]|__|parameters\/|debug\/)/;
|
||||
# comment this one out if you experience hangs or if
|
||||
# we discover syntax of foreign language characters
|
||||
# Must be ascii like. This is questionable and might require further
|
||||
# investigation, it is removing some characters that we might want
|
||||
return unless -T;
|
||||
# print $File::Find::name . "\n";
|
||||
push @content, $File::Find::name;
|
||||
return;
|
||||
}
|
||||
sub process_data {
|
||||
my $result = "";
|
||||
my $row = "";
|
||||
my $fh;
|
||||
my $data="";
|
||||
my $sep="";
|
||||
# no sorts, we want the order it comes in
|
||||
# @content = sort @content;
|
||||
foreach (@content){
|
||||
$data="";
|
||||
$sep="";
|
||||
open($fh, "<$_");
|
||||
while ($row = <$fh>) {
|
||||
chomp $row;
|
||||
$data .= $sep . "\"" . $row . "\"";
|
||||
$sep=", ";
|
||||
}
|
||||
$result .= "$_:[$data]\n";
|
||||
# print "$_:[$data]\n"
|
||||
}
|
||||
# print scalar @content . "\n";
|
||||
print "$result";
|
||||
} ' )"
|
||||
sys_traverse_data="$( sys_traverse_data )"
|
||||
if [[ -z "$sys_traverse_data" ]];then
|
||||
echo -e "ERROR: failed to generate /sys data - removing data file.\nContinuing with incomplete data collection."
|
||||
echo "Continuing with incomplete data collection."
|
||||
|
@ -2241,37 +2221,40 @@ debug_data_collector()
|
|||
fi
|
||||
fi
|
||||
fi
|
||||
echo $Line
|
||||
echo "Creating $SELF_NAME output file now. This can take a few seconds..."
|
||||
echo "Starting $SELF_NAME from: $start_directory"
|
||||
cd $start_directory
|
||||
$SELF_PATH/$SELF_NAME -F${debug_i}Rfrploudmxxx -c 0 -@ 8 -y 120 > $SELF_DATA_DIR/$Debug_Data_Dir/inxi-F${debug_i}Rfrploudmxxxy120.txt
|
||||
cp $LOG_FILE $SELF_DATA_DIR/$Debug_Data_Dir
|
||||
if [[ -f $SELF_DATA_DIR/$Debug_Data_Dir.tar.gz ]];then
|
||||
echo "Found and removing previous tar.gz data file: $Debug_Data_Dir.tar.gz"
|
||||
rm -f $SELF_DATA_DIR/$Debug_Data_Dir.tar.gz
|
||||
if [[ $b_inxi == 'true' ]];then
|
||||
echo $Line
|
||||
echo "Creating $SELF_NAME output file now. This can take a few seconds..."
|
||||
echo "Starting $SELF_NAME from: $start_directory"
|
||||
cd $start_directory
|
||||
$SELF_PATH/$SELF_NAME -F${debug_i}Rfrploudmxxx -c 0 -@ 8 -y 120 > $SELF_DATA_DIR/$Debug_Data_Dir/inxi-F${debug_i}Rfrploudmxxxy120.txt
|
||||
cp $LOG_FILE $SELF_DATA_DIR/$Debug_Data_Dir
|
||||
elif type -p inxi &>/dev/null;then
|
||||
echo $Line
|
||||
echo "Creating basic inxi output file..."
|
||||
inxi -Fxxx > $Debug_Data_Dir/inxi-Fxxx.txt
|
||||
else
|
||||
touch $Debug_Data_Dir/inxi-absent.txt
|
||||
fi
|
||||
cd $SELF_DATA_DIR
|
||||
echo 'Creating tar.gz compressed file of this material now. Contents:'
|
||||
echo $Line
|
||||
tar -cvzf $Debug_Data_Dir.tar.gz $Debug_Data_Dir
|
||||
echo $Line
|
||||
echo 'Creating tar.gz compressed file of this material...'
|
||||
tar -czf $debug_gz $Debug_Data_Dir
|
||||
echo 'Cleaning up leftovers...'
|
||||
rm -rf $Debug_Data_Dir
|
||||
echo 'Testing gzip file integrity...'
|
||||
gzip -t $Debug_Data_Dir.tar.gz
|
||||
gzip -t $debug_gz
|
||||
if [[ $? -gt 0 ]];then
|
||||
echo 'Data in gz is corrupted, removing gzip file, try running data collector again.'
|
||||
rm -f $Debug_Data_Dir.tar.gz
|
||||
rm -f $debug_gz
|
||||
echo "Data in gz is corrupted, removed gzip file" >> $Debug_Data_Dir/gzip-error.txt
|
||||
else
|
||||
echo 'All done, you can find your data gzipped directory here:'
|
||||
completed_gz_file=$SELF_DATA_DIR/$Debug_Data_Dir.tar.gz
|
||||
completed_gz_file=$SELF_DATA_DIR/$debug_gz
|
||||
echo $completed_gz_file
|
||||
if [[ $B_UPLOAD_DEBUG_DATA == 'true' ]];then
|
||||
echo $Line
|
||||
if [[ $b_traverse_worked == 'true' ]];then
|
||||
upload_debugger_data "$completed_gz_file"
|
||||
upload_debugger_data "$completed_gz_file" "$Ftp_Upload"
|
||||
if [[ $? -gt 0 ]];then
|
||||
echo "Error: looks like the Perl ftp upload failed. Error number: $?"
|
||||
else
|
||||
|
@ -2289,6 +2272,59 @@ debug_data_collector()
|
|||
fi
|
||||
exit 0
|
||||
}
|
||||
sys_traverse_data()
|
||||
{
|
||||
local sys_traverse_data="$( perl -e '
|
||||
use File::Find;
|
||||
use strict;
|
||||
# use warnings;
|
||||
use 5.008;
|
||||
my @content = ();
|
||||
find( \&wanted, "/sys");
|
||||
process_data( @content );
|
||||
sub wanted {
|
||||
return if -d; # not directory
|
||||
return unless -e; # Must exist
|
||||
return unless -r; # Must be readable
|
||||
return unless -f; # Must be file
|
||||
# note: a new file in 4.11 /sys can hang this, it is /parameter/ then
|
||||
# a few variables. Since inxi does not need to see that file, we will
|
||||
# not use it. Also do not need . files or __ starting files
|
||||
return if $File::Find::name =~ /\/(\.[a-z]|__|parameters\/|debug\/)/;
|
||||
# comment this one out if you experience hangs or if
|
||||
# we discover syntax of foreign language characters
|
||||
# Must be ascii like. This is questionable and might require further
|
||||
# investigation, it is removing some characters that we might want
|
||||
return unless -T;
|
||||
# print $File::Find::name . "\n";
|
||||
push @content, $File::Find::name;
|
||||
return;
|
||||
}
|
||||
sub process_data {
|
||||
my $result = "";
|
||||
my $row = "";
|
||||
my $fh;
|
||||
my $data="";
|
||||
my $sep="";
|
||||
# no sorts, we want the order it comes in
|
||||
# @content = sort @content;
|
||||
foreach (@content){
|
||||
$data="";
|
||||
$sep="";
|
||||
open($fh, "<$_");
|
||||
while ($row = <$fh>) {
|
||||
chomp $row;
|
||||
$data .= $sep . "\"" . $row . "\"";
|
||||
$sep=", ";
|
||||
}
|
||||
$result .= "$_:[$data]\n";
|
||||
# print "$_:[$data]\n"
|
||||
}
|
||||
# print scalar @content . "\n";
|
||||
print "$result";
|
||||
} ' )"
|
||||
echo "$sys_traverse_data"
|
||||
}
|
||||
sys_tree()
|
||||
{
|
||||
if type -p tree &>/dev/null;then
|
||||
|
@ -2336,7 +2372,7 @@ ls_sys()
|
|||
}' &> $Debug_Data_Dir/sys-ls-$1.txt
|
||||
}
|
||||
|
||||
## args: $1 - debugger file name
|
||||
## args: $1 - debugger file name; $2 - ftp destination [does not work]
|
||||
upload_debugger_data()
|
||||
{
|
||||
local result='' debugger_file=$1
|
||||
|
@ -2371,7 +2407,7 @@ upload_debugger_data()
|
|||
$ftp->quit;
|
||||
print "Uploaded file $fpath.\n";
|
||||
print $ftp->message;
|
||||
' $debugger_file )"
|
||||
' $debugger_file )"
|
||||
|
||||
echo "$result"
|
||||
if [[ "$result" == *Goodbye* ]];then
|
||||
|
@ -2380,22 +2416,65 @@ upload_debugger_data()
|
|||
return 1
|
||||
fi
|
||||
}
|
||||
download_file()
|
||||
{
|
||||
local retvalue=0
|
||||
local data=$( perl -e 'use strict;
|
||||
use warnings;
|
||||
use 5.008;
|
||||
use HTTP::Tiny;
|
||||
sub get_file {
|
||||
my ($type, $url, $file) = @_;
|
||||
my $response = HTTP::Tiny->new->get($url);
|
||||
my $return = 0;
|
||||
my $debug = 0;
|
||||
my $fh;
|
||||
|
||||
if ($response->{success} == 0 ){
|
||||
# print "Failed to connect to server/file!\n";
|
||||
$return = 1;
|
||||
}
|
||||
else {
|
||||
if ( $debug ){
|
||||
print "$response->{success}\n";
|
||||
print "$response->{status} $response->{reason}\n";
|
||||
while (my ($key, $value) = each %{$response->{headers}}) {
|
||||
for (ref $value eq "ARRAY" ? @$value : $value) {
|
||||
print "$key: $_\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( $type eq "stdout" || $type eq "ua-stdout" ){
|
||||
print "$response->{content}" if length $response->{content};
|
||||
}
|
||||
elsif ($type eq "spider"){
|
||||
# do nothing, just use the return value
|
||||
}
|
||||
elsif ($type eq "file"){
|
||||
open($fh, ">", $file);
|
||||
print $fh $response->{content};
|
||||
close $fh;
|
||||
}
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
get_file($ARGV[0],$ARGV[1],$ARGV[2]);' "$1" "$2" "$3" )
|
||||
retvalue=$?
|
||||
echo "$data"
|
||||
return $retvalue
|
||||
}
|
||||
#download_file 'stdout' 'https://smxi.org/ip' '';echo $?; exit
|
||||
|
||||
check_recommends_user_output()
|
||||
{
|
||||
local Line=$LINE1
|
||||
local gawk_version='N/A' sed_version='N/A' sudo_version='N/A' python_version='N/A'
|
||||
local downloaders_bsd='' perl_version='N/A'
|
||||
local perl_version='N/A'
|
||||
|
||||
if [[ $B_IRC == 'true' ]];then
|
||||
print_screen_output "Sorry, you can't run this option in an IRC client."
|
||||
exit 1
|
||||
fi
|
||||
if [[ -n $BSD_TYPE ]];then
|
||||
downloaders_bsd='
|
||||
fetch:BSD-only~BSD-only~BSD-only~:-i_wan_ip;-w/-W;-U/-!_[11-15]_(BSDs)
|
||||
ftp:ftp-OpenBSD-only~ftp-OpenBSD-only~ftp-OpenBSD-only~:-i_wan_ip;-w/-W;-U/-!_[11-15]_(OpenBSD_only)'
|
||||
fi
|
||||
initialize_paths
|
||||
print_lines_basic "0" "" "$SELF_NAME will now begin checking for the programs it needs to operate. First a check of the main languages and tools $SELF_NAME uses. Python is only for debugging data uploads unless Perl is missing."
|
||||
echo $Line
|
||||
|
@ -2472,15 +2551,23 @@ check_recommends_items()
|
|||
{
|
||||
local item='' item_list='' item_string='' missing_items='' missing_string=''
|
||||
local package='' application='' feature='' type='' starter='' finisher=''
|
||||
local package_deb='' package_pacman='' package_rpm=''
|
||||
local package_deb='' package_pacman='' package_rpm='' downloaders_bsd=''
|
||||
local print_string='' separator='' width=56
|
||||
local required_dirs='/proc /sys'
|
||||
|
||||
if [[ -n $BSD_TYPE ]];then
|
||||
downloaders_bsd='fetch:BSD-only~BSD-only~BSD-only~:-i_wan_ip;-w/-W;-U/-!_[11-15]_[OR]
|
||||
ftp:ftp-OpenBSD-only~ftp-OpenBSD-only~ftp-OpenBSD-only~:-i_wan_ip;-w/-W;-U/-!_[11-15]_[OR]'
|
||||
fi
|
||||
# package-owner: 1 - debian/ubuntu; 2 - arch; 3 - yum/rpm
|
||||
# pardus: pisi sf -q /usr/bin/package
|
||||
# https://wiki.archlinux.org/index.php/Perl_Policy
|
||||
# https://www.debian.org/doc/packaging-manuals/perl-policy/index.html
|
||||
local required_apps='
|
||||
df:coreutils~coreutils~coreutils~:partition_data
|
||||
gawk:gawk~gawk~gawk~:core_tool
|
||||
grep:grep~grep~grep~:string_search
|
||||
perl:perl~perl~perl~:debugger_uploader;_debugger_/sys_traverse
|
||||
lspci:pciutils~pciutils~pciutils~:hardware_data
|
||||
ps:procps~procps~procps~:process_data
|
||||
readlink:coreutils~coreutils~coreutils~:
|
||||
|
@ -2496,7 +2583,7 @@ check_recommends_items()
|
|||
xrandr:x11-xserver-utils~xrandr~x11-server-utils~:-G_single_screen_resolution
|
||||
'
|
||||
local recommended_apps='
|
||||
dig:dnsutils~dnsutils~bind-utils:-i_first_wlan_ip_default_test
|
||||
dig:dnsutils~dnsutils~bind-utils:-i_wlan_IP_(Default)
|
||||
dmidecode:dmidecode~dmidecode~dmidecode~:-M_if_no_sys_machine_data;_-m_memory
|
||||
file:file~file~file~:-o_unmounted_file_system
|
||||
hciconfig:bluez~bluez-utils~bluez-utils~:-n_-i_bluetooth_data-dev_only-not_used
|
||||
|
@ -2514,9 +2601,10 @@ check_recommends_items()
|
|||
'
|
||||
|
||||
local downloaders="
|
||||
wget:wget~wget~wget~:-i_wan_ip;-w/-W;-U/-!_[11-15]_(if_supported)
|
||||
curl:curl~curl~curl~:-i_wan_ip;-w/-W;-U/-!_[11-15]_(if_supported)
|
||||
curl:curl~curl~curl~:-i_wan_ip;-w/-W;-U/-!_[11-15]_[Default|OR]
|
||||
wget:wget~wget~wget~:-i_wan_ip;-w/-W;-U/-!_[11-15]_[OR]
|
||||
$downloaders_bsd
|
||||
perl:perl~perl~perl~:-i_wan_ip;-w/-W;-U/-!_[11-15]_[Module_HTTP::Tiny]
|
||||
"
|
||||
local recommended_dirs='
|
||||
/sys/class/dmi/id:-M_system,_motherboard,_bios
|
||||
|
@ -2539,7 +2627,6 @@ check_recommends_items()
|
|||
$FILE_SCSI:-D_Advanced_hard_disk_data_[used_rarely]
|
||||
$FILE_XORG_LOG:-G_graphics_driver_load_status
|
||||
"
|
||||
|
||||
if [[ -n $COLS_INNER ]];then
|
||||
if [[ $COLS_INNER -ge 90 ]];then
|
||||
width=${#LINE1} # match width of $LINE1
|
||||
|
@ -2547,7 +2634,6 @@ check_recommends_items()
|
|||
width=$(( $COLS_INNER - 11 ))
|
||||
fi
|
||||
fi
|
||||
|
||||
case $1 in
|
||||
downloaders)
|
||||
item_list=$downloaders
|
||||
|
@ -2620,8 +2706,8 @@ check_recommends_items()
|
|||
application=$( cut -d ':' -f 1 <<< $item )
|
||||
package=$( cut -d ':' -f 2 <<< $item )
|
||||
location=$( type -p $application )
|
||||
if [[ $( awk -F ":" '{print NF-1}' <<< $item ) -eq 2 ]];then
|
||||
feature=$( cut -d ':' -f 3 <<< $item )
|
||||
if [[ $( awk -F ":" '{print NF-1}' <<< $item ) -ge 2 ]];then
|
||||
feature=$( cut -d ':' -f 3-6 <<< $item )
|
||||
else
|
||||
feature=''
|
||||
fi
|
||||
|
@ -3156,6 +3242,24 @@ get_parameters()
|
|||
B_SHOW_DISPLAY_DATA='true'
|
||||
B_RUNNING_IN_DISPLAY='true'
|
||||
;;
|
||||
41)
|
||||
B_CURL='false'
|
||||
set_downloader
|
||||
;;
|
||||
42)
|
||||
B_FETCH='false'
|
||||
set_downloader
|
||||
;;
|
||||
43)
|
||||
B_WGET='false'
|
||||
set_downloader
|
||||
;;
|
||||
44)
|
||||
B_CURL='false'
|
||||
B_FETCH='false'
|
||||
B_WGET='false'
|
||||
set_downloader
|
||||
;;
|
||||
ftp*)
|
||||
ALTERNATE_FTP="$OPTARG"
|
||||
;;
|
||||
|
@ -3347,6 +3451,10 @@ show_options()
|
|||
print_lines_basic "1" "-! 33" "Forces use of dmidecode data instead of /sys where relevant (-M)."
|
||||
print_lines_basic "1" "-! 34" "Skips SSL certificate checks for all downloader activies (wget/fetch/curl only). Must go before other options."
|
||||
print_lines_basic "1" "-! 40" "Will try to get display data out of X. Default gets it from display :0. If you use this format: -! 40:1 it would get it from display 1 instead, or any display you specify as long as there is no space between -! 40 and the :[display-number]."
|
||||
print_lines_basic "1" "-! 41" "Bypass curl as a downloader option."
|
||||
print_lines_basic "1" "-! 42" "Bypass fetch as a downloader option."
|
||||
print_lines_basic "1" "-! 43" "Bypass wget as a downloader option."
|
||||
print_lines_basic "1" "-! 44" "Bypass curl, fetch, and wget as a downloader options. Forces Perl if HTTP::Tiny present."
|
||||
|
||||
if [[ $1 == 'full' ]];then
|
||||
print_screen_output " "
|
||||
|
@ -8662,6 +8770,12 @@ get_networking_wan_ip_data()
|
|||
ftp)
|
||||
ip_data="$( ftp $NO_SSL_OPT -o - $WAN_IP_URL 2>/dev/null )" || downloader_error=$?
|
||||
;;
|
||||
perl)
|
||||
if [[ -n $( grep 'smxi.org' <<< $WAN_IP_URL ) ]];then
|
||||
ua="s-tools/inxi-ip"
|
||||
fi
|
||||
ip_data="$( download_file 'ua-stdout' $WAN_IP_URL $ua )" || downloader_man_error=$?
|
||||
;;
|
||||
wget)
|
||||
if [[ -n $( grep 'smxi.org' <<< $WAN_IP_URL ) ]];then
|
||||
ua="-U s-tools/inxi-ip"
|
||||
|
@ -12035,6 +12149,9 @@ get_weather_data()
|
|||
ftp)
|
||||
location_data="$( ftp $NO_SSL_OPT -o - $location_site 2>/dev/null )" || downloader_error=$?
|
||||
;;
|
||||
perl)
|
||||
location_data="$( download_file 'stdout' $location_site )" || downloader_error=$?
|
||||
;;
|
||||
wget)
|
||||
location_data="$( wget $NO_SSL_OPT -t 1 -T $DL_TIMEOUT -q -O - $location_site )" || downloader_error=$?
|
||||
;;
|
||||
|
@ -12172,6 +12289,9 @@ get_weather_data()
|
|||
ftp)
|
||||
weather_data="$( ftp $NO_SSL_OPT -o - $weather_feed"$location" 2>/dev/null )" || downloader_error=$?
|
||||
;;
|
||||
perl)
|
||||
weather_data="$( download_file 'stdout' "$weather_feed$location" )" || downloader_error=$?
|
||||
;;
|
||||
wget)
|
||||
weather_data="$( wget $NO_SSL_OPT -t 1 -T $DL_TIMEOUT -q -O - $weather_feed"$location" )" || downloader_error=$?
|
||||
;;
|
||||
|
|
|
@ -1,3 +1,58 @@
|
|||
=====================================================================================
|
||||
Version: 2.3.46
|
||||
Patch Version: 00
|
||||
Script Date: 2017-11-26
|
||||
-----------------------------------
|
||||
Changes:
|
||||
-----------------------------------
|
||||
|
||||
New version, new tarball. Added an optional downloader: Perl HTTP::Tiny
|
||||
|
||||
Note that this is the last choice because it's slow, the order has been revised:
|
||||
|
||||
1. curl
|
||||
2. wget
|
||||
3. fetch
|
||||
4. Perl 5 HTTP::Tiny
|
||||
5. OpenBSD ftp
|
||||
|
||||
wget has been downgraded due to the recent 1.19-2 bug with wget -O that did
|
||||
not get resolved quickly, and which should never have been released since
|
||||
that's a basic wget action, which means they aren't testing gnu wget the way
|
||||
they should be.
|
||||
|
||||
All inxi downloaders can now use this option. However, in my tests it's signicantly
|
||||
slower to use HTTP::Tiny than curl or wget, so inxi will test for the downloaders
|
||||
in that order. While -i uses dig as it's primary IP tool, if dig is not installed,
|
||||
the IP will follow the same downloader priority. -U and -w/-W use downloaders.
|
||||
|
||||
Because HTTP::Tiny is optional, and is merely used if wget/curl/fetch are not
|
||||
installed, I would not consider Perl to be a real dependency yet, just an option, so
|
||||
I guess for packager maintainers, Perl should be added as a recommends, or a
|
||||
dependency if you want to fully support the debugger options (Core Modules).
|
||||
|
||||
While I'm still not sure which Perl modules I'm going to be using, I'm sticking
|
||||
for now to Core Modules, the standard, with some experimental exceptions that
|
||||
would only be used if the user had them present.
|
||||
|
||||
Long term the goal is to get rid of as many dependencies as possible, replacing
|
||||
them were possible with Perl tools, but this is going to take forever, if it
|
||||
ever happens, so don't hold your breath.
|
||||
|
||||
In the future, I expect more and more components that were gawk to be rewritten
|
||||
to Perl (Core Modules), slowly, however, very slowly.
|
||||
|
||||
Updated --recommends to indicate the downloader options more clearly as well.
|
||||
|
||||
Added new options for bypassing curl (-! 41), fetch (-! 42) wget (-! 43), or
|
||||
curl, fetch, and wget (-! 44) to disable all of them. This is in case one of
|
||||
those is broken or you want to test Perl downloader, mostly.
|
||||
|
||||
Also cleaned up debugger output and made debugger portable to other scripts.
|
||||
|
||||
-----------------------------------
|
||||
-- Harald Hope - Sun, 26 Nov 2017 15:14:34 -0800
|
||||
|
||||
=====================================================================================
|
||||
Version: 2.3.45
|
||||
Patch Version: 00
|
||||
|
|
Loading…
Reference in a new issue