Creazione automatica di un file di log per inviare quesiti al forum: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
aggiornamento per rilascio di Debian Stretch
(1.0.59)
(aggiornamento per rilascio di Debian Stretch)
(5 versioni intermedie di un altro utente non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili}}
== Introduzione ==
== Introduzione ==
Questo [[script]] permette la creazione di un file contenente informazioni utili che possono aiutare a comprendere meglio il proprio problema oppure che è possibile portare a conoscenza del [http://forum.debianizzati.org forum] per tentare di risolverlo insieme. Le informazioni riguardano i seguenti tipi di problema:
Questo [[script]] permette la creazione di un file contenente informazioni utili che possono aiutare a comprendere meglio il proprio problema oppure che è possibile portare a conoscenza del [http://forum.debianizzati.org forum] per tentare di risolverlo insieme.<br/>
Le informazioni riguardano i seguenti tipi di problema:
* Connessioni di rete
* Connessioni di rete
* Video
* Video
Riga 8: Riga 9:
* Mount/unmount di periferiche
* Mount/unmount di periferiche
* Touchpad
* Touchpad
* Altro. Verranno inserite nel log solo informazioni generiche (già presenti nei log creato con tutte le tipologie di problema precedenti).
* Altro. Verranno inserite nel log solo informazioni generiche (già presenti nel log creato con tutte le tipologie di problema precedenti).


Lo script crea due file:
Lo script crea due file:
Riga 24: Riga 25:
== Utilizzo ==
== Utilizzo ==
# Eseguire un upgrade del sistema, se possibile, in modo che le informazioni raccolte dallo script siano aggiornate.
# Eseguire un upgrade del sistema, se possibile, in modo che le informazioni raccolte dallo script siano aggiornate.
# Copiare manualmente il codice dello script in un file di testo, per esempio con nome <code>scriptlog-debianizzati.org</code> e dargli permessi di esecuzione (<code>chmod a+x scriptlog-debianizzati.org</code>).<br/>In alternativa, se si preferisce, è possibile eseguire il seguente comando:<pre>wget -qO- "http://guide.debianizzati.org/index.php?title=Aiuto:LogScript&action=edit"|awk '/=S=/{while(getline&&!index($0,"=F"))print}'|base64 -d|tar xz</pre>
# Copiare manualmente il codice dello script in un file di testo all'interno di una directory a propria scelta. Il nome del file può essere scelto liberamente, ad esempio <code>scriptlog-debianizzati.org</code>.
# Eseguire lo script con i permessi di [[root]]:<pre># ./scriptlog-debianizzati.org</pre>il comando precedente deve essere eseguito nella stessa directory in cui risiede lo script.<br/>L'utilizzo dei permessi di root è motivato dal fatto che alcuni comandi devono essere eseguiti necessariamente come utente privilegiato.
# Assegnare i permessi di esecuzione al file appena creato; ad esempio, da terminale o emulatore di terminale:<pre>$ chmod a+x scriptlog-debianizzati.org</pre>In alternativa, se si preferisce, è possibile eseguire il seguente comando:<pre>wget -qO- "http://guide.debianizzati.org/index.php?title=Aiuto:LogScript&action=edit"|awk '/=S=/{while(getline&&!index($0,"=F"))print}'|base64 -d|tar xz</pre>con cui verrà creato il file "scriptlog-debianizzati.org" all'interno della directory da cui è stato eseguito il precedente comando. In questo caso vengono automaticamente impostati i permessi di esecuzione per lo script.
# Eseguire da terminale (o emulatore di terminale) lo script con i permessi di [[root]]:<pre># ./scriptlog-debianizzati.org</pre>il comando precedente deve essere eseguito nella stessa directory in cui risiede lo script.<br/>L'utilizzo dei permessi di root è motivato dal fatto che alcuni comandi devono essere eseguiti necessariamente come utente privilegiato.
# Leggere le informazioni a video.
# Leggere le informazioni a video.


== Parametri dello script ==
== Parametri dello script ==
Lo script accetta, in maniera facoltativa, alcuni parametri:
Lo script accetta, in maniera facoltativa, alcuni parametri:
;--tipo={rete|video|audio|apt|mount|touchpad|generico}:specifica il tipo di problema<br/>Es: --tipo=apt
;--tipo={rete|video|audio|apt|mount|touchpad|generico}:specifica il tipo di problema
;--nocompress:non crea il file compresso del file di log
;--nocompress:non crea il file compresso del file di log
;--nopaste:non invia il file di log a paste.debian.net
;--nopaste:non invia il file di log a paste.debian.net
;--update:aggiorna lo script se esiste una versione recente
;--update:aggiorna lo script se esiste una versione recente
;--base64:crea un file contenente la codifica base64 dello script
;--base64:crea un file contenente la codifica base64 dello script
;--debug:crea un file contenente le informazioni utili per il debug dello script
;--versione:visualizza la versione dello script
;--help:visualizza informazioni sull'utilizzo dei parametri
;--help:visualizza informazioni sull'utilizzo dei parametri
'''Esempi:'''
<pre>
# ./scriptlog-debianizzati.org --tipo=rete
# ./scriptlog-debianizzati.org --tipo=apt --nocompress --nopaste
# ./scriptlog-debianizzati.org --versione
</pre>


<!-- commento (leggibile per chi modifica la pagina)
<!-- commento (leggibile per chi modifica la pagina)
Riga 87: Riga 98:


# Versione script
# Versione script
readonly VERSIONE="1.0.59"
readonly VERSIONE="1.0.64"


# Path e nome dello script
# Path e nome dello script
Riga 93: Riga 104:


# Codename per stable e testing. Da modificare nei successivi rilasci di Debian
# Codename per stable e testing. Da modificare nei successivi rilasci di Debian
readonly OLDSTABLE="wheezy"
readonly OLDSTABLE="jessie"
readonly STABLE="jessie"
readonly STABLE="stretch"
readonly TESTING="stretch"
readonly TESTING="buster"


# Path dei comandi dello script
# Path dei comandi dello script
Riga 102: Riga 113:
# Nome del file di log in base alla data corrente
# Nome del file di log in base alla data corrente
readonly log="log_$(date '+%d%b_%H%M%S')"
readonly log="log_$(date '+%d%b_%H%M%S')"
# Nome del file di debug
readonly script_debug="/tmp/script_debug_$(date '+%d%b_%H%M%S')"
# File descriptor per il debug
FD=9


# URL remoto della pagina contenente lo script
# URL remoto della pagina contenente lo script
Riga 171: Riga 188:
# Messaggio visualizzato nel caso in cui --help non sia l'unico parametro specificato
# Messaggio visualizzato nel caso in cui --help non sia l'unico parametro specificato
function _parm_uso_err {
function _parm_uso_err {
   echo "Il parametro --help non deve essere accompagnato da altri parametri" && _parm_uso
   echo "Il parametro $1 non deve essere accompagnato da altri parametri" && _parm_uso
}
}


Riga 194: Riga 211:
$BOLD--base64$FINE
$BOLD--base64$FINE
   viene creato un file con la codifica base64 dello script
   viene creato un file con la codifica base64 dello script
$BOLD--debug$FINE
  crea un file contenente le informazioni utili per il debug dello script
$BOLD--versione$FINE
  visualizza la versione dello script in esecuzione
    
    
$BOLD--help$FINE
$BOLD--help$FINE
Riga 199: Riga 222:
    
    
"  && exit
"  && exit
}
# Visualizza la versione corrente dello script
function _showvers {
  echo "$VERSIONE" && exit
}
}


