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

Vai alla navigazione Vai alla ricerca
1.0.65
(Annullata la modifica 36469 di S3v (discussione))
(1.0.65)
(48 versioni intermedie di 3 utenti 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
* Audio (tramite lo script ALSA prelevabile [http://www.alsa-project.org/alsa-info.sh qui])
* Audio (tramite lo script ALSA prelevabile [http://www.alsa-project.org/alsa-info.sh qui])
* Sottosistema APT
* Sottosistema di gestione dei pacchetti (APT)
* Mount/unmount di periferiche
* Mount/unmount di periferiche
* Touchpad
* Touchpad
* 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:
;log_''data'':contiene le informazioni in formato testo
;log_''data'':contiene le informazioni in formato testo
;log_''data''.{bz2,zip,tgz}:il file precedente ma in formato compresso. Può essere allegato ad una discussione sul forum
;log_''data''.{xz,bz2,gz}:il file precedente ma in formato compresso. Può essere allegato ad una discussione sul forum


Se si vuole, attraverso lo script è anche possibile inviare il file direttamente a [http://paste.debian.net paste.debian.net] per poterlo condividere pubblicamente, in questo caso il file non potrà superare la grandezza complessiva di 240K circa (diviso in parti della dimensione massima di 60K circa) e le informazioni saranno disponibili a chiunque per una settimana.<br/>
Se si vuole, attraverso lo script è anche possibile inviare il file direttamente a [http://paste.debian.net paste.debian.net] per poterlo condividere pubblicamente, in questo caso il file non potrà superare la grandezza complessiva di 240K circa (diviso in parti della dimensione massima di 60K circa) e le informazioni saranno disponibili a chiunque per una settimana.<br/>
Riga 23: 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. Il nome del file può essere scelto liberamente.<br/>Se si preferisce, è possibile eseguire il seguente comando:<pre>$ wget -q -O- "http://guide.debianizzati.org/index.php?title=Creazione_automatica_di_un_file_di_log_per_inviare_quesiti_al_forum&action=edit" | sed -n "/^== Script/{n;:a n; /^&lt/ ! {s/\&amp;amp;/\&/g; p; ba}}" > nomefile</pre>Questo creerà il file di testo "nomefile" contenente lo script.<br/>Si presuppone che '''non esista''' nella directory corrente un file avente lo stesso nome (altrimenti verrà sovrascritto), che il pacchetto "wget" sia installato e che, ovviamente, la connessione alla Rete sia funzionante.
# 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>.
# Dare i permessi di esecuzione al file appena creato. Supponendo che si chiami ''nomefile'':<pre>$ chmod +x nomefile</pre>
# 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 lo script con i permessi di [[root]]:<pre># ./nomefile</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.
# 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
;--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)
*IMPORTANTE*
Se si modifica lo script è *necessario* seguire le istruzioni alla pagina:
http://guide.debianizzati.org/index.php/Aiuto:LogScript
in modo da aggiornare l'archivio in formato Base64
-->
== Script ==
== Script ==
<pre>
<pre>
Riga 45: Riga 71:
# I file creati saranno leggibili e scrivibili da tutti
# I file creati saranno leggibili e scrivibili da tutti
umask 0011
umask 0011
# Intercettazione Ctrl+C
trap _exit INT


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
Riga 69: Riga 98:


# Versione script
# Versione script
readonly VERSIONE="1.0.45"
readonly VERSIONE="1.0.65"
 
# Path e nome dello script
readonly PATH_NAME="$(readlink -f "${BASH_SOURCE[0]}")"


# 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 STABLE="wheezy"
readonly OLDSTABLE="jessie"
readonly TESTING="jessie"
readonly STABLE="stretch"
readonly TESTING="buster"


# Path dei comandi dello script
# Path dei comandi dello script
Riga 81: Riga 114:
readonly log="log_$(date '+%d%b_%H%M%S')"
readonly log="log_$(date '+%d%b_%H%M%S')"


# Nome del file compresso. Viene usata l'estensione .bz2 a meno
# Nome del file di debug
# che non venga modificata da _compress
readonly script_debug="/tmp/script_debug_$(date '+%d%b_%H%M%S')"
complog="${log}.bz2"
 
# File descriptor per il debug
FD=9
 
# URL remoto della pagina contenente lo script
readonly SCRIPTURL="http://guide.debianizzati.org/index.php?title=Creazione_automatica_di_un_file_di_log_per_inviare_quesiti_al_forum&action=edit"
 
# URL remoto della pagina contenente lo script codificato in base64
readonly SCRIPTURL_BASE64="http://guide.debianizzati.org/index.php?title=Aiuto:LogScript&action=edit"


# nome utente
# nome utente
utente=$(logname) &&
utente=$(logname) &&
[ "$utente" != "root" ] || {
[ "$utente" != "root" ] || {
   utente=
   # NOTA: "root" è permesso (solo) se scelto esplicitamente dall'utente
  tmputente=
  tmputente2=$(getent passwd 1000 2> /dev/null | cut -d ":" -f 1) ||
  for tmputente in $(users); do
      tmputente2=""
    if [ "$tmputente" = "root" ]; then
  echo -n "Inserisci il tuo nome utente"
      continue
  if [ -n "$tmputente2" ]; then
    elif [ -z "$utente" ]; then
      echo -n " (lascia vuoto per \"$tmputente2\"): "
      utente=$tmputente
  else
    elif [ "$utente" != "$tmputente" ]; then
       echo -n ": "
      utente=
      break
    fi
  done
  if [ -z "$utente" ]; then
    # NOTA: "root" è permesso (solo) se scelto esplicitamente dall'utente
    echo -n "Inserisci il tuo nome utente: "
    read tmputente &&
    # non può contenere: spazi, tabulazioni, nuove righe; né essere vuota
    [ -n "${tmputente##*[[:space:]]*}" ] &&
    # l'utente deve aver effettuato il login (anche in altre console)
    case " $(users) " in
      *" ${tmputente} "* ) true
                          ;;
      * ) false
          ;;
    esac || {
       echo "Nome utente invalido o non ha effettuato il login!" >&2
      exit 255
    }
    utente=$tmputente
   fi
   fi
  read tmputente &&
  tmputente=${tmputente:-$tmputente2} &&
  # non può contenere: spazi, tabulazioni, nuove righe; né essere vuota
  [ -n "${tmputente##*[[:space:]]*}" ] &&
  # deve esistere in /etc/passwd (o equivalente)
  getent passwd "$tmputente" > /dev/null 2>&1 || {
    echo "Nome utente invalido o non esistente!" >&2
    exit 255
  }
  utente=$tmputente
   unset tmputente
   unset tmputente
  unset tmputente2
}
}
readonly utente
readonly utente
Riga 130: Riga 161:
readonly BOLD="\033[01m"        # grassetto
readonly BOLD="\033[01m"        # grassetto
readonly FINE="\033[0m"        # reset
readonly FINE="\033[0m"        # reset
# variabile che vale 1 se systemd è installato
[ "$(ps -o comm= -p 1)" = "systemd" ] && systemd=1 || systemd=0
readonly systemd


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
Riga 153: 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 170: Riga 205:
$BOLD--nopaste$FINE
$BOLD--nopaste$FINE
   non viene inviato il log a paste.debian.net
   non viene inviato il log a paste.debian.net
$BOLD--update$FINE
  viene aggiornato lo script se è disponibile una nuova versione
$BOLD--base64$FINE
  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 175: Riga 222:
    
    
"  && exit
"  && exit
}
# Visualizza la versione corrente dello script
function _showvers {
  echo "$VERSIONE" && exit
}
}


Riga 180: Riga 232:
# nel passaggio del parametro tipo=blabla
# nel passaggio del parametro tipo=blabla
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
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
   case "$1" in
   case "$1" in
    "--base64") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || BASE64=1 ;;
    "--update") [ "${BASH_ARGC[@]}" -gt 1 ] && _parm_uso_err "$1" || UPDATE=1 ;;
     "--nocompress") [ "$NOCOMPRESS" -eq 1 ] && _parm_rip_err || NOCOMPRESS=1      ;;
     "--nocompress") [ "$NOCOMPRESS" -eq 1 ] && _parm_rip_err || NOCOMPRESS=1      ;;
     "--nopaste") [ "$NOPASTE" -eq 1 ] && _parm_rip_err || NOPASTE=1       ;;
     "--nopaste") [ "$NOPASTE" -eq 1 ] && _parm_rip_err || NOPASTE=1       ;;
