getInfo 2.36.0

This commit is contained in:
kyodev 2017-11-17 07:27:10 +01:00
parent f4c1ee10fd
commit 0dd0c80ac1
2 changed files with 358 additions and 306 deletions

View File

@ -1,7 +1,7 @@
#!/bin/bash
version=2.35.2
date="15/11/2017"
version=2.36.0
date="16/11/2017"
projet="simpledeb"
contact="IRC freenode ##sdeb ou https://framagit.org/kyodev/kyopages/issues/"
script="getInfo"
@ -319,16 +319,18 @@ f__wget_test(){ # 06/11/2017
}
# $1 variable à afficher, $2=var|cmd|sans[:text] (type titre) [$3 titre] [$4 commentaire en () si cmd]
# $2: cmd->`titre`, var->**titre**, sans: pas de titre
# $2 cmd->`titre`, var->**titre**, sans: pas de titre
# "variable" "var" "" "comment" -> pas de titre mais commentaire encadré
# :text ajouté, affiche le text en liste (avec puce)
# :vide bypass test contenu $1, affiche vide si besoin (en liste)
# passage en paramètre variable et pas $variable
# un test si variable $1 est vide est fait
# un test si variable $1 contient 'nofile', non trouvé par f_grep_file
# f_display "variable" "type" "titrage" "titrage_commentaire"
f_display(){ # 15/11/2017
[ "${!1}" ] || return 0 # test si contenu dans $1
local display=""
f_display(){ # 16/11/2017
[[ "${!1}" || "$2" =~ :vide ]] || return 0 # test si contenu dans $1
local display="" toDisplay="${!1}"
[ "$toDisplay" ] || toDisplay="vide"
# flush, avant fonction, de $text parent
[ "$text" ] && echo -en "$text" >> "$fileOutput"
unset text
@ -338,14 +340,14 @@ f_display(){ # 15/11/2017
[[ "$2" =~ "cmd" ]] && display="\`$3\`" # type cmd, titre entre backtick
[ "$4" ] && display+=$'\xc2\xa0'$'\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0'" ( $4 )" # +$4 en gras avec 5 espaces insécables avant
[ "$2" == "sans" ] || display+=" \n"
if [[ "${!1}" =~ "nofile" ]]; then
if [ "$toDisplay" == "nofile" ]; then
display+="\n* fichier $1 non trouvé \n"
elif [[ "$2" =~ :text ]]; then
elif [[ "$2" =~ :text || "$toDisplay" == "vide" ]]; then
display+='\n'
display+="* ${!1} \n\n"
display+="* $toDisplay \n\n"
else
display+='``` \n'
display+="${!1} \n"
display+="$toDisplay \n"
display+='``` \n\n'
fi
echo -en "$display" >> "$fileOutput" # flush fonction
@ -364,7 +366,7 @@ f_dspl_alert(){ # 15/11/2017
[[ "$2" =~ info ]] && type="info"
[[ "$2" =~ alert ]] && type="alert"
[ "$2" ] || type="alert" # alert par défaut
[ "$type" == "alert" ] && display="> ${!1} \n\n"
[ "$type" == "alert" ] && display="> ${!1} \n\n"
[ "$type" == "info" ] && display=" ☛ ${!1} \n\n"
echo -en "$display" >> "$fileOutput" # flush fonction
}
@ -451,7 +453,7 @@ f_grep_file(){ # 13/11/2017
var_temp="$(grep -Ersv '^[[:blank:]]*#|^[[:blank:]]*$' $file)"
[ -d "$file" ] && file+='/' # si répertoire, ajout / final
var_temp=${var_temp//$file} # pour esthétique, suppression de $file dans les noms de fichiers
[[ "$2" =~ nofile ]] || display+=" $file \n" # nom fichier greppé si $2 ne contient pas 'file'
[[ "$2" =~ nofile ]] || display+=" $file \n" # nom fichier greppé si $2 ne contient pas 'file'
if [ "$var_temp" ]; then
if [[ "$2" =~ [0-9] ]]; then # si $2 contient des chiffres, largeur, gawk
display+=$(gawk -v "larg=${2//[[:alpha:]]}" '{printf "%-"larg"s",$1;
@ -526,10 +528,10 @@ fi_cpu(){ # 10/11/2017
###
[ ${fg_cpu:0:1} -gt 1 ] && pluriel="s" || unset pluriel
text="## processeur"$pluriel" \n\n"
f_display "fg_cpu" "cmd" "lscpu" # affichage proc
f_display "fg_cpu" "cmd" "lscpu" # affichage proc
f_display "fg_uarch" "var" "µarchitecture processeur"
f_display "cpu_flags" "var" "flags cpu" # flags cpu bruts
f_display "text_flags" "sans" # flags cpu texte
f_display "cpu_flags" "var" "flags cpu" # flags cpu bruts
f_display "text_flags" "sans" # flags cpu texte
printf "$text\n" >> "$fileOutput"
unset text
}
@ -1052,7 +1054,7 @@ fi_hw(){ # 10/11/2017
unset text
}
fi_journal(){ # 15/11/2017
fi_journal(){ # 16/11/2017
local jctl_boot jctl_alert_k jctl_crit_k jctl_err_k jctl_warn_k jctl_warn_nok jctl_last jctl_size file
local text nb_lignes=25
local alert_jctl_persist
@ -1077,11 +1079,11 @@ fi_journal(){ # 15/11/2017
fi
# début des logs, extraction à partir de file-last (toujours lignes) pour début des logs
jctl_boot=$(gawk -F '--|,' 'FNR==1 {print $2}' $file-last)
jctl_boot="Début des log: **$( date -d "${jctl_boot##*begin at }" )**" # passage en date locale
jctl_boot=$( date -d "${jctl_boot##*begin at }" ) # passage en date locale
# test persistance
if grep -iq 'no persistent journal' "$file-persistant"; then
alert_jctl_persist="les journaux ne sont pas persistants, revoir les logs du précédent boot "
alert_jctl_persist+="n'est donc pas possible pour investiguation avec, par exemple: \n"
alert_jctl_persist+="n'est donc pas possible pour investiguation avec, par exemple, \n"
alert_jctl_persist+=" journalctl --no-hostname --boot -1"
fi
# journaux kernel
@ -1097,23 +1099,24 @@ fi_journal(){ # 15/11/2017
[ "$jctl_err_k" ] && jctl_err_k=${jctl_err_k//kernel:/:} || jctl_err_k=" ‣ vide"
[ "$jctl_warn_k" ] && jctl_warn_k=${jctl_warn_k//kernel:/:} || jctl_warn_k=" ‣ vide"
# journaux hors kernel
jctl_alert_nok=$(sed '/-- Logs begin/d;/kernel:/d; s/-- No entries --/ ‣ vide/' $file-alert | \
sed -n 1,"$nb_lignes"p)
jctl_crit_nok=$(sed '/-- Logs begin/d;/kernel:/d; s/-- No entries --/ ‣ vide/' $file-crit | \
sed -n 1,"$nb_lignes"p)
jctl_err_nok=$(sed '/-- Logs begin/d;/kernel:/d; s/-- No entries --/ ‣ vide/' $file-err | \
sed -n 1,"$nb_lignes"p)
jctl_warn_nok=$(sed '/-- Logs begin/d;/kernel:/d; s/-- No entries --/ ‣ vide/;s/<warn>//
' $file-warn | sed -n 1,"$nb_lignes"p)
jctl_alert_nok=$( sed '/-- Logs begin/d;/kernel:/d; s/-- No entries --/ ‣ vide/' $file-alert | \
sed -n 1,"$nb_lignes"p )
jctl_crit_nok=$( sed '/-- Logs begin/d;/kernel:/d; s/-- No entries --/ ‣ vide/' $file-crit | \
sed -n 1,"$nb_lignes"p )
jctl_err_nok=$( sed '/-- Logs begin/d;/kernel:/d; s/-- No entries --/ ‣ vide/' $file-err | \
sed -n 1,"$nb_lignes"p )
jctl_warn_nok=$( sed '/-- Logs begin/d;/kernel:/d; s/-- No entries --/ ‣ vide/;s/<warn>//
' $file-warn | sed -n 1,"$nb_lignes"p )
# dernières lignes, toute provenance
jctl_last=$(sed '/-- Logs begin/d; s/-- No entries --/ ‣ vide/;s/<warn>//' $file-last)
jctl_last=$( sed '/-- Logs begin/d; s/-- No entries --/ ‣ vide/;s/<warn>//' $file-last )
# suppression fichier de transfert
rm "$file-"*
###
# kernel
text="## journalctl kernel (emergency, alert, erreur, warning ou critique) \n\n"
text+="* $jctl_boot \n\n"
[ "$alert_jctl_persist" ] || text+="journaux persistants\n\n"
f_dspl_alert "alert_jctl_persist" "info"
text+="* Début des log: **$jctl_boot** \n\n"
# journaux kernel
f_display "jctl_alert_k" "cmd" "journalctl --no-hostname --boot 0 -k -p1" \
"kernel emergency 0 & alerte 1, $nb_lignes premières lignes"
@ -1125,7 +1128,7 @@ fi_journal(){ # 15/11/2017
"kernel warning, $nb_lignes premières lignes"
# journaux hors kernel
text+="## journalctl hors kernel (emergency, alert, erreur, warning ou critique) \n\n"
text+="* $jctl_boot \n\n"
text+="* Début des log: **$jctl_boot** \n\n"
f_display "jctl_alert_nok" "cmd" "journalctl --no-hostname --boot 0 -p 1 | grep -v kernel" \
"hors kernel, emergency 0 & alerte 1, $nb_lignes premières lignes"
f_display "jctl_crit_nok" "cmd" "journalctl --no-hostname --boot 0 -p 2..2 | grep -v kernel" \
@ -1188,13 +1191,11 @@ fi_locale(){ # 10/11/2017
unset text
}
fi_log_xorg(){ # 08/11/2017
fi_log_xorg(){ # 16/11/2017
[ "$ENV_SSH" ] && return 0
local logXorg xfile extract dateFile text nb_lignes=50
# Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice,
# (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown (WW) warning, (EE) erreur
# voir options appliquées par config file: cat /var/log/Xorg.0.log | grep -E '\(\*\*\)'
# voir options par défaut: cat /var/log/Xorg.0.log | grep -E '\(==\)'
for xfile in /var/log/Xorg.0.log /home/$user_/.local/share/xorg/Xorg.0.log ; do
if [ -e "$xfile" ]; then
dateFile=$(date -r $xfile '+%d/%m/%Y %H:%M %z')
@ -1218,21 +1219,22 @@ fi_log_xorg(){ # 08/11/2017
f_display "logXorg" "cmd" \
"grep -Es '\(WW\)|\(EE\)|\(\?\?\)' /var/log/Xorg.?.log /home/<user>/.local/share/xorg/Xorg.?.log" \
"Xorg.log"
text+="voir les options appliquées par défaut: \n"
text+="\`cat /var/log/Xorg.0.log | grep '(\*\*)'\`\n\n"
printf "$text\n" >> "$fileOutput"
unset text
}
fi_mem(){ # 08/11/2017
local var_temp swappiness text
fi_mem(){ # 16/11/2017
local memoire swappiness text
figet_mem "mem" #options possibles mem swap total notitle nocoltitle
var_temp="$fg_mem \n\n"
memoire="$fg_mem \n\n"
figet_mem "swap" "notitle"
var_temp+="$fg_mem"
# var_temp+="swappiness: $swappiness"
memoire+="$fg_mem"
swappiness="$(cat /proc/sys/vm/swappiness 2>/dev/null)"
###
text="## mémoire \n\n"
f_display "var_temp" "cmd" "free -h"
f_display "memoire" "cmd" "free -h"
f_display "swappiness" "cmd" "cat /proc/sys/vm/swappiness"
printf "$text\n" >> "$fileOutput"
unset text
@ -1241,10 +1243,10 @@ fi_mem(){ # 08/11/2017
fi_nm(){ # 13/11/2017
[ "$(f__cmd_exist nmcli)" ] || return 0
local nm_etat nm_conf nm_wifis nm_connected text
nm_etat=$(f_grep_file "/var/lib/NetworkManager/NetworkManager.state" "nofile")
nm_conf=$(f_grep_file "/etc/NetworkManager/NetworkManager.conf" "nofile")
nm_wifis=$(nmcli -f SSID,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY device wifi list | head -n15)
nm_connected=$(LC_ALL=C nmcli -f SSID,ACTIVE,IN-USE device wifi list | gawk '/yes[[:space:]]+\*/ {print $1}')
nm_etat=$( f_grep_file "/var/lib/NetworkManager/NetworkManager.state" "nofile" )
nm_conf=$( f_grep_file "/etc/NetworkManager/NetworkManager.conf" "nofile" )
nm_wifis=$( nmcli -f SSID,BSSID,MODE,CHAN,FREQ,RATE,SIGNAL,BARS,SECURITY device wifi list | head -n15 )
nm_connected=$( LC_ALL=C nmcli -f SSID,ACTIVE,IN-USE device wifi list | gawk '/yes[[:space:]]+\*/ {print $1}' )
###
text="## NetworkManager \n\n"
f_display "nm_etat" "cmd" "grep -Ev '#|^$' /var/lib/NetworkManager/NetworkManager.state"
@ -1257,140 +1259,60 @@ fi_nm(){ # 13/11/2017
unset text
}
fi_reseau(){ # 13/11/2017
local slots cards ip_a iwconfig interfaces route resolv canal_wifi ifx text pluriel
local alert_wlx alert_ifconfig
# cardsManuel="$(lspci -nnk | grep -EiA 5 'network|ethernet')"
# cardsManuel="$(lspci -nnv | grep -EiA 15 'network|ethernet')"
# cardsManuel="lspci -nnv -s $( lspci | grep -Ei 'network|ethernet' | cut -d" " -f1 )" si devices plusieurs slots???
#lspci
slots="$(lspci | grep -Ei 'network|ethernet' | cut -d" " -f1)"
for ifx in $slots; do
cards+=$(lspci -s $ifx -nnv)$'\n'
done
[ "$cards" ] && cards=${cards::-1} # suppression dernier $'\n'
[ $(f__wcv -l "$cards") -eq 0 ] && cards="lspci incompatible"
# ip a & route
ip_a="$(ip a | sed '/link\/ether/d; /valid_lft/d')" # filtre sur adr MAC & bail
# ip_a="$(sed '/inet6.*scope global/d; /inet6.*scope link/d' <<< $ip_a)" # filtre sur inet6 scope global & scope link (fe80::)
ip_a="$(sed '/inet6.*/d' <<< $ip_a)" # filtre sur inet6)
route="$(ip route show)"
# interfaces & resolv
interfaces="$(f_grep_file "/etc/network/interfaces*")"
interfaces="$(sed -E 's/wpa-psk [[:graph:]]+/wpa-psk <WPA key removed>/; s/:/: /' <<< $interfaces )"
resolv="$(f_grep_file "/etc/resolv.conf" nofile)"
# iwconfig
if [ $(f__cmd_exist iwconfig) ]; then #paquet wireless-tools requis
iwconfig="$(iwconfig 2>&1 | grep -v 'no wireless extensions' | grep -v '^[[:space:]]*$')"
fi
# iwlist
if [ $(f__cmd_exist iwlist) ]; then # canal wifi utilisé; /sbin, paquet wireless-tools requis
canal_wifi="$(iwlist chan 2>&1 | grep 'Current Frequency' | grep -Eio 'channel [0-9]+')"
fi
# network manager
netmgrpaths=("/usr/sbin/NetworkManager" "/usr/sbin/wicd" "/usr/sbin/connmand") # thanks wireless-info
netmgrnames=("NetworkManager" "Wicd" "ConnMan")
for ifx in "${!netmgrpaths[@]}"; do
[ -e "${netmgrpaths[$ifx]}" ] && netmgrinst+=${netmgrnames[$ifx]}
if [ "$(ps -ef | grep -c ${netmgrpaths[$ifx]})" -ge 2 ]; then
netmgrrun+="$(ps -ef | grep -o "${netmgrpaths[$ifx]}.*$" | head -n 1)"
fi
done
figet_ip
if grep -iq 'wlx' <<< "$fg_ifn"; then
alert_wlx="Une interface wifi est en erreur: $(grep -o 'wlx' <<< $fg_ifn) \n"
alert_wlx+="l'interface n'est pas reconnue et est donc mal nommée, "
alert_wlx+="éventuellement, changer le renommage: \n"
alert_wlx+="https://kyodev.frama.io/kyopages/trucs/interfaces-nommage-classique/"
fi
if [ $(f__cmd_exist ifconfig) ] ; then
alert_ifconfig="ifconfig [net-tools](https://github.com/giftnuss/net-tools) est un projet abandonné "
alert_ifconfig+="depuis des années. iproute2 (linuxfoundation) le remplace."
fi
[ "$fg_mod_net" ] || figet_mod_net
###
text="## réseau \n\n"
#lspci
f_display "cards" "cmd" "lspci -nnv | grep -EiA 15 'network|ethernet"
# ip locales avec type
[ $(f__wcv "-l" "$fg_ip_tp") -gt 1 ] && pluriel="s" || unset pluriel
f_display "fg_ip_tp" "var" "" "IP locale"$pluriel
f_dspl_alert "alert_wlx" "alert"
text+="* les adresses Mac peut être affichées avec "'`./getInfo --mac` ou `getInfo --mac`'" (script installé) \n"
text+="* l'IP publique peut être connue avec: "'`./getInfo --ip` ou `getInfo --ip` (script installé) \n\n'
# gateways
[ $(f__wcv "-l" "$fg_gws") -gt 1 ] && pluriel="s" || unset pluriel
f_display "fg_gws" "var" "" "Passerelle"$pluriel
# interface prioritaire
if [ $(wc -w <<< $fg_ifn) -gt 1 ]; then
f_display "fg_ifn_prior" "var" "" "interface de sortie"
fi
# ip a & route & interface & resolv
f_display "ip_a" "cmd" "ip address" "sans ipV6 et sans adresses MAC"
f_display "route" "cmd" "ip route show"
f_display "interfaces" "cmd" "grep -EHrsv '#|^$' /etc/network/interfaces*"
f_display "resolv" "cmd" "cat /etc/resolv.conf" "serveurs de noms DNS utilisés"
# iwconfig & iwlist
f_display "iwconfig" "cmd" "iwconfig" "état carte wifi"
if [ "$canal_wifi" ]; then
f_display "canal_wifi" "cmd" "iwlist chan | grep 'Current Frequency' | grep -Eio 'channel [0-9]+'" \
"canal wifi utilisé"
text+="* la configuration ssid utilisée peut être connue (si NetworkManager utilisé) avec \n"
text+="\`./getInfo --ssid\` ou \`getInfo --ssid\` (script installé) \n\n"
fi
# network manager
if [ "$netmgrinst" ]; then
text+="### gestionnaire de réseau \n\n"
if [ "$netmgrinst" ]; then
[ $(wc -w <<< $netmgrinst) -gt 1 ] && pluriel="s" || unset pluriel
text+="installé"$pluriel": **$netmgrinst** \n"
else
[ $(wc -w <<< $netmgrnames[@]) -gt 1 ] && pluriel="s" || unset pluriel
text+="non trouvé"$pluriel" parmi: ${netmgrnames[@]} \n"
fi
text+="en fonctionnement: "
[ "$netmgrrun" ] && text+="**$netmgrrun** \n\n" || text+="aucun \n\n"
fi
# modules réseau
text+="### modules réseau \n\n"
f_display "fg_mod_net" "var" "liste non garantie complète"
[ "$fg_mod_net" ] || text+="**Modules chargés non reconnus**"
f_dspl_alert "alert_ifconfig" "info"
printf "$text\n" >> "$fileOutput"
unset text
}
# recherche gestion de paquets, assigne $fg_pkg_mgr (raccourci:Titre)
fi_packager(){ #v1 13/11/2017
fi_serial(){ # 06/11/2017
local text file="/tmp/$$-$RANDOM-fi_serial" chassis_serial
[ "$fg_nb_disk" ] || figet_disk
[ "$fg_nb_batt" ] || figet_batt
f__sudo "cat /sys/class/dmi/id/chassis_serial 2>/dev/null > $file ; \
chown $user_: $file"
chassis_serial="$(cat $file 2>/dev/null)"
rm "$file"
###
text="$BOLD\n N° SÉRIE \n\n$STD"
[ "$" ] && text+="$GREEN * Disques: \n"
text+="$BLUE$fg_disk_serial \n\n$STD"
[ "$" ] && text+="$GREEN * Batteries \n"
text+="$BLUE$fg_batt_serial \n\n$STD"
if [ "$chassis_serial" ]; then
[ "$" ] && text+="$GREEN * Chassis \n"
text+="$BLUE$chassis_serial \n\n$STD"
if type -p dpkg &>/dev/null ; then # apt/dpkg: debian, buntu apt/dpkg
fg_pkg_mgr="apt:Apt/dpkg"
elif type -p pacman &>/dev/null ; then # pacman: ArchLinux, Chakra Linux, Manjaro, KaOS, Parbola, Antergos, Apricity
fg_pkg_mgr="pacman:Pacman"
elif type -p pacman-g2 &>/dev/null ; then # pacman-g2: Frugalware
fg_pkg_mgr="pacman-g2:Pacman-g2"
elif type -p installpkg &>/dev/null || type -p slackpkg &>/dev/null ; then # Slackware, slackpkg gestion automatique paquets
fg_pkg_mgr="slackware:Slackware"
elif type -p emerge &>/dev/null ; then # portage: Gentoo
fg_pkg_mgr="portage:Portage/emerge"
elif type -p dnf &>/dev/null || type -p yum &>/dev/null ; then # dnf/rpm: Fedora, RedHat (rpm)
fg_pkg_mgr="dnf:Dnf/rpm"
elif type -p zypper &>/dev/null ; then # zypper/rpm: Suse, openSuse
fg_pkg_mgr="zypper:Zypper/rpm"
fi
[ "$fg_pkg_mgr" ] && return # fin passe 1, managers les plus importants
if type -p alps &>/dev/null ; then # AryaLinux
fg_pkg_mgr="x:alps"
elif type -p eopkg &>/dev/null ; then # Solus Linux
fg_pkg_mgr="x:eopkg"
elif type -p guix &>/dev/null ; then # GNU Guix
fg_pkg_mgr="x:Guix"
elif type -p lvu &>/dev/null ; then # Lunar Linux
fg_pkg_mgr="x:lvu"
elif type -p nix-env &>/dev/null ; then # Nix: NixOs
fg_pkg_mgr="x:Nix"
elif type -p opkg &>/dev/null ; then # opkg fork ipkg, ipkg (abandonné) sauf sur Syno?
fg_pkg_mgr="x:opkg"
elif type -p sorcery &>/dev/null ; then # SourceMage
fg_pkg_mgr="x:Sorcery"
elif type -p tazpkg &>/dev/null ; then # SliTaz
fg_pkg_mgr="x:tazpkg"
elif type -p tce-status &>/dev/null ; then # TinyCoreLinux
fg_pkg_mgr="x:TinyCoreExtensions"
elif type -p xbps-query &>/dev/null ; then # VoidLinux
fg_pkg_mgr="x:VoidLinux"
else
fg_pkg_mgr="y:Inconnue"
fi
echo -e "$text"
unset text
}
# aiguillage selon les gestionnaires de paquets
fi_pkg__ctl(){ #v1 13/11/2017
fi_pkg__ctl(){ #v1 16/11/2017
local alert_pkg_todo="ce gestionnaire de paquets n'est pas maîtrisé par manque d'expertise \n"
alert_pkg_todo+="vous êtes donc bienvenus à contribuer dans ce domaine: \n"
alert_pkg_todo+="https://framagit.org/kyodev/kyopages/blob/master/scripts/CONTRIB.md#getinfo \n\n"
alert_pkg_todo+="merci de tester attentivement pour surveiller les spécificités éventuelles de votre "
alert_pkg_todo+="distibution"
[ "$fg_pkg_mgr" ] || figet_packager
[ "$fg_pkg_mgr" ] || fi_packager
###
if [[ ${fg_pkg_mgr%:*} == "apt" ]]; then # debian
fi_pkg_apt
unset alert_pkg_todo # modèle, alert_pkg_todo pas implanté dans fi_pkg_apt
@ -1408,15 +1330,16 @@ fi_pkg__ctl(){ #v1 13/11/2017
fi_pkg_zypper
elif [[ ${fg_pkg_mgr%:*} == "x" || ${fg_pkg_mgr%:*} == "y" ]]; then # suppression à la fin de fg_pkg_mgr, champs 2 ifs ':'
fi_pkg_x # gestion de paquets peu connue ou inconnue
# elif [[ ${fg_pkg_mgr%:*} == "y" ]]; then # suppression à la fin de fg_pkg_mgr, champs 2 ifs ':'
# fi_pkg_x # gestion de paquets inconnue
fi
}
fi_pkg_apt(){ #v2 14/11/2017
local sources dateMaj nb_packages upgrade upgrade_qte remove remove_qte non_ii_qte deborphan text pluriel
local alert_non_list ifile alert_httpredir alert_upgrade alert_full_upgrade alert_upgrade_titre
local alert_remove alert_remove_titre alert_non_ii alert_non_ii_comment alert_non_ii_info alert_deborphan
fi_pkg_apt(){ #v3 16/11/2017
local sources ifile dateMaj nb_packages stock_upgd upgradable_qte upgrade upgrade_comment
local notUpgraded notUpgraded_comment toRemove_qte toRemove toRemove_comment
local non_ii non_ii_qte non_ii_comment etat ligne stock_etat deborphan deborphan_qte deborphan_comment
local holded holded_qte holded_comment text pluriel
local alert_non_list alert_httpredir alert_upgrade alert_full_upgrade alert_remove alert_non_ii
local alert_deborphan
# sources & divers
sources=$(f_grep_file "/etc/apt/sources.list /etc/apt/sources.list.d/*.list" 8)
if [ $( ls -1 /etc/apt/sources.list.d/ | grep -cEv '\.list$' ) -gt 0 ]; then
@ -1430,91 +1353,132 @@ fi_pkg_apt(){ #v2 14/11/2017
alert_httpredir="ces urls sont obsolètes, préférer http://deb.debian.org/ ou un miroir local: \n\n"
alert_httpredir+="$(grep 'httpredir' <<< "$sources")"
fi
printf "⌛"
# upgradable
upgrade=$(LC_ALL=C apt-get upgrade --simulate | grep -E 'Inst | newly installed' )
upgrade=$(sort <<< $upgrade)
upgrade_qte=($(gawk '/ newly installed/{print $1" "$10}' <<< $upgrade))
if [ "${upgrade_qte[0]}" -gt 0 ]; then # upgrade
[ "${upgrade_qte[0]}" -gt 1 ] && pluriel="s" || unset pluriel
alert_upgrade_titre="${upgrade_qte[0]} paquet"$pluriel" à mettre à jour"
alert_upgrade=$(gawk '/Inst /{
sub(/\(/,"",$4); sub(/\/.*/,"",$5); sub(/\[/,"",$3); sub(/\]/,"",$3);
printf "%-25s source: %-25s %-20s ⇉ %-20s\n",$2,$5,$3,$4 }' <<< $upgrade)
alert_upgrade+="\n\n pour corriger: apt upgrade"
printf "◇"
stock_upgd=$( LC_ALL=C apt-get upgrade --simulate )
# $1 upgraded, $6 to remove and $10 not upgraded
upgradable_qte=($(gawk '/ newly installed/{print $1" "$6" "$10}' <<< $stock_upgd)) # tableau
# => upgradable_qte [0]=upgraded, [1]=notUpgraded
[ "${upgradable_qte[0]}" -gt 1 ] && pluriel="s" || unset pluriel
upgrade_comment="${upgradable_qte[0]} paquet"$pluriel" à mettre à jour"
[ "${upgradable_qte[0]}" -eq 0 ] && upgrade_comment=${upgrade_comment/0 }
if [ "${upgradable_qte[0]}" -gt 0 ]; then # upgraded
# upgrade
upgrade=$( grep '^Inst' <<< "$stock_upgd" )
upgrade=$( sort <<< $upgrade )
upgrade=$( gawk '/Inst /{
sub(/\(/,"",$4); sub(/\/.*/,"",$5); sub(/\[/,"",$3); sub(/\]/,"",$3);
printf "%-25s source: %-25s %-20s ⇉ %-20s\n",$2,$5,$3,$4 }' <<< $upgrade )
alert_upgrade="les paquets peuvent être mis à jour avec avec: \n"
alert_upgrade+='`apt upgrade` '
fi
if [ "${upgrade_qte[1]}" -gt 0 ]; then # dist-upgrade #10 upgraded, 0 newly installed, 0 to remove and 0 not upgraded"
[ "${upgrade_qte[1]}" -gt 1 ] && pluriel="s" || unset pluriel
alert_full_upgrade="${upgrade_qte[1]} paquet"$pluriel" à mettre à jour avec \`apt full-upgrade\` (maj profonde)"
# full-upgrade
if [ "${upgradable_qte[1]}" -gt 0 ]; then
notUpgraded=${stock_upgd%The following packages wil be upgraded*} # suppression fin
notUpgraded=${notUpgraded#*The following packages have been kept back:} # suppression début
notUpgraded=$( sed '/newly/d' <<< "$notUpgraded" ) # suppression ligne état
notUpgraded=$( sort <<< $notUpgraded )
notUpgraded=$( tr '\n' ' ' <<< $notUpgraded ) # remplacement newline
notUpgraded=${notUpgraded// / } # suppression espace double
[ "${upgradable_qte[1]}" -gt 1 ] && pluriel="s" || unset pluriel
notUpgraded_comment="${upgradable_qte[1]} paquet"$pluriel" nécessitant une mise à jour profonde)"
alert_full_upgrade="les paquets peuvent être mis à jour avec avec: \n"
alert_full_upgrade+='`apt full-upgrade` '
fi
printf "⌛"
printf ""
# autoremove
remove=$(LC_ALL=C apt-get autoremove --simulate | grep -E 'Remv | newly installed' )
remove=$(sort <<< $remove)
remove_qte=$(gawk '/ newly installed/{print $6}' <<< $remove)
if [ "$remove_qte" -gt 0 ]; then
[ "$remove_qte" -gt 1 ] && pluriel="s" || unset pluriel
alert_remove_titre="$remove_qte paquet"$pluriel" non nécessaire"$pluriel
alert_remove="$(sed -En 's/Remv (.*)\[[0-9.-]*\]/\1/p' <<< $remove | tr '\n' ' ')"
alert_remove+="\n\n pour corriger: apt autoremove --purge"
alert_remove+="\n\nvérifier que la liste ne contient pas des applications devenues importantes \n"
alert_remove+="au besoin, les marquer comme installés manuellement avec apt-mark \n"
toRemove=$( LC_ALL=C apt-get autoremove --simulate | grep -E 'Remv | newly installed' )
toRemove=$( sort <<< $toRemove )
toRemove_qte=$( gawk '/ newly installed/{printf $6}' <<< $toRemove )
toRemove=$( sed '/newly/d' <<< "$toRemove" ) # suppression ligne état
[ "$toRemove_qte" -gt 1 ] && pluriel="s" || unset pluriel
toRemove_comment="$toRemove_qte paquet"$pluriel" non nécessaire"$pluriel
[ "$toRemove_qte" -eq 0 ] && toRemove_comment=${toRemove_comment/0 }
if [ "$toRemove_qte" -gt 0 ]; then
toRemove=$( sed -E '/^Remv/!d; s/\[.*\]//g; s/Remv //' <<< $toRemove | tr '\n' ' ' )
toRemove=${toRemove// / }
alert_remove="les paquets peuvent être supprimés avec: \n"
alert_remove+='`apt autoremove --purge` \n\n'
alert_remove+="vérifier que la liste ne contient pas des applications devenues importantes \n"
alert_remove+="au besoin, les marquer comme installées manuellement avec apt-mark manual <paquet>\n"
alert_remove+="ou les installer manuellement avec apt install <paquet>"
fi
printf "⌛"
printf ""
# paquet non ^ii
alert_non_ii="$(LC_ALL=C dpkg -l | gawk 'FNR>5 && ! /^i/ {
printf "%-3s %-20s %-12s",$1,$2,$3; $1=$2=$3=$4=""; printf "%s \n",$0}')"
non_ii_qte=$( f__wcv -l "$alert_non_ii" )
non_ii=$( LC_ALL=C dpkg -l | gawk 'FNR>5 && ! /^i/ {
printf "%-3s %-20s %-12s",$1,$2,$3; $1=$2=$3=$4=""; printf "%s \n",$0}' )
non_ii_qte=$( f__wcv -l "$non_ii" )
[ "$non_ii_qte" -gt 1 ] && pluriel="s" || unset pluriel
non_ii_comment="$non_ii_qte paquet"$pluriel" dans un état non standard"
[ "$non_ii_qte" -eq 0 ] && non_ii_comment=${non_ii_comment/0 }
if [ "$non_ii_qte" -gt 0 ]; then
[ "$non_ii_qte" -gt 1 ] && pluriel="s" || unset pluriel
alert_non_ii_comment="$non_ii_qte paquet"$pluriel" dans un état non installé"
[[ ${alert_non_ii,,} =~ ^. ]] && alert_non_ii+="\n\n ‣ État souhaité "$'\n'
[[ ${alert_non_ii,,} =~ ^h ]] && alert_non_ii+=" h.. hold (à garder) "$'\n'
[[ ${alert_non_ii,,} =~ ^i ]] && alert_non_ii+=" i.. install (à installer) "$'\n'
[[ ${alert_non_ii,,} =~ ^p ]] && alert_non_ii+=" p.. purge (à purger) "$'\n'
[[ ${alert_non_ii,,} =~ ^r ]] && alert_non_ii+=" r.. remove (à supprimer) "$'\n'
[[ ${alert_non_ii,,} =~ ^u ]] && alert_non_ii+=" u.. unknown (inconnu) "$'\n'
[[ ${alert_non_ii,,} =~ ^.. ]] && alert_non_ii+=" ‣ État du paquet "$'\n'
[[ ${alert_non_ii,,} =~ ^.c ]] && alert_non_ii+=" .c. config-files (fichiers de configuration seuls) "$'\n'
[[ ${alert_non_ii,,} =~ ^.f ]] && alert_non_ii+=" .f. halF-configured-configured (semi-configuré) "$'\n'
[[ ${alert_non_ii,,} =~ ^.h ]] && alert_non_ii+=" .h. Half-installed (semi-installé) "$'\n'
[[ ${alert_non_ii,,} =~ ^.i ]] && alert_non_ii+=" .i. installed (installé) "$'\n'
[[ ${alert_non_ii,,} =~ ^.n ]] && alert_non_ii+=" .n. not-installed (non installé) "$'\n'
[[ ${alert_non_ii,,} =~ ^.t ]] && alert_non_ii+=" .t. triggers-pending (en instance déclencheurs) "$'\n'
[[ ${alert_non_ii,,} =~ ^.u ]] && alert_non_ii+=" .u. unpacked (décompressé seulement) "$'\n'
[[ ${alert_non_ii,,} =~ ^.w ]] && alert_non_ii+=" .w. triggers-awaiting (attente déclencheurs) "$'\n'
[[ ${alert_non_ii,,} =~ ^..r ]] && alert_non_ii+=" ‣ Drapeaux d'erreur**\n ..r (réinstallation requise) "$'\n'
alert_non_ii=${alert_non_ii::-1} # suppression dernier $'\n'
if grep -iq '^rc ' <<< "$alert_non_ii"; then
alert_non_ii_info="les paquets dans un état 'rc' (fichiers de configuration restants) "
alert_non_ii_info+="peuvent être purgés avec : \n"
alert_non_ii_info+="dpkg --purge \$(dpkg -l | awk '/^rc/{print \$2}')"
fi
# extraction différents états constatés
while read etat ligne ; do
stock_etat+="$etat"$'\n'
done <<< "$non_ii"
stock_etat=$( sort -u <<< "$stock_etat" ) # tri et dédoublonnage
non_ii+="\n\n ‣ État souhaité / État du paquet / Drapeaux d'erreur\n"
for ligne in $stock_etat; do
[[ ${ligne,,} =~ ^h ]] && non_ii+=" h: hold (à garder) "
[[ ${ligne,,} =~ ^i ]] && non_ii+=" i: install (à installer) "
[[ ${ligne,,} =~ ^p ]] && non_ii+=" p: purge (à purger) "
[[ ${ligne,,} =~ ^r ]] && non_ii+=" r: remove (à supprimer) "
[[ ${ligne,,} =~ ^u ]] && non_ii+=" u: unknown (inconnu) "
[[ ${ligne,,} =~ ^.c ]] && non_ii+=" c: config-files (fichiers de configuration) "
[[ ${ligne,,} =~ ^.f ]] && non_ii+=" f: halF-configured-configured (semi-configuré) "
[[ ${ligne,,} =~ ^.h ]] && non_ii+=" h: Half-installed (semi-installé) "
[[ ${ligne,,} =~ ^.i ]] && non_ii+=" i: installed (installé) "
[[ ${ligne,,} =~ ^.n ]] && non_ii+=" n: not-installed (non installé) "
[[ ${ligne,,} =~ ^.t ]] && non_ii+=" t: triggers-pending (en instance déclencheurs) "
[[ ${ligne,,} =~ ^.u ]] && non_ii+=" u: unpacked (décompressé seulement) "
[[ ${ligne,,} =~ ^.w ]] && non_ii+=" w: triggers-awaiting (attente déclencheurs) "
[[ ${ligne,,} =~ ^..r ]] && non_ii+=" r: (réinstallation requise) " || non_ii+=" / ."
non_ii+=$'\n'
done
non_ii=${non_ii::-1} # suppression $'\n'
alert_non_ii="les paquets dans un état 'rc' (fichiers de configuration restants) "
alert_non_ii+="peuvent être purgés avec: \n"
alert_non_ii+="\`dpkg --purge \$(dpkg -l | awk '/^rc/{print \$2}'\`) \n\n"
alert_non_ii+="les paquets dans un autre état peuvent éventuellement être purgés avec précaution, "
alert_non_ii+="selon l\'état"
fi
if [ $( f__cmd_exist deborphan ) ]; then
if [ $( deborphan ) ]; then
deborphan=$( deborphan -P )
[ $( f__wcv "-l" "$deborphan" ) -gt 1 ] && pluriel="s" || unset pluriel
alert_deborphan="bibliothèque"$pluriel" orpheline"$pluriel", suppression possible: \n"
alert_deborphan+=" apt remove \$(deborphan) \n"
if [ "$( f__cmd_exist deborphan )" ]; then
deborphan=$( deborphan -P )
deborphan_qte=$( f__wcv "-l" "$deborphan" )
[ "$deborphan_qte" -gt 1 ] && pluriel="s" || unset pluriel
deborphan_comment="$deborphan_qte bibliothèque"$pluriel" orpheline"$pluriel
[ "$deborphan_qte" -eq 0 ] && deborphan_comment=${deborphan_comment/0 }
if [ "$deborphan_qte" -gt 0 ]; then
alert_deborphan="bibliothèque"$pluriel" orpheline"$pluriel", suppression possible: \n"
alert_deborphan+='`apt remove \$(deborphan)` \n'
alert_deborphan+="recherche légère, mais vérifier avant de valider la suppression"
fi
fi
###
holded=$( apt-mark showhold )
holded_qte=$( f__wcv "-l" "$holded" )
[ "$holded_qte" -gt 1 ] && pluriel="s" || unset pluriel
holded_comment="$holded_qte paquet"$pluriel" épinglé"$pluriel
###
text="## gestion de paquets **${fg_pkg_mgr#*:}** \n\n"
f_display "sources" "cmd" "grep -Ersv '^#|^$' /etc/apt/sources.list /etc/apt/sources.list.d/*.list"
f_dspl_alert "alert_non_list" "info"
text+="* nombre de paquets installés: **$nb_packages** \n"
text+="* dernière mise à jour apt: **$dateMaj** \n\n"
text+="* dernière mise à jour apt: **$dateMaj** \n"
[ "$holded" ] || text+="* pas de paquets épinglés (hold) \n"
text+="\n"
f_display "sources" "cmd" "grep -Ersv '^#|^$' /etc/apt/sources.list /etc/apt/sources.list.d/*.list" \
"dépôts"
f_dspl_alert "alert_non_list" "info"
f_dspl_alert "alert_httpredir" "info"
f_display "alert_upgrade" "cmd" "apt list --upgradable" "$alert_upgrade_titre"
[ "$alert_full_upgrade" ] && text+="* $alert_full_upgrade \n\n"
f_display "alert_remove" "cmd" "apt autoremove --simulate" "$alert_remove_titre"
f_display "alert_non_ii" "cmd" "dpkg -l | gawk '/^rc/{print \$2}" "$alert_non_ii_comment"
f_dspl_alert "alert_non_ii_info" "info"
f_display "deborphan" "cmd" "deborphan -P" "bibliothèques orphelines"
f_dspl_alert "alert_deborphan" "info"
f_display "upgrade" "cmd:vide" "apt list --upgradable" "$upgrade_comment"
f_dspl_alert "alert_upgrade" "info"
f_display "notUpgraded" "cmd" "apt list --upgradable" "$notUpgraded_comment"
f_dspl_alert "alert_full_upgrade" "info"
f_display "toRemove" "cmd:vide" "apt autoremove --simulate" "$toRemove_comment"
f_dspl_alert "alert_remove" "info"
f_display "non_ii" "cmd:vide" "dpkg -l | gawk '/^rc/{print \$2}" "$non_ii_comment"
f_dspl_alert "alert_non_ii" "info"
[ "$( f__cmd_exist deborphan )" ] && f_display "deborphan" "cmd:vide" "deborphan -P" \
"$deborphan_comment"
[ "$( f__cmd_exist deborphan )" ] && f_dspl_alert "alert_deborphan" "info"
f_display "holded" "cmd:vide" "apt-mark showhold" "$holded_comment"
printf "$text\n" >> "$fileOutput"
unset text
}
@ -1628,49 +1592,127 @@ fi_pkg_x(){ # 13/11/2017
f_display "alert_pkg_todo" "var" "" "aide requise"
}
# recherche gestion de paquets, assigne $fg_pkg_mgr (raccourci:Titre)
figet_packager(){ #v1 13/11/2017
if type -p dpkg &>/dev/null ; then # apt/dpkg: debian, buntu apt/dpkg
fg_pkg_mgr="apt:Apt/dpkg"
elif type -p pacman &>/dev/null ; then # pacman: ArchLinux, Chakra Linux, Manjaro, KaOS, Parbola, Antergos, Apricity
fg_pkg_mgr="pacman:Pacman"
elif type -p pacman-g2 &>/dev/null ; then # pacman-g2: Frugalware
fg_pkg_mgr="pacman-g2:Pacman-g2"
elif type -p installpkg &>/dev/null || type -p slackpkg &>/dev/null ; then # Slackware, slackpkg gestion automatique paquets
fg_pkg_mgr="slackware:Slackware"
elif type -p emerge &>/dev/null ; then # portage: Gentoo
fg_pkg_mgr="portage:Portage/emerge"
elif type -p dnf &>/dev/null || type -p yum &>/dev/null ; then # dnf/rpm: Fedora, RedHat (rpm)
fg_pkg_mgr="dnf:Dnf/rpm"
elif type -p zypper &>/dev/null ; then # zypper/rpm: Suse, openSuse
fg_pkg_mgr="zypper:Zypper/rpm"
fi_reseau(){ # 13/11/2017
local slots cards ip_a iwconfig interfaces route resolv canal_wifi ifx text pluriel
local alert_wlx alert_ifconfig
# cardsManuel="$(lspci -nnk | grep -EiA 5 'network|ethernet')"
# cardsManuel="$(lspci -nnv | grep -EiA 15 'network|ethernet')"
# cardsManuel="lspci -nnv -s $( lspci | grep -Ei 'network|ethernet' | cut -d" " -f1 )" si devices plusieurs slots???
#lspci
slots="$(lspci | grep -Ei 'network|ethernet' | cut -d" " -f1)"
for ifx in $slots; do
cards+=$(lspci -s $ifx -nnv)$'\n'
done
[ "$cards" ] && cards=${cards::-1} # suppression dernier $'\n'
[ $(f__wcv -l "$cards") -eq 0 ] && cards="lspci incompatible"
# ip a & route
ip_a="$(ip a | sed '/link\/ether/d; /valid_lft/d')" # filtre sur adr MAC & bail
# ip_a="$(sed '/inet6.*scope global/d; /inet6.*scope link/d' <<< $ip_a)" # filtre sur inet6 scope global & scope link (fe80::)
ip_a="$(sed '/inet6.*/d' <<< $ip_a)" # filtre sur inet6)
route="$(ip route show)"
# interfaces & resolv
interfaces="$(f_grep_file "/etc/network/interfaces*")"
interfaces="$(sed -E 's/wpa-psk [[:graph:]]+/wpa-psk <WPA key removed>/; s/:/: /' <<< $interfaces )"
resolv="$(f_grep_file "/etc/resolv.conf" nofile)"
# iwconfig
if [ $(f__cmd_exist iwconfig) ]; then #paquet wireless-tools requis
iwconfig="$(iwconfig 2>&1 | grep -v 'no wireless extensions' | grep -v '^[[:space:]]*$')"
fi
[ "$fg_pkg_mgr" ] && return # fin passe 1, managers les plus importants
if type -p alps &>/dev/null ; then # AryaLinux
fg_pkg_mgr="x:alps"
elif type -p eopkg &>/dev/null ; then # Solus Linux
fg_pkg_mgr="x:eopkg"
elif type -p guix &>/dev/null ; then # GNU Guix
fg_pkg_mgr="x:Guix"
elif type -p lvu &>/dev/null ; then # Lunar Linux
fg_pkg_mgr="x:lvu"
elif type -p nix-env &>/dev/null ; then # Nix: NixOs
fg_pkg_mgr="x:Nix"
elif type -p opkg &>/dev/null ; then # opkg fork ipkg, ipkg (abandonné) sauf sur Syno?
fg_pkg_mgr="x:opkg"
elif type -p sorcery &>/dev/null ; then # SourceMage
fg_pkg_mgr="x:Sorcery"
elif type -p tazpkg &>/dev/null ; then # SliTaz
fg_pkg_mgr="x:tazpkg"
elif type -p tce-status &>/dev/null ; then # TinyCoreLinux
fg_pkg_mgr="x:TinyCoreExtensions"
elif type -p xbps-query &>/dev/null ; then # VoidLinux
fg_pkg_mgr="x:VoidLinux"
else
fg_pkg_mgr="y:Inconnue"
# iwlist
if [ $(f__cmd_exist iwlist) ]; then # canal wifi utilisé; /sbin, paquet wireless-tools requis
canal_wifi="$(iwlist chan 2>&1 | grep 'Current Frequency' | grep -Eio 'channel [0-9]+')"
fi
# network manager
netmgrpaths=("/usr/sbin/NetworkManager" "/usr/sbin/wicd" "/usr/sbin/connmand") # thanks wireless-info
netmgrnames=("NetworkManager" "Wicd" "ConnMan")
for ifx in "${!netmgrpaths[@]}"; do
[ -e "${netmgrpaths[$ifx]}" ] && netmgrinst+=${netmgrnames[$ifx]}
if [ "$(ps -ef | grep -c ${netmgrpaths[$ifx]})" -ge 2 ]; then
netmgrrun+="$(ps -ef | grep -o "${netmgrpaths[$ifx]}.*$" | head -n 1)"
fi
done
figet_ip
if grep -iq 'wlx' <<< "$fg_ifn"; then
alert_wlx="Une interface wifi est en erreur: $(grep -o 'wlx' <<< $fg_ifn) \n"
alert_wlx+="l'interface n'est pas reconnue et est donc mal nommée, "
alert_wlx+="éventuellement, changer le renommage: \n"
alert_wlx+="https://kyodev.frama.io/kyopages/trucs/interfaces-nommage-classique/"
fi
if [ $(f__cmd_exist ifconfig) ] ; then
alert_ifconfig="ifconfig [net-tools](https://github.com/giftnuss/net-tools) est un projet abandonné "
alert_ifconfig+="depuis des années. iproute2 (linuxfoundation) le remplace."
fi
[ "$fg_mod_net" ] || figet_mod_net
###
text="## réseau \n\n"
#lspci
f_display "cards" "cmd" "lspci -nnv | grep -EiA 15 'network|ethernet"
# ip locales avec type
[ $(f__wcv "-l" "$fg_ip_tp") -gt 1 ] && pluriel="s" || unset pluriel
f_display "fg_ip_tp" "var" "" "IP locale"$pluriel
f_dspl_alert "alert_wlx" "alert"
text+="* les adresses Mac peut être affichées avec "'`./getInfo --mac` ou `getInfo --mac`'" (script installé) \n"
text+="* l'IP publique peut être connue avec: "'`./getInfo --ip` ou `getInfo --ip` (script installé) \n\n'
# gateways
[ $(f__wcv "-l" "$fg_gws") -gt 1 ] && pluriel="s" || unset pluriel
f_display "fg_gws" "var" "" "Passerelle"$pluriel
# interface prioritaire
if [ $(wc -w <<< $fg_ifn) -gt 1 ]; then
f_display "fg_ifn_prior" "var" "" "interface de sortie"
fi
# ip a & route & interface & resolv
f_display "ip_a" "cmd" "ip address" "sans ipV6 et sans adresses MAC"
f_display "route" "cmd" "ip route show"
f_display "interfaces" "cmd" "grep -EHrsv '#|^$' /etc/network/interfaces*"
f_display "resolv" "cmd" "cat /etc/resolv.conf" "serveurs de noms DNS utilisés"
# iwconfig & iwlist
f_display "iwconfig" "cmd" "iwconfig" "état carte wifi"
if [ "$canal_wifi" ]; then
f_display "canal_wifi" "cmd" "iwlist chan | grep 'Current Frequency' | grep -Eio 'channel [0-9]+'" \
"canal wifi utilisé"
text+="* la configuration ssid utilisée peut être connue (si NetworkManager utilisé) avec \n"
text+="\`./getInfo --ssid\` ou \`getInfo --ssid\` (script installé) \n\n"
fi
# network manager
if [ "$netmgrinst" ]; then
text+="### gestionnaire de réseau \n\n"
if [ "$netmgrinst" ]; then
[ $(wc -w <<< $netmgrinst) -gt 1 ] && pluriel="s" || unset pluriel
text+="installé"$pluriel": **$netmgrinst** \n"
else
[ $(wc -w <<< $netmgrnames[@]) -gt 1 ] && pluriel="s" || unset pluriel
text+="non trouvé"$pluriel" parmi: ${netmgrnames[@]} \n"
fi
text+="en fonctionnement: "
[ "$netmgrrun" ] && text+="**$netmgrrun** \n\n" || text+="aucun \n\n"
fi
# modules réseau
text+="### modules réseau \n\n"
f_display "fg_mod_net" "var" "liste non garantie complète"
[ "$fg_mod_net" ] || text+="**Modules chargés non reconnus**"
f_dspl_alert "alert_ifconfig" "info"
printf "$text\n" >> "$fileOutput"
unset text
}
fi_serial(){ # 16/11/2017
local file="/tmp/$$-$RANDOM-fi_serial" chassis_serial text
[ "$fg_nb_disk" ] || figet_disk
[ "$fg_nb_batt" ] || figet_batt
f__sudo "cat /sys/class/dmi/id/chassis_serial 2>/dev/null > $file ; \
chown $user_: $file"
chassis_serial="$(cat $file 2>/dev/null)"
rm "$file"
###
text="$BOLD\n N° Série \n\n$STD"
[ "$fg_disk_serial" ] && text+="$GREEN * Disques: \n"
[ "$fg_disk_serial" ] && text+="$BLUE$fg_disk_serial \n\n$STD"
[ "$fg_batt_serial" ] && text+="$GREEN * Batteries \n"
[ "$fg_batt_serial" ] && text+="$BLUE$fg_batt_serial \n\n$STD"
[ "$chassis_serial" ] && text+="$GREEN * Chassis \n"
[ "$chassis_serial" ] && text+="$BLUE$chassis_serial \n\n$STD"
echo -e "$text"
unset text
}
fi_ssid(){ # 09/11/2017
@ -1695,7 +1737,7 @@ fi_ssid(){ # 09/11/2017
unset text
}
fi_system_analyse(){ # 15/11/2017
fi_system_analyse(){ # 16/11/2017
[ "$(f__cmd_exist systemd)" ] || return 0 # pas systemd
local bootTime bootBlame bootCritic bootGraph srvcFail srvcFail_list isrvc text
local alert_srvcFail
@ -1732,6 +1774,7 @@ fi_system_analyse(){ # 15/11/2017
fi
###
text="## analyse boot systemd \n\n"
[ "$srvcFail" ] || text+="* pas de service en erreur \n\n"
f_display "bootTime" "cmd" "systemd-analyze time" "durée du précédent boot avant interface graphique"
f_display "srvcFail" "cmd" "systemctl --state=active,failed | grep -E 'error|not-found|failed'" "services en erreur"
f_dspl_alert "alert_srvcFail" "alert"
@ -1743,18 +1786,18 @@ fi_system_analyse(){ # 15/11/2017
unset text
}
fi_systeme(){ # 15/11/2017
fi_systeme(){ # 16/11/2017
local mbr uname bootImage initDaemon xorg shells lastboot uptime charge pluriel text
local alimentation alim_total ish ifs_origin ligne date_install
local alert_SLiM alert_microcode microcode
local alimentation alim_total ish ifs_origin ligne date_install microcode
local alert_SLiM alert_microcode
[ -d /sys/firmware/efi ] && mbr="EFI" || mbr="Legacy (mbr)"
uname="$(uname -rmo)"
bootImage="$(gawk '/BOOT_IMAGE/ {print $1}' /proc/cmdline)"
bootImage="$(gawk '{print $1}{i=2; while (i <= NF-1) { print " ",$i; i++}}' /proc/cmdline)"
initDaemon="$(ps -p1 | gawk 'FNR==2 {print $4}')" #? ps -ax | gawk '$1==1' ou ps -p1 | gawk '$1==1'
[ "$initDaemon" == "systemd" ] && initDaemon=$( systemd --version)
[ "$initDaemon" == "systemd" ] && initDaemon=$( systemd --version )
initDaemon=${initDaemon%%[[:space:]]+*}
initDaemon=${initDaemon/systemd/systemd version }
initDaemon=${initDaemon/systemd/systemd version}
[ "$ENV_SSH" ] && xorg="n/a (ssh)" || xorg="$XDG_SESSION_TYPE"
if [ -z "$xorg" ]; then
[ "$(ps -ef | grep -c 'wayland')" -gt 1 ] && xorg="wayland" || xorg="indéterminé"
@ -1807,14 +1850,10 @@ fi_systeme(){ # 15/11/2017
alert_SLiM="SLiM est un projet abandonné et peu compatible avec systemd"
fi
f__requis "intel-microcode amd64-microcode" "debOnly"
#
# si $2=debOnly et si paquets manquants: return 1 et $debOnlyPackages ( $1=liste paquets )
# si $2=debOnly et si paquets présent: return 0 et $debOnlyPresents ( $1=liste paquets )
#$1 liste commande[>paquet] (ex: killall>psmisc)
if [[ "$debOnlyPackages" =~ $fg_vendor ]]; then
[ "$fg_vendor" == "amd" ] && microcode="amd64-microcode" || microcode="intel-microcode"
alert_microcode="microcodes $fg_vendor non installés (corrections bugs du processeur), "
alert_microcode+="les installer: \n apt install $microcode"
alert_microcode+="les installer: \n \`apt install $microcode\`"
fi
###
f__architecture || f__info "Architecture non supportée" "vous pouvez contacter $projet, $contact " \
@ -1858,6 +1897,7 @@ fi_systeme(){ # 15/11/2017
text+='``` \n\n'
f_dspl_alert "alert_SLiM" "info"
f_dspl_alert "alert_microcode" "info"
[ "$alert_microcode" ] || "* les microcodes sont installés"
printf "$text\n" >> "$fileOutput"
unset text
}
@ -2329,15 +2369,15 @@ figet_distrib(){ # 01/11/2017
}
# display manager, assigne $fg_dsp_mngr (liste) ou 'n/a', $fg_dsp_mngr_actif
figet_dm(){ #v1 11/11/2017
figet_dm(){ #v1 15/11/2017
local dm_list="cdm entranced gdm3 gdm qingy kdm ldm lightdm lxdm mdm nodm orthos sddm slim wdm xdm"
local idm ps_aux systemctl x11
fg_dsp_mngr=""
ps_aux=$(ps -auxf)
ps_aux=${ps_aux,,} # tout en minuscules
for idm in $dm_list; do
# if grep -iq "bin/$idm" <<< "$ps_aux"; then
if [ "${ps_aux/*"$idm"*/test}" == "test" ]; then # fun & speed? grepless (remplacement $idm et alentours, si idm présent, valeur test)
if grep -iq "bin/$idm$" <<< "$ps_aux"; then
# if [ "${ps_aux/*"$idm"*/test}" == "test" ]; then # pb: doublon gdm/gdm3 fun & speed? grepless (remplacement $idm et alentours, si idm présent, valeur test)
fg_dsp_mngr+="$idm "
fg_dsp_mngr_actif="$idm"
elif [[ -e /var/run/$idm".pid" || -e /var/run/$idm".pid" || -e /run/$idm || -e /run/$idm || -d /run/$idm/ || -d /var/run/$idm/ ]]; then
@ -2345,7 +2385,7 @@ figet_dm(){ #v1 11/11/2017
fg_dsp_mngr_actif="$idm"
fi
done
fg_dsp_mngr=${fg_dsp_mngr// } # supression espaces
fg_dsp_mngr=${fg_dsp_mngr% } # supression espace final
if [[ -z "$fg_dsp_mngr" && -e "/etc/X11/default-display-manager" ]]; then
x11=$(cat /etc/X11/default-display-manager)
fg_dsp_mngr=${x11##*/} # conservation dernier champs ifs '/'
@ -3062,31 +3102,32 @@ prg_2(){ # traitements principaux
f__info "des erreurs$YELLOW No protocol specified, Can't open display :0$BLUE peut indiquer un défaut de configuration système (Xorg, Wayland?)" \
"lancer le script en utilisateur pour avoir toutes les informations"
fi
printf " •"
if [[ "$1" == all || "$1" =~ s ]]; then #systeme, matériel -cs
echo -e "# ▷ Système \n\n" >> "$fileOutput"
for i in fi_systeme fi_cpu fi_mem fi_hw fi_batt fi_graph fi_disk fi_usb ; do
$i
printf "•"
$i
done
fi
echo -n " "
if [[ "$1" == all || "$1" =~ c ]]; then #configuration #debian, packages -cc
echo -e "# ▷ Configuration \n\n" >> "$fileOutput"
for i in fi_locale fi_vrms fi_pkg__ctl ; do
echo -n "•"
$i
printf "•"
done
fi
if [[ "$1" == all || "$1" =~ r ]]; then #reseau -cr
echo -e "# ▷ Réseau \n\n" >> "$fileOutput"
for i in fi_reseau fi_nm ; do
echo -n "•"
$i
printf "•"
done
fi
if [[ "$1" == all || "$1" =~ a ]]; then #analyse -ca
echo -e "# ▷ Analyse \n\n" >> "$fileOutput"
for i in fi_system_analyse fi_log_xorg fi_journal ; do
echo -n "•"
$i
done
fi
@ -3202,7 +3243,9 @@ if [[ "$options" =~ all|-d|-h|-c|-v ]]; then
urlNotice="https://kyodev.frama.io/kyopages/scripts/getInfo/"
fi
fi
ligneRapport="Rapport du $(date '+%d/%m/%Y %H:%M %z') ▎$0 $* ▎[$script $version]($urlNotice)"
spc5=$'\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0'
ligneRapport="Rapport du $(date '+%d/%m/%Y %H:%M %z')$spc5◇$spc5$0 $*$spc5◇$spc5[$script $version]($urlNotice)"
# traitement options menu catégories
for k in $options; do
@ -3216,7 +3259,7 @@ for j in $options; do
case $j in
-t | --test )
prg_1 "$*"
fi_system_analyse
fi_pkg_apt
exit ;; # test
-c* | all )
[ "$j" == "-c" ] && exec $0 "menu"

View File

@ -5,13 +5,22 @@
## 2.35.2 15/11/2017
## 2.36.0 16/11/2017
* nouveau: fi_pkg_apt, test paquets hold, révision affichage & non standard
* révision: fi_log_xorg, info options appliquées par défaut
* révision: fi_serial
* révision: fi_system_analyse, fi_systeme, présentation si aucune alerte
## 2.35.3 15/11/2017
* nouveau, révision : f_display, fi_system_analyse, affichage + services critiques, graphique services au chargement
* nouveau: fi_systeme, version systemd
* nouveau: fi_system_analyse, alerte services en erreur
* nouveau: fi_system_analyse, statut des services en erreur
* fix: fi_vrms
* fix: figet_dm
## 2.34.1 14/11/2017