Riga 205: Riga 233:
NOCOMPRESS=0 NOPASTE=0 TIPO=0 TIPO_RETE=0 TIPO_APT=0 TIPO_VIDEO=0
NOCOMPRESS=0 NOPASTE=0 TIPO=0 TIPO_RETE=0 TIPO_APT=0 TIPO_VIDEO=0
TIPO_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 UPDATE=0 BASE64=0
TIPO_AUDIO=0 TIPO_MNT=0 TIPO_TOUCH=0 TIPO_COMM=0 UPDATE=0 BASE64=0
DEBUG=0


while [ $# -gt 0 ] ; do
while [ $# -gt 0 ] ; do
Riga 219: Riga 248:
     "--tipo=touchpad") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_TOUCH=1 ;;
     "--tipo=touchpad") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_TOUCH=1 ;;
     "--tipo=generico") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_COMM=1  ;;
     "--tipo=generico") [ "$TIPO" -eq 1 ] && _parm_tipo_err || TIPO=1 && TIPO_COMM=1  ;;
     "--help") [ $BASH_ARGC -gt 1 ] && _parm_uso_err || _parm_uso           ;;
    "--debug") [ $BASH_ARGC -gt 1 ] && _parm_uso_err "$1" || DEBUG=1        ;;
    "--versione") [ $BASH_ARGC -gt 1 ] && _parm_uso_err "$1" || _showvers      ;;
     "--help") [ $BASH_ARGC -gt 1 ] && _parm_uso_err "$1" || _parm_uso       ;;
     *) _parm_err
     *) _parm_err
   esac
   esac
   shift
   shift