Riga 193: 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 210: Riga 284:
*                                                                              *
*                                                                              *
*  Script che crea un log utile alla risoluzione dei problemi più comuni        *
*  Script che crea un log utile alla risoluzione dei problemi più comuni        *
*  Versione "$VERSIONE"                                                             *
*  Versione $VERSIONE                                                              *
*                                                                              *
*                                                                              *
*********************************************************************************"
*********************************************************************************"
Riga 240: Riga 314:
   # stesso nome di quelli che verranno creati, lo script chiede se cancellarli o meno
   # stesso nome di quelli che verranno creati, lo script chiede se cancellarli o meno
   local risp
   local risp
   if [ -f "$log" ] || [ -f "${log}.zip" ] || [ -f "${log}.bz2" ] || [ -f "${log}.tgz" ]; then
   if [ -f "$log" ] || [ -f "${log}.xz" ] || [ -f "${log}.bz2" ] || [ -f "${log}.gz" ]; then
     echo $'\n'"Esiste già un file ${log}, ${log}.zip, ${log}.bz2 o ${log}.tgz nella directory corrente."
     echo $'\n'"Esiste già un file ${log}, ${log}.xz, ${log}.bz2 o ${log}.gz nella directory corrente."
     echo -n "Sovrascivere [S/n]? "
     echo -n "Sovrascivere [S/n]? "
     read risp
     read risp
     case "$risp" in
     case "$risp" in
       ""|[Ss]) rm -f -- "$log" "${log}.zip" "${log}.bz2" "${log}.tgz" ;;
       ""|[Ss]) rm -f -- "$log" "${log}.xz" "${log}.bz2" "${log}.gz" > /dev/null 2>&1 ;;
       *)      _exit
       *)      exit 1
     esac
     esac
   fi
   fi
Riga 374: Riga 448:


