mirror of
https://github.com/smxi/inxi.git
synced 2024-11-17 00:31:19 +00:00
1.6.6
new option: --recommends This lets users check their system for all the required/recommended apps, and also shows any missing core directories, with an explanation of what each item does. Also prints out a list of distro packages that should help users install the missing package. So far only debian/ubuntu and arch linux lists are done.
This commit is contained in:
parent
b1f7966f9b
commit
6a2f09858f
256
inxi
256
inxi
|
@ -1,9 +1,9 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
########################################################################
|
########################################################################
|
||||||
#### Script Name: inxi
|
#### Script Name: inxi
|
||||||
#### version: 1.6.5
|
#### version: 1.6.6
|
||||||
#### Date: June 10 2011
|
#### Date: June 10 2011
|
||||||
#### Patch Number: 01
|
#### Patch Number: 00
|
||||||
########################################################################
|
########################################################################
|
||||||
#### SPECIAL THANKS
|
#### SPECIAL THANKS
|
||||||
########################################################################
|
########################################################################
|
||||||
|
@ -645,31 +645,6 @@ main()
|
||||||
initialize_script_data()
|
initialize_script_data()
|
||||||
{
|
{
|
||||||
eval $LOGFS
|
eval $LOGFS
|
||||||
local path='' sys_path='' added_path='' b_path_found=''
|
|
||||||
# Extra path variable to make execute failures less likely, merged below
|
|
||||||
local extra_paths="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
|
|
||||||
|
|
||||||
# Fallback paths put into $extra_paths; This might, among others, help on gentoo.
|
|
||||||
# Now, create a difference of $PATH and $extra_paths and add that to $PATH:
|
|
||||||
IFS=":"
|
|
||||||
for path in $extra_paths
|
|
||||||
do
|
|
||||||
b_path_found='false'
|
|
||||||
for sys_path in $PATH
|
|
||||||
do
|
|
||||||
if [[ $path == $sys_path ]];then
|
|
||||||
b_path_found='true'
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [[ $b_path_found == 'false' ]];then
|
|
||||||
added_path="$added_path:$path"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
IFS="$ORIGINAL_IFS"
|
|
||||||
PATH="${PATH}${added_path}"
|
|
||||||
##echo "PATH='$PATH'"
|
|
||||||
##/bin/sh -c 'echo "PATH in subshell=\"$PATH\""'
|
|
||||||
|
|
||||||
# now set the script BOOLEANS for files required to run features
|
# now set the script BOOLEANS for files required to run features
|
||||||
if [[ -d "/proc/" ]];then
|
if [[ -d "/proc/" ]];then
|
||||||
|
@ -677,6 +652,9 @@ initialize_script_data()
|
||||||
else
|
else
|
||||||
error_handler 6
|
error_handler 6
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
initialize_script_paths
|
||||||
|
|
||||||
# found a case of battery existing but having nothing in it on desktop mobo
|
# found a case of battery existing but having nothing in it on desktop mobo
|
||||||
# not all laptops show the first,
|
# not all laptops show the first,
|
||||||
if [[ -n $( ls /proc/acpi/battery 2>/dev/null ) ]];then
|
if [[ -n $( ls /proc/acpi/battery 2>/dev/null ) ]];then
|
||||||
|
@ -741,6 +719,35 @@ initialize_script_data()
|
||||||
eval $LOGFE
|
eval $LOGFE
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initialize_script_paths()
|
||||||
|
{
|
||||||
|
local path='' added_path='' b_path_found='' sys_path=''
|
||||||
|
# Extra path variable to make execute failures less likely, merged below
|
||||||
|
local extra_paths="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
|
||||||
|
|
||||||
|
# Fallback paths put into $extra_paths; This might, among others, help on gentoo.
|
||||||
|
# Now, create a difference of $PATH and $extra_paths and add that to $PATH:
|
||||||
|
IFS=":"
|
||||||
|
for path in $extra_paths
|
||||||
|
do
|
||||||
|
b_path_found='false'
|
||||||
|
for sys_path in $PATH
|
||||||
|
do
|
||||||
|
if [[ $path == $sys_path ]];then
|
||||||
|
b_path_found='true'
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ $b_path_found == 'false' ]];then
|
||||||
|
added_path="$added_path:$path"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
IFS="$ORIGINAL_IFS"
|
||||||
|
PATH="${PATH}${added_path}"
|
||||||
|
##echo "PATH='$PATH'"
|
||||||
|
##/bin/sh -c 'echo "PATH in subshell=\"$PATH\""'
|
||||||
|
}
|
||||||
|
|
||||||
# No args taken.
|
# No args taken.
|
||||||
check_script_suggested_apps()
|
check_script_suggested_apps()
|
||||||
{
|
{
|
||||||
|
@ -1307,7 +1314,7 @@ debug_data_collector()
|
||||||
cat $FILE_CPUINFO &> $xiin_data_dir/proc-cpu-info.txt
|
cat $FILE_CPUINFO &> $xiin_data_dir/proc-cpu-info.txt
|
||||||
cat $FILE_MEMINFO &> $xiin_data_dir/proc-meminfo.txt
|
cat $FILE_MEMINFO &> $xiin_data_dir/proc-meminfo.txt
|
||||||
cat $FILE_MODULES &> $xiin_data_dir/proc-modules.txt
|
cat $FILE_MODULES &> $xiin_data_dir/proc-modules.txt
|
||||||
|
check_recommends &> $xiin_data_dir/check-recommends.txt
|
||||||
# note, only bash 4> supports ;;& for case, so using if/then here
|
# note, only bash 4> supports ;;& for case, so using if/then here
|
||||||
if [[ $1 == 'sys' || $1 == 'all' ]];then
|
if [[ $1 == 'sys' || $1 == 'all' ]];then
|
||||||
xiin_data_file=$SCRIPT_DATA_DIR/$xiin_data_dir/xiin-sys.txt
|
xiin_data_file=$SCRIPT_DATA_DIR/$xiin_data_dir/xiin-sys.txt
|
||||||
|
@ -1417,6 +1424,194 @@ debug_data_collector()
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_recommends()
|
||||||
|
{
|
||||||
|
local Line='-----------------------------------------------------------------------------------------'
|
||||||
|
|
||||||
|
if ! tty >/dev/null;then
|
||||||
|
print_screen_output "Sorry, you can't run this option in an IRC client."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
initialize_script_paths
|
||||||
|
|
||||||
|
echo "$SCRIPT_NAME will now begin checking for the programs it needs to operate."
|
||||||
|
echo $Line
|
||||||
|
echo 'Test One: Script Dependencies and Required System Directories.'
|
||||||
|
echo "If one of these applications is missing, $SCRIPT_NAME cannot operate."
|
||||||
|
echo $Line
|
||||||
|
echo "You are using bash version: $( bash --version 2>&1 | awk 'BEGIN {IGNORECASE=1} /^GNU bash/ {print $4}' )"
|
||||||
|
echo $Line
|
||||||
|
check_recommends_items 'required-dirs'
|
||||||
|
check_recommends_items 'required-apps'
|
||||||
|
echo 'Test Two: Script Recommends for Graphics features. If you do not use X these do not matter.'
|
||||||
|
echo "If one of these applications is missing, $SCRIPT_NAME will have incomplete output."
|
||||||
|
echo $Line
|
||||||
|
check_recommends_items 'recommended-x-apps'
|
||||||
|
echo 'Test Three: Script Recommends for remaining features.'
|
||||||
|
echo "If one of these applications is missing, $SCRIPT_NAME will have incomplete output."
|
||||||
|
echo $Line
|
||||||
|
check_recommends_items 'recommended-apps'
|
||||||
|
echo 'Test Four: System directories for various information.'
|
||||||
|
echo "If one of these directories is missing, $SCRIPT_NAME will have incomplete output."
|
||||||
|
echo $Line
|
||||||
|
check_recommends_items 'system-dirs'
|
||||||
|
}
|
||||||
|
# args: $1 - check item
|
||||||
|
check_recommends_items()
|
||||||
|
{
|
||||||
|
local item='' item_list='' item_string='' missing_items='' missing_string=''
|
||||||
|
local package='' application='' feature='' type=''
|
||||||
|
local required_dirs='/proc /sys'
|
||||||
|
# package-owner: 1 - debian/ubuntu; 2 - arch; 3 - rpm
|
||||||
|
# rpm rpm -qf /usr/bin/package
|
||||||
|
# for uninstalled: repoquery -qf /usr/bin/package
|
||||||
|
# pardus: pisi sf -q /usr/bin/package
|
||||||
|
local required_apps='
|
||||||
|
df:coreutils~coreutils~?~:partition-data
|
||||||
|
free:procps~procps~?~:system-memory
|
||||||
|
gawk:gawk~gawk~gawk~:core-tool
|
||||||
|
grep:grep~grep~grep~:string-search
|
||||||
|
hostname:hostname~coreutils~?~:
|
||||||
|
lspci:pciutils~pciutils~?~:hardware-data
|
||||||
|
ps:procps~procps~?~:process-data
|
||||||
|
readlink:coreutils~coreutils~?~:
|
||||||
|
sed:sed~sed~sed~:string-replace
|
||||||
|
tr:coreutils~coreutils~?~:character-replace
|
||||||
|
uname:uname~coreutils~?~:kernel-data
|
||||||
|
uptime:procps~procps~?~:
|
||||||
|
wc:coreutils~coreutils~?~:word-character-count
|
||||||
|
'
|
||||||
|
local x_recommends='
|
||||||
|
glxinfo:mesa-utils~mesa-demos~?~:-G_glx-info
|
||||||
|
xdpyinfo:X11-utils~xorg-xdpyinfo~?~:-G_multi-screen-resolution
|
||||||
|
xprop:X11-utils~xprop~?~:-S_desktop-data
|
||||||
|
xrandr:x11-xserver-utils~xrandr~?~:-G_single-screen-resolution
|
||||||
|
'
|
||||||
|
local recommended_apps='
|
||||||
|
file:file~file~file~:-o_file-system
|
||||||
|
hddtemp:hddtemp~hddtemp~hddtemp~:-Dx_show-hdd-temp
|
||||||
|
ifconfig:net-tools~net-tools~?~:-i_ip-lan
|
||||||
|
sensors:lm-sensors~lm_sensors~?~:-s_sensors-output
|
||||||
|
lsusb:usbutils~usbutils~?~:-A_usb-audio;-N_usb-networking
|
||||||
|
modinfo:module-init-tools~module-init-tools~?~:-Ax_module-version
|
||||||
|
runlevel:sysvinit~sysvinit~?~:-I_runlevel
|
||||||
|
sudo:sudo~sudo~sudo~:-Dx_user-hddtemp;-o_user-filesystem
|
||||||
|
'
|
||||||
|
local recommended_dirs='
|
||||||
|
/sys/class/dmi/id/:-M_motherboard-bios
|
||||||
|
/dev:-p,-P,-D_disk-partition-data
|
||||||
|
/dev/disk/by-label/:-p,-P_partition-labels
|
||||||
|
/dev/disk/by-uuid/:-p,-P_partition-uuid
|
||||||
|
'
|
||||||
|
|
||||||
|
case $1 in
|
||||||
|
required-dirs)
|
||||||
|
item_list=$required_dirs
|
||||||
|
item_string='Required file system'
|
||||||
|
missing_string='system directories'
|
||||||
|
type='directories'
|
||||||
|
;;
|
||||||
|
required-apps)
|
||||||
|
item_list=$required_apps
|
||||||
|
item_string='Required application'
|
||||||
|
missing_string='applications, and their corresponding packages,'
|
||||||
|
type='applications'
|
||||||
|
;;
|
||||||
|
recommended-x-apps)
|
||||||
|
item_list=$x_recommends
|
||||||
|
item_string='Recommended X application'
|
||||||
|
missing_string='applications, and their corresponding packages,'
|
||||||
|
type='applications'
|
||||||
|
;;
|
||||||
|
recommended-apps)
|
||||||
|
item_list=$recommended_apps
|
||||||
|
item_string='Recommended application'
|
||||||
|
missing_string='applications, and their corresponding packages,'
|
||||||
|
type='applications'
|
||||||
|
;;
|
||||||
|
system-dirs)
|
||||||
|
item_list=$recommended_dirs
|
||||||
|
item_string='System directory'
|
||||||
|
missing_string='system directories'
|
||||||
|
type='directories'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
# great trick from: http://ideatrash.net/2011/01/bash-string-padding-with-sed.html
|
||||||
|
# left pad: sed -e :a -e 's/^.\{1,80\}$/& /;ta'
|
||||||
|
# right pad: sed -e :a -e 's/^.\{1,80\}$/ &/;ta'
|
||||||
|
# center pad: sed -e :a -e 's/^.\{1,80\}$/ & /;ta'
|
||||||
|
|
||||||
|
for item in $item_list
|
||||||
|
do
|
||||||
|
if [[ $( awk -F ":" '{print NF-1}' <<< $item ) -eq 0 ]];then
|
||||||
|
application=$item
|
||||||
|
package=''
|
||||||
|
feature=''
|
||||||
|
location=''
|
||||||
|
elif [[ $( awk -F ":" '{print NF-1}' <<< $item ) -eq 1 ]];then
|
||||||
|
application=$( cut -d ':' -f 1 <<< $item )
|
||||||
|
package=''
|
||||||
|
feature=$( cut -d ':' -f 2 <<< $item )
|
||||||
|
location=''
|
||||||
|
else
|
||||||
|
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 )
|
||||||
|
else
|
||||||
|
feature=''
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if [[ -n $feature ]];then
|
||||||
|
print_string="$item_string: $application (info: $feature)"
|
||||||
|
else
|
||||||
|
print_string="$item_string: $application"
|
||||||
|
fi
|
||||||
|
starter="$( sed -e :a -e 's/^.\{1,75\}$/&./;ta' <<< $print_string )"
|
||||||
|
if [[ -z $( grep '^/' <<< $application ) && -n $location ]] || [[ -d $application ]];then
|
||||||
|
if [[ -n $location ]];then
|
||||||
|
finisher=" $location"
|
||||||
|
else
|
||||||
|
finisher=" Present"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
finisher=" Missing"
|
||||||
|
missing_items="$missing_items$separator$application:$package"
|
||||||
|
separator=' '
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$starter$finisher"
|
||||||
|
done
|
||||||
|
echo $Line
|
||||||
|
if [[ -n $missing_items ]];then
|
||||||
|
echo "The following $type are missing from your system:"
|
||||||
|
for item in $missing_items
|
||||||
|
do
|
||||||
|
application=$( cut -d ':' -f 1 <<< $item )
|
||||||
|
if [[ $type == 'applications' ]];then
|
||||||
|
echo '--------------------------------------------------------'
|
||||||
|
package=$( cut -d ':' -f 2 <<< $item )
|
||||||
|
package_deb=$( cut -d '~' -f 1 <<< $package )
|
||||||
|
package_pacman=$( cut -d '~' -f 2 <<< $package )
|
||||||
|
package_rpm=$( cut -d '~' -f 3 <<< $package )
|
||||||
|
echo "Application: $application"
|
||||||
|
echo "To add to your system, install the proper distribution package for your system:"
|
||||||
|
echo "Debian/Ubuntu: $package_deb :: Arch Linux: $package_pacman :: Redhat/Fedora/Suse: $package_rpm"
|
||||||
|
else
|
||||||
|
echo "Directory: $application"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if [[ $item_string == 'System directory' ]];then
|
||||||
|
echo "These directories are created by the kernel, so don't worry if they are not present."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "All the $( cut -d ' ' -f 1 <<< $item_string | sed -e 's/Re/re/' -e 's/Sy/sy/' ) $type are present."
|
||||||
|
fi
|
||||||
|
echo $Line
|
||||||
|
}
|
||||||
|
|
||||||
#### -------------------------------------------------------------------
|
#### -------------------------------------------------------------------
|
||||||
#### print / output cleaners
|
#### print / output cleaners
|
||||||
#### -------------------------------------------------------------------
|
#### -------------------------------------------------------------------
|
||||||
|
@ -1520,6 +1715,9 @@ get_parameters()
|
||||||
elif [[ $1 == '--help' ]];then
|
elif [[ $1 == '--help' ]];then
|
||||||
show_options
|
show_options
|
||||||
exit 0
|
exit 0
|
||||||
|
elif [[ $1 == '--recommends' ]];then
|
||||||
|
check_recommends
|
||||||
|
exit 0
|
||||||
# the short form only runs if no args output args are used
|
# the short form only runs if no args output args are used
|
||||||
# no need to run through these if there are no args
|
# no need to run through these if there are no args
|
||||||
# reserved for future use: -g for extra Graphics; -m for extra Machine; -d for extra Disk
|
# reserved for future use: -g for extra Graphics; -m for extra Machine; -d for extra Disk
|
||||||
|
@ -1907,6 +2105,8 @@ show_options()
|
||||||
print_screen_output "Additional Options:"
|
print_screen_output "Additional Options:"
|
||||||
print_screen_output "-h --help This help menu."
|
print_screen_output "-h --help This help menu."
|
||||||
print_screen_output "-H This help menu, plus developer options. Do not use dev options in normal operation!"
|
print_screen_output "-H This help menu, plus developer options. Do not use dev options in normal operation!"
|
||||||
|
print_screen_output "--recommends Checks $SCRIPT_NAME application dependencies + recommends, and directories, then shows"
|
||||||
|
print_screen_output " what package(s) you need to install to add support for that feature."
|
||||||
if [[ $B_ALLOW_UPDATE == 'true' ]];then
|
if [[ $B_ALLOW_UPDATE == 'true' ]];then
|
||||||
print_screen_output "-U Auto-update script. Note: if you installed as root, you"
|
print_screen_output "-U Auto-update script. Note: if you installed as root, you"
|
||||||
print_screen_output " must be root to update, otherwise user is fine."
|
print_screen_output " must be root to update, otherwise user is fine."
|
||||||
|
|
Loading…
Reference in a new issue