done
done
# --------------------------------------------------------------------------
# Debug
# --------------------------------------------------------------------------
function _debug {
  [ "$DEBUG" -eq 1 ] && [ ! -e /proc/$$/fd/"$FD" ] &&
    {
    exec {FD}>"$script_debug"
    export BASH_XTRACEFD="$FD"
    set -x
    }
}
function _close_debug {
  set +x
  exec {FD}>&-
}


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
Riga 434: Riga 482:


   # Problemi selezionati in base al parametro passato allo script
   # Problemi selezionati in base al parametro passato allo script
   [ "$TIPO_RETE"  -eq 1 ] && _wait && echo $'### Problemi di rete ###\n'            > "$log" && _rete  && return
   [ "$TIPO_RETE"  -eq 1 ] && _wait && _header "rete"           && _rete  && return
   [ "$TIPO_VIDEO" -eq 1 ] && _wait && echo $'### Problemi video ###\n'              > "$log" && _video  && return
   [ "$TIPO_VIDEO" -eq 1 ] && _wait && _header "video"         && _video  && return
   [ "$TIPO_AUDIO" -eq 1 ] && _wait && echo $'### Problemi audio ###\n'              > "$log" && _audio  && return
   [ "$TIPO_AUDIO" -eq 1 ] && _wait && _header "audio"         && _audio  && return
   [ "$TIPO_APT"  -eq 1 ] && _wait && echo $'### Problemi APT ###\n'                > "$log" && _apt    && return
   [ "$TIPO_APT"  -eq 1 ] && _wait && _header "APT"           && _apt    && return
   [ "$TIPO_MNT"  -eq 1 ] && _wait && echo $'### Problemi mount-unmount ###\n'      > "$log" && _mount  && return
   [ "$TIPO_MNT"  -eq 1 ] && _wait && _header "mount-unmount" && _mount  && return
   [ "$TIPO_TOUCH" -eq 1 ] && _wait && echo $'### Problemi touchpad ###\n'          > "$log" && _tpad  && return
   [ "$TIPO_TOUCH" -eq 1 ] && _wait && _header "touchpad"       && _tpad  && return
   [ "$TIPO_COMM"  -eq 1 ] && _wait && echo $'### Solo informazioni generiche ###\n' > "$log" && _common && return
   [ "$TIPO_COMM"  -eq 1 ] && _wait && _header "generico"       && _common && return
    
    
   # La funzione presenta un menù di scelta nel caso non sia stato passato alcun parametro
   # La funzione presenta un menù di scelta nel caso non sia stato passato alcun parametro