# Funzione che crea il file compresso
# Funzione che crea il file compresso
# Prova a creare nell'ordine: un file .bz2, un file .zip o un file .tgz
# Prova a creare nell'ordine: un file .xz, un file .bz2 o un file .gz
function _compress {
function _compress {
   # La funzione termina se è stato utilizzato il parametro "--nocompress"
   # La funzione termina se è stato utilizzato il parametro "--nocompress"
Riga 386: Riga 460:
       echo "Sta per essere creato un file compresso..."
       echo "Sta per essere creato un file compresso..."
       sleep 1
       sleep 1
       if [ -f /bin/bzip2 ]; then
       if which xz > /dev/null; then
         bzip2 -k9 "$log" && _compress_ok || _compress_err
         xz -e < "$log" > "${log}.xz" && _compress_ok || _compress_err
       elif [ -f /usr/bin/zip ]; then
       elif which bzip2 > /dev/null; then
         zip "${log}.zip" "$log" && _compress_ok || _compress_err
         bzip2 -9 < "$log" > "${log}.bz2" && _compress_ok || _compress_err
         complog="${log}.zip"
      elif which gzip > /dev/null; then
         gzip -9 < "$log" > "${log}.gz" && _compress_ok || _compress_err
       else
       else
         tar czf "${log}.tgz" "$log" && _compress_ok || _compress_err
         echo "Impossibile effettuare la compressione!" >&2
        complog="${log}.tgz"
       fi
       fi
       ;;
       ;;
Riga 408: 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 nessun parametro
   # La funzione presenta un menù di scelta nel caso non sia stato passato alcun parametro
   local num
   local num
   
   
Riga 437: 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 462: 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 513: 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 527: Riga 588:


  # Sostituisce il nome utente e il nome host con 'nomeutente' e 'nomehost' se diversi da [dD]ebian
  # Sostituisce il nome utente e il nome host con 'nomeutente' e 'nomehost' se diversi da [dD]ebian
  [ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log"
  if [[ "$nomehost" =~ .*"$utente".* ]]; then
  [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log"
  [ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log"
  [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log"
  else
  [ "$utente" != "Debian" ] && [ "$utente" != "debian" ] && sed -i -e "s/${utente}/nomeutente/g" "$log"
  [ "$nomehost" != "Debian" ] && [ "$nomehost" != "debian" ] && sed -i -e "s/${nomehost}/nomehost/g" "$log"
fi 


  # Nasconde gli ESSID gestiti attraverso Network Manager
  # Nasconde gli ESSID gestiti attraverso Network Manager
Riga 544: 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 561: 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
}
 
# Funzione che effettua l'aggiornamento automatico dello script
function _self_update {
 
  echo -n "Aggiornare questo script [S/n]? "
  local risp
  read risp
  [ "$risp" != "" ] && [ "$risp" != "s" ] && [ "$risp" != "S" ] && _exit || echo "Aggiornamento in corso..."
 
  # Controlla l'esistenza di wget
  [ ! "$(which wget)" ] && echo "Impossibile eseguire l'aggiornamento. Installare il pacchetto wget." && _exit
 
  # Ricava la versione remota dello script
  local vers="$(wget -q -O- "$SCRIPTURL" | sed -n '/^readonly VERSIONE.*/{p;q}' | cut -d '"' -f2)"
  if [ "$vers" = "" ]; then
    echo "Connessione non riuscita" && _exit
   fi
   fi
  if [ "$vers" = "$VERSIONE" ]; then
    echo "Lo script è gia alla versione più recente"
  else
    echo -n "È disponibile una nuova versione dello script: " && _bold "$vers"
    echo -n "Procedere con l'aggiornamento [S/n]? "
    read risp
    case "$risp" in
      [Ss]|"")
          local tempfile="$(mktemp)" # viene creato un file temporaneo
          # lo script in formato base64 viene copiato nel file temporaneo
          wget -q -O- "$SCRIPTURL_BASE64" | sed -n "/^=S=/{n; :a /^==Fine/ ! {p; n; ba}}" | base64 -d | tar xz -O > "$tempfile"
          if [ ! -s "$tempfile" ]; then # Controlla se il file è vuoto
            echo "Connessione non riuscita"
          else
            cp "$tempfile" "$PATH_NAME"
            [ $? -eq 0 ] && echo "Aggiornamento effettuato" || echo "Aggiornamento fallito"
            #rm -f "$tempfile" # Rimuove il file temporaneo
          fi ;;
      *)
          echo "Non è stato eseguito alcun aggiornamento"
    esac
  fi
}
# funzione che crea un file con la codifica base64 dello script
# Da utilizzare in caso di aggiornamenti per modificare la pagina
# http://guide.debianizzati.org/index.php/Aiuto:LogScript
function _base64 {
  echo -n "Verrà creato un file con la codifica base64 di questo script. Continuare [S/n]? "
  local risp
  read risp
  [ "$risp" != "" ] && [ "$risp" != "s" ] && [ "$risp" != "S" ] && _exit ||
    local tempfile="$(mktemp)" # crea un file temporaneo
    tar cf - "${BASH_SOURCE[0]}" | gzip -9 | base64 > "$tempfile"
    if [ $? -eq 0 ]; then
      echo -n "Il file contenente la codifica base64 di questo script è " && _bold "$tempfile"
    else
      echo "Codifica non riuscita"
    fi
}
}


# Funzione che stampa un messaggio che indica i file creati e poi termina lo script
# Funzione che stampa un messaggio che indica i file creati e poi termina lo script
function _exit {
function _exit {
   if [ -f "$log" ]; then
 
    echo -n $'\nFile contenente il log dello script: '
# se è stato effettuato un update o una codifica base64 stampa solo il messaggio finale
    _bold "$log"
   if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then
  else
    local complog=""
    echo $'\nNon è stato creato un file di log'
 
    if [ -f "$log" ]; then
      echo -n $'\nFile contenente il log dello script: '
      _bold "$log"
    else
      echo $'\nNon è stato creato un file di log'
    fi
 
    if [ -f "${log}.xz" ]; then
      complog="${log}.xz"
    elif [ -f "${log}.bz2" ]; then
      complog="${log}.bz2"
    elif [ -f "${log}.gz" ]; then
      complog="${log}.gz"
    fi
 
    if [ -z "$complog" ]; then 
      echo "Non è stato creato un file compresso del log"
    else
      echo -n "File compresso da allegare alla discussione sul forum: "
      _bold "$complog"
    fi
 
    if [ -f "$script_debug" ]; then
      echo -n "File contenente l'output di debug: "
      _bold "$script_debug"
    fi
   fi
   fi
    
    
   if [ -f "$complog" ]; then
   echo $'Script terminato\n'
    echo -n "File compresso da allegare alla discussione sul forum: "
   _close_debug
    _bold "$complog"
  else
    echo "Non è stato creato un file compresso del log"
   fi
    
    
  echo $'Script terminato\n'
   exit 0
   exit 0
}
}
Riga 591: 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 600: Riga 748:
   _comando "/usr/bin/groups" "su"
   _comando "/usr/bin/groups" "su"
   _file "/var/log/syslog"
   _file "/var/log/syslog"
  _comando "/bin/systemctl --failed --no-pager"
  _comando "/bin/journalctl -x -b --no-pager"
  _comando "/bin/journalctl -x -b --no-pager -p err"
  _comando "/bin/journalctl -x -b --no-pager -p warning"
  _comando "/usr/bin/systemd-cgtop -b --iterations=5"
  _comando "/usr/bin/systemd-cgls -l"
  _comando "/usr/bin/systemd-delta"
   _comando "/bin/dmesg -l err"
   _comando "/bin/dmesg -l err"
   _comando "/bin/dmesg -l warn"
   _comando "/bin/dmesg -l warn"
Riga 605: Riga 760:
   _comando "/usr/bin/lspci -knn"
   _comando "/usr/bin/lspci -knn"
   _comando "/usr/bin/lsusb"
   _comando "/usr/bin/lsusb"
  _file "/etc/apt/sources.list"
  _dir "/etc/apt/sources.list.d/"
   _comando "/sbin/fdisk -l"
   _comando "/sbin/fdisk -l"
  _comando "/sbin/blkid"
   _file "/etc/fstab"
   _file "/etc/fstab"
   _comando "/bin/findmnt"
   _comando "/bin/findmnt"
  _comando "/bin/lsblk"
   _comando "/bin/df"
   _comando "/bin/df"
  _file "/etc/apt/sources.list"
  _dir "/etc/apt/sources.list.d/"
   _comando "/usr/bin/apt-cache policy"
   _comando "/usr/bin/apt-cache policy"
   _comando "/usr/bin/apt-cache stats"
   _comando "/usr/bin/apt-cache stats"
  _comando "/usr/bin/dpkg --audit"
   _comando "/usr/bin/apt-get check"
   _comando "/usr/bin/apt-get check"
   _firmware
   _firmware
   _extpack
   _extpack
   _pack "linux-headers"
   _pack "linux-headers"
  _pack "linux-image"
  _comando "/usr/sbin/dkms status"
}
}


Riga 626: Riga 786:
   _comando "/sbin/ifconfig"
   _comando "/sbin/ifconfig"
   _comando "/sbin/ifconfig -a"
   _comando "/sbin/ifconfig -a"
  _comando "/sbin/ip -s -d link show"
   _comando "/usr/sbin/rfkill list all"
   _comando "/usr/sbin/rfkill list all"
   _comando "/bin/ping -c3 8.8.8.8" #DNS di Google 8.8.8.8
   _comando "/bin/ping -c3 -W5 8.8.8.8" #DNS di Google 8.8.8.8
   _comando "/bin/ip addr"
   _comando "/bin/ip addr"
   _comando "/bin/ip route list"
   _comando "/bin/ip route list"
