diff options
author | Unit 193 <unit193@ubuntu.com> | 2017-09-05 08:19:38 -0400 |
---|---|---|
committer | Unit 193 <unit193@ubuntu.com> | 2017-09-05 08:19:38 -0400 |
commit | afe296bdf39cb101ccd17aa16c6c7d7c316b145a (patch) | |
tree | eebd09c95eb9a5d4862e1f235db21a3da861080b | |
parent | bda9ab013726c1f3a59ae5c2c556233eb7b7acc9 (diff) | |
download | inxi-afe296bdf39cb101ccd17aa16c6c7d7c316b145a.tar.bz2 inxi-afe296bdf39cb101ccd17aa16c6c7d7c316b145a.tar.xz inxi-afe296bdf39cb101ccd17aa16c6c7d7c316b145a.tar.zst |
New upstream version 2.3.37upstream/2.3.37
-rwxr-xr-x | inxi | 827 | ||||
-rw-r--r-- | inxi.1 | 11 | ||||
-rw-r--r-- | inxi.1.gz | bin | 12546 -> 12609 bytes | |||
-rw-r--r-- | inxi.changelog | 64 |
4 files changed, 580 insertions, 322 deletions
@@ -2,8 +2,8 @@ ######################################################################## SELF_NAME='inxi' # don't quote the following, parsers grab these too -SELF_VERSION=2.3.34 -SELF_DATE=2017-08-04 +SELF_VERSION=2.3.37 +SELF_DATE=2017-08-23 SELF_PATCH=00 ######################################################################## #### SPECIAL THANKS @@ -52,7 +52,6 @@ SELF_PATCH=00 #### If you don't understand what Free Software is, please read (or reread) #### this page: http://www.gnu.org/philosophy/free-sw.html ######################################################################## - #### #### PACKAGE NAME NOTES #### * Package names in (...) are the Debian Squeeze package name. Check your @@ -1323,7 +1322,7 @@ select_default_color_scheme() ;; esac set_color_scheme $i - print_screen_output "$irc_clear $i)$spacer${C1}Card:${C2} nVidia G86 [GeForce 8400 GS] ${C1}X.Org${C2} 1.7.7" + print_screen_output "$irc_clear $i)$spacer${C1}Card:${C2} nVidia G86 [GeForce 8400 GS] ${C1}Display Server${C2} x11 (X.Org 1.7.7)" done set_color_scheme 0 @@ -1764,14 +1763,12 @@ set_man_location() # args: $1 - debug data type: sys|xorg|disk debug_data_collector() { - local xiin_app='' xiin_data_file='' xiin_download='' error='' b_run_xiin='false' - local debug_data_dir='' bsd_string='' xorg_d_files='' xorg_file='' a_distro_ids='' - local completed_gz_file='' xiin_file='xiin.py' ftp_upload='ftp.techpatterns.com/incoming' - local xiin_url="https://github.com/smxi/inxi/raw/xiin/$xiin_file" - local Line='-------------------------' root_string='' + local xiin_app='' sys_data_file='' error='' b_run_xiin='false' b_xiin_downloaded='false' + local Debug_Data_Dir='' bsd_string='' xorg_d_files='' xorg_file='' a_distro_ids='' + local completed_gz_file='' Xiin_File='xiin.py' ftp_upload='ftp.techpatterns.com/incoming' + local Line='-------------------------' local start_directory=$( pwd ) - local host='' - local downloader_error=0 debug_i='' + local host='' debug_i='' root_string='' b_perl_worked='false' b_uploaded='false' if (( "$BASH" >= 4 ));then host="${HOSTNAME,,}" @@ -1795,7 +1792,7 @@ debug_data_collector() root_string='-root' fi - debug_data_dir="inxi$bsd_string-$host-$(date +%Y%m%d-%H%M%S)-$1$root_string" + Debug_Data_Dir="inxi$bsd_string-$host-$(date +%Y%m%d-%H%M%S)-$1$root_string" if [[ $B_IRC == 'false' ]];then if [[ -n $ALTERNATE_FTP ]];then @@ -1803,470 +1800,525 @@ debug_data_collector() fi echo "Starting debugging data collection type: $1" cd $SELF_DATA_DIR - if [[ -d $SELF_DATA_DIR/$debug_data_dir ]];then - echo 'Deleting previous xiin data directory...' - rm -rf $SELF_DATA_DIR/$debug_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 + mkdir $SELF_DATA_DIR/$Debug_Data_Dir + if [[ -f $SELF_DATA_DIR/$Debug_Data_Dir.tar.gz ]];then echo 'Deleting previous tar.gz file...' - rm -f $SELF_DATA_DIR/$debug_data_dir.tar.gz + rm -f $SELF_DATA_DIR/$Debug_Data_Dir.tar.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 "Data going into: $SELF_DATA_DIR/$Debug_Data_Dir" # bsd tools http://cb.vu/unixtoolbox.xhtml # freebsd if type -p pciconf &>/dev/null;then - pciconf -l -cv &> $debug_data_dir/bsd-pciconf-cvl.txt - pciconf -vl &> $debug_data_dir/bsd-pciconf-vl.txt - pciconf -l &> $debug_data_dir/bsd-pciconf-l.txt + pciconf -l -cv &> $Debug_Data_Dir/bsd-pciconf-cvl.txt + pciconf -vl &> $Debug_Data_Dir/bsd-pciconf-vl.txt + pciconf -l &> $Debug_Data_Dir/bsd-pciconf-l.txt else - touch $debug_data_dir/bsd-pciconf-absent + touch $Debug_Data_Dir/bsd-pciconf-absent fi # openbsd if type -p pcidump &>/dev/null;then - pcidump &> $debug_data_dir/bsd-pcidump-openbsd.txt - pcidump -v &> $debug_data_dir/bsd-pcidump-v-openbsd.txt + pcidump &> $Debug_Data_Dir/bsd-pcidump-openbsd.txt + pcidump -v &> $Debug_Data_Dir/bsd-pcidump-v-openbsd.txt else - touch $debug_data_dir/bsd-pcidump-openbsd-absent + touch $Debug_Data_Dir/bsd-pcidump-openbsd-absent fi # netbsd if type -p pcictl &>/dev/null;then - pcictl list &> $debug_data_dir/bsd-pcictl-list-netbsd.txt - pcictl list -n &> $debug_data_dir/bsd-pcictl-list-n-netbsd.txt + pcictl list &> $Debug_Data_Dir/bsd-pcictl-list-netbsd.txt + pcictl list -n &> $Debug_Data_Dir/bsd-pcictl-list-n-netbsd.txt else - touch $debug_data_dir/bsd-pcictl-netbsd-absent + touch $Debug_Data_Dir/bsd-pcictl-netbsd-absent fi if type -p sysctl &>/dev/null;then - sysctl -a &> $debug_data_dir/bsd-sysctl-a.txt + sysctl -a &> $Debug_Data_Dir/bsd-sysctl-a.txt else - touch $debug_data_dir/bsd-sysctl-absent + touch $Debug_Data_Dir/bsd-sysctl-absent fi if type -p usbdevs &>/dev/null;then - usbdevs -v &> $debug_data_dir/bsd-usbdevs-v.txt + usbdevs -v &> $Debug_Data_Dir/bsd-usbdevs-v.txt else - touch $debug_data_dir/bsd-usbdevs-absent + touch $Debug_Data_Dir/bsd-usbdevs-absent fi if type -p kldstat &>/dev/null;then - kldstat &> $debug_data_dir/bsd-kldstat.txt + kldstat &> $Debug_Data_Dir/bsd-kldstat.txt else - touch $debug_data_dir/bsd-kldstat-absent + touch $Debug_Data_Dir/bsd-kldstat-absent fi # diskinfo -v <disk> # fdisk <disk> - dmidecode &> $debug_data_dir/dmidecode.txt + dmidecode &> $Debug_Data_Dir/dmidecode.txt - get_repo_data "$SELF_DATA_DIR/$debug_data_dir" + 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 + 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//\//-} + 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 - lspci -k &> $debug_data_dir/lspci-k.txt - lspci -knn &> $debug_data_dir/lspci-knn.txt - lspci -n &> $debug_data_dir/lspci-n.txt - lspci -nn &> $debug_data_dir/lspci-nn.txt - lspci -mm &> $debug_data_dir/lspci-mm.txt - lspci -mmnn &> $debug_data_dir/lspci-mmnn.txt - lspci -mmnnv &> $debug_data_dir/lspci-mmnnv.txt - lspci -v &> $debug_data_dir/lspci-v.txt - lsusb &> $debug_data_dir/lsusb.txt + dmesg &> $Debug_Data_Dir/dmesg.txt + lscpu &> $Debug_Data_Dir/lscpu.txt + lspci &> $Debug_Data_Dir/lspci.txt + lspci -k &> $Debug_Data_Dir/lspci-k.txt + lspci -knn &> $Debug_Data_Dir/lspci-knn.txt + lspci -n &> $Debug_Data_Dir/lspci-n.txt + lspci -nn &> $Debug_Data_Dir/lspci-nn.txt + lspci -mm &> $Debug_Data_Dir/lspci-mm.txt + lspci -mmnn &> $Debug_Data_Dir/lspci-mmnn.txt + lspci -mmnnv &> $Debug_Data_Dir/lspci-mmnnv.txt + lspci -v &> $Debug_Data_Dir/lspci-v.txt + lsusb &> $Debug_Data_Dir/lsusb.txt if type -p hciconfig &>/dev/null;then - hciconfig -a &> $debug_data_dir/hciconfig-a.txt + hciconfig -a &> $Debug_Data_Dir/hciconfig-a.txt 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 - cat /proc/1/comm &> $debug_data_dir/proc-1-comm.txt - runlevel &> $debug_data_dir/runlevel.txt + 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 - rc-status -l &> $debug_data_dir/rc-status-l.txt - rc-status -r &> $debug_data_dir/rc-status-r.txt + rc-status -a &> $Debug_Data_Dir/rc-status-a.txt + rc-status -l &> $Debug_Data_Dir/rc-status-l.txt + rc-status -r &> $Debug_Data_Dir/rc-status-r.txt else - touch $debug_data_dir/rc-status-absent + touch $Debug_Data_Dir/rc-status-absent fi if type -p systemctl &>/dev/null;then - systemctl list-units &> $debug_data_dir/systemctl-list-units.txt - systemctl list-units --type=target &> $debug_data_dir/systemctl-list-units-target.txt + systemctl list-units &> $Debug_Data_Dir/systemctl-list-units.txt + systemctl list-units --type=target &> $Debug_Data_Dir/systemctl-list-units-target.txt else - touch $debug_data_dir/systemctl-absent + touch $Debug_Data_Dir/systemctl-absent fi if type -p initctl &>/dev/null;then - initctl list &> $debug_data_dir/initctl-list.txt + initctl list &> $Debug_Data_Dir/initctl-list.txt else - touch $debug_data_dir/initctl-absent + touch $Debug_Data_Dir/initctl-absent fi - sensors &> $debug_data_dir/sensors.txt + sensors &> $Debug_Data_Dir/sensors.txt if type -p strings &>/dev/null;then - touch $debug_data_dir/strings-present + touch $Debug_Data_Dir/strings-present else - touch $debug_data_dir/strings-absent + 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 + cat $id_dir$batid'/uevent' &> $Debug_Data_Dir/sys-power-supply-$batid.txt done else - touch $debug_data_dir/sys-power-supply-none + 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. - # strings --version &> $debug_data_dir/strings.txt + # strings --version &> $Debug_Data_Dir/strings.txt if type -p nvidia-smi &>/dev/null;then - nvidia-smi -q &> $debug_data_dir/nvidia-smi-q.txt - nvidia-smi -q -x &> $debug_data_dir/nvidia-smi-xq.txt + nvidia-smi -q &> $Debug_Data_Dir/nvidia-smi-q.txt + nvidia-smi -q -x &> $Debug_Data_Dir/nvidia-smi-xq.txt else - touch $debug_data_dir/nvidia-smi-absent + touch $Debug_Data_Dir/nvidia-smi-absent fi - head -n 1 /proc/asound/card*/codec* &> $debug_data_dir/proc-asound-card-codec.txt + 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 + cat /proc/version &> $Debug_Data_Dir/proc-version.txt else - touch $debug_data_dir/proc-version-absent + 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 + 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 - gcc --version &> $debug_data_dir/gcc-version.txt + gcc --version &> $Debug_Data_Dir/gcc-version.txt else - touch $debug_data_dir/gcc-absent + touch $Debug_Data_Dir/gcc-absent fi if type -p clang &>/dev/null;then - clang --version &> $debug_data_dir/clang-version.txt + clang --version &> $Debug_Data_Dir/clang-version.txt else - touch $debug_data_dir/clang-absent + touch $Debug_Data_Dir/clang-absent fi if type -p systemd-detect-virt &>/dev/null;then - systemd-detect-virt &> $debug_data_dir/systemd-detect-virt-info.txt + systemd-detect-virt &> $Debug_Data_Dir/systemd-detect-virt-info.txt else - touch $debug_data_dir/systemd-detect-virt-absent + touch $Debug_Data_Dir/systemd-detect-virt-absent 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 - cat $FILE_LSB_RELEASE &> $debug_data_dir/lsb-release.txt - cat $FILE_OS_RELEASE &> $debug_data_dir/os-release.txt - cat $FILE_ASOUND_DEVICE &> $debug_data_dir/proc-asound-device.txt - cat $FILE_ASOUND_VERSION &> $debug_data_dir/proc-asound-version.txt - cat $FILE_CPUINFO &> $debug_data_dir/proc-cpu-info.txt - cat $FILE_MEMINFO &> $debug_data_dir/proc-meminfo.txt - cat $FILE_MODULES &> $debug_data_dir/proc-modules.txt - cat /proc/net/arp &> $debug_data_dir/proc-net-arp.txt + 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 + else + touch $Debug_Data_Dir/perl-missing.txt + 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 + cat $FILE_LSB_RELEASE &> $Debug_Data_Dir/lsb-release.txt + cat $FILE_OS_RELEASE &> $Debug_Data_Dir/os-release.txt + cat $FILE_ASOUND_DEVICE &> $Debug_Data_Dir/proc-asound-device.txt + cat $FILE_ASOUND_VERSION &> $Debug_Data_Dir/proc-asound-version.txt + cat $FILE_CPUINFO &> $Debug_Data_Dir/proc-cpu-info.txt + cat $FILE_MEMINFO &> $Debug_Data_Dir/proc-meminfo.txt + cat $FILE_MODULES &> $Debug_Data_Dir/proc-modules.txt + cat /proc/net/arp &> $Debug_Data_Dir/proc-net-arp.txt # bsd data - cat /var/run/dmesg.boot &> $debug_data_dir/bsd-var-run-dmesg.boot.txt - echo $COLS_INNER &> $debug_data_dir/cols-inner.txt - echo $XDG_CONFIG_HOME &> $debug_data_dir/xdg_config_home.txt - 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 + cat /var/run/dmesg.boot &> $Debug_Data_Dir/bsd-var-run-dmesg.boot.txt + echo $COLS_INNER &> $Debug_Data_Dir/cols-inner.txt + echo $XDG_CONFIG_HOME &> $Debug_Data_Dir/xdg_config_home.txt + 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 - # first download and verify xiin - if [[ $B_UPLOAD_DEBUG_DATA == 'true' || $1 == 'disk' || $1 == 'sys' || $1 == 'all' ]];then - touch $SELF_DATA_DIR/$debug_data_dir/xiin-error.txt - echo "Downloading required tree traverse tool $xiin_file..." - if [[ -f xiin && ! -f $xiin_file ]];then - mv -f xiin $xiin_file - fi - # -Nc is creating really weird download anomalies, so using -O instead - case $DOWNLOADER in - curl) - xiin_download="$( curl $NO_SSL_OPT -s $xiin_url )" || downloader_error=$? - ;; - fetch) - xiin_download="$( fetch $NO_SSL_OPT -q -o - $xiin_url )" || downloader_error=$? - ;; - ftp) - xiin_download="$( ftp $NO_SSL_OPT -o - $xiin_url 2>/dev/null )" || downloader_error=$? - ;; - wget) - xiin_download="$( wget $NO_SSL_OPT -q -O - $xiin_url )" || downloader_error=$? - ;; - no-downloader) - downloader_error=1 - ;; - esac - # if nothing got downloaded kick out error, otherwise we'll use an older version - if [[ $downloader_error -gt 0 && ! -f $xiin_file ]];then - echo -e "ERROR: Failed to download required file: $xiin_file\nMaybe the remote site is down or your networking is broken?" - echo "Continuing with incomplete data collection." - echo "$xiin_file download failed and no existing $xiin_file" >> $debug_data_dir/xiin-error.txt - elif [[ -n $( grep -s '# EOF' <<< "$xiin_download" ) || -f $xiin_file ]];then - if [[ -n $( grep -s '# EOF' <<< "$xiin_download" ) ]];then - echo "Updating $xiin_file from remote location" - echo "$xiin_download" > $xiin_file - else - echo "Using local $xiin_file due to download failure" - fi - b_run_xiin='true' - else - echo -e "ERROR: $xiin_file downloaded but the program file data is corrupted.\nContinuing with incomplete data collection." - echo "$xiin_file downloaded but the program file data is corrupted." >> $debug_data_dir/xiin-error.txt - fi - fi - # note, only bash 4> supports ;;& for case, so using if/then here - if [[ $1 == 'disk' || $1 == 'sys' || $1 == 'all' ]];then - xiin_data_file=$SELF_DATA_DIR/$debug_data_dir/xiin-sys.txt - echo 'Collecting networking data...' - ifconfig &> $debug_data_dir/ifconfig.txt - ip addr &> $debug_data_dir/ip-addr.txt - # f="$( find /sys -mindepth 1 -type f -exec gawk 'END { print FILENAME ":[" $0 "]"}' 2>/dev/null {} \; )" 2>/dev/null;echo "$f" - # https://stackoverflow.com/questions/5119946/find-exec-with-multiple-commands - if [[ $b_run_xiin == 'true' && -z $BSD_TYPE ]];then - echo $Line - echo "Running $xiin_file tool now on /sys..." - echo "Using Python version:" && python --version - python --version &> $debug_data_dir/python-version.txt - python ./$xiin_file -d /sys -f $xiin_data_file - if [[ $? -ne 0 ]];then - error=$? - echo -e "ERROR: $xiin_file exited with error $error - removing data file.\nContinuing with incomplete data collection." - echo "Continuing with incomplete data collection." - rm -f $xiin_data_file - echo "$xiin_file data generation failed with python error $error" >> $debug_data_dir/xiin-error.txt - fi - echo $Line - fi - fi + check_recommends_user_output &> $Debug_Data_Dir/check-recommends-user-output.txt 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' - touch $debug_data_dir/warning-user-not-in-x + touch $Debug_Data_Dir/warning-user-not-in-x fi if [[ $B_ROOT == 'true' ]];then echo 'Warning: only some of the data collection can occur if you are running as Root user' - touch $debug_data_dir/warning-root-user + touch $Debug_Data_Dir/warning-root-user fi 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 + cat $FILE_XORG_LOG &> $Debug_Data_Dir/xorg-log-file.txt else - touch $debug_data_dir/xorg-log-file-absent + touch $Debug_Data_Dir/xorg-log-file-absent fi if [[ -e /etc/X11/xorg.conf ]];then - cat /etc/X11/xorg.conf &> $debug_data_dir/xorg-conf.txt + cat /etc/X11/xorg.conf &> $Debug_Data_Dir/xorg-conf.txt else - touch $debug_data_dir/xorg-conf-file-absent + touch $Debug_Data_Dir/xorg-conf-file-absent fi if [[ -n $( ls /etc/X11/xorg.conf.d/ 2>/dev/null ) ]];then - ls /etc/X11/xorg.conf.d &> $debug_data_dir/ls-etc-x11-xorg-conf-d.txt + ls /etc/X11/xorg.conf.d &> $Debug_Data_Dir/ls-etc-x11-xorg-conf-d.txt xorg_d_files=$(ls /etc/X11/xorg.conf.d) for xorg_file in $xorg_d_files do - cat /etc/X11/xorg.conf.d/$xorg_file &> $debug_data_dir/xorg-conf-d-$xorg_file.txt + cat /etc/X11/xorg.conf.d/$xorg_file &> $Debug_Data_Dir/xorg-conf-d-$xorg_file.txt done else - touch $debug_data_dir/xorg-conf-d-files-absent + touch $Debug_Data_Dir/xorg-conf-d-files-absent fi echo 'Collecting X, xprop, glxinfo, xrandr, xdpyinfo data, wayland, weston...' if type -p weston-info &>/dev/null; then - weston-info &> $debug_data_dir/weston-info.txt + weston-info &> $Debug_Data_Dir/weston-info.txt else - touch $debug_data_dir/weston-info-absent + touch $Debug_Data_Dir/weston-info-absent fi if type -p weston &>/dev/null; then - weston --version &> $debug_data_dir/weston-version.txt + weston --version &> $Debug_Data_Dir/weston-version.txt else - touch $debug_data_dir/weston-absent + touch $Debug_Data_Dir/weston-absent fi if type -p xprop &>/dev/null; then - xprop -root &> $debug_data_dir/xprop_root.txt + xprop -root &> $Debug_Data_Dir/xprop_root.txt else - touch $debug_data_dir/xprop-absent + touch $Debug_Data_Dir/xprop-absent fi if type -p glxinfo &>/dev/null; then - glxinfo &> $debug_data_dir/glxinfo-full.txt - glxinfo -B &> $debug_data_dir/glxinfo-B.txt + glxinfo &> $Debug_Data_Dir/glxinfo-full.txt + glxinfo -B &> $Debug_Data_Dir/glxinfo-B.txt else - touch $debug_data_dir/glxinfo-absent + touch $Debug_Data_Dir/glxinfo-absent fi if type -p xdpyinfo &>/dev/null; then - xdpyinfo &> $debug_data_dir/xdpyinfo.txt + xdpyinfo &> $Debug_Data_Dir/xdpyinfo.txt else - touch $debug_data_dir/xdpyinfo-absent + touch $Debug_Data_Dir/xdpyinfo-absent fi if type -p xrandr &>/dev/null; then - xrandr &> $debug_data_dir/xrandr.txt + xrandr &> $Debug_Data_Dir/xrandr.txt else - touch $debug_data_dir/xrandr-absent + touch $Debug_Data_Dir/xrandr-absent fi if type -p X &>/dev/null; then - X -version &> $debug_data_dir/x-version.txt + X -version &> $Debug_Data_Dir/x-version.txt else - touch $debug_data_dir/x-absent + touch $Debug_Data_Dir/x-absent fi if type -p Xorg &>/dev/null; then - Xorg -version &> $debug_data_dir/xorg-version.txt + Xorg -version &> $Debug_Data_Dir/xorg-version.txt else - touch $debug_data_dir/xorg-absent + touch $Debug_Data_Dir/xorg-absent fi - echo $GNOME_DESKTOP_SESSION_ID &> $debug_data_dir/gnome-desktop-session-id.txt + echo $GNOME_DESKTOP_SESSION_ID &> $Debug_Data_Dir/gnome-desktop-session-id.txt # kde 3 id - echo $KDE_FULL_SESSION &> $debug_data_dir/kde3-full-session.txt - echo $KDE_SESSION_VERSION &> $debug_data_dir/kde-gte-4-session-version.txt + echo $KDE_FULL_SESSION &> $Debug_Data_Dir/kde3-full-session.txt + echo $KDE_SESSION_VERSION &> $Debug_Data_Dir/kde-gte-4-session-version.txt if type -p kf5-config &>/dev/null; then - kf5-config --version &> $debug_data_dir/kde-kf5-config-version-data.txt + kf5-config --version &> $Debug_Data_Dir/kde-kf5-config-version-data.txt elif type -p kf6-config &>/dev/null; then - kf6-config --version &> $debug_data_dir/kde-kf6-config-version-data.txt + kf6-config --version &> $Debug_Data_Dir/kde-kf6-config-version-data.txt elif type -p kf$KDE_SESSION_VERSION-config &>/dev/null; then - kf$KDE_SESSION_VERSION-config --version &> $debug_data_dir/kde-kf$KDE_SESSION_VERSION-KSV-config-version-data.txt + kf$KDE_SESSION_VERSION-config --version &> $Debug_Data_Dir/kde-kf$KDE_SESSION_VERSION-KSV-config-version-data.txt else - touch $debug_data_dir/kde-kf-config-absent + touch $Debug_Data_Dir/kde-kf-config-absent fi if type -p plasmashell &>/dev/null; then - plasmashell --version &> $debug_data_dir/kde-plasmashell-version-data.txt + plasmashell --version &> $Debug_Data_Dir/kde-plasmashell-version-data.txt else - touch $debug_data_dir/kde-plasmashell-absent + touch $Debug_Data_Dir/kde-plasmashell-absent fi if type -p kwin_x11 &>/dev/null; then - kwin_x11 --version &> $debug_data_dir/kde-kwin_x11-version-data.txt + kwin_x11 --version &> $Debug_Data_Dir/kde-kwin_x11-version-data.txt else - touch $debug_data_dir/kde-kwin_x11-absent + touch $Debug_Data_Dir/kde-kwin_x11-absent fi if type -p kded4 &>/dev/null; then - kded4 --version &> $debug_data_dir/kded4-version-data.txt + kded4 --version &> $Debug_Data_Dir/kded4-version-data.txt elif type -p kded5 &>/dev/null; then - kded5 --version &> $debug_data_dir/kded5-version-data.txt + kded5 --version &> $Debug_Data_Dir/kded5-version-data.txt elif type -p kded &>/dev/null; then - kded --version &> $debug_data_dir/kded-version-data.txt + kded --version &> $Debug_Data_Dir/kded-version-data.txt else - touch $debug_data_dir/kded-$KDE_SESSION_VERSION-absent + touch $Debug_Data_Dir/kded-$KDE_SESSION_VERSION-absent fi # kde 5/plasma desktop 5, this is maybe an extra package and won't be used if type -p about-distro &>/dev/null; then - about-distro &> $debug_data_dir/kde-about-distro.txt + about-distro &> $Debug_Data_Dir/kde-about-distro.txt else - touch $debug_data_dir/kde-about-distro-absent + touch $Debug_Data_Dir/kde-about-distro-absent fi - echo $XDG_CURRENT_DESKTOP &> $debug_data_dir/xdg-current-desktop.txt - echo $XDG_SESSION_DESKTOP &> $debug_data_dir/xdg-session-desktop.txt - echo $DESKTOP_SESSION &> $debug_data_dir/desktop-session.txt - echo $GDMSESSION &> $debug_data_dir/gdmsession.txt + echo $XDG_CURRENT_DESKTOP &> $Debug_Data_Dir/xdg-current-desktop.txt + echo $XDG_SESSION_DESKTOP &> $Debug_Data_Dir/xdg-session-desktop.txt + echo $DESKTOP_SESSION &> $Debug_Data_Dir/desktop-session.txt + echo $GDMSESSION &> $Debug_Data_Dir/gdmsession.txt # wayland data collectors: - echo $XDG_SESSION_TYPE &> $debug_data_dir/xdg-session-type.txt - echo $WAYLAND_DISPLAY &> $debug_data_dir/wayland-display.txt - echo $GDK_BACKEND &> $debug_data_dir/gdk-backend.txt - echo $QT_QPA_PLATFORM &> $debug_data_dir/qt-qpa-platform.txt - echo $CLUTTER_BACKEND &> $debug_data_dir/clutter-backend.txt - echo $SDL_VIDEODRIVER &> $debug_data_dir/sdl-videodriver.txt + echo $XDG_SESSION_TYPE &> $Debug_Data_Dir/xdg-session-type.txt + echo $WAYLAND_DISPLAY &> $Debug_Data_Dir/wayland-display.txt + echo $GDK_BACKEND &> $Debug_Data_Dir/gdk-backend.txt + echo $QT_QPA_PLATFORM &> $Debug_Data_Dir/qt-qpa-platform.txt + echo $CLUTTER_BACKEND &> $Debug_Data_Dir/clutter-backend.txt + echo $SDL_VIDEODRIVER &> $Debug_Data_Dir/sdl-videodriver.txt if type -p loginctl &>/dev/null;then - loginctl --no-pager list-sessions &> $debug_data_dir/loginctl-list-sessions.txt + loginctl --no-pager list-sessions &> $Debug_Data_Dir/loginctl-list-sessions.txt else - touch $debug_data_dir/loginctl-absent + touch $Debug_Data_Dir/loginctl-absent fi fi if [[ $1 == 'disk' || $1 == 'all' ]];then echo 'Collecting dev, label, disk, uuid data, df...' - ls -l /dev &> $debug_data_dir/dev-data.txt - ls -l /dev/disk &> $debug_data_dir/dev-disk-data.txt - ls -l /dev/disk/by-id &> $debug_data_dir/dev-disk-id-data.txt - ls -l /dev/disk/by-label &> $debug_data_dir/dev-disk-label-data.txt - ls -l /dev/disk/by-uuid &> $debug_data_dir/dev-disk-uuid-data.txt + ls -l /dev &> $Debug_Data_Dir/dev-data.txt + ls -l /dev/disk &> $Debug_Data_Dir/dev-disk-data.txt + ls -l /dev/disk/by-id &> $Debug_Data_Dir/dev-disk-id-data.txt + ls -l /dev/disk/by-label &> $Debug_Data_Dir/dev-disk-label-data.txt + ls -l /dev/disk/by-uuid &> $Debug_Data_Dir/dev-disk-uuid-data.txt # http://comments.gmane.org/gmane.linux.file-systems.zfs.user/2032 - ls -l /dev/disk/by-wwn &> $debug_data_dir/dev-disk-wwn-data.txt - ls -l /dev/disk/by-path &> $debug_data_dir/dev-disk-path-data.txt - ls -l /dev/mapper &> $debug_data_dir/dev-disk-mapper-data.txt - readlink /dev/root &> $debug_data_dir/dev-root.txt - df -h -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs &> $debug_data_dir/df-h-T-P-excludes.txt - df -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs &> $debug_data_dir/df-T-P-excludes.txt - df -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs --total &> $debug_data_dir/df-T-P-excludes-total.txt - df -h -T &> $debug_data_dir/bsd-df-h-T-no-excludes.txt - df -h &> $debug_data_dir/bsd-df-h-no-excludes.txt - df -k -T &> $debug_data_dir/bsd-df-k-T-no-excludes.txt - df -k &> $debug_data_dir/bsd-df-k-no-excludes.txt - atacontrol list &> $debug_data_dir/bsd-atacontrol-list.txt - camcontrol devlist &> $debug_data_dir/bsd-camcontrol-devlist.txt + ls -l /dev/disk/by-wwn &> $Debug_Data_Dir/dev-disk-wwn-data.txt + ls -l /dev/disk/by-path &> $Debug_Data_Dir/dev-disk-path-data.txt + ls -l /dev/mapper &> $Debug_Data_Dir/dev-disk-mapper-data.txt + readlink /dev/root &> $Debug_Data_Dir/dev-root.txt + df -h -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs &> $Debug_Data_Dir/df-h-T-P-excludes.txt + df -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs &> $Debug_Data_Dir/df-T-P-excludes.txt + df -T -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 --exclude-type=devfs --exclude-type=linprocfs --exclude-type=sysfs --exclude-type=fdescfs --total &> $Debug_Data_Dir/df-T-P-excludes-total.txt + df -h -T &> $Debug_Data_Dir/bsd-df-h-T-no-excludes.txt + df -h &> $Debug_Data_Dir/bsd-df-h-no-excludes.txt + df -k -T &> $Debug_Data_Dir/bsd-df-k-T-no-excludes.txt + df -k &> $Debug_Data_Dir/bsd-df-k-no-excludes.txt + atacontrol list &> $Debug_Data_Dir/bsd-atacontrol-list.txt + camcontrol devlist &> $Debug_Data_Dir/bsd-camcontrol-devlist.txt # bsd tool - mount &> $debug_data_dir/mount.txt - btrfs filesystem show &> $debug_data_dir/btrfs-filesystem-show.txt - btrfs filesystem show --mounted &> $debug_data_dir/btrfs-filesystem-show-mounted.txt - # btrfs filesystem show --all-devices &> $debug_data_dir/btrfs-filesystem-show-all-devices.txt - gpart list &> $debug_data_dir/bsd-gpart-list.txt - gpart show &> $debug_data_dir/bsd-gpart-show.txt - gpart status &> $debug_data_dir/bsd-gpart-status.txt - swapctl -l -k &> $debug_data_dir/bsd-swapctl-l-k.txt - swapon -s &> $debug_data_dir/swapon-s.txt - sysctl -b kern.geom.conftxt &> $debug_data_dir/bsd-sysctl-b-kern.geom.conftxt.txt - sysctl -b kern.geom.confxml &> $debug_data_dir/bsd-sysctl-b-kern.geom.confxml.txt - zfs list &> $debug_data_dir/bsd-zfs-list.txt - zpool list &> $debug_data_dir/bsd-zpool-list.txt - zpool list -v &> $debug_data_dir/bsd-zpool-list-v.txt - df -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 &> $debug_data_dir/df-P-excludes.txt - df -P &> $debug_data_dir/bsd-df-P-no-excludes.txt - cat /proc/mdstat &> $debug_data_dir/proc-mdstat.txt - cat $FILE_PARTITIONS &> $debug_data_dir/proc-partitions.txt - cat $FILE_SCSI &> $debug_data_dir/proc-scsi.txt - cat $FILE_MOUNTS &> $debug_data_dir/proc-mounts.txt - cat /proc/sys/dev/cdrom/info &> $debug_data_dir/proc-cdrom-info.txt - ls /proc/ide/ &> $debug_data_dir/proc-ide.txt - cat /proc/ide/*/* &> $debug_data_dir/proc-ide-hdx-cat.txt - cat /etc/fstab &> $debug_data_dir/etc-fstab.txt - cat /etc/mtab &> $debug_data_dir/etc-mtab.txt - fi - echo 'Creating inxi output file now. This can take a few seconds...' + mount &> $Debug_Data_Dir/mount.txt + btrfs filesystem show &> $Debug_Data_Dir/btrfs-filesystem-show.txt + btrfs filesystem show --mounted &> $Debug_Data_Dir/btrfs-filesystem-show-mounted.txt + # btrfs filesystem show --all-devices &> $Debug_Data_Dir/btrfs-filesystem-show-all-devices.txt + gpart list &> $Debug_Data_Dir/bsd-gpart-list.txt + gpart show &> $Debug_Data_Dir/bsd-gpart-show.txt + gpart status &> $Debug_Data_Dir/bsd-gpart-status.txt + swapctl -l -k &> $Debug_Data_Dir/bsd-swapctl-l-k.txt + swapon -s &> $Debug_Data_Dir/swapon-s.txt + sysctl -b kern.geom.conftxt &> $Debug_Data_Dir/bsd-sysctl-b-kern.geom.conftxt.txt + sysctl -b kern.geom.confxml &> $Debug_Data_Dir/bsd-sysctl-b-kern.geom.confxml.txt + zfs list &> $Debug_Data_Dir/bsd-zfs-list.txt + zpool list &> $Debug_Data_Dir/bsd-zpool-list.txt + zpool list -v &> $Debug_Data_Dir/bsd-zpool-list-v.txt + df -P --exclude-type=aufs --exclude-type=squashfs --exclude-type=unionfs --exclude-type=devtmpfs --exclude-type=tmpfs --exclude-type=iso9660 &> $Debug_Data_Dir/df-P-excludes.txt + df -P &> $Debug_Data_Dir/bsd-df-P-no-excludes.txt + cat /proc/mdstat &> $Debug_Data_Dir/proc-mdstat.txt + cat $FILE_PARTITIONS &> $Debug_Data_Dir/proc-partitions.txt + cat $FILE_SCSI &> $Debug_Data_Dir/proc-scsi.txt + cat $FILE_MOUNTS &> $Debug_Data_Dir/proc-mounts.txt + cat /proc/sys/dev/cdrom/info &> $Debug_Data_Dir/proc-cdrom-info.txt + ls /proc/ide/ &> $Debug_Data_Dir/proc-ide.txt + cat /proc/ide/*/* &> $Debug_Data_Dir/proc-ide-hdx-cat.txt + cat /etc/fstab &> $Debug_Data_Dir/etc-fstab.txt + cat /etc/mtab &> $Debug_Data_Dir/etc-mtab.txt + fi + if [[ $1 == 'disk' || $1 == 'sys' || $1 == 'all' ]];then + echo 'Collecting networking data...' + ifconfig &> $Debug_Data_Dir/ifconfig.txt + ip addr &> $Debug_Data_Dir/ip-addr.txt + fi + # create the error file in case it's needed + if [[ $B_UPLOAD_DEBUG_DATA == 'true' || $1 == 'disk' || $1 == 'sys' || $1 == 'all' ]];then + touch $SELF_DATA_DIR/$Debug_Data_Dir/xiin-error.txt + fi + # note, only bash 4> supports ;;& for case, so using if/then here + if [[ -z $BSD_TYPE ]] && [[ $1 == 'disk' || $1 == 'sys' || $1 == 'all' ]];then + echo $Line + sys_data_file=$SELF_DATA_DIR/$Debug_Data_Dir/xiin-sys.txt + touch $sys_data_file + if type -p perl &>/dev/null;then + echo "Collecting data from /sys..." + 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.010; + 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 + return unless -T; # Must be ascii like + # 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"; + } ' )" + 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." + rm -f $sys_data_file + echo "/sys data generation failed. No data collected." >> $Debug_Data_Dir/xiin-error.txt + else + b_perl_worked='true' + echo 'Completed /sys data collection.' + echo -n "$sys_traverse_data" > $sys_data_file + fi + fi + if [[ -z "$sys_traverse_data" ]];then + download_xiin 'sys' + if [[ $? -eq 0 ]];then + b_run_xiin='true' + b_xiin_downloaded='true' + echo "Running $Xiin_File tool now on /sys..." + echo -n "Using " && python --version + python --version &> $Debug_Data_Dir/python-version.txt + python ./$Xiin_File -d /sys -f $sys_data_file + if [[ $? -ne 0 ]];then + error=$? + echo -e "ERROR: $Xiin_File exited with error $error - removing data file.\nContinuing with incomplete data collection." + rm -f $sys_data_file + echo "$Xiin_File data generation failed with python error $error" >> $Debug_Data_Dir/xiin-error.txt + fi + fi + fi + + fi + # has to be before gz cleanup + if [[ $B_UPLOAD_DEBUG_DATA == 'true' ]];then + if [[ $b_xiin_downloaded == 'false' && $b_perl_worked == 'false' ]];then + echo $Line + download_xiin 'upload' + if [[ $? -eq 0 ]];then + b_run_xiin='true' + 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 + $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 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 + tar -cvzf $Debug_Data_Dir.tar.gz $Debug_Data_Dir echo $Line echo 'Cleaning up leftovers...' - rm -rf $debug_data_dir + rm -rf $Debug_Data_Dir echo 'Testing gzip file integrity...' - gzip -t $debug_data_dir.tar.gz + gzip -t $Debug_Data_Dir.tar.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 - echo "Data in gz is corrupted, removed gzip file" >> $debug_data_dir/gzip-error.txt + rm -f $Debug_Data_Dir.tar.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_Data_Dir.tar.gz echo $completed_gz_file if [[ $B_UPLOAD_DEBUG_DATA == 'true' ]];then echo $Line - if [[ $b_run_xiin == 'true' ]];then - echo "Running automatic upload of data to remote server $ftp_upload now..." - python ./$xiin_file --version - python ./$xiin_file -u $completed_gz_file $ftp_upload + if [[ $b_perl_worked == 'true' ]];then + upload_debugger_data "$completed_gz_file" if [[ $? -gt 0 ]];then - echo $Line - echo "Error: looks like the ftp upload failed. Error number: $?" - echo "The ftp upload failed. Error number: $?" >> $debug_data_dir/xiin-error.txt + echo "Error: looks like the Perl ftp upload failed. Error number: $?" + else + b_uploaded='true' + echo "Hurray! Looks like the Perl ftp upload worked!" + fi + fi + if [[ $b_uploaded == 'false' ]];then + if [[ $b_run_xiin == 'true' ]];then + echo "Running automatic upload of data to remote server $ftp_upload now..." + python ./$Xiin_File --version + python ./$Xiin_File -u $completed_gz_file $ftp_upload + if [[ $? -gt 0 ]];then + echo $Line + echo "Error: looks like the Python ftp upload failed. Error number: $?" + # echo "The ftp upload failed. Error number: $?" >> $Debug_Data_Dir/xiin-error.txt + fi + else + echo 'Unable to run the automatic ftp upload because no uploaders appear to be working or available.' + # that has been removed at this point, so no more logging + # echo "Unable to run the automoatic ftp upload because of an error with the xiin download" >> $Debug_Data_Dir/xiin-error.txt fi - else - echo 'Unable to run the automoatic ftp upload because of an error with the xiin download.' - echo "Unable to run the automoatic ftp upload because of an error with the xiin download" >> $debug_data_dir/xiin-error.txt fi else echo 'You can upload this here using most file managers: ftp.techpatterns.com/incoming' @@ -2279,11 +2331,116 @@ debug_data_collector() exit 0 } +## args: $1 - debugger file name +upload_debugger_data() +{ + local result='' debugger_file=$1 + + if ! type -p perl &>/dev/null;then + echo "Perl is not installed!" + return 2 + elif ! perl -MNet::FTP -e 1 &>/dev/null;then + echo "Required Perl module Net::FTP not installed." + return 3 + fi + export debugger_file + echo "Starting Perl Uploader..." + + result="$( perl -e ' + use strict; + use warnings; + use Net::FTP; + my ($ftp, $host, $user, $pass, $dir, $fpath, $error); + $host = "ftp.techpatterns.com"; + $user = "anonymous"; + $pass = "anonymous\@techpatterns.com"; + $dir = "incoming"; + $fpath = $ENV{debugger_file}; + $ftp = Net::FTP->new($host, Debug => 0); + $ftp->login($user, $pass) || die $ftp->message; + $ftp->binary(); + $ftp->cwd($dir); + print "Connected to FTP server.\n"; + $ftp->put($fpath) || die $ftp->message; + $ftp->quit; + print "Uploaded file.\n"; + print $ftp->message; + ' )" + + echo "$result" + if [[ "$result" == *Goodbye* ]];then + return 0 + else + return 1 + fi +} +# $1 - download type [sys|upload] +download_xiin() +{ + local xiin_download='' xiin_url="https://github.com/smxi/inxi/raw/xiin/$Xiin_File" + local downloader_error=0 download_type='uploader' + + if [[ $1 == 'sys' ]];then + download_type='tree traverse' + fi + touch $Debug_Data_Dir/download_xiin.txt + echo "download_xiin: \$1 - $1" >> $Debug_Data_Dir/download_xiin.txt + echo "Downloading required $download_type tool $Xiin_File..." + if [[ -f xiin && ! -f $Xiin_File ]];then + mv -f xiin $Xiin_File + fi + # -Nc is creating really weird download anomalies, so using -O instead + case $DOWNLOADER in + curl) + xiin_download="$( curl $NO_SSL_OPT -s $xiin_url )" || downloader_error=$? + ;; + fetch) + xiin_download="$( fetch $NO_SSL_OPT -q -o - $xiin_url )" || downloader_error=$? + ;; + ftp) + xiin_download="$( ftp $NO_SSL_OPT -o - $xiin_url 2>/dev/null )" || downloader_error=$? + ;; + wget) + xiin_download="$( wget $NO_SSL_OPT -q -O - $xiin_url )" || downloader_error=$? + ;; + no-downloader) + downloader_error=100 + ;; + esac + # if nothing got downloaded kick out error, otherwise we'll use an older version + if [[ $downloader_error -gt 0 && ! -f $Xiin_File ]];then + echo -e "ERROR: Failed to download required file: $Xiin_File\nMaybe the remote site is down or your networking is broken?" + if [[ $1 == 'sys' ]];then + echo "Continuing with incomplete data collection." + else + echo "$SELF_NAME will be unable to automatically upload the debugger data." + fi + echo "$Xiin_File download failed and no existing $Xiin_File: error: $downloader_error" >> $Debug_Data_Dir/xiin-error.txt + return 1 + elif [[ -n $( grep -s '# EOF' <<< "$xiin_download" ) || -f $Xiin_File ]];then + if [[ -n $( grep -s '# EOF' <<< "$xiin_download" ) ]];then + echo "Updating $Xiin_File from remote location" + echo "$xiin_download" > $Xiin_File + else + echo "Using local $Xiin_File due to download failure" + fi + return 0 + else + if [[ $1 == 'sys' ]];then + echo -e "ERROR: $Xiin_File downloaded but the program file data is corrupted.\nContinuing with incomplete data collection." + else + echo -e "ERROR: $Xiin_File downloaded but the program file data is corrupted.\nWill not be able to automatically upload debugger data file." + fi + echo "$Xiin_File downloaded but the program file data is corrupted." >> $Debug_Data_Dir/xiin-error.txt + return 2 + fi +} + 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='' + local downloaders_bsd='' perl_version='N/A' if [[ $B_IRC == 'true' ]];then print_screen_output "Sorry, you can't run this option in an IRC client." @@ -2295,7 +2452,7 @@ check_recommends_user_output() 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 collection." + 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 echo "Bash version: $( bash --version 2>&1 | awk 'BEGIN {IGNORECASE=1} /^GNU bash/ {print $4}' )" if type -p gawk &>/dev/null;then @@ -2314,10 +2471,15 @@ check_recommends_user_output() if type -p python &>/dev/null;then python_version=$( python --version 2>&1 | awk 'BEGIN {IGNORECASE=1} /^Python/ {print $2}' ) fi + # NOTE: does not actually handle 5/6 version, but ok for now + if type -p perl &>/dev/null;then + perl_version=$(perl --version | grep -m 1 -oE 'v[0-9.]+') + fi echo "Gawk version: $gawk_version" echo "Sed version: $sed_version" echo "Sudo version: $sudo_version" - echo "Python version: $python_version" + echo "Python version: $python_version (deprecated)" + echo "Perl version: $perl_versio" echo $Line echo "Test One: Required System Directories (Linux Only)." @@ -2788,7 +2950,6 @@ get_parameters() use_short='false' ;; M) B_SHOW_MACHINE='true' - B_SHOW_BATTERY='true' use_short='false' ;; n) B_SHOW_ADVANCED_NETWORK='true' @@ -3232,9 +3393,9 @@ show_options() print_lines_basic "2" "10" "Color logging." print_lines_basic "1" "" "The following create a tar.gz file of system data, plus collecting the inxi output to file. To automatically upload debugger data tar.gz file to ftp.techpatterns.com: inxi^-xx@^<11-14>" print_lines_basic "1" "" "For alternate ftp upload locations: Example:^inxi^-!^ftp.yourserver.com/incoming^-xx@^14" - print_lines_basic "2" "11" "With data file of xiin read of /sys." + print_lines_basic "2" "11" "With data file of tree traverse read of /sys." print_lines_basic "2" "12" "With xorg conf and log data, xrandr, xprop, xdpyinfo, glxinfo etc." - print_lines_basic "2" "13" "With data from dev, disks, ${partition_string}s, etc., plus xiin data file." + print_lines_basic "2" "13" "With data from dev, disks, ${partition_string}s, etc., plus /sys tree traverse data file." print_lines_basic "2" "14" "Everything, full data collection." print_screen_output " " print_screen_output "Advanced Options:" @@ -6380,7 +6541,7 @@ get_dmidecode_data() # To Be Filled By O.E.M. # strip out starting white space so that the following stuff will clear properly sub(/^[[:space:]]+/, "", twoData) - sub(/^Base Board .*|^Chassis .*|empty|.*O\.E\.M\..*|.*OEM.*|^Not .*|^System .*|.*unknow.*|.*N\/A.*|none|^To be filled.*|^0x[0]+$|\[Empty\]|<Bad Index>|^\.\.$/, "", twoData) + sub(/^Base Board .*|^Chassis .*|empty|.*O\.E\.M\..*|.*OEM.*|^Not .*|^System .*|.*unknow.*|.*N\/A.*|none|^To be filled.*|^0x[0]+$|\[Empty\]|<Bad Index>|Default string|^\.\.$/, "", twoData) sub(/.*(AssetTagNum|Manufacturer| Or Motherboard|PartNum.*|SerNum).*/, "", twoData) gsub(/\ybios\y|\yacpi\y/, "", twoData) # note: biostar sub(/http:\/\/www.abit.com.tw\//, "Abit", twoData) @@ -7758,7 +7919,6 @@ get_kernel_compiler_version() echo $compiler_version } - get_kernel_version() { eval $LOGFS @@ -7860,7 +8020,7 @@ get_machine_data() # Chassis Manufacturer|Chassis Version|Chassis Serial Number # System manufacturer|System Product Name|System Version # To Be Filled By O.E.M. - sub(/^Base Board .*|^Chassis .*|.*O\.E\.M\..*|.*OEM.*|^Not .*|^System .*|.*unknow.*|.*N\/A.*|none|^To be filled.*/, "", $0) + sub(/^Base Board .*|^Chassis .*|.*O\.E\.M\..*|.*OEM.*|^Not .*|^System .*|.*unknow.*|.*N\/A.*|Default string|none|^To be filled.*/, "", $0) gsub(/\ybios\y|\yacpi\y/, "", $0) # note: biostar sub(/http:\/\/www.abit.com.tw\//, "Abit", $0) gsub(/^ +| +$/, "", $0) @@ -9651,7 +9811,7 @@ get_pciconf_card_data() A_AUDIO_DATA[j]=$array_string ;; display) - array_string="$device_string,${a_temp[4]},${a_temp[5]}" + array_string="$device_string,${a_temp[4]},${a_temp[5]},${a_temp[3]}" A_GRAPHICS_CARD_DATA[j]=$array_string ;; network) @@ -12745,7 +12905,11 @@ print_battery_data() fi if [[ $B_EXTRA_EXTRA_DATA == 'true' ]];then if [[ -n ${a_battery_working[16]} ]];then - serial="${a_battery_working[16]} " + if [[ $B_OUTPUT_FILTER == 'true' ]];then + serial=$FILTER_STRING + else + serial="${a_battery_working[16]} " + fi else serial='N/A ' fi @@ -13554,8 +13718,13 @@ print_hard_disk_data() fi fi if [[ $B_EXTRA_EXTRA_DATA == 'true' ]];then - hdd_serial=${a_hdd_working[4]} - if [[ -z $hdd_serial ]];then + if [[ -n ${a_hdd_working[4]} ]];then + if [[ $B_OUTPUT_FILTER == 'true' ]];then + hdd_serial=$FILTER_STRING + else + hdd_serial=${a_hdd_working[4]} + fi + else hdd_serial='N/A' fi hdd_serial="${C1}serial$SEP3${C2} $hdd_serial " @@ -13874,9 +14043,16 @@ print_machine_data() if [[ -n ${A_MACHINE_DATA[14]} ]];then chassis_version=" ${C1}v$SEP3${C2} ${A_MACHINE_DATA[14]}" fi - if [[ -n ${A_MACHINE_DATA[15]} && $B_OUTPUT_FILTER != 'true' ]];then - chassis_serial=" ${C1}serial$SEP3${C2} ${A_MACHINE_DATA[15]}" + if [[ -n ${A_MACHINE_DATA[15]} ]];then + if [[ $B_OUTPUT_FILTER == 'true' ]];then + chassis_serial=$FILTER_STRING + else + chassis_serial=${A_MACHINE_DATA[15]} + fi + else + chassis_serial='N/A' fi + chassis_serial=" ${C1}serial$SEP3${C2} $chassis_serial" if [[ -n "$chassis_vendor$chassis_type$chassis_version$chassis_serial" ]];then chassis_line="${C1}Chassis$SEP3${C2}$chassis_vendor$chassis_type$chassis_version$chassis_serial" fi @@ -13899,9 +14075,16 @@ print_machine_data() if [[ -n ${A_MACHINE_DATA[7]} ]];then mobo_version=" ${C1}v$SEP3${C2} ${A_MACHINE_DATA[7]}" fi - if [[ -n ${A_MACHINE_DATA[8]} && $B_OUTPUT_FILTER != 'true' ]];then - mobo_serial=" ${C1}serial$SEP3${C2} ${A_MACHINE_DATA[8]}" + if [[ -n ${A_MACHINE_DATA[8]} ]];then + if [[ $B_OUTPUT_FILTER == 'true' ]];then + mobo_serial=$FILTER_STRING + else + mobo_serial=${A_MACHINE_DATA[8]} + fi + else + mobo_serial='N/A' fi + mobo_serial=" ${C1}serial$SEP3${C2} $mobo_serial" if [[ -n ${A_MACHINE_DATA[9]} ]];then bios_vendor=${A_MACHINE_DATA[9]} else @@ -13944,9 +14127,16 @@ print_machine_data() if [[ -n ${A_MACHINE_DATA[2]} ]];then product_version=" ${C1}v$SEP3${C2} ${A_MACHINE_DATA[2]}" fi - if [[ -n ${A_MACHINE_DATA[3]} && $B_OUTPUT_FILTER != 'true' ]];then - product_serial=" ${C1}serial$SEP3${C2} ${A_MACHINE_DATA[3]} " + if [[ -n ${A_MACHINE_DATA[3]} ]];then + if [[ $B_OUTPUT_FILTER == 'true' ]];then + product_serial=$FILTER_STRING + else + product_serial=${A_MACHINE_DATA[3]} + fi + else + product_serial='N/A' fi + product_serial=" ${C1}serial$SEP3${C2} $product_serial " system_line="${C1}Device$SEP3${C2} $device ${C1}System$SEP3${C2} $system_vendor ${C1}product$SEP3${C2} $product_name$product_version$product_serial" calculate_line_length "$system_line$chassis_line" if [[ -n $chassis_line && $LINE_LENGTH -lt $COLS_INNER ]];then @@ -15262,12 +15452,15 @@ print_ram_data() fi manufacturer="${C1}manufacturer$SEP3${C2} $manufacturer " if [[ -n ${a_memory_item[14]} ]];then - serial_nu=${a_memory_item[14]} + if [[ $B_OUTPUT_FILTER == 'true' ]];then + serial_nu=$FILTER_STRING + else + serial_nu=${a_memory_item[14]} + fi else serial_nu='N/A' fi serial_nu="${C1}serial$SEP3${C2} $serial_nu " - if [[ $device_size != 'N/A' && -n ${a_memory_item[16]} ]];then bank_connection=" ${a_memory_item[16]}" fi @@ -1,4 +1,4 @@ -.TH INXI 1 "2017\-07\-30" inxi "inxi manual" +.TH INXI 1 "2017\-08\-23" inxi "inxi manual" .SH NAME inxi \- Command line system information script for console and IRC .SH SYNOPSIS @@ -604,13 +604,13 @@ For alternate ftp upload locations: Example: \fIftp.yourserver.com/incoming\fB \-xx@ 14\fR .TP .B \-@ 11 -\- With data file of xiin read of \fB/sys +\- With tree traversal data file read of \fB/sys\fR .TP .B \-@ 12 \- With xorg conf and log data, xrandr, xprop, xdpyinfo, glxinfo etc. .TP .B \-@ 13 -\- With data from dev, disks, partitions, etc., plus xiin data file. +\- With data from dev, disks, partitions, etc., plus thes tree traversal data file read of \fB/sys\fR. .TP .B \-@ 14 \- Everything, full data collection. @@ -719,8 +719,9 @@ Copyright (C) 2005\-2007 Michiel de Boer a.k.a. locsmif inxi version: Copyright (C) 2008\-17 Harald Hope -Initial CPU logic, konversation version logic, and occasional -maintenance fixes: Scott Rogers +Initial CPU logic, konversation version logic, occasional maintenance fixes, +and the initial xiin.py tool for /sys parsing (deprecated but still very much +appreciated for all the valuable debugger data it helped generate): Scott Rogers Further fixes (listed as known): diff --git a/inxi.changelog b/inxi.changelog index b7ca3d0..ebad4f7 100644 --- a/inxi.changelog +++ b/inxi.changelog @@ -1,4 +1,68 @@ ===================================================================================== +Version: 2.3.37 +Patch Version: 00 +Script Date: 2017-08-23 +----------------------------------- +Changes: +----------------------------------- +New version, new tarball, new man page. Deprecated xiin uploader, which completes the deprecation +of the xiin.py tool, which is going to become obsolete when python 3 fully replaces python 2. + +Since the odds of perl being around and stable are far higher than the odds of xiin.py +even working on python 3, I'm getting ahead of the race. Plus Perl is nicer to work with. + +And Perl is a lot faster. I mean, a lot. Not slightly. + +And it also works on much older systems, and does not have that Python version < 2.6 +failure due to changing Python syntax even between sub versions. xiin.py never ran on +Python 2.5 even when it was relatively recent, which is one reason I'm removing all Python +from inxi. + +Basically xiin.py worked only on Python 2.6 or 2.7, period. + +Oh, and also handled issue #115 by not making -B show -M data. + +----------------------------------- +-- Harald Hope - Wed, 23 Aug 2017 15:06:22 -0700 + +===================================================================================== +Version: 2.3.36 +Patch Version: 00 +Script Date: 2017-08-16 +----------------------------------- +Changes: +----------------------------------- +New version, new tarball. This fixes issue #119 + +The issue was not so much with xiin.py as with some new values in /sys that would +hang tree traverse, however, in order to remove the python dependency (except for +uploading -xx@ debugger data, until I can figure out how to do it with Perl), I +rewrote the tree traverse tool into Perl, which also makes it a lot faster and +easier to work with. + +This issue appeared on kernel 4.11 as far as I can tell, some new values in /sys make +the traverse hang if it tries to read the values, **/parameters/** and **/debug/** seem +to be the main culprits, but inxi doesn't need that data anyway for debugging purposes +so it's just excluded. + +----------------------------------- +-- Harald Hope - Wed, 16 Aug 2017 00:34:43 -0700 + +===================================================================================== +Version: 2.3.35 +Patch Version: 00 +Script Date: 2017-08-11 +----------------------------------- +Changes: +----------------------------------- +New version, new tarball. Fixed issue #120 where -z fails to anonymize serial numbers. + +Also fixed a FreeBSD issue where I'd failed to update -G to show driver. + +----------------------------------- +-- Harald Hope - Fri, 11 Aug 2017 12:07:17 -0700 + +===================================================================================== Version: 2.3.34 Patch Version: 00 Script Date: 2017-08-04 |