Riga 463: Riga 511:
     case "$num" in
     case "$num" in
         [1-7]) _wait  ;;& # ;;& -> va alla successiva occorrenza del carattere immesso
         [1-7]) _wait  ;;& # ;;& -> va alla successiva occorrenza del carattere immesso
             1) echo $'### Problemi di rete ###\n'            > "$log" && _rete  ;;&
             1) _header "rete"         && _rete  ;;&
             2) echo $'### Problemi video ###\n'              > "$log" && _video  ;;&
             2) _header "video"         && _video  ;;&
             3) echo $'### Problemi audio ###\n'              > "$log" && _audio  ;;&
             3) _header "audio"         && _audio  ;;&
             4) echo $'### Problemi APT ###\n'                > "$log" && _apt    ;;&
             4) _header "APT"           && _apt    ;;&
             5) echo $'### Problemi mount-unmount ###\n'      > "$log" && _mount  ;;&
             5) _header "mount-unmount" && _mount  ;;&
             6) echo $'### Problemi touchpad ###\n'          > "$log" && _tpad  ;;&
             6) _header "touchpad"     && _tpad  ;;&
             7) echo $'### Solo informazioni generiche ###\n' > "$log" && _common ;;&
             7) _header "generico"     && _common ;;&
         [1-7]) break  ;; # Termina il ciclo 'while'
         [1-7]) break  ;; # Termina il ciclo 'while'
             0) _exit  ;; # È stato inserito '0' . Uscita dallo script
             0) _exit  ;; # È stato inserito '0' . Uscita dallo script
Riga 488: Riga 536:
}
}


# Funzione che stampa un pallino di colore verde in caso di comando con output
# Funzione che stampa un pallino colorato in base al primo parametro
# Visualizza a video l'eventuale stringa passata come primo parametro ($1).
function _printdot {
function _ok {
   echo
   echo
   tput cuu1  # in alto di una riga
   tput cuu1  # in alto di una riga
   tput cuf1  # a destra di uno spazio
   tput cuf1  # a destra di uno spazio
   # se non ci sono parametri, viene stampato solo il pallino
   printf %b "$1•${FINE}\n" # stampa pallino e va a capo
  if [ $# -eq 0 ]; then
    printf %b "${VERDE}•${FINE}\n" # stampa pallino e va a capo
  # se c'è un parametro, viene stampato il pallino e il parametro
  elif [ $# -eq 1 ]; then
    printf %b "${VERDE}•${FINE}"
    tput cuf 3 # a destra di tre spazi
    tput el    # cancella fino a fine riga
    printf %b "$1\n" # stampa il parametro e va a capo
  fi
}
}
# Funzione che stampa un pallino di colore verde in caso di comando con output
function _ok { _printdot "${VERDE}"; }


# Funzione che stampa una pallino rosso in caso di comando privo di output
# Funzione che stampa una pallino rosso in caso di comando privo di output
function _error {
function _error { _printdot "${ROSSO}"; }
  echo
  tput cuu1  # in alto di una riga
  tput cuf1 # a destra di uno spazio
  # se non ci sono parametri, viene stampato solo il pallino
  if [ $# -eq 0 ]; then
    printf %b "${ROSSO}•${FINE}\n" # stampa pallino e va a capo
  # se c'è un parametro, viene stampato il pallino e il parametro
  elif [ $# -eq 1 ]; then
    printf %b "${ROSSO}•${FINE}"
    tput cuf 3 # a destra di tre spazi
    tput el    # cancella fino a fine riga
    printf %b "$1\n" # stampa il parametro e va a capo
  fi
}


# Funzione che stampa in grassetto gli argomenti
# Funzione che stampa in grassetto gli argomenti
function _bold {
function _bold {
   printf %b "$BOLD"
   printf %b "${BOLD}"
   echo -n "$*"
   echo -n "$*"
   printf %b\\n "$FINE"
   printf %b\\n "${FINE}"
}
}


Riga 539: Riga 566:
}
}


# Funzione che stampa un messaggio di attesa e aspetta 2 secondi
# Funzione che stampa un messaggio di attesa
function _wait {
function _wait {
   echo $'\nCreazione del log in corso...\n'
   echo $'\nCreazione del log in corso...\n'
}
# Intestazione del file di log
function _header {
echo "Tipo di problema: $1" >> "$log"
_data
_lastupd
echo "Versione script: "$VERSIONE"" >> "$log"
}
}


# Stampa la data corrente nel file di log
# Stampa la data corrente nel file di log
function _data {
function _data {
   echo "Log creato il $(date '+%d %B %Y alle %H.%M')" >> "$log"
   echo "Log creato il: $(date '+%d %B %Y alle %H.%M')" >> "$log"
}
}


Riga 575: Riga 610:
  fi
  fi


  # Nasconde nel log i i nomi delle connessioni gestite da NetworkManager
  # Nasconde nel log i nomi delle connessioni gestite da NetworkManager
  sed -i -r "s/(NetworkManager.*keyfile.*((parsing)|(read connection))).*/\1 \*script-removed\*/" "$log"
  sed -i -r "s/(NetworkManager.*keyfile.*((parsing)|(read connection))).*/\1 \*script-removed\*/" "$log"
sed -i -r "s/(NetworkManager.*keyfile: new connection.*system-connections\/)(.*)( \(.*,\").*(\"\))/\1\*script-removed\*\3\*script-removed\*\4/g" "$log"
sed -i -r "s/(NetworkManager.*policy: auto-activating connection ').*(')/\1\*script-removed\*\2/g" "$log"
sed -i -r "s/(NetworkManager.*Activation: starting connection ').*(')/\1\*script-removed\*\2/g" "$log"
sed -i -r "s/(NetworkManager.*policy: set ').*(')/\1\*script-removed\*\2/g" "$log"
}
}