Riga 639: Riga 800:
   _file "/etc/NetworkManager/NetworkManager.conf"
   _file "/etc/NetworkManager/NetworkManager.conf"
   _comando "/usr/bin/nmcli dev list"
   _comando "/usr/bin/nmcli dev list"
  _comando "/usr/bin/nmcli device show"
   _demone "/usr/sbin/NetworkManager" "Network Manager"
   _demone "/usr/sbin/NetworkManager" "Network Manager"
   _demone "/usr/sbin/wicd" "Wicd"
   _demone "/usr/sbin/wicd" "Wicd"
Riga 649: Riga 811:
   _dir "/etc/X11/xorg.conf.d/"
   _dir "/etc/X11/xorg.conf.d/"
   _file "/var/log/Xorg.0.log"
   _file "/var/log/Xorg.0.log"
   _comando "/usr/sbin/dkms status"
   _file "${utente}/.local/share/xorg/Xorg.0.log"
   _pack "xserver-xorg"
   _pack "xserver-xorg"
   _pack "nouveau"
   _pack "nouveau"
Riga 709: Riga 871:
   _common
   _common
   _comando "/usr/bin/dpkg --print-architecture"
   _comando "/usr/bin/dpkg --print-architecture"
  _comando "/usr/bin/dpkg --print-foreign-architectures"
   _comando "/usr/bin/apt-get update"
   _comando "/usr/bin/apt-get update"
   _comando "/usr/bin/apt-get -s -y upgrade"
   _comando "/usr/bin/apt-get -s -y upgrade"
Riga 725: Riga 888:
   _common
   _common
   _comando "/usr/bin/udisks --dump"
   _comando "/usr/bin/udisks --dump"
  _comando "/usr/bin/udisksctl dump"
   _pack "usbmount"
   _pack "usbmount"
}
}
Riga 753: Riga 917:
     if [ -f "$1" ]; then
     if [ -f "$1" ]; then
case "$1" in
case "$1" in
            /etc/fstab)
                  # Nasconde username,password e dominio di mount cifs
                  sed -e "s/\( cifs.*username *= *\)[^,]*/\1\*script-removed\*/" \
                      -e "s/\( cifs.*password *= *\)[^,]*/\1\*script-removed\*/" \
                      -e "s/\( cifs.*domain *= *\)[^,]*/\1\*script-removed\*/" "$1" &>> "$log" && _ok || _error ;;
    /etc/network/interfaces)
    /etc/network/interfaces)
                      # Nasconde nel log gli ESSID e le password criptate contenute in /etc/network/interfaces
                  # Nasconde nel log gli ESSID e le password criptate contenute in /etc/network/interfaces
      sed -r "s/((wpa-ssid)|(wpa-psk)).*/\1 \*script-removed\*/" "$1" &>> "$log" && _ok  || _error ;;
  sed -r "s/((wpa-ssid)|(wpa-psk)|(wpa-identity)|(wpa-password)|(wireless-key)).*/\1 \*script-removed\*/" "$1" &>> "$log" && _ok  || _error ;;
    /var/log/syslog)
    /var/log/syslog)
                  # se è installato systemd, il log viene ricavato da "journalctl -x"
                  if [ $systemd -eq 0 ]; then
      # se il file contiene la stringa "rsyslogd.*start" ...
      # se il file contiene la stringa "rsyslogd.*start" ...
      if [ "$(grep -sci 'rsyslogd.*start$' "$1")" -ne 0 ]; then
      if [ "$(grep -sci 'rsyslogd.*start$' "$1")" -ne 0 ]; then
Riga 768: Riga 939:
                         _prompt "$1".1
                         _prompt "$1".1
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error
sed -n 'H; /rsyslogd.*start$/h; ${g;p;}' "$1".1 >> "$log" && _ok || _error
      fi ;;
      fi
  else _error # systemd è installato. I log vengono ricavati da "journalctl -x"
  fi ;;
    *)
    *)
      # per tutti i file non specificati sopra...
  # per tutti i file non specificati sopra...
      cat "$1" &>> "$log" && _ok || _error
  cat "$1" &>> "$log" && _ok || _error
esac
esac
     else
     else
Riga 802: Riga 975:
      "/usr/bin/synclient -l")
      "/usr/bin/synclient -l")
      # se $DISPLAY è vuota, usa :0 (default per il primo server X)
      # se $DISPLAY è vuota, usa :0 (default per il primo server X)
      su -c "DISPLAY=${DISPLAY:-:0} $1" "$utente" &>> "$log" _ok || _error ;;
      su -c "DISPLAY=${DISPLAY:-:0} $1" "$utente" &>> "$log" && _ok || _error ;;
      *)     
      *)     
      su -c "$1" "$utente" &>> "$log" && _ok || _error
      su -c "$1" "$utente" &>> "$log" && _ok || _error
Riga 815: Riga 988:
  (iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok || _error
  (iwlist scan | sed -e '/ESSID:.*/{/off\/any/! s/ESSID:.*/ESSID:"*script-removed*"/g}' -e '/^[ ]*IE: Unknown:.*/d') &>> "$log" && _ok || _error
  ;;
  ;;
               # nasconde gli ESSID visualizzati da "nmcli dev list"
               # nasconde gli ESSID visualizzati da "nmcli dev list" (solo per Wheezy)
              # L'array PIPESTATUS mostra il codice d'uscita dei comandi della pipe. PIPESTATUS[0] è il codice d'uscita di "nmcli dev list" (0=successo)
               "/usr/bin/nmcli dev list")
               "/usr/bin/nmcli dev list")
                   nmcli dev list | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && _ok || _error ;;
                   nmcli dev list 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \
                      ( _error && echo "Comando valido solo per Wheezy" >> "$log" ) ;;
              # nasconde gli ESSID visualizzati da "nmcli device show" (solo per Jessie e superiori)
              "/usr/bin/nmcli device show")
                  LANG=C nmcli device show 2>/dev/null | sed -r "s/(^AP[[:digit:]]*\.SSID:[[:space:]]*|GENERAL.CONNECTION:[[:space:]]*).*/\1\*script removed\*/" >> "$log" && [ "${PIPESTATUS[0]}" -eq 0 ] && _ok || \
                      ( _error && echo "Comando valido solo per Jessie" >> "$log" ) ;;
              /bin/dmesg*)
  # Il comando viene eseguito solo se è non installato systemd
  [ $systemd -eq 0 ] && $1 &>> "$log" && _ok || _error ;;
      *)
      *)
  # per tutti gli altri comandi non specificati sopra l'output del comando è inviato inalterato al log
  # per tutti gli altri comandi non specificati sopra l'output del comando è inviato inalterato al log
Riga 839: Riga 1 021:
   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 849: Riga 1 030:
     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 861: Riga 1 042:


     # Funzione che invia al log il contenuto dei file presenti nelle sottodirectory
     # Funzione che invia al log il contenuto dei file presenti nelle sottodirectory
     # I due cicli for sono separati per permettere l'output di un file subito dopo
     # I due cicli "for" sono separati per permettere l'output di un file subito dopo
     # la directory a cui appartiene
     # la directory a cui appartiene
     for file in "$1"*; do
     for file in "$1"*; do
Riga 946: Riga 1 127:
   _prompt "$var"
   _prompt "$var"
   nome_e_riga "$var"
   nome_e_riga "$var"
   dpkg -l | grep -i firmware >> "$log" && _ok
   dpkg -l | grep -i firmware >> "$log" && _ok || _error
   echo >> "$log"
   echo >> "$log"


Riga 953: Riga 1 134:
     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 016: Riga 1 197:
   # 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
     if [ "$(_x_session_manager)" != "/usr/bin/openbox-session" ]; then
     if [ "$(_x_session_manager)" != "/usr/bin/openbox-session" ]; then
       echo -n "(altro x-session-manager) + " >> "$log"                                                                     # Session manager (LXDE?) + Openbox
       echo -n "(altro x-session-manager) + " >> "$log"                                                     # Session manager (LXDE?) + Openbox
     fi
     fi
     openbox --version | head -n 1 >> "$log" && _ok || _error                                                # Openbox
     openbox --version | head -n 1 >> "$log" && _ok || _error                                                # Openbox
   else
   else
     echo "Sconosciuto" >> "$log" && _error                                                                         # NON TROVATO
     echo "Sconosciuto" >> "$log" && _error                                                                 # NON TROVATO
   fi
   fi
}
}
Riga 1 032: Riga 1 215:
function _extpack {
function _extpack {


  # Variabile che contiene la release attualmente utilizzata
local riga indirizzo rel linea release=""
  # Vengono tolti da sources.list eventuali spazi iniziali e tolte le righe che *non* iniziano con le stringhe
 
  # "deb http://ftp.XX.debian.org" o con
# variabile con il contenuto del file sources.list (solo righe che iniziano con deb
  # "deb ftp://ftp.XX.debian.org" o con
# e che contengono "main" )
  # "deb http://ftp2.XX.debian.org" o con
local sourceslist="$(sed -e '/^deb /!d' -e '/.* main.*/!d' /etc/apt/sources.list)"
  # "deb ftp://ftp2.XX.debian.org" e che *non* contengono un nome di release.
  # Con "cut" viene prelevato il terzo campo (la release voluta)
# variabile che contiene l'output del comando "apt-cache policy"
  local release=$(sed -r -e 's/^ *//' -e '/^deb (http|ftp):\/\/(ftp|ftp2)\...\.debian\.org.*('"$STABLE"' |stable |'"$TESTING"' |testing |sid |unstable )/!d' /etc/apt/sources.list | cut -d ' ' -f3)
local aptcachepol="$(apt-cache policy)"
 
# ciclo sulle righe della variabile "sourceslist"
while read linea; do
 
    # variabile che contiene l'URL dell'archivio (es. http://ftp.it.debian.org/debian/)
    indirizzo="$(echo "$linea" | awk '{print $2}')"
 
    # sostituisce / con \/ (necessario per il successivo sed)
    indirizzo="${indirizzo//\//\\/}"
 
    # release della riga corrente (es. wheezy o testing o sid)
    rel="$(echo "$linea" | awk '{print $3}')"
 
    # controlla che sia un nome di release valido
    if [ "$rel" = "oldstable" ] || [ "$rel" = "stable" ] || [ "$rel" = "testing" ] || [ "$rel" = "unstable" ] ||
      [ "$rel" = "$OLDSTABLE" ] || [ "$rel" = "$STABLE" ] || [ "$rel" = "$TESTING" ] || [ "$rel" = "sid" ]; then
   
      # controlla che sia un repository di Debian
      # si basa sull'output di "apt-cache policy" e su o=Debian e l=Debian
      riga="$(echo "$aptcachepol" | sed -n '/'$indirizzo'*.*'$rel'\/main.*Packages$/ {N; /.*o=Debian,.*l=Debian,/p}')"
   
      # se è un archivio valido, aggiorna la variabile "release"
        if [ ! -z "$riga" ]; then
          if [ -z "$release" ]; then
              release="$rel"
          else
              release="$(printf %b "$release\n$rel")"
          fi
        fi
    fi
done <<< "$sourceslist"


  local var="Pacchetti esterni"
local var="Pacchetti esterni"
  _prompt "$var"
_prompt "$var"
 
 
  # Lo script DEVE rilevare almeno una release. Se la variabile "release" è nulla, c'è un errore nei repository
# Lo script DEVE rilevare almeno una release. Se la variabile "release" è nulla, c'è un errore in "sources.list"
  # oppure lo script deve essere modificato. Questa situazione accade per indirizzi di repository
# oppure non è stato eseguito un aggiornamento della lista dei pacchetti (update)
  # non previsti (vedere il modo in cui viene ricavata la variabile "release" in alto)
# (vedere anche il modo in cui viene ricavata la variabile "release" in alto)
  if [ -z "$release" ]; then
if [ -z "$release" ]; then
     nome_e_riga "${var} all'archivio \"NON RILEVATO!\""
     nome_e_riga "${var} all'archivio \"NON RILEVATO!\""
     echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error
     echo "Release non rilevata. Repository errati oppure è necessaria una modifica dello script" >> "$log" && _error
     return 1
     return 1
  fi
fi


  # Numero di release trovate
# Rimuove eventuali duplicati (esistono repository doppi in sources.list)
  local num=$(echo "$release" | wc -l)
release="$(echo "$release" | sort -u)"
 
  # Se il numero di release è diverso da 1, la funzione termina
# Numero di release trovate
  if [ "$num" -ne 1 ]; then
local num=$(echo "$release" | wc -l)
    nome_e_riga "$var"
 
    echo "Sono presenti ${num} release in sources.list" >> "$log" && _error
# Se il numero di release è diverso da 1, la funzione termina
    return
if [ "$num" -ne 1 ]; then
  fi
    nome_e_riga "$var"
 
    echo "Sono presenti ${num} release in sources.list" >> "$log" && _error
  local pkg=""
    return
fi
 
local pkg=""


  # Se il numero di release è uguale a 1, la variabile pkg conterrà i pacchetti *non* facenti parte della release
# Se il numero di release è uguale a 1, la variabile pkg conterrà i pacchetti *non* facenti parte della release
  case "$release" in
case "$release" in
        "$STABLE"|stable)
    "$OLDSTABLE"|oldstable)
release="stable"
                    release="oldstable"
pkg=$(aptitude -F '%p %v %t' search '~i !~Astable'   --disable-columns | column -t) ;;
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Aoldstable' --disable-columns | column -t) ;;
        "$TESTING"|testing)
    "$STABLE"|stable)
release="testing"
                    release="stable"
pkg=$(aptitude -F '%p %v %t' search '~i !~Atesting' --disable-columns | column -t) ;;
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Astable'   --disable-columns | column -t) ;;
        sid|unstable)
    "$TESTING"|testing)
release="unstable"
                    release="testing"
pkg=$(aptitude -F '%p %v %t' search '~i !~Aunstable' --disable-columns | column -t) ;;
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Atesting'   --disable-columns | column -t) ;;
  esac
    sid|unstable)
                    release="unstable"
                    pkg=$(aptitude -F '%p %v %t' search '~S ~i !~Aunstable' --disable-columns | column -t) ;;
esac


  # Invia al log il contenuto di pkg (se esiste)
# Invia al log il contenuto di pkg (se esiste)
  nome_e_riga "${var} all'archivio \"${release}\""
nome_e_riga "${var} all'archivio \"${release}\""
  if [ -z "$pkg" ]; then
if [ -z "$pkg" ]; then
     echo "Nessun pacchetto esterno installato" >> "$log" && _error
     echo "Nessun pacchetto esterno installato" >> "$log" && _error
  else
else
     echo "$pkg" >> "$log" && _ok
     echo "$pkg" >> "$log" && _ok
  fi
fi
}
}


# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
# Main
# Main
# --------------------------------------------------------------------------
# --------------------------------------------------------------------------
clear
clear


_intro
_intro
_avvertenze
 
_check
if [ "$UPDATE" -eq 0 ] && [ "$BASE64" -eq 0 ]; then
_scelta
  _debug
_hide
  _avvertenze
_upload
  _check
_compress
  _scelta
  _hide
  _upload
  _compress
elif [ "$UPDATE" -eq 1 ]; then
  _self_update
elif [ "$BASE64" -eq 1 ]; then
  _base64
fi
 