Riga 592: Riga 631:
     convdate=$(date -d "$lastdate" '+%d %B %Y')
     convdate=$(date -d "$lastdate" '+%d %B %Y')
      
      
     echo $'\n'"Ultimo aggiornamento del sistema: ${convdate}" >> "$log"
     echo $"Ultimo aggiornamento del sistema: ${convdate}" >> "$log"
   fi
   fi
}
}
Riga 682: Riga 721:
       echo -n "File compresso da allegare alla discussione sul forum: "
       echo -n "File compresso da allegare alla discussione sul forum: "
       _bold "$complog"
       _bold "$complog"
    fi
    if [ -f "$script_debug" ]; then
      echo -n "File contenente l'output di debug: "
      _bold "$script_debug"
     fi
     fi
   fi
   fi
    
    
   echo $'Script terminato\n'
   echo $'Script terminato\n'
  _close_debug
 
   exit 0
   exit 0
}
}
Riga 695: Riga 741:
# Informazioni comuni a tutti i tipi di problema
# Informazioni comuni a tutti i tipi di problema
function _common {
function _common {
  _data
  _lastupd
   _dmi_decode
   _dmi_decode
   _comando "/bin/uname -a"
   _comando "/bin/uname -a"
Riga 709: Riga 753:
   _comando "/bin/journalctl -x -b --no-pager -p warning"
   _comando "/bin/journalctl -x -b --no-pager -p warning"
   _comando "/usr/bin/systemd-cgtop -b --iterations=5"
   _comando "/usr/bin/systemd-cgtop -b --iterations=5"
   _comando "/usr/bin/systemd-cgls"
   _comando "/usr/bin/systemd-cgls -l"
   _comando "/usr/bin/systemd-delta"
   _comando "/usr/bin/systemd-delta"
   _comando "/bin/dmesg -l err"
   _comando "/bin/dmesg -l err"
Riga 970: Riga 1 014:
   fi
   fi


  # Variabili locali
   local file
   local file
   # numfile contiene il numero di file contenuti nella directory. Solo primo livello.
   # numfile contiene il numero di file contenuti nella directory. Solo primo livello.
Riga 980: Riga 1 023:
     echo "La directory non contiene file o directory" >> "$log" && _error
     echo "La directory non contiene file o directory" >> "$log" && _error
   else
   else
     echo "La directory contiene ${numfile} file e $(($numdir - 1)) directory" >> "$log"
     echo "La directory contiene ${numfile} file e $(($numdir - 1)) directory" >> "$log" && _ok
     ls -al "$1" >> "$log"
     ls -al "$1" >> "$log"
     # invia al log il contenuto dei file della directory
     # invia al log il contenuto dei file della directory
Riga 1 084: Riga 1 127:
     if [ -d "$i" ]; then
     if [ -d "$i" ]; then
       echo "Contenuto di ${i}" >> "$log"
       echo "Contenuto di ${i}" >> "$log"
       ls -al "$i" >> "$log"
       ls -alR "$i" >> "$log"
     else
     else
       echo "${i} non trovata" >> "$log"
       echo "${i} non trovata" >> "$log"
Riga 1 147: Riga 1 190:
   # in esecuzione
   # in esecuzione
   echo -n "In esecuzione: " >> "$log"
   echo -n "In esecuzione: " >> "$log"
   if _is_running "ksmserver"; then kde4-config --version >> "$log" && _ok || _error                         # KDE4
   if _is_running "ksmserver"; then
   elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok || _error                    # Gnome Shell
    kf5-config -v 2>/dev/null >> "$log" ||                                                                # KDE5
    kde4-config -v 2>/dev/null >> "$log" && _ok || _error                                                 # KDE4
   elif _is_running "gnome-shell"; then gnome-shell --version >> "$log" && _ok || _error                    # GNOME Shell
   elif _is_running "xfdesktop"; then xfce4-about -V | head -n1 | cut -d ' ' -f2- >> "$log" && _ok || _error # Xfce4
   elif _is_running "xfdesktop"; then xfce4-about -V | head -n1 | cut -d ' ' -f2- >> "$log" && _ok || _error # Xfce4
   elif _is_running "openbox"; then
   elif _is_running "openbox"; then
Riga 1 264: Riga 1 309:


if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then
if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then
  _debug
   _avvertenze
   _avvertenze
   _check
   _check
Riga 1 277: Riga 1 323:


_exit
_exit
</pre>
</pre>


== Changelog ==
== Changelog ==
<!-- Qui vanno inserite le spiegazioni di eventuali modifiche dello script (chi, cosa, quando). Ricordarsi di modificare la versione (variabile VERSIONE) all'interno del codice (la versione iniziale è 1.0.0) -->
<!-- Qui vanno inserite le spiegazioni di eventuali modifiche dello script (chi, cosa, quando). Ricordarsi di modificare la versione (variabile VERSIONE) all'interno del codice (la versione iniziale è 1.0.0) -->
;1.0.64
:''Aggiornamento per rilascio di Debian 9 ([[Stretch]])''
:[[Utente:HAL 9000|HAL 9000]] 10:46, 18 giu 2017 (CEST)
;1.0.63
:''Debug come parametro''
:''KDE5 tra i DE rilevati''
:[[Utente:S3v|S3v]] 22:38, 19 mag 2017 (CEST)
;1.0.62
:''Inserito debug''
:''Inserita funzione _printdot (per evitare ripetizioni)''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 17:41, 26 feb 2017 (CET)
;1.0.61
:''Aggiunta funzione _header() (intestazione del file di log)''
:''Aggiunto parametro "--versione"''
:''Modifiche e correzioni minori''
:[[Utente:S3v|S3v]] 13:53, 10 dic 2016 (CET)
;1.0.60
:''Elenco ricorsivo delle directory contenenti firmware''
:''Nascosti (altri) ID di connessioni gestite da NM''
:[[Utente:S3v|S3v]] 20:53, 6 dic 2016 (CET)
;1.0.59
;1.0.59
:''Modificata funzione _hide() per nascondere completamente hostname contenuto nel''
:''Modificata funzione _hide() per nascondere completamente hostname contenuto nel''
''nome utente (e viceversa)''
:''nome utente (e viceversa)''
:[[Utente:S3v|S3v]] 21:33, 11 nov 2016 (CET)
:[[Utente:S3v|S3v]] 21:33, 11 nov 2016 (CET)
;1.0.58
;1.0.58
3 581

contributi

Menu di navigazione