_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.45
;1.0.65
:''nmcli dev list''
:''Aggiunti "ip -s -d link show" e Xorg.0.log locale''
:[[Utente:S3v|S3v]] 13:27, 20 set 2014 (CEST)
:''Nascosti username, password e dominio per montaggi cifs''
;1.0.44
:''Modifiche e correzioni minori''
:''ftp2 per i repository nella ricerca dei pacchetti esterni''
:[[Utente:S3v|S3v]] 20:49, 20 feb 2018 (CET)
:''Messaggio di errore nel log (ricerca pacchetti esterni) in caso di release non rilevata''
;1.0.64
:[[Utente:S3v|S3v]] 22:27, 8 set 2014 (CEST)
:''Aggiornamento per rilascio di Debian 9 ([[Stretch]])''
;1.0.43
:[[Utente:HAL 9000|HAL 9000]] 10:46, 18 giu 2017 (CEST)
:''Variabile complog non readonly e modifiche minori''
;1.0.63
:[[Utente:S3v|S3v]] 21:31, 25 ago 2014 (CEST)
:''Debug come parametro''
;1.0.42
:''KDE5 tra i DE rilevati''
:''Introduzione parametri dello script''
:[[Utente:S3v|S3v]] 22:38, 19 mag 2017 (CEST)
:''Modificate _ok e _error per accettare un parametro''
;1.0.62
:[[Utente:S3v|S3v]] 12:27, 20 ago 2014 (CEST)
:''Inserito debug''
;1.0.41
:''Inserita funzione _printdot (per evitare ripetizioni)''
:''Corretta _extpack per righe in sources.list che iniziano con "ftp"''
:''Log dei pacchetti che contengono linux-heaaders''  
:[[Utente:S3v|S3v]] 10:27, 15 ago 2014 (CEST)
;1.0.40
:''Modificate _ok e _error''
:''Aggiunto un "case" nella funzione _comando (caso "su")''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 08:55, 12 ago 2014 (CEST)
:[[Utente:S3v|S3v]] 17:41, 26 feb 2017 (CET)
;1.0.39
;1.0.61
:''Ampliata la parte su DE/WM con rilevamento di default e versioni installate, e riconoscimento Openbox''
:''Aggiunta funzione _header() (intestazione del file di log)''
:''Alternativa a logname per riconoscere l'utente''
:''Aggiunto parametro "--versione"''
:''Uniformazione della sintassi, più altri controlli sulle espansioni (per lo più come precauzione), uso delle costanti al posto di variabili globali''
:''Modifiche e correzioni minori''
:''Ridefinizione di echo (solo come precauzione) e nuovo prompt, stampato prima dell'esecuzione di un comando''
:[[Utente:S3v|S3v]] 13:53, 10 dic 2016 (CET)
:[[Utente:HAL 9000|HAL 9000]] 19:41, 11 ago 2014 (CEST)
;1.0.60
;1.0.38
:''Elenco ricorsivo delle directory contenenti firmware''
:''Corretto il rilevamento di Xfce''
:''Nascosti (altri) ID di connessioni gestite da NM''
:''Invio al log dell'intero file NetworkManager.conf''
:[[Utente:S3v|S3v]] 20:53, 6 dic 2016 (CET)
:''Corrette alcune variabili non quotate''
;1.0.59
:[[Utente:S3v|S3v]] 17:15, 31 lug 2014 (CEST)
:''Modificata funzione _hide() per nascondere completamente hostname contenuto nel''
;1.0.37
:''nome utente (e viceversa)''
:''Corretto invio data ultimo aggiornamento in mancanza di history.log''
:[[Utente:S3v|S3v]] 21:33, 11 nov 2016 (CET)
:''Invio al log di "managed=true/false" contenuto in /etc/NetworkManager/NetworkManager.conf''
;1.0.58
:[[Utente:S3v|S3v]] 07:34, 11 lug 2014 (CEST)
:''Rimossa precedente istruzione e modificata regexp per far funzionare la ricerca di''
;1.0.36
:''pacchetti esterni sia su stable che su testing''
:''corretto errore di sintassi dovuta ad una mancata istruzione if
:[[Utente:Selky|Selky]] 22:48, 10 lug 2014 (CEST)
:''
;1.0.35
:''All'inizio del log viene visualizzato il tipo di problema scelto''
:''Non vengono nascosti il nome utente e il nome host se uguali a [Dd]ebian
:''La data dell'ultimo aggiornamento viene prelevata da <code>history.log.1.gz</code>''
:''se non contenuta in <code>history.log</code>''
:''Rimossa la funzione <code>_extpack_supp</code> (lentissima)''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 13:00, 4 lug 2014 (CEST)
:[[Utente:S3v|S3v]] 16:44, 10 lug 2016 (CEST)
:''
;1.0.57
;1.0.34
:''Istruzione per rimuovere eventuale slash alla fine dell'URL in "sources.list"''
:''Corretta la variabile contenente spazi''
:''Aggiunti comandi "systemd-cgtop -b --iterations=5", "systemd-cgls" e "systemd-delta" a problemi comuni''
:''/etc/NetworkManager/system-connections''
:[[Utente:S3v|S3v]] 21:27, 9 lug 2016 (CEST)
;1.0.33
;1.0.56
:''Corretta la funzione _extpack_supp che non mostrava correttamente tutti''
:''Rimosse dal file interfaces anche le chiavi relative a wep e a wpa-enterprise''
:''i pacchetti con origine''
:[[Utente:metaldaze|metaldaze]] 12:54, 04 feb 2016 (CET)
:[[Utente:S3v|S3v]] 23:46, 29 apr 2014 (CEST)
;1.0.55
;1.0.32
:''Opzioni per aggiornare lo script o crearne una codifica base64''
:''Create le funzioni _lastupd (visualizza la data dell'ultimo aggiornamento),''
:''Corretti ESSID in "nmcli device show" non nascosti''
:''_extpack_supp (inserisce l'origine da cui provengono i pacchetti esterni)''
:''Rimozione duplicati in "release" (pacchetti esterni)''
:''Sostituito il comando mount con findmnt''
:[[Utente:S3v|S3v]] 21:26, 15 giu 2015 (CEST)
:[[Utente:S3v|S3v]] 13:04, 14 apr 2014 (CEST)
;1.0.54
;1.0.31
:''Correzioni minori legate alla compressione xz; semplificata lettura nome utente in caso di errori con logname''
:''Modificata la funzione _comando per renderla più breve''
:[[Utente:HAL 9000|HAL 9000]] 18:41, 31 mag 2015 (CEST)
:''Aggiunta l'informazione nel log sull'origine dei pacchetti esterni''
;1.0.53
:''Vengono rimosse dalla variabile "release" (pacchetti esterni) le linee duplicate''
:[[Utente:S3v|S3v]] 18:22, 30 mag 2015 (CEST)
;1.0.52
:''Aggiunta compressione xz, se disponibile, con ripiego su bzip2 oppure gzip''
:[[Utente:HAL 9000|HAL 9000]] 22:15, 17 mag 2015 (CEST)
;1.0.51
:''Aggiunti comandi "systemctl --failed", "journal -x -b --no-pager [-p [err, warning]]",''
:''"blkid", "lsblk", "dpkg --audit"''
:''"/var/log/syslog" e "dmesg" solo se non è installato systemd''
:''Aggiunta variabile globale "oldstable" e aggiornate "testing" e "stable"''
:''Modifiche minori''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 00:19, 8 apr 2014 (CEST)
:[[Utente:HAL 9000|HAL 9000]] e [[Utente:S3v|S3v]] 17:12, 4 mag 2015 (CEST)
;1.0.30
;1.0.50
:''Bloccato l'invio a p.d.n per un file più grande di 60x4 K''
:''Rivista la funzione _extpack (repository Debian''
:''Variabile "var" in _demone per tener conto del nome dello script d'avvio''
:''in base al comando "apt-cache policy")''
:[[Utente:S3v|S3v]] 19:41, 4 mar 2014 (CET)
:[[Utente:S3v|S3v]] 22:37, 22 dic 2014 (CET)
;1.0.29
;1.0.49
:''Introduzione variabile in _pack e _extpack''
:''Aggiunti trap INT e "dpkg --print-foreign-architectures"''
:''Rilevamento Xfce4''
:''Spostato "dkms status" nei comandi generali''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 21:19, 20 dic 2014 (CET)
:[[Utente:S3v|S3v]] 14:39, 23 feb 2014 (CET)
;1.0.48
;1.0.28
:''Corretta la ricerca per i pacchetti esterni''
:''Modificata la funzione _hide per nascondere nel log ulteriori informazioni''
:''Aggiunto _pack "linux-image"''
:''sensibili introdotte da NM''
:[[Utente:S3v|S3v]] 20:16, 19 nov 2014 (CET)
:[[Utente:S3v|S3v]] 13:03, 17 feb 2014 (CET)
;1.0.47
;1.0.27
:''Inseriti "nmcli dev list" (per Wheezy) e "nmcli device show" (per Jessie e superiori)''
:''Aggiunto comando "rfkill list all" ai problemi di rete''
:''Inserito "udisksctl dump"''
:[[Utente:S3v|S3v]] 20:51, 10 feb 2014 (CET)
:[[Utente:S3v|S3v]] 15:55, 5 nov 2014 (CET)
;1.0.26
 
:''Aggiunta funzione "_extpack" alla funzione "_common" per visualizzare i pacchetti installati''
(Prosegue nella pagina di [[Discussione:Creazione automatica di un file di log per inviare quesiti al forum|discussione]]).
:''che non appartengono alla release di default utilizzata''
:''Gnome Shell tra i DE rilevati''
:[[Utente:S3v|S3v]] 13:02, 5 feb 2014 (CET)
;1.0.25
:''Aggiunti codici carattere e accorciato il "case" di scelta''
:''Aggiunto comando "dkms status" a problemi video.
:''Modifiche minori''
:[[Utente:S3v|S3v]] 11:17, 31 dic 2013 (CET)
;1.0.24
:''Aggiunta la scelta per problemi generici''
:''Nascosto gli ESSID e nomi connessione inviati da NM in syslog''
:[[Utente:S3v|S3v]] 15:24, 6 dic 2013 (CET)
;1.0.23
:''rimossa la variabile "stat_log" e modificato l'umask per permettere l'esecuzione dello script ALSA''
:''logname al posto di who''
:''create funzioni _audio (problemi audio) e _tpad (problemi touchpad)''
:''creata la funzione _hide per sostituire il vero nome utente e il vero nome dell'host''
:''rimossi i parametri da _compress_ok e _compress_error (inutilizzati)''
:''modificato _comando per l'esecuzione del comando "su"''
:''sostituito pgrep con ps''
:''modifiche minori''
:[[Utente:S3v|S3v]] 18:51, 29 nov 2013 (CET)
;1.0.22
:''create funzioni _exit, _data, _common (output per tutti i tipi di problema),''
:''_apt (problemi con i pacchetti), _mount (problemi di mount/umount), _de_wm''
:''(cerca di stabilire il DE/WM) e _demone (esistenza e versione di un demone)''
:''cancellate le funzioni _altro (rinominata in _common), _nm e _wicd (inglobate in _demone),''
:''_syslog (inglobata in _file), _iwconfig e _iwlist (inglobate in _comando)''
:''output per ricavare il DM da /etc/X11/default-display-manager''
:''tolto l'array da _firmware e "resolvconf in _pack"''
:''nome del log in base alla data corrente e variabile "utente" (nome utente != root)''
:''Modificata _comando per contemplare il comando "su"''
:''modifiche minori''
:[[Utente:S3v|S3v]] 15:50, 22 nov 2013 (CET)
;1.0.21
:''Modificata la funzione _file: essid e psk presenti in /etc/network/interfaces non vengono più riportati nel log''
:[[Utente:Metaldaze|Metaldaze]] 18:34, 1 nov 2013 (CET)
;1.0.20
:''Creata la funzione _pack per inviare al log i pacchetti installati in base ad una parola''
:''Rimossa _dhcp, la sua funzione è stata inglobata in _pack''
:''Invio al log dei pacchetti nVidia attraverso _pack''
:''Invio al log dei pacchetti nouveau attraverso _pack''
:''Invio al log dei pacchetti mesa attraverso _pack''
:[[Utente:S3v|S3v]] 20:01, 5 ott 2013 (CEST)
;1.0.19
:''Funzione _dir - contemplato il caso di directory inesistente''
:[[Utente:S3v|S3v]] 14:42, 4 ott 2013 (CEST)
;1.0.18
:''Creata la funzione _dir che invia al log il contenuto dei file di una directory''
:''Modificate le funzioni _ok e _error per consentire lunghezze dell'output maggiori''
:''Aggiunto in output il contenuto di xorg.conf, xorg.conf.d/ e sources.list.d/''
:[[Utente:S3v|S3v]] 13:59, 4 ott 2013 (CEST)
;1.0.17
:''Aggiunta la funzione _video - Problemi video''
:[[Utente:S3v|S3v]] 13:31, 3 ott 2013 (CEST)
;1.0.16
:''Aggiunta directory /run/udev/firmware-missing alla funzione _firmware''
:[[Utente:S3v|S3v]] 17:25, 26 ago 2013 (CEST)
;1.0.15
:''Tolta la funzione _spazi (inutilizzata)''
:''Soppresso l'output di errore di pastebinit''
:''Modificate _iwconfig e _iwlist per mostrare ESSID=off/any
:[[Utente:S3v|S3v]] 11:34, 21 giu 2013 (CEST)
;1.0.14
:''Voce del menù per la risoluzione dei problemi di rete (funzione _rete)''
:''Creata funzione _altro''
:''_resolvconf inglobata in _comando''
:''Introdotto il comando dmesg per filtrare errori e warning separatamente''
:[[Utente:S3v|S3v]] 20:49, 7 giu 2013 (CEST)
:''
;1.0.13
:''Reinserita la funzione _syslog per prelevare l'ultimo output utile solo da syslog o, eventualmente,''
:''da syslog.1 e syslog''
:[[Utente:S3v|S3v]] 16:07, 1 giu 2013 (CEST)
;1.0.12
:''Inserito il path di default''
:''Sostituito il comando cat con echo nei messaggi a video''
:''Inserito un menù di scelta e rimosso l'array delle funzioni''
:''Inserite due funzioni per inviare al log un file o un output generico''
:''lspci -knn''
:''Rimossa _dmesg (l'ouput è fornito da syslog)''
:[[Utente:S3v|S3v]] 15:25, 23 mag 2013 (CEST)
;1.0.11
:''Modificata la funzione _wicd''
:[[Utente:S3v|S3v]] 00:57, 15 mag 2013 (CEST)
;1.0.10
:''Tolta la funzione iptables per motivi di sicurezza''
:''Impostata una maschera di default per i file creati dallo script''
:''Modifiche minori''
:[[Utente:S3v|S3v]] 11:19, 14 mag 2013 (CEST)
;1.0.9
:''Aggiunta funzionalità per aggiungere i log di sistema (/var/log/syslog e /var/log/syslog.1)
:[[Utente:Aki|Aki]] 14:20 3 mag 2013 (CEST);
;1.0.8
:''Integrazione funzionalità upload per supportare la verifica della ricezione da parte di http://paste.debian.net
:''Revisione messaggistica in caso di fallito invio a http://paste.debian.net
:[[Utente:Aki|Aki]] 12:40 2 mag 2013 (CEST);
;1.0.7
:''Aggiunta funzionalità per identificazione produttore e modello del computer secondo lo standard SMBIOS/DMI
:''Aggiunta rimozione valore ESSID dall'output del comando iwconfig
:''Aggiunto controllo esito invio log verso http://paste.debian.net (in caso di falito invio)
:''Anticipazione ed unificazione nell'ordine del codice sorgente delle sezioni relative al controllo del sistema apt
:[[Utente:Aki|Aki]] 13:40 27 apr 2013 (CEST);
;1.0.6
:''Aggiunta funzionalità per verifiche sullo stato del gestiore dei pacchetti (comandi apt-cache policy, apt-cache status)
:[[Utente:Aki|Aki]] 10:39 26 apr 2013 (CEST)
;1.0.5
:''Aggiunta funzionalità frammentazione log per invio a http://paste.debian.net''
:''Aggiunta funzionalità per verifiche sullo stato dei dischi (comandi fdisk -l , mount, df -h)''
:''Aggiunta funzionalità per verifica del file /etc/fstab''
:''Apportate alcune variazioni ai messaggi diagnostici''
:''Collegamento con la guida su'' [[Come formulare quesiti tecnici al forum]]
:[[Utente:Aki|Aki]] 13:30 25 apr 2013 (CEST)
;1.0.4
:''Tolto qualche echo e inserito un messaggio di mancato invio log a p.d.n''
:[[Utente:S3v|S3v]] 18:15, 20 apr 2013 (CEST)
;1.0.3
:''Aggiunta rimozione valore ESSID dalla scansione delle reti wireless''
:[[Utente:Aki|Aki]] 20:34 14 apr 2013 (CEST)
;1.0.2
:''Aggiunta avvertenza su esplicito consenso all'invio verso paste.debian.net''
:[[Utente:S3v|S3v]] 14:56, 14 apr 2013 (CEST)
;1.0.1
:''Corretta la funzione "dmesg" che svuotava il buffer e non produceva output''
:[[Utente:S3v|S3v]] 12:22, 14 apr 2013 (CEST)


{{Autori
{{Autori
6 999

contributi

Menu di